]> granicus.if.org Git - llvm/commitdiff
NewGVN: Instead of changeToUnreachable, insert an instruction SimplifyCFG will turn...
authorDaniel Berlin <dberlin@dberlin.org>
Mon, 30 Jan 2017 18:12:56 +0000 (18:12 +0000)
committerDaniel Berlin <dberlin@dberlin.org>
Mon, 30 Jan 2017 18:12:56 +0000 (18:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293515 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/NewGVN.cpp
test/Transforms/NewGVN/pr31594.ll
test/Transforms/NewGVN/pr31758.ll

index 259a4eade0dbe06def558ee423ab16046ae0fe50..b29331ce864326bbb6c40c52108478c21e719bc3 100644 (file)
@@ -2106,10 +2106,6 @@ void NewGVN::deleteInstructionsInBlock(BasicBlock *BB) {
   DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
   ++NumGVNBlocksDeleted;
 
-  // Check to see if there are non-terminating instructions to delete.
-  if (isa<TerminatorInst>(BB->begin()))
-    return;
-
   // Delete the instructions backwards, as it has a reduced likelihood of having
   // to update as many def-use and use-def chains. Start after the terminator.
   auto StartPoint = BB->rbegin();
@@ -2126,6 +2122,11 @@ void NewGVN::deleteInstructionsInBlock(BasicBlock *BB) {
     Inst.eraseFromParent();
     ++NumGVNInstrDeleted;
   }
+  // Now insert something that simplifycfg will turn into an unreachable.
+  Type *Int8Ty = Type::getInt8Ty(BB->getContext());
+  new StoreInst(UndefValue::get(Int8Ty),
+                Constant::getNullValue(Int8Ty->getPointerTo()),
+                BB->getTerminator());
 }
 
 void NewGVN::markInstructionForDeletion(Instruction *I) {
index c24b03278b7c350051d9377da07dd5c2f11dda86..8ef8aa66df1fd4df4a44c68184b1ed2d23191567 100644 (file)
@@ -77,6 +77,7 @@ define void @foo(i8* %arg) {
 ; CHECK-NEXT:    i8 6, label [[BB8:%.*]]
 ; CHECK-NEXT:    ]
 ; CHECK:       bb8:
+; CHECK-NEXT:    store i8 undef, i8* null
 ; CHECK-NEXT:    br label [[BB4]]
 ; CHECK:       bb9:
 ; CHECK-NEXT:    store i8 0, i8* [[ARG]], !g !0
index 81122b1df6eecfc0dfe7888b4ff9e9ca44315f75..d55c17e5804c1451d11933f3f7e143b6fa6394ef 100644 (file)
@@ -15,6 +15,7 @@ define void @tinkywinky() {
 ; CHECK-NEXT:    [[TMP136:%.*]] = load %struct.patatino*, %struct.patatino** [[TMP91]], align 8
 ; CHECK-NEXT:    br label [[BB90]]
 ; CHECK:       bb138:
+; CHECK-NEXT:    store i8 undef, i8* null
 ; CHECK-NEXT:    br label [[BB138:%.*]]
 ;
 bb: