diff options
| author | 2013-02-28 16:02:57 +0000 | |
|---|---|---|
| committer | 2013-02-28 16:02:58 +0000 | |
| commit | c21da53213018a27f1df61e61f05eef6f9ae5d8e (patch) | |
| tree | 674af8dd8f2b22d1520258cb429104e2fafc0e0b | |
| parent | 0d43d5465f43eb8838e8ad3c02045d4d8c7ee380 (diff) | |
| parent | 772097020befc5b45d81d1604c897d60e7de56fe (diff) | |
Merge "Ensures allocas are at the start of entry block." into dalvik-dev
| -rw-r--r-- | src/compiler_llvm/gbc_expander.cc | 7 |
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(); |