diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler/Frontend.cc | 14 | ||||
| -rw-r--r-- | src/compiler/codegen/MethodBitcode.cc | 15 |
2 files changed, 22 insertions, 7 deletions
diff --git a/src/compiler/Frontend.cc b/src/compiler/Frontend.cc index 3924f45ec8..236ab8675a 100644 --- a/src/compiler/Frontend.cc +++ b/src/compiler/Frontend.cc @@ -763,9 +763,17 @@ CompiledMethod* oatCompileMethod(Compiler& compiler, cUnit->numRegs = code_item->registers_size_ - cUnit->numIns; cUnit->numOuts = code_item->outs_size_; #if defined(ART_USE_QUICK_COMPILER) -#if defined(TARGET_ARM) - cUnit->genBitcode = true; -#endif + // TODO: fix bug and remove this workaround + std::string methodName = PrettyMethod(method_idx, dex_file); + if ((methodName.find("gdata2.AndroidGDataClient.createAndExecuteMethod") + != std::string::npos) || (methodName.find("hG.a") != std::string::npos) + || (methodName.find("hT.a(hV, java.lang.String, java.lang.String, java") + != std::string::npos) || (methodName.find("AndroidHttpTransport.exchange") + != std::string::npos)) { + LOG(INFO) << "Skipping bitcode generation for " << methodName; + } else { + cUnit->genBitcode = true; + } #endif /* Adjust this value accordingly once inlining is performed */ cUnit->numDalvikRegisters = code_item->registers_size_; diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc index b7c4331d7d..3ec4a1100e 100644 --- a/src/compiler/codegen/MethodBitcode.cc +++ b/src/compiler/codegen/MethodBitcode.cc @@ -1298,7 +1298,12 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb, case Instruction::MOVE_RESULT_WIDE: case Instruction::MOVE_RESULT: case Instruction::MOVE_RESULT_OBJECT: +#if defined(TARGET_ARM) CHECK(false) << "Unexpected MOVE_RESULT"; +#else + UNIMPLEMENTED(WARNING) << "need x86 move-result fusing"; +#endif + break; case Instruction::MONITOR_ENTER: @@ -1448,7 +1453,7 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb, } break; case Instruction::IPUT: - if (rlDest.fp) { + if (rlSrc[0].fp) { convertIput(cUnit, optFlags, greenland::IntrinsicHelper::HLIPutFloat, rlSrc[0], rlSrc[1], vC); } else { @@ -1477,7 +1482,7 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb, rlSrc[0], rlSrc[1], vC); break; case Instruction::IPUT_WIDE: - if (rlDest.fp) { + if (rlSrc[0].fp) { convertIput(cUnit, optFlags, greenland::IntrinsicHelper::HLIPutDouble, rlSrc[0], rlSrc[1], vC); } else { @@ -1918,11 +1923,13 @@ void oatMethodMIR2Bitcode(CompilationUnit* cUnit) arg_iter++; /* Skip path method */ for (int i = 0; i < cUnit->numSSARegs; i++) { llvm::Value* val; - if ((SRegToVReg(cUnit, i) < 0) || cUnit->regLocation[i].highWord) { + RegLocation rlTemp = cUnit->regLocation[i]; + if ((SRegToVReg(cUnit, i) < 0) || rlTemp.highWord) { oatInsertGrowableList(cUnit, &cUnit->llvmValues, 0); } else if ((i < cUnit->numRegs) || (i >= (cUnit->numRegs + cUnit->numIns))) { - llvm::Constant* immValue = cUnit->irb->GetJInt(0); + llvm::Constant* immValue = cUnit->regLocation[i].wide ? + cUnit->irb->GetJLong(0) : cUnit->irb->GetJInt(0); val = emitConst(cUnit, immValue, cUnit->regLocation[i]); val->setName(llvmSSAName(cUnit, i)); oatInsertGrowableList(cUnit, &cUnit->llvmValues, (intptr_t)val); |