diff options
author | kvn <none@none> | 2014-01-22 17:42:23 -0800 |
---|---|---|
committer | kvn <none@none> | 2014-01-22 17:42:23 -0800 |
commit | 6062f1e5d4076e3358d859aa783807aff52a7b32 (patch) | |
tree | 0f586f02e890896b02763a0f32d10b9cd47bbadb /src/share/vm/opto/chaitin.cpp | |
parent | e9ad79c653c20256fe759ebadd1dbbd7424d588f (diff) | |
parent | 89c58bc170698841d67642517cacfc9ed12bd2d3 (diff) |
Merge
Diffstat (limited to 'src/share/vm/opto/chaitin.cpp')
-rw-r--r-- | src/share/vm/opto/chaitin.cpp | 14 |
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++); |