New files, testing for a crash in ADCE compiling QT and a missed optimization.
authorChris Lattner <sabre@nondot.org>
Thu, 17 Feb 2005 19:27:44 +0000 (19:27 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 17 Feb 2005 19:27:44 +0000 (19:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20226 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/ADCE/2005-02-17-PHI-Invoke-Crash.ll [new file with mode: 0644]
test/Transforms/ADCE/dead-phi-edge.ll [new file with mode: 0644]

diff --git a/test/Transforms/ADCE/2005-02-17-PHI-Invoke-Crash.ll b/test/Transforms/ADCE/2005-02-17-PHI-Invoke-Crash.ll
new file mode 100644 (file)
index 0000000..6e439a7
--- /dev/null
@@ -0,0 +1,49 @@
+; RUN: llvm-as < %s | opt -adce -disable-output
+
+implementation   ; Functions:
+
+declare {  }* %llvm.dbg.region.end({  }*)
+
+declare void %strlen()
+
+declare void %_ZN10QByteArray6resizeEi()
+
+declare void %q_atomic_decrement()
+
+void %_ZNK10QByteArray13leftJustifiedEicb() {
+entry:
+       invoke void %strlen( )
+                       to label %tmp.3.i.noexc unwind label %invoke_catch.0
+
+tmp.3.i.noexc:         ; preds = %entry
+       br bool false, label %then.0, label %else.0
+
+invoke_catch.0:                ; preds = %entry
+       invoke void %q_atomic_decrement( )
+                       to label %tmp.1.i.i183.noexc unwind label %terminate
+
+tmp.1.i.i183.noexc:            ; preds = %invoke_catch.0
+       unwind
+
+then.0:                ; preds = %tmp.3.i.noexc
+       invoke void %_ZN10QByteArray6resizeEi( )
+                       to label %invoke_cont.1 unwind label %invoke_catch.1
+
+invoke_catch.1:                ; preds = %then.0
+       invoke void %q_atomic_decrement( )
+                       to label %tmp.1.i.i162.noexc unwind label %terminate
+
+tmp.1.i.i162.noexc:            ; preds = %invoke_catch.1
+       ret void
+
+invoke_cont.1:         ; preds = %then.0
+       ret void
+
+else.0:                ; preds = %tmp.3.i.noexc
+       ret void
+
+terminate:             ; preds = %invoke_catch.1, %invoke_catch.0
+       %dbg.0.1 = phi {  }* [ null, %invoke_catch.1 ], [ null, %invoke_catch.0 ]               ; <{  }*> [#uses=1]
+       %dbg.tmp.43 = call {  }* %llvm.dbg.region.end( {  }* %dbg.0.1 )         ; <{  }*> [#uses=0]
+       unreachable
+}
diff --git a/test/Transforms/ADCE/dead-phi-edge.ll b/test/Transforms/ADCE/dead-phi-edge.ll
new file mode 100644 (file)
index 0000000..b4a10b2
--- /dev/null
@@ -0,0 +1,15 @@
+; RUN: llvm-as < %s | opt -adce | llvm-dis | not grep call
+
+; The call is not live just because the PHI uses the call retval!
+
+int %test(int %X) {
+       br label %Done
+
+DeadBlock:
+       %Y = call int %test(int 0)
+       br label %Done
+
+Done:
+       %Z = phi int [%X, %0], [%Y, %DeadBlock]
+       ret int %Z
+}