Mercurial > hg > truffle
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 } |