summaryrefslogtreecommitdiff
path: root/src/compiler/codegen
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2012-06-14 15:19:35 -0700
committer buzbee <buzbee@google.com> 2012-06-15 11:24:22 -0700
commite5f01223ae03b89767dc7881d75dca061121ee36 (patch)
tree67be365994561e90a2adc8e871989a706f070a1d /src/compiler/codegen
parentdc07f948e2b5e2355a9e26f7e0fd582c3d4cb182 (diff)
Fixes for invoke/move-result fusing, recursion bug
Fix for the Arm move-result fusing - NEW_FILLED_ARRAY wasn't being handled properly. Still keeping x86 disabled. Replaced the recursive dfs order computation with an iterative version. Could be improved, but I'll wait to see if it shows up as an issue during compile-time profiling. Keeping the old recursive version code in place for a little while until we're sure the new mechanism computes the exact same orderings. With this CL we stop running out of thread stack memory on the 003 runtest. Change-Id: Iab80f42135b081a3f49e1ee26a29220e602ae7e8
Diffstat (limited to 'src/compiler/codegen')
-rw-r--r--src/compiler/codegen/GenCommon.cc3
-rw-r--r--src/compiler/codegen/MethodCodegenDriver.cc4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc
index f114b45987..29f3cca79a 100644
--- a/src/compiler/codegen/GenCommon.cc
+++ b/src/compiler/codegen/GenCommon.cc
@@ -624,6 +624,9 @@ void genFilledNewArray(CompilationUnit* cUnit, CallInfo* info)
}
}
}
+ if (info->result.location != kLocInvalid) {
+ storeValue(cUnit, info->result, oatGetReturn(cUnit, false /* not fp */));
+ }
}
void genSput(CompilationUnit* cUnit, uint32_t fieldIdx, RegLocation rlSrc,
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc
index 76fca1014b..7f98f073ba 100644
--- a/src/compiler/codegen/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/MethodCodegenDriver.cc
@@ -179,8 +179,8 @@ CallInfo* newCallInfo(CompilationUnit* cUnit, BasicBlock* bb, MIR* mir,
{
CallInfo* info = (CallInfo*)oatNew(cUnit, sizeof(CallInfo), true,
kAllocMisc);
-//FIXME: Disable all fusing as temporary workaround
-#if 1
+//FIXME: Disable fusing for x86
+#if defined(TARGET_X86)
info->result.location = kLocInvalid;
#else
MIR* moveResultMIR = oatFindMoveResult(cUnit, bb, mir);