summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2006-09-02 19:40:38 +0000
committerNick Lewycky <nicholas@mxc.ca>2006-09-02 19:40:38 +0000
commita3a68bde2103e04d30b80b3d18030867bf78ea7b (patch)
treefc3e99363d8d85d715be4bd818a9d408db292fb7 /test
parent94425996c5f58b8c2eb8be3c48c5f80fcb0d3481 (diff)
downloadllvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.gz
llvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.bz2
llvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.xz
Improve handling of SelectInst.
Reorder operations to remove duplicated work. Fix to leave floating-point types out of the optimization. Add tests to predsimplify.ll for SwitchInst and SelectInst handling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30055 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll22
-rw-r--r--test/Transforms/PredicateSimplifier/predsimplify.ll164
2 files changed, 185 insertions, 1 deletions
diff --git a/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll b/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll
new file mode 100644
index 0000000000..97f2a5a5f6
--- /dev/null
+++ b/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-as < %s | opt -predsimplify -disable-output
+
+fastcc void %_ov_splice(int %n1, int %n2, int %ch2) {
+entry:
+ %tmp = setgt int %n1, %n2 ; <bool> [#uses=1]
+ %n.0 = select bool %tmp, int %n2, int %n1 ; <int> [#uses=1]
+ %tmp104 = setlt int 0, %ch2 ; <bool> [#uses=1]
+ br bool %tmp104, label %cond_true105, label %return
+
+cond_true95: ; preds = %cond_true105
+ ret void
+
+bb98: ; preds = %cond_true105
+ ret void
+
+cond_true105: ; preds = %entry
+ %tmp94 = setgt int %n.0, 0 ; <bool> [#uses=1]
+ br bool %tmp94, label %cond_true95, label %bb98
+
+return: ; preds = %entry
+ ret void
+}
diff --git a/test/Transforms/PredicateSimplifier/predsimplify.ll b/test/Transforms/PredicateSimplifier/predsimplify.ll
index 056d8c97dc..89d5d4ce49 100644
--- a/test/Transforms/PredicateSimplifier/predsimplify.ll
+++ b/test/Transforms/PredicateSimplifier/predsimplify.ll
@@ -1,4 +1,5 @@
-; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail
+; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail &&
+; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep pass | wc -l | grep 3
void %test1(int %x) {
entry:
@@ -124,6 +125,167 @@ else.2:
ret void
}
+void %test9(int %y, int %z) {
+entry:
+ %x = add int %y, %z
+ %A = seteq int %y, 3
+ %B = seteq int %z, 5
+ %C = and bool %A, %B
+ br bool %C, label %cond_true, label %return
+
+cond_true:
+ %D = seteq int %x, 8
+ br bool %D, label %then, label %oops
+
+then:
+ call void (...)* %pass( )
+ ret void
+
+oops:
+ call void (...)* %fail( )
+ ret void
+
+return:
+ ret void
+}
+
+void %switch1(int %x) {
+entry:
+ %A = seteq int %x, 10
+ br bool %A, label %return, label %cond_false
+
+cond_false:
+ switch int %x, label %return [
+ int 9, label %then1
+ int 10, label %then2
+ ]
+
+then1:
+ call void (...)* %pass( )
+ ret void
+
+then2:
+ call void (...)* %fail( )
+ ret void
+
+return:
+ ret void
+}
+
+void %switch2(int %x) {
+entry:
+ %A = seteq int %x, 10
+ br bool %A, label %return, label %cond_false
+
+cond_false:
+ switch int %x, label %return [
+ int 8, label %then1
+ int 9, label %then1
+ int 10, label %then1
+ ]
+
+then1:
+ %B = setne int %x, 8
+ br bool %B, label %then2, label %return
+
+then2:
+ call void (...)* %pass( )
+ ret void
+
+return:
+ ret void
+}
+
+void %switch3(int %x) {
+entry:
+ %A = seteq int %x, 10
+ br bool %A, label %return, label %cond_false
+
+cond_false:
+ switch int %x, label %return [
+ int 9, label %then1
+ int 10, label %then1
+ ]
+
+then1:
+ %B = seteq int %x, 9
+ br bool %B, label %return, label %oops
+
+oops:
+ call void (...)* %fail( )
+ ret void
+
+return:
+ ret void
+}
+
+void %switch4(int %x) {
+entry:
+ %A = seteq int %x, 10
+ br bool %A, label %then1, label %cond_false
+
+cond_false:
+ switch int %x, label %default [
+ int 9, label %then1
+ int 10, label %then2
+ ]
+
+then1:
+ ret void
+
+then2:
+ ret void
+
+default:
+ %B = seteq int %x, 9
+ br bool %B, label %oops, label %then1
+
+oops:
+ call void (...)* %fail( )
+ ret void
+}
+
+void %select1(int %x) {
+entry:
+ %A = seteq int %x, 10
+ %B = select bool %A, int 1, int 2
+ %C = seteq int %B, 1
+ br bool %C, label %then, label %else
+
+then:
+ br bool %A, label %return, label %oops
+
+else:
+ br bool %A, label %oops, label %return
+
+oops:
+ call void (...)* %fail( )
+ ret void
+
+return:
+ ret void
+}
+
+void %select2(int %x) {
+entry:
+ %A = seteq int %x, 10
+ %B = select bool %A, int 1, int 2
+ %C = seteq int %B, 1
+ br bool %A, label %then, label %else
+
+then:
+ br bool %C, label %return, label %oops
+
+else:
+ br bool %C, label %oops, label %return
+
+oops:
+ call void (...)* %fail( )
+ ret void
+
+return:
+ ret void
+}
declare void %fail(...)