Invoke support for Quick Compiler
Fleshed out invoke and const-string support. Fixed a bug in Phi node
insertion.
With this CL, the "Recursive Fibonacci" and "HelloWorld" milestones are
met.
Added are a set of "HL" (for High-Level) invoke intrinsics. Until we
complete the merging of the Quick & Iceland runtime models the invoke
code sequences are slightly different. Thus, the Greenland IR needs
to represent invokes at a somewhat higher level than Iceland. The
test for fast/slow path needs to happen during the lowering of the
HLInvokeXXX intrinsics in both the Quick and Portable paths.
This will generally be the case in the short term - push fast/slow
path determination below the Greenland IR level. As unification
proceeds, we'll pull as much as makes sense into the common front end.
Change-Id: I0a18edf1be18583c0afdc3f7e10a3e4691968e77
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc
index 7f98f07..aab323b 100644
--- a/src/compiler/codegen/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/MethodCodegenDriver.cc
@@ -174,8 +174,8 @@
* high-word loc for wide arguments. Also pull up any following
* MOVE_RESULT and incorporate it into the invoke.
*/
-CallInfo* newCallInfo(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir,
- InvokeType type, bool isRange)
+CallInfo* oatNewCallInfo(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir,
+ InvokeType type, bool isRange)
{
CallInfo* info = (CallInfo*)oatNew(cUnit, sizeof(CallInfo), true,
kAllocMisc);
@@ -407,11 +407,11 @@
case Instruction::CONST_STRING:
case Instruction::CONST_STRING_JUMBO:
- genConstString(cUnit, vB, rlDest, rlSrc[0]);
+ genConstString(cUnit, vB, rlDest);
break;
case Instruction::CONST_CLASS:
- genConstClass(cUnit, vB, rlDest, rlSrc[0]);
+ genConstClass(cUnit, vB, rlDest);
break;
case Instruction::FILL_ARRAY_DATA:
@@ -419,12 +419,12 @@
break;
case Instruction::FILLED_NEW_ARRAY:
- genFilledNewArray(cUnit, newCallInfo(cUnit, bb, mir, kStatic,
+ genFilledNewArray(cUnit, oatNewCallInfo(cUnit, bb, mir, kStatic,
false /* not range */));
break;
case Instruction::FILLED_NEW_ARRAY_RANGE:
- genFilledNewArray(cUnit, newCallInfo(cUnit, bb, mir, kStatic,
+ genFilledNewArray(cUnit, oatNewCallInfo(cUnit, bb, mir, kStatic,
true /* range */));
break;
@@ -622,38 +622,38 @@
break;
case Instruction::INVOKE_STATIC_RANGE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kStatic, true));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kStatic, true));
break;
case Instruction::INVOKE_STATIC:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kStatic, false));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kStatic, false));
break;
case Instruction::INVOKE_DIRECT:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kDirect, false));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kDirect, false));
break;
case Instruction::INVOKE_DIRECT_RANGE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kDirect, true));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kDirect, true));
break;
case Instruction::INVOKE_VIRTUAL:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kVirtual, false));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kVirtual, false));
break;
case Instruction::INVOKE_VIRTUAL_RANGE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kVirtual, true));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kVirtual, true));
break;
case Instruction::INVOKE_SUPER:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kSuper, false));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kSuper, false));
break;
case Instruction::INVOKE_SUPER_RANGE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kSuper, true));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kSuper, true));
break;
case Instruction::INVOKE_INTERFACE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kInterface, false));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kInterface, false));
break;
case Instruction::INVOKE_INTERFACE_RANGE:
- genInvoke(cUnit, newCallInfo(cUnit, bb, mir, kInterface, true));
+ genInvoke(cUnit, oatNewCallInfo(cUnit, bb, mir, kInterface, true));
break;
case Instruction::NEG_INT: