Cleanup runtime support. Inline via IR builder.
Change-Id: Ib34067489defa75f7e1feb1c382820e52754e72e
diff --git a/src/compiler_llvm/compilation_unit.cc b/src/compiler_llvm/compilation_unit.cc
index 38faf61..cdfd422 100644
--- a/src/compiler_llvm/compilation_unit.cc
+++ b/src/compiler_llvm/compilation_unit.cc
@@ -128,9 +128,10 @@
virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const {
AU.addRequiredID(llvm::LoopSimplifyID);
- AU.addPreserved<llvm::DominatorTree>();
+ // TODO: Preserve more.
+ //AU.addPreserved<llvm::DominatorTree>();
AU.addPreserved<llvm::LoopInfo>();
- AU.addPreservedID(llvm::LoopSimplifyID);
+ //AU.addPreservedID(llvm::LoopSimplifyID);
AU.addPreserved<llvm::ScalarEvolution>();
AU.addPreservedID(llvm::BreakCriticalEdgesID);
}
@@ -140,11 +141,13 @@
llvm::BasicBlock* bb = loop->getLoopLatch();
CHECK_NE(bb, static_cast<void*>(NULL)) << "A single loop latch must exist.";
- irb_->SetInsertPoint(bb->getTerminator());
+ llvm::BasicBlock* tb = bb->splitBasicBlock(bb->getTerminator(), "suspend_exit");
+ // Remove unconditional branch which is added by splitBasicBlock.
+ bb->getTerminator()->eraseFromParent();
- using art::compiler_llvm::runtime_support::TestSuspend;
- llvm::Value* runtime_func = irb_->GetRuntime(TestSuspend);
- irb_->CreateCall(runtime_func, irb_->getJNull());
+ irb_->SetInsertPoint(bb);
+ irb_->Runtime().EmitTestSuspend();
+ irb_->CreateBr(tb);
return true;
}
@@ -195,8 +198,6 @@
break;
}
- runtime_support_->OptimizeRuntimeSupport();
-
irb_->SetRuntimeSupport(runtime_support_.get());
}
@@ -352,8 +353,10 @@
// Add optimization pass
llvm::PassManagerBuilder pm_builder;
+ // TODO: Use inliner after we can do IPO.
+ pm_builder.Inliner = NULL;
//pm_builder.Inliner = llvm::createFunctionInliningPass();
- pm_builder.Inliner = llvm::createAlwaysInlinerPass();
+ //pm_builder.Inliner = llvm::createAlwaysInlinerPass();
//pm_builder.Inliner = llvm::createPartialInliningPass();
pm_builder.OptLevel = 3;
pm_builder.DisableSimplifyLibCalls = 1;