[llvm-commits] CVS: llvm/test/Regression/Transforms/SimplifyCFG/switch_thread.ll
Chris Lattner
lattner at cs.uiuc.edu
Wed Feb 23 22:15:43 PST 2005
Changes in directory llvm/test/Regression/Transforms/SimplifyCFG:
switch_thread.ll added (r1.1)
---
Log message:
new testcase for a simple optimization that simplifycfg is about to do.
All CFG edges to DEAD should be eliminated.
---
Diffs of the changes: (+78 -0)
switch_thread.ll | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 78 insertions(+)
Index: llvm/test/Regression/Transforms/SimplifyCFG/switch_thread.ll
diff -c /dev/null llvm/test/Regression/Transforms/SimplifyCFG/switch_thread.ll:1.1
*** /dev/null Thu Feb 24 00:15:37 2005
--- llvm/test/Regression/Transforms/SimplifyCFG/switch_thread.ll Thu Feb 24 00:15:27 2005
***************
*** 0 ****
--- 1,78 ----
+ ; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep 'call void %DEAD'
+
+ ; Test that we can thread a simple known condition through switch statements.
+
+ declare void %foo1()
+ declare void %foo2()
+ declare void %DEAD()
+
+ void %test1(uint %V) {
+ switch uint %V, label %A [
+ uint 4, label %T
+ uint 17, label %Done
+ uint 1234, label %A
+ ]
+
+ T: ;; V == 4 if we get here.
+ call void %foo1()
+ ;; This switch is always statically determined.
+ switch uint %V, label %A2 [
+ uint 4, label %B
+ uint 17, label %C
+ uint 42, label %C
+ ]
+ A2:
+ call void %DEAD()
+ call void %DEAD()
+ %cond2 = seteq uint %V, 4 ;; always false
+ br bool %cond2, label %Done, label %C
+
+ A:
+ call void %foo1()
+ %cond = setne uint %V, 4 ;; always true
+ br bool %cond, label %Done, label %C
+
+
+ Done:
+ ret void
+
+ B:
+ call void %foo2()
+ %cond3 = seteq uint %V, 4 ;; always true
+ br bool %cond3, label %Done, label %C
+ C:
+ call void %DEAD()
+ ret void
+ }
+
+ void %test2(uint %V) {
+ switch uint %V, label %A [
+ uint 4, label %T
+ uint 17, label %D
+ uint 1234, label %E
+ ]
+
+ A: ;; V != 4, 17, 1234 here.
+ call void %foo1()
+ ;; This switch is always statically determined.
+ switch uint %V, label %E [
+ uint 4, label %C
+ uint 17, label %C
+ uint 42, label %D
+ ]
+ C:
+ call void %DEAD() ;; unreacahble.
+ ret void
+ T:
+ call void %foo1()
+ call void %foo1()
+ ret void
+
+ D:
+ call void %foo1()
+ ret void
+
+ E:
+ ret void
+ }
+
More information about the llvm-commits
mailing list