The simplifycfg pass should be able to turn stuff like:
authorChris Lattner <sabre@nondot.org>
Tue, 24 Feb 2004 05:34:44 +0000 (05:34 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 24 Feb 2004 05:34:44 +0000 (05:34 +0000)
  if (X == 4 || X == 7)
and
  if (X != 4 && X != 7)

into switch instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11791 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/SimplifyCFG/switch_create.ll [new file with mode: 0644]

diff --git a/test/Transforms/SimplifyCFG/switch_create.ll b/test/Transforms/SimplifyCFG/switch_create.ll
new file mode 100644 (file)
index 0000000..95d7d4a
--- /dev/null
@@ -0,0 +1,33 @@
+; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep br
+
+declare void %foo1()
+declare void %foo2()
+
+void %test1(uint %V) {
+       %C1 = seteq uint %V, 4
+       %C2 = seteq uint %V, 17
+       %CN = or bool %C1, %C2
+       br bool %CN, label %T, label %F
+T:
+       call void %foo1()
+       ret void
+F:
+       call void %foo2()
+       ret void
+}
+
+
+void %test2(int %V) {
+       %C1 = setne int %V, 4
+       %C2 = setne int %V, 17
+       %CN = and bool %C1, %C2
+       br bool %CN, label %T, label %F
+T:
+       call void %foo1()
+       ret void
+F:
+       call void %foo2()
+       ret void
+}
+
+