src/share/vm/opto/ifg.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/ifg.cpp Wed Dec 3 17:16:10 2014
--- new/src/share/vm/opto/ifg.cpp Wed Dec 3 17:16:10 2014
*** 539,548 ****
--- 539,549 ----
if( !liveout.member(r) && n->Opcode() != Op_SafePoint ) {
Node *def = n->in(0);
if( !n->is_Proj() ||
// Could also be a flags-projection of a dead ADD or such.
(_lrg_map.live_range_id(def) && !liveout.member(_lrg_map.live_range_id(def)))) {
+ bool remove = true;
if (n->is_MachProj()) {
// Don't remove KILL projections if their "defining" nodes have
// memory effects (have SCMemProj projection node) -
// they are not dead even when their result is not used.
// For example, compareAndSwapL (and other CAS) and EncodeISOArray nodes.
*** 551,564 ****
--- 552,567 ----
// in block in such order that KILL MachProj nodes are processed first.
uint cnt = def->outcnt();
for (uint i = 0; i < cnt; i++) {
Node* proj = def->raw_out(i);
if (proj->Opcode() == Op_SCMemProj) {
! return false;
! remove = false;
+ break;
}
}
}
+ if (remove) {
block->remove_node(j - 1);
if (lrgs(r)._def == n) {
lrgs(r)._def = 0;
}
n->disconnect_inputs(NULL, C);
*** 567,576 ****
--- 570,580 ----
// Since yanking a Node from block, high pressure moves up one
hrp_index[0]--;
hrp_index[1]--;
continue;
}
+ }
// Fat-projections kill many registers which cannot be used to
// hold live ranges.
if (lrgs(r)._fat_proj) {
// Count the int-only registers
src/share/vm/opto/ifg.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File