This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tvm.git


The following commit(s) were added to refs/heads/master by this push:
     new c9c77c6  [LLVM/CPU] Terminate basic block after "ret" instruction 
(#6036)
c9c77c6 is described below

commit c9c77c6b76f7cff3bc6afbf9d3ef2200e3fdbb91
Author: Krzysztof Parzyszek <kparz...@quicinc.com>
AuthorDate: Fri Jul 10 17:36:17 2020 -0500

    [LLVM/CPU] Terminate basic block after "ret" instruction (#6036)
    
    * [LLVM/CPU] Terminate basic block after "ret" instruction
    
    "Ret" is a terminator in LLVM IR and there should be no instructions
    in the basic block following it. When generating a "ret", end the
    current block and start a new one.
---
 src/target/llvm/codegen_cpu.cc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/target/llvm/codegen_cpu.cc b/src/target/llvm/codegen_cpu.cc
index f855dd5..41fa3c5 100644
--- a/src/target/llvm/codegen_cpu.cc
+++ b/src/target/llvm/codegen_cpu.cc
@@ -781,6 +781,9 @@ llvm::Value* CodeGenCPU::CreateIntrinsic(const CallNode* 
op) {
     return CreateStaticHandle();
   } else if (op->op.same_as(builtin::tvm_throw_last_error())) {
     builder_->CreateRet(ConstInt32(-1));
+    auto next_block = std::next(builder_->GetInsertBlock()->getIterator());
+    llvm::BasicBlock* new_bb = llvm::BasicBlock::Create(*ctx_, "cont", 
function_, &*next_block);
+    builder_->SetInsertPoint(new_bb);
     return ConstInt32(-1);
   } else if (op->op.same_as(builtin::tvm_struct_get())) {
     CHECK_EQ(op->args.size(), 3U);

Reply via email to