aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/chaitin.cpp
diff options
context:
space:
mode:
authorkvn <none@none>2014-01-22 17:42:23 -0800
committerkvn <none@none>2014-01-22 17:42:23 -0800
commit6062f1e5d4076e3358d859aa783807aff52a7b32 (patch)
tree0f586f02e890896b02763a0f32d10b9cd47bbadb /src/share/vm/opto/chaitin.cpp
parente9ad79c653c20256fe759ebadd1dbbd7424d588f (diff)
parent89c58bc170698841d67642517cacfc9ed12bd2d3 (diff)
Merge
Diffstat (limited to 'src/share/vm/opto/chaitin.cpp')
-rw-r--r--src/share/vm/opto/chaitin.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/share/vm/opto/chaitin.cpp b/src/share/vm/opto/chaitin.cpp
index a64691fb1..d79b62694 100644
--- a/src/share/vm/opto/chaitin.cpp
+++ b/src/share/vm/opto/chaitin.cpp
@@ -1682,9 +1682,21 @@ Node *PhaseChaitin::find_base_for_derived( Node **derived_base_map, Node *derive
// (where top() node is placed).
base->init_req(0, _cfg.get_root_node());
Block *startb = _cfg.get_block_for_node(C->top());
- startb->insert_node(base, startb->find_node(C->top()));
+ uint node_pos = startb->find_node(C->top());
+ startb->insert_node(base, node_pos);
_cfg.map_node_to_block(base, startb);
assert(_lrg_map.live_range_id(base) == 0, "should not have LRG yet");
+
+ // The loadConP0 might have projection nodes depending on architecture
+ // Add the projection nodes to the CFG
+ for (DUIterator_Fast imax, i = base->fast_outs(imax); i < imax; i++) {
+ Node* use = base->fast_out(i);
+ if (use->is_MachProj()) {
+ startb->insert_node(use, ++node_pos);
+ _cfg.map_node_to_block(use, startb);
+ new_lrg(use, maxlrg++);
+ }
+ }
}
if (_lrg_map.live_range_id(base) == 0) {
new_lrg(base, maxlrg++);