summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sebastien Hertz <shertz@google.com> 2013-02-28 16:02:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2013-02-28 16:02:58 +0000
commitc21da53213018a27f1df61e61f05eef6f9ae5d8e (patch)
tree674af8dd8f2b22d1520258cb429104e2fafc0e0b
parent0d43d5465f43eb8838e8ad3c02045d4d8c7ee380 (diff)
parent772097020befc5b45d81d1604c897d60e7de56fe (diff)
Merge "Ensures allocas are at the start of entry block." into dalvik-dev
-rw-r--r--src/compiler_llvm/gbc_expander.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 4c9b31cee6..ee81c07878 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -1135,12 +1135,19 @@ void GBCExpanderPass::Expand_AllocaShadowFrame(llvm::Value* num_vregs_value) {
llvm::StructType* shadow_frame_type =
irb_.getShadowFrameTy(num_vregs);
+ // Create allocas at the start of entry block.
+ llvm::IRBuilderBase::InsertPoint irb_ip_original = irb_.saveIP();
+ llvm::BasicBlock* entry_block = &func_->front();
+ irb_.SetInsertPoint(&entry_block->front());
+
shadow_frame_ = irb_.CreateAlloca(shadow_frame_type);
// Alloca a pointer to old shadow frame
old_shadow_frame_ =
irb_.CreateAlloca(shadow_frame_type->getElementType(0)->getPointerTo());
+ irb_.restoreIP(irb_ip_original);
+
// Push the shadow frame
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();