[PATCH] D60612: Cowardly refuse to insert instructions after a terminator.

Arnt Gulbrandsen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 12 06:09:05 PDT 2019


arnt updated this revision to Diff 194857.
arnt added a comment.

LebedevRI pointed out that the assert ought to have a message; thanks.


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D60612/new/

https://reviews.llvm.org/D60612

Files:
  llvm/lib/IR/Instruction.cpp
  llvm/unittests/Analysis/PhiValuesTest.cpp


Index: llvm/unittests/Analysis/PhiValuesTest.cpp
===================================================================
--- llvm/unittests/Analysis/PhiValuesTest.cpp
+++ llvm/unittests/Analysis/PhiValuesTest.cpp
@@ -33,15 +33,15 @@
   BasicBlock *If = BasicBlock::Create(C, "if", F);
   BasicBlock *Else = BasicBlock::Create(C, "else", F);
   BasicBlock *Then = BasicBlock::Create(C, "then", F);
-  BranchInst::Create(If, Else, UndefValue::get(I1Ty), Entry);
-  BranchInst::Create(Then, If);
-  BranchInst::Create(Then, Else);
-
   Value *Val1 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val1", Entry);
   Value *Val2 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val2", Entry);
   Value *Val3 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val3", Entry);
   Value *Val4 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val4", Entry);
 
+  BranchInst::Create(If, Else, UndefValue::get(I1Ty), Entry);
+  BranchInst::Create(Then, If);
+  BranchInst::Create(Then, Else);
+
   PHINode *Phi1 = PHINode::Create(I32Ty, 2, "phi1", Then);
   Phi1->addIncoming(Val1, If);
   Phi1->addIncoming(Val2, Else);
@@ -103,24 +103,28 @@
   BasicBlock *If2 = BasicBlock::Create(C, "if2", F);
   BasicBlock *Else2 = BasicBlock::Create(C, "else2", F);
   BasicBlock *End = BasicBlock::Create(C, "then", F);
-  BranchInst::Create(If1, Else1, UndefValue::get(I1Ty), Entry);
-  BranchInst::Create(Then, If1);
-  BranchInst::Create(Then, Else1);
-  BranchInst::Create(If2, Else2, UndefValue::get(I1Ty), Then);
-  BranchInst::Create(End, If2);
-  BranchInst::Create(End, Else2);
 
   Value *Val1 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val1", Entry);
   Value *Val2 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val2", Entry);
   Value *Val3 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val3", Entry);
   Value *Val4 = new LoadInst(I32Ty, UndefValue::get(I32PtrTy), "val4", Entry);
 
+  BranchInst::Create(If1, Else1, UndefValue::get(I1Ty), Entry);
+  BranchInst::Create(Then, If1);
+  BranchInst::Create(Then, Else1);
+
   PHINode *Phi1 = PHINode::Create(I32Ty, 2, "phi1", Then);
   Phi1->addIncoming(Val1, If1);
   Phi1->addIncoming(Val2, Else1);
+
   PHINode *Phi2 = PHINode::Create(I32Ty, 2, "phi2", Then);
   Phi2->addIncoming(Val2, If1);
   Phi2->addIncoming(Val3, Else1);
+
+  BranchInst::Create(If2, Else2, UndefValue::get(I1Ty), Then);
+  BranchInst::Create(End, If2);
+  BranchInst::Create(End, Else2);
+
   PHINode *Phi3 = PHINode::Create(I32Ty, 2, "phi3", End);
   Phi3->addIncoming(Phi1, If2);
   Phi3->addIncoming(Val3, Else2);
Index: llvm/lib/IR/Instruction.cpp
===================================================================
--- llvm/lib/IR/Instruction.cpp
+++ llvm/lib/IR/Instruction.cpp
@@ -38,6 +38,7 @@
 
   // append this instruction into the basic block
   assert(InsertAtEnd && "Basic block to append to may not be NULL!");
+  assert(!InsertAtEnd->getTerminator() && "Cannot append an instruction after a terminator");
   InsertAtEnd->getInstList().push_back(this);
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60612.194857.patch
Type: text/x-patch
Size: 3001 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190412/020bae9c/attachment.bin>


More information about the llvm-commits mailing list