diff options
Diffstat (limited to 'src/compiler/codegen/MethodCodegenDriver.cc')
| -rw-r--r-- | src/compiler/codegen/MethodCodegenDriver.cc | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc index d49b329959..3c5fb23259 100644 --- a/src/compiler/codegen/MethodCodegenDriver.cc +++ b/src/compiler/codegen/MethodCodegenDriver.cc @@ -819,9 +819,10 @@ const char* extendedMIROpNames[kMirOpLast - kMirOpFirst] = { "kMirFusedCmpgDouble", "kMirFusedCmpLong", "kMirNop", - "kMirOpNullNRangeUpCheck", - "kMirOpNullNRangeDownCheck", - "kMirOpLowerBound", + "kMirOpNullCheck", + "kMirOpRangeCheck", + "kMirOpDivZeroCheck", + "kMirOpCheck", }; /* Extended MIR instructions like PHI */ @@ -958,7 +959,17 @@ bool methodBlockCodeGen(CompilationUnit* cUnit, BasicBlock* bb) newLIR1(cUnit, kPseudoSSARep, (int) ssaString); } - if ((int)mir->dalvikInsn.opcode >= (int)kMirOpFirst) { + if ((int)dalvikOpcode == (int)kMirOpCheck) { + // Combine check and work halves of throwing instruction. + MIR* workHalf = mir->meta.throwInsn; + mir->dalvikInsn.opcode = workHalf->dalvikInsn.opcode; + SSARepresentation* ssaRep = workHalf->ssaRep; + workHalf->ssaRep = mir->ssaRep; + mir->ssaRep = ssaRep; + workHalf->dalvikInsn.opcode = static_cast<Instruction::Code>(kMirOpNop); + } + + if ((int)dalvikOpcode >= (int)kMirOpFirst) { handleExtendedMethodMIR(cUnit, bb, mir); continue; } |