More Quick compiler mir/bb cleanup
Removed the references to MIR and BasicBlock from the generator
for NEW_ARRAY and the compare/branch. The previously-introduced
InvokeInfo structure was sufficient for handling the NEW_ARRAY call,
so renamed it to cover both.
This CL should end this round of restructuring.
Change-Id: I9bec6a820589a562eb58f0c9688d27fabe98c064
diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h
index 5b92af1..b1c7427 100644
--- a/src/compiler/CompilerIR.h
+++ b/src/compiler/CompilerIR.h
@@ -84,14 +84,14 @@
ArenaBitVector* bv;
};
-struct InvokeInfo {
+struct CallInfo {
int numArgWords; // Note: word count, not arg count
RegLocation* args; // One for each word of arguments
RegLocation result; // Eventual target of MOVE_RESULT
int optFlags;
InvokeType type;
uint32_t dexIdx;
- uint32_t methodIdx;
+ uint32_t index; // Method idx for invokes, type idx for FilledNewArray
uintptr_t directCode;
uintptr_t directMethod;
RegLocation target; // Target of following move_result
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc
index 2ca9046..f114b45 100644
--- a/src/compiler/codegen/GenCommon.cc
+++ b/src/compiler/codegen/GenCommon.cc
@@ -23,7 +23,7 @@
* be applicable to most targets. Only mid-level support utilities
* and "op" calls may be used here.
*/
-void genInvoke(CompilationUnit* cUnit, InvokeInfo* info);
+void genInvoke(CompilationUnit* cUnit, CallInfo* info);
#if defined(TARGET_ARM)
LIR* opIT(CompilationUnit* cUnit, ArmConditionCode cond, const char* guide);
bool smallLiteralDivide(CompilationUnit* cUnit, Instruction::Code dalvikOpcode,
@@ -379,9 +379,9 @@
return branch;
}
-void genCompareAndBranch(CompilationUnit* cUnit, BasicBlock* bb,
- Instruction::Code opcode, RegLocation rlSrc1,
- RegLocation rlSrc2, LIR* labelList)
+void genCompareAndBranch(CompilationUnit* cUnit, Instruction::Code opcode,
+ RegLocation rlSrc1, RegLocation rlSrc2, LIR* taken,
+ LIR* fallThrough)
{
ConditionCode cond;
rlSrc1 = loadValue(cUnit, rlSrc1, kCoreReg);
@@ -410,18 +410,16 @@
LOG(FATAL) << "Unexpected opcode " << (int)opcode;
}
#if defined(TARGET_MIPS)
- opCmpBranch(cUnit, cond, rlSrc1.lowReg, rlSrc2.lowReg,
- &labelList[bb->taken->id]);
+ opCmpBranch(cUnit, cond, rlSrc1.lowReg, rlSrc2.lowReg, taken);
#else
opRegReg(cUnit, kOpCmp, rlSrc1.lowReg, rlSrc2.lowReg);
- opCondBranch(cUnit, cond, &labelList[bb->taken->id]);
+ opCondBranch(cUnit, cond, taken);
#endif
- opUnconditionalBranch(cUnit, &labelList[bb->fallThrough->id]);
+ opUnconditionalBranch(cUnit, fallThrough);
}
-void genCompareZeroAndBranch(CompilationUnit* cUnit, BasicBlock* bb,
- Instruction::Code opcode, RegLocation rlSrc,
- LIR* labelList)
+void genCompareZeroAndBranch(CompilationUnit* cUnit, Instruction::Code opcode,
+ RegLocation rlSrc, LIR* taken, LIR* fallThrough)
{
ConditionCode cond;
rlSrc = loadValue(cUnit, rlSrc, kCoreReg);
@@ -449,12 +447,12 @@
LOG(FATAL) << "Unexpected opcode " << (int)opcode;
}
#if defined(TARGET_MIPS) || defined(TARGET_X86)
- opCmpImmBranch(cUnit, cond, rlSrc.lowReg, 0, &labelList[bb->taken->id]);
+ opCmpImmBranch(cUnit, cond, rlSrc.lowReg, 0, taken);
#else
opRegImm(cUnit, kOpCmp, rlSrc.lowReg, 0);
- opCondBranch(cUnit, cond, &labelList[bb->taken->id]);
+ opCondBranch(cUnit, cond, taken);
#endif
- opUnconditionalBranch(cUnit, &labelList[bb->fallThrough->id]);
+ opUnconditionalBranch(cUnit, fallThrough);
}
void genIntToLong(CompilationUnit* cUnit, RegLocation rlDest,
@@ -522,11 +520,10 @@
* code throws runtime exception "bad Filled array req" for 'D' and 'J'.
* Current code also throws internal unimp if not 'L', '[' or 'I'.
*/
-void genFilledNewArray(CompilationUnit* cUnit, MIR* mir, bool isRange)
+void genFilledNewArray(CompilationUnit* cUnit, CallInfo* info)
{
- DecodedInstruction* dInsn = &mir->dalvikInsn;
- int elems = dInsn->vA;
- int typeIdx = dInsn->vB;
+ int elems = info->numArgWords;
+ int typeIdx = info->index;
oatFlushAllRegs(cUnit); /* Everything to home location */
int funcOffset;
if (cUnit->compiler->CanAccessTypeWithoutChecks(cUnit->method_idx,
@@ -554,7 +551,7 @@
size_t component_size = sizeof(int32_t);
// Having a range of 0 is legal
- if (isRange && (dInsn->vA > 0)) {
+ if (info->isRange && (elems > 0)) {
/*
* Bit of ugliness here. We're going generate a mem copy loop
* on the register range, but it is possible that some regs
@@ -563,8 +560,8 @@
* of any regs in the source range that have been promoted to
* home location.
*/
- for (unsigned int i = 0; i < dInsn->vA; i++) {
- RegLocation loc = oatUpdateLoc(cUnit, oatGetSrc(cUnit, mir, i));
+ for (int i = 0; i < elems; i++) {
+ RegLocation loc = oatUpdateLoc(cUnit, info->args[i]);
if (loc.location == kLocPhysReg) {
storeBaseDisp(cUnit, rSP, oatSRegOffset(cUnit, loc.sRegLow),
loc.lowReg, kWord);
@@ -587,14 +584,14 @@
int rVal = oatAllocTemp(cUnit);
#endif
// Set up source pointer
- RegLocation rlFirst = oatGetSrc(cUnit, mir, 0);
+ RegLocation rlFirst = info->args[0];
opRegRegImm(cUnit, kOpAdd, rSrc, rSP,
oatSRegOffset(cUnit, rlFirst.sRegLow));
// Set up the target pointer
opRegRegImm(cUnit, kOpAdd, rDst, rRET0,
Array::DataOffset(component_size).Int32Value());
// Set up the loop counter (known to be > 0)
- loadConstant(cUnit, rIdx, dInsn->vA - 1);
+ loadConstant(cUnit, rIdx, elems - 1);
// Generate the copy loop. Going backwards for convenience
LIR* target = newLIR0(cUnit, kPseudoTargetLabel);
// Copy next element
@@ -614,10 +611,10 @@
opRegRegImm(cUnit, kOpAdd, rRET0, rDst,
-Array::DataOffset(component_size).Int32Value());
#endif
- } else if (!isRange) {
+ } else if (!info->isRange) {
// TUNING: interleave
- for (unsigned int i = 0; i < dInsn->vA; i++) {
- RegLocation rlArg = loadValue(cUnit, oatGetSrc(cUnit, mir, i), kCoreReg);
+ for (int i = 0; i < elems; i++) {
+ RegLocation rlArg = loadValue(cUnit, info->args[i], kCoreReg);
storeBaseDisp(cUnit, rRET0,
Array::DataOffset(component_size).Int32Value() +
i * 4, rlArg.lowReg, kWord);
@@ -869,7 +866,7 @@
oatResetRegPool(cUnit);
oatResetDefTracking(cUnit);
LIR* lab = intrinsicLabel[i];
- InvokeInfo* info = (InvokeInfo*)lab->operands[0];
+ CallInfo* info = (CallInfo*)lab->operands[0];
cUnit->currentDalvikOffset = info->offset;
oatAppendLIR(cUnit, lab);
genInvoke(cUnit, info);
diff --git a/src/compiler/codegen/GenInvoke.cc b/src/compiler/codegen/GenInvoke.cc
index 21ccae7..bcc9067 100644
--- a/src/compiler/codegen/GenInvoke.cc
+++ b/src/compiler/codegen/GenInvoke.cc
@@ -24,7 +24,7 @@
* and "op" calls may be used here.
*/
-typedef int (*NextCallInsn)(CompilationUnit*, InvokeInfo*, int, uint32_t dexIdx,
+typedef int (*NextCallInsn)(CompilationUnit*, CallInfo*, int, uint32_t dexIdx,
uint32_t methodIdx, uintptr_t directCode,
uintptr_t directMethod, InvokeType type);
LIR* opCondBranch(CompilationUnit* cUnit, ConditionCode cc, LIR* target);
@@ -133,7 +133,7 @@
* Bit of a hack here - in the absence of a real scheduling pass,
* emit the next instruction in static & direct invoke sequences.
*/
-int nextSDCallInsn(CompilationUnit* cUnit, InvokeInfo* info,
+int nextSDCallInsn(CompilationUnit* cUnit, CallInfo* info,
int state, uint32_t dexIdx, uint32_t unused,
uintptr_t directCode, uintptr_t directMethod,
InvokeType type)
@@ -241,7 +241,7 @@
* Note also that we'll load the first argument ("this") into
* rARG1 here rather than the standard loadArgRegs.
*/
-int nextVCallInsn(CompilationUnit* cUnit, InvokeInfo* info,
+int nextVCallInsn(CompilationUnit* cUnit, CallInfo* info,
int state, uint32_t dexIdx, uint32_t methodIdx,
uintptr_t unused, uintptr_t unused2, InvokeType unused3)
{
@@ -281,7 +281,7 @@
return state + 1;
}
-int nextInvokeInsnSP(CompilationUnit* cUnit, InvokeInfo* info, int trampoline,
+int nextInvokeInsnSP(CompilationUnit* cUnit, CallInfo* info, int trampoline,
int state, uint32_t dexIdx, uint32_t methodIdx)
{
/*
@@ -300,7 +300,7 @@
return -1;
}
-int nextStaticCallInsnSP(CompilationUnit* cUnit, InvokeInfo* info,
+int nextStaticCallInsnSP(CompilationUnit* cUnit, CallInfo* info,
int state, uint32_t dexIdx, uint32_t methodIdx,
uintptr_t unused, uintptr_t unused2,
InvokeType unused3)
@@ -309,7 +309,7 @@
return nextInvokeInsnSP(cUnit, info, trampoline, state, dexIdx, 0);
}
-int nextDirectCallInsnSP(CompilationUnit* cUnit, InvokeInfo* info, int state,
+int nextDirectCallInsnSP(CompilationUnit* cUnit, CallInfo* info, int state,
uint32_t dexIdx, uint32_t methodIdx, uintptr_t unused,
uintptr_t unused2, InvokeType unused3)
{
@@ -317,7 +317,7 @@
return nextInvokeInsnSP(cUnit, info, trampoline, state, dexIdx, 0);
}
-int nextSuperCallInsnSP(CompilationUnit* cUnit, InvokeInfo* info, int state,
+int nextSuperCallInsnSP(CompilationUnit* cUnit, CallInfo* info, int state,
uint32_t dexIdx, uint32_t methodIdx, uintptr_t unused,
uintptr_t unused2, InvokeType unused3)
{
@@ -325,7 +325,7 @@
return nextInvokeInsnSP(cUnit, info, trampoline, state, dexIdx, 0);
}
-int nextVCallInsnSP(CompilationUnit* cUnit, InvokeInfo* info, int state,
+int nextVCallInsnSP(CompilationUnit* cUnit, CallInfo* info, int state,
uint32_t dexIdx, uint32_t methodIdx, uintptr_t unused,
uintptr_t unused2, InvokeType unused3)
{
@@ -337,7 +337,7 @@
* All invoke-interface calls bounce off of art_invoke_interface_trampoline,
* which will locate the target and continue on via a tail call.
*/
-int nextInterfaceCallInsn(CompilationUnit* cUnit, InvokeInfo* info, int state,
+int nextInterfaceCallInsn(CompilationUnit* cUnit, CallInfo* info, int state,
uint32_t dexIdx, uint32_t unused, uintptr_t unused2,
uintptr_t unused3, InvokeType unused4)
{
@@ -346,7 +346,7 @@
}
int nextInterfaceCallInsnWithAccessCheck(CompilationUnit* cUnit,
- InvokeInfo* info, int state,
+ CallInfo* info, int state,
uint32_t dexIdx, uint32_t unused,
uintptr_t unused2, uintptr_t unused3,
InvokeType unused4)
@@ -355,7 +355,7 @@
return nextInvokeInsnSP(cUnit, info, trampoline, state, dexIdx, 0);
}
-int loadArgRegs(CompilationUnit* cUnit, InvokeInfo* info, int callState,
+int loadArgRegs(CompilationUnit* cUnit, CallInfo* info, int callState,
NextCallInsn nextCallInsn, uint32_t dexIdx,
uint32_t methodIdx, uintptr_t directCode,
uintptr_t directMethod, InvokeType type, bool skipThis)
@@ -391,7 +391,7 @@
* the target method pointer. Note, this may also be called
* for "range" variants if the number of arguments is 5 or fewer.
*/
-int genDalvikArgsNoRange(CompilationUnit* cUnit, InvokeInfo* info,
+int genDalvikArgsNoRange(CompilationUnit* cUnit, CallInfo* info,
int callState,
LIR** pcrLabel, NextCallInsn nextCallInsn,
uint32_t dexIdx, uint32_t methodIdx,
@@ -493,7 +493,7 @@
* Pass arg0, arg1 & arg2 in rARG1-rARG3
*
*/
-int genDalvikArgsRange(CompilationUnit* cUnit, InvokeInfo* info, int callState,
+int genDalvikArgsRange(CompilationUnit* cUnit, CallInfo* info, int callState,
LIR** pcrLabel, NextCallInsn nextCallInsn,
uint32_t dexIdx, uint32_t methodIdx,
uintptr_t directCode, uintptr_t directMethod,
@@ -583,7 +583,7 @@
return callState;
}
-RegLocation inlineTarget(CompilationUnit* cUnit, InvokeInfo* info)
+RegLocation inlineTarget(CompilationUnit* cUnit, CallInfo* info)
{
RegLocation res;
if (info->result.location == kLocInvalid) {
@@ -594,7 +594,7 @@
return res;
}
-RegLocation inlineTargetWide(CompilationUnit* cUnit, InvokeInfo* info)
+RegLocation inlineTargetWide(CompilationUnit* cUnit, CallInfo* info)
{
RegLocation res;
if (info->result.location == kLocInvalid) {
@@ -605,7 +605,7 @@
return res;
}
-bool genInlinedCharAt(CompilationUnit* cUnit, InvokeInfo* info)
+bool genInlinedCharAt(CompilationUnit* cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
// Location of reference to data array
@@ -661,7 +661,7 @@
#endif
}
-bool genInlinedMinMaxInt(CompilationUnit *cUnit, InvokeInfo* info, bool isMin)
+bool genInlinedMinMaxInt(CompilationUnit *cUnit, CallInfo* info, bool isMin)
{
#if defined(TARGET_ARM)
RegLocation rlSrc1 = info->args[0];
@@ -683,7 +683,7 @@
}
// Generates an inlined String.isEmpty or String.length.
-bool genInlinedStringIsEmptyOrLength(CompilationUnit* cUnit, InvokeInfo* info,
+bool genInlinedStringIsEmptyOrLength(CompilationUnit* cUnit, CallInfo* info,
bool isEmpty)
{
#if defined(TARGET_ARM)
@@ -708,7 +708,7 @@
#endif
}
-bool genInlinedAbsInt(CompilationUnit *cUnit, InvokeInfo* info)
+bool genInlinedAbsInt(CompilationUnit *cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
RegLocation rlSrc = info->args[0];
@@ -727,7 +727,7 @@
#endif
}
-bool genInlinedAbsLong(CompilationUnit *cUnit, InvokeInfo* info)
+bool genInlinedAbsLong(CompilationUnit *cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
RegLocation rlSrc = info->args[0];
@@ -748,7 +748,7 @@
#endif
}
-bool genInlinedFloatCvt(CompilationUnit *cUnit, InvokeInfo* info)
+bool genInlinedFloatCvt(CompilationUnit *cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
RegLocation rlSrc = info->args[0];
@@ -760,7 +760,7 @@
#endif
}
-bool genInlinedDoubleCvt(CompilationUnit *cUnit, InvokeInfo* info)
+bool genInlinedDoubleCvt(CompilationUnit *cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
RegLocation rlSrc = info->args[0];
@@ -776,7 +776,7 @@
* Fast string.indexOf(I) & (II). Tests for simple case of char <= 0xffff,
* otherwise bails to standard library code.
*/
-bool genInlinedIndexOf(CompilationUnit* cUnit, InvokeInfo* info,
+bool genInlinedIndexOf(CompilationUnit* cUnit, CallInfo* info,
bool zeroBased)
{
#if defined(TARGET_ARM)
@@ -818,7 +818,7 @@
}
/* Fast string.compareTo(Ljava/lang/string;)I. */
-bool genInlinedStringCompareTo(CompilationUnit* cUnit, InvokeInfo* info)
+bool genInlinedStringCompareTo(CompilationUnit* cUnit, CallInfo* info)
{
#if defined(TARGET_ARM)
oatClobberCalleeSave(cUnit);
@@ -850,7 +850,7 @@
#endif
}
-bool genIntrinsic(CompilationUnit* cUnit, InvokeInfo* info)
+bool genIntrinsic(CompilationUnit* cUnit, CallInfo* info)
{
if ((info->optFlags & MIR_INLINED) || info->isRange ||
(info->result.location == kLocInvalid)) {
@@ -866,7 +866,7 @@
* method. By doing this during basic block construction, we can also
* take advantage of/generate new useful dataflow info.
*/
- std::string tgtMethod(PrettyMethod(info->methodIdx, *cUnit->dex_file));
+ std::string tgtMethod(PrettyMethod(info->index, *cUnit->dex_file));
if (tgtMethod.compare("char java.lang.String.charAt(int)") == 0) {
return genInlinedCharAt(cUnit, info);
}
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc
index 1707a89..e06cf3f 100644
--- a/src/compiler/codegen/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/MethodCodegenDriver.cc
@@ -53,7 +53,7 @@
return res;
}
-void genInvoke(CompilationUnit* cUnit, InvokeInfo* info)
+void genInvoke(CompilationUnit* cUnit, CallInfo* info)
{
if (genIntrinsic(cUnit, info)) {
return;
@@ -72,7 +72,7 @@
cUnit->code_item, cUnit->method_idx,
cUnit->access_flags);
- uint32_t dexMethodIdx = info->methodIdx;
+ uint32_t dexMethodIdx = info->index;
int vtableIdx;
uintptr_t directCode;
uintptr_t directMethod;
@@ -174,10 +174,10 @@
* high-word loc for wide arguments. Also pull up any following
* MOVE_RESULT and incorporate it into the invoke.
*/
-InvokeInfo* newInvokeInfo(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir,
- InvokeType type, bool isRange)
+CallInfo* newCallInfo(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir,
+ InvokeType type, bool isRange)
{
- InvokeInfo* info = (InvokeInfo*)oatNew(cUnit, sizeof(InvokeInfo), true,
+ CallInfo* info = (CallInfo*)oatNew(cUnit, sizeof(CallInfo), true,
kAllocMisc);
MIR* moveResultMIR = oatFindMoveResult(cUnit, bb, mir);
if (moveResultMIR == NULL) {
@@ -195,7 +195,7 @@
info->optFlags = mir->optimizationFlags;
info->type = type;
info->isRange = isRange;
- info->methodIdx = mir->dalvikInsn.vB;
+ info->index = mir->dalvikInsn.vB;
info->offset = mir->offset;
return info;
}
@@ -414,11 +414,13 @@
break;
case Instruction::FILLED_NEW_ARRAY:
- genFilledNewArray(cUnit, mir, false /* not range */);
+ genFilledNewArray(cUnit, newCallInfo(cUnit, bb, mir, kStatic,
+ false /* not range */));
break;
case Instruction::FILLED_NEW_ARRAY_RANGE:
- genFilledNewArray(cUnit, mir, true /* range */);
+ genFilledNewArray(cUnit, newCallInfo(cUnit, bb, mir, kStatic,
+ true /* range */));
break;
case Instruction::NEW_ARRAY:
@@ -460,12 +462,15 @@
case Instruction::IF_GE:
case Instruction::IF_GT:
case Instruction::IF_LE: {
+ LIR* taken = &labelList[bb->taken->id];
+ LIR* fallThrough = &labelList[bb->fallThrough->id];
bool backwardBranch;
backwardBranch = (bb->taken->startOffset <= mir->offset);
if (backwardBranch) {
genSuspendTest(cUnit, optFlags);
}
- genCompareAndBranch(cUnit, bb, opcode, rlSrc[0], rlSrc[1], labelList);
+ genCompareAndBranch(cUnit, opcode, rlSrc[0], rlSrc[1], taken,
+ fallThrough);
break;
}
@@ -475,12 +480,14 @@
case Instruction::IF_GEZ:
case Instruction::IF_GTZ:
case Instruction::IF_LEZ: {
+ LIR* taken = &labelList[bb->taken->id];
+ LIR* fallThrough = &labelList[bb->fallThrough->id];
bool backwardBranch;
backwardBranch = (bb->taken->startOffset <= mir->offset);
if (backwardBranch) {
genSuspendTest(cUnit, optFlags);
}
- genCompareZeroAndBranch(cUnit, bb, opcode, rlSrc[0], labelList);
+ genCompareZeroAndBranch(cUnit, opcode, rlSrc[0], taken, fallThrough);
break;
}
@@ -610,38 +617,38 @@
break;
case Instruction::INVOKE_STATIC_RANGE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kStatic, true));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kStatic, true));
break;
case Instruction::INVOKE_STATIC:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kStatic, false));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kStatic, false));
break;
case Instruction::INVOKE_DIRECT:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kDirect, false));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kDirect, false));
break;
case Instruction::INVOKE_DIRECT_RANGE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kDirect, true));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kDirect, true));
break;
case Instruction::INVOKE_VIRTUAL:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kVirtual, false));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kVirtual, false));
break;
case Instruction::INVOKE_VIRTUAL_RANGE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kVirtual, true));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kVirtual, true));
break;
case Instruction::INVOKE_SUPER:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kSuper, false));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kSuper, false));
break;
case Instruction::INVOKE_SUPER_RANGE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kSuper, true));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kSuper, true));
break;
case Instruction::INVOKE_INTERFACE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kInterface, false));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kInterface, false));
break;
case Instruction::INVOKE_INTERFACE_RANGE:
- genInvoke(cUnit, newInvokeInfo(cUnit, bb, mir, kInterface, true));
+ genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kInterface, true));
break;
case Instruction::NEG_INT: