[SCCP] Add a test for switches on undef.
authorDavide Italiano <davide@freebsd.org>
Wed, 23 Nov 2016 01:42:39 +0000 (01:42 +0000)
committerDavide Italiano <davide@freebsd.org>
Wed, 23 Nov 2016 01:42:39 +0000 (01:42 +0000)
Without this test, you can just remove the code fixing the
switch to the first constant in ResolvedUndefs in and everything
pass. This test, instead, fails with an assertion if the code
is removed. Found while refactoring SCCP to integrate undef in
the solver.

llvm-svn: 287731

llvm/test/Transforms/SCCP/switch-multiple-undef.ll [new file with mode: 0644]

diff --git a/llvm/test/Transforms/SCCP/switch-multiple-undef.ll b/llvm/test/Transforms/SCCP/switch-multiple-undef.ll
new file mode 100644 (file)
index 0000000..027c9c0
--- /dev/null
@@ -0,0 +1,27 @@
+; RUN: opt -S -ipsccp < %s | FileCheck %s
+
+declare void @foo()
+declare void @goo()
+declare void @patatino()
+
+define void @test1(i32 %t) {
+  %choice = icmp eq i32 undef, -1
+  switch i1 %choice, label %first [i1 0, label %second
+                                   i1 1, label %third]
+first:
+  call void @foo()
+  ret void
+second:
+  call void @goo()
+  ret void
+third:
+  call void @patatino()
+  ret void
+}
+
+; CHECK: define void @test1(i32 %t) {
+; CHECK-NEXT:   br label %second
+; CHECK: second:
+; CHECK-NEXT:   call void @goo()
+; CHECK-NEXT:   ret void
+; CHECK-NEXT: }