7131028: Switch statement takes wrong path
Summary: Pass correct type to branch in LIRGenerator::do_SwitchRanges()
Reviewed-by: kvn, never
--- a/hotspot/src/share/vm/c1/c1_LIR.hpp Fri Jan 20 09:43:06 2012 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.hpp Fri Jan 20 15:02:12 2012 -0800
@@ -1354,9 +1354,10 @@
CodeStub* _stub; // if this is a branch to a stub, this is the stub
public:
- LIR_OpBranch(LIR_Condition cond, Label* lbl)
+ LIR_OpBranch(LIR_Condition cond, BasicType type, Label* lbl)
: LIR_Op(lir_branch, LIR_OprFact::illegalOpr, (CodeEmitInfo*) NULL)
, _cond(cond)
+ , _type(type)
, _label(lbl)
, _block(NULL)
, _ublock(NULL)
@@ -2053,7 +2054,7 @@
void jump(CodeStub* stub) {
append(new LIR_OpBranch(lir_cond_always, T_ILLEGAL, stub));
}
- void branch(LIR_Condition cond, Label* lbl) { append(new LIR_OpBranch(cond, lbl)); }
+ void branch(LIR_Condition cond, BasicType type, Label* lbl) { append(new LIR_OpBranch(cond, type, lbl)); }
void branch(LIR_Condition cond, BasicType type, BlockBegin* block) {
assert(type != T_FLOAT && type != T_DOUBLE, "no fp comparisons");
append(new LIR_OpBranch(cond, type, block));
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Fri Jan 20 09:43:06 2012 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Fri Jan 20 15:02:12 2012 -0800
@@ -2350,7 +2350,7 @@
} else {
LabelObj* L = new LabelObj();
__ cmp(lir_cond_less, value, low_key);
- __ branch(lir_cond_less, L->label());
+ __ branch(lir_cond_less, T_INT, L->label());
__ cmp(lir_cond_lessEqual, value, high_key);
__ branch(lir_cond_lessEqual, T_INT, dest);
__ branch_destination(L->label());