comparison src/share/vm/opto/compile.cpp @ 12888:4a2acfb16e97

8025657: compiler/intrinsics/mathexact/ConstantTest.java fails on assert in lcm.cpp on solaris x64 Reviewed-by: kvn, twisti
author rbackman
date Fri, 11 Oct 2013 12:06:14 +0200
parents 1b64d46620a3
children 3213ba4d3dff
comparison
equal deleted inserted replaced
12887:1263c7e17e1c 12888:4a2acfb16e97
45 #include "opto/idealGraphPrinter.hpp" 45 #include "opto/idealGraphPrinter.hpp"
46 #include "opto/loopnode.hpp" 46 #include "opto/loopnode.hpp"
47 #include "opto/machnode.hpp" 47 #include "opto/machnode.hpp"
48 #include "opto/macro.hpp" 48 #include "opto/macro.hpp"
49 #include "opto/matcher.hpp" 49 #include "opto/matcher.hpp"
50 #include "opto/mathexactnode.hpp"
50 #include "opto/memnode.hpp" 51 #include "opto/memnode.hpp"
51 #include "opto/mulnode.hpp" 52 #include "opto/mulnode.hpp"
52 #include "opto/node.hpp" 53 #include "opto/node.hpp"
53 #include "opto/opcodes.hpp" 54 #include "opto/opcodes.hpp"
54 #include "opto/output.hpp" 55 #include "opto/output.hpp"
2984 // confuses register allocation. 2985 // confuses register allocation.
2985 if (n->req() > MemBarNode::Precedent) { 2986 if (n->req() > MemBarNode::Precedent) {
2986 n->set_req(MemBarNode::Precedent, top()); 2987 n->set_req(MemBarNode::Precedent, top());
2987 } 2988 }
2988 break; 2989 break;
2990 // Must set a control edge on all nodes that produce a FlagsProj
2991 // so they can't escape the block that consumes the flags.
2992 // Must also set the non throwing branch as the control
2993 // for all nodes that depends on the result. Unless the node
2994 // already have a control that isn't the control of the
2995 // flag producer
2996 case Op_FlagsProj:
2997 {
2998 MathExactNode* math = (MathExactNode*) n->in(0);
2999 Node* ctrl = math->control_node();
3000 Node* non_throwing = math->non_throwing_branch();
3001 math->set_req(0, ctrl);
3002
3003 Node* result = math->result_node();
3004 if (result != NULL) {
3005 for (DUIterator_Fast jmax, j = result->fast_outs(jmax); j < jmax; j++) {
3006 Node* out = result->fast_out(j);
3007 if (out->in(0) == NULL) {
3008 out->set_req(0, non_throwing);
3009 } else if (out->in(0) == ctrl) {
3010 out->set_req(0, non_throwing);
3011 }
3012 }
3013 }
3014 }
3015 break;
2989 default: 3016 default:
2990 assert( !n->is_Call(), "" ); 3017 assert( !n->is_Call(), "" );
2991 assert( !n->is_Mem(), "" ); 3018 assert( !n->is_Mem(), "" );
2992 break; 3019 break;
2993 } 3020 }