6910464: Lookupswitch and Tableswitch default branches not recognized as safepoints
authorroland
Fri, 02 Mar 2012 16:04:24 +0100
changeset 12105 1eba98dc2b50
parent 11965 a9882cd6807c
child 12106 5a4af5175bd3
6910464: Lookupswitch and Tableswitch default branches not recognized as safepoints Summary: C1 does not recognize the default branch of a lookupswitch or tableswitch bytecode to be a safepoint if backward. Reviewed-by: kvn, never
hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Thu Mar 01 15:31:33 2012 -0800
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Fri Mar 02 16:04:24 2012 +0100
@@ -1306,6 +1306,7 @@
       if (sw.dest_offset_at(i) < 0) has_bb = true;
     }
     // add default successor
+    if (sw.default_offset() < 0) has_bb = true;
     sux->at_put(i, block_at(bci() + sw.default_offset()));
     ValueStack* state_before = has_bb ? copy_state_before() : NULL;
     Instruction* res = append(new TableSwitch(ipop(), sux, sw.low_key(), state_before, has_bb));
@@ -1350,6 +1351,7 @@
       keys->at_put(i, pair.match());
     }
     // add default successor
+    if (sw.default_offset() < 0) has_bb = true;
     sux->at_put(i, block_at(bci() + sw.default_offset()));
     ValueStack* state_before = has_bb ? copy_state_before() : NULL;
     Instruction* res = append(new LookupSwitch(ipop(), sux, keys, state_before, has_bb));