summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/MethodCodegenDriver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/codegen/MethodCodegenDriver.cc')
-rw-r--r--src/compiler/codegen/MethodCodegenDriver.cc19
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;
}