summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/PredicateSimplifier
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-01-17 07:59:14 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-01-17 07:59:14 +0000
commit83b3d8267225d585678d5d3af9bba5735f4b415d (patch)
tree9d6c2ad7bfd568186e83a39e6f03e1c0bf415715 /llvm/test/Transforms/PredicateSimplifier
parent100602d7561ca5e245db6194bddae86357d203d4 (diff)
downloadbcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.tar.gz
bcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.zip
Regression is gone, don't try to find it on clean target.
llvm-svn: 33296
Diffstat (limited to 'llvm/test/Transforms/PredicateSimplifier')
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/.cvsignore1
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll22
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-08-07-LeaderOffByOne.ll28
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-09-20-ResolveCycle.ll28
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-09-20-SetCC.ll54
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-10-22-IntOr.ll52
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-10-25-AddSetCC.ll27
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-11-04-ImpossibleGT.ll19
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-11-04-ReplacingZeros.ll30
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-11-05-CycleGTLT.ll14
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-11-11-Squeeze.ll31
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2006-11-12-MergeNodes.ll54
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/2007-01-04-SelectSwitch.ll19
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/dg.exp3
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/predsimplify.ll307
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/predsimplify.reg1.ll23
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/predsimplify.reg2.ll49
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/predsimplify.reg3.ll21
-rw-r--r--llvm/test/Transforms/PredicateSimplifier/predsimplify.reg4.ll36
19 files changed, 818 insertions, 0 deletions
diff --git a/llvm/test/Transforms/PredicateSimplifier/.cvsignore b/llvm/test/Transforms/PredicateSimplifier/.cvsignore
new file mode 100644
index 00000000000..83260f862f2
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/.cvsignore
@@ -0,0 +1 @@
+Output
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll b/llvm/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll
new file mode 100644
index 00000000000..1d19516f0e2
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-upgrade < %s | llvm-as | 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/llvm/test/Transforms/PredicateSimplifier/2006-08-07-LeaderOffByOne.ll b/llvm/test/Transforms/PredicateSimplifier/2006-08-07-LeaderOffByOne.ll
new file mode 100644
index 00000000000..1322b90f486
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-08-07-LeaderOffByOne.ll
@@ -0,0 +1,28 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+void %safe_strcpy(uint %size1) {
+entry:
+ %tmp = seteq uint %size1, 0 ; <bool> [#uses=1]
+ br bool %tmp, label %return, label %strlen.exit
+
+strlen.exit: ; preds = %entry
+ %tmp = cast ulong 0 to uint ; <uint> [#uses=2]
+ %tmp6 = setlt uint %tmp, %size1 ; <bool> [#uses=1]
+ br bool %tmp6, label %cond_true7, label %cond_false19
+
+cond_true7: ; preds = %strlen.exit
+ %tmp9 = seteq uint %tmp, 0 ; <bool> [#uses=1]
+ br bool %tmp9, label %cond_next15, label %cond_true10
+
+cond_true10: ; preds = %cond_true7
+ ret void
+
+cond_next15: ; preds = %cond_true7
+ ret void
+
+cond_false19: ; preds = %strlen.exit
+ ret void
+
+return: ; preds = %entry
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-09-20-ResolveCycle.ll b/llvm/test/Transforms/PredicateSimplifier/2006-09-20-ResolveCycle.ll
new file mode 100644
index 00000000000..83e5eacceda
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-09-20-ResolveCycle.ll
@@ -0,0 +1,28 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+void %gs_image_next() {
+entry:
+ %tmp = load uint* null ; <uint> [#uses=2]
+ br bool false, label %cond_next21, label %UnifiedReturnBlock
+
+cond_next21: ; preds = %entry
+ br bool false, label %cond_next42, label %UnifiedReturnBlock
+
+cond_next42: ; preds = %cond_next21
+ br label %cond_true158
+
+cond_next134: ; preds = %cond_true158
+ %tmp1571 = seteq uint 0, %min ; <bool> [#uses=0]
+ ret void
+
+cond_true158: ; preds = %cond_true158, %cond_next42
+ %tmp47 = sub uint %tmp, 0 ; <uint> [#uses=2]
+ %tmp49 = setle uint %tmp47, 0 ; <bool> [#uses=1]
+ %min = select bool %tmp49, uint %tmp47, uint 0 ; <uint> [#uses=2]
+ %tmp92 = add uint %min, 0 ; <uint> [#uses=1]
+ %tmp101 = seteq uint %tmp92, %tmp ; <bool> [#uses=1]
+ br bool %tmp101, label %cond_next134, label %cond_true158
+
+UnifiedReturnBlock: ; preds = %cond_next21, %entry
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-09-20-SetCC.ll b/llvm/test/Transforms/PredicateSimplifier/2006-09-20-SetCC.ll
new file mode 100644
index 00000000000..1023497ee31
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-09-20-SetCC.ll
@@ -0,0 +1,54 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify | llvm-dis | grep br | grep return.i.bb8_crit_edge | grep false
+
+%str = external global [4 x sbyte] ; <[4 x sbyte]*> [#uses=1]
+
+implementation ; Functions:
+
+declare int %sprintf(sbyte*, sbyte*, ...)
+
+int %main() {
+entry:
+ br label %cond_true.outer
+
+cond_true.outer: ; preds = %cond_true.i, %entry
+ %i.0.0.ph = phi int [ 0, %entry ], [ %tmp5, %cond_true.i ] ; <int> [#uses=1]
+ %j.0.0.ph = phi int [ 0, %entry ], [ %tmp312, %cond_true.i ] ; <int> [#uses=2]
+ br label %cond_true
+
+cond_true: ; preds = %return.i, %cond_true.outer
+ %indvar.ui = phi uint [ 0, %cond_true.outer ], [ %indvar.next, %return.i ] ; <uint> [#uses=2]
+ %indvar = cast uint %indvar.ui to int ; <int> [#uses=1]
+ %i.0.0 = add int %indvar, %i.0.0.ph ; <int> [#uses=3]
+ %savedstack = call sbyte* %llvm.stacksave( ) ; <sbyte*> [#uses=2]
+ %tmp.i = seteq int %i.0.0, 0 ; <bool> [#uses=1]
+ %tmp5 = add int %i.0.0, 1 ; <int> [#uses=3]
+ br bool %tmp.i, label %return.i, label %cond_true.i
+
+cond_true.i: ; preds = %cond_true
+ %tmp.i = alloca [1000 x sbyte] ; <[1000 x sbyte]*> [#uses=1]
+ %tmp.sub.i = getelementptr [1000 x sbyte]* %tmp.i, int 0, int 0 ; <sbyte*> [#uses=2]
+ %tmp4.i = call int (sbyte*, sbyte*, ...)* %sprintf( sbyte* %tmp.sub.i, sbyte* getelementptr ([4 x sbyte]* %str, int 0, uint 0), int %i.0.0 ) ; <int> [#uses=0]
+ %tmp.i = load sbyte* %tmp.sub.i ; <sbyte> [#uses=1]
+ %tmp7.i = cast sbyte %tmp.i to int ; <int> [#uses=1]
+ call void %llvm.stackrestore( sbyte* %savedstack )
+ %tmp312 = add int %tmp7.i, %j.0.0.ph ; <int> [#uses=2]
+ %tmp19 = setgt int %tmp5, 9999 ; <bool> [#uses=1]
+ br bool %tmp19, label %bb8, label %cond_true.outer
+
+return.i: ; preds = %cond_true
+ call void %llvm.stackrestore( sbyte* %savedstack )
+ %tmp21 = setgt int %tmp5, 9999 ; <bool> [#uses=1]
+ %indvar.next = add uint %indvar.ui, 1 ; <uint> [#uses=1]
+ br bool %tmp21, label %bb8, label %cond_true
+
+bb8: ; preds = %return.i, %cond_true.i
+ %j.0.1 = phi int [ %j.0.0.ph, %return.i ], [ %tmp312, %cond_true.i ] ; <int> [#uses=1]
+ %tmp10 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([4 x sbyte]* %str, int 0, uint 0), int %j.0.1 ) ; <int> [#uses=0]
+ ret int undef
+}
+
+declare int %printf(sbyte*, ...)
+
+declare sbyte* %llvm.stacksave()
+
+declare void %llvm.stackrestore(sbyte*)
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-10-22-IntOr.ll b/llvm/test/Transforms/PredicateSimplifier/2006-10-22-IntOr.ll
new file mode 100644
index 00000000000..0cdd58085b7
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-10-22-IntOr.ll
@@ -0,0 +1,52 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg -disable-output &&
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail &&
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep -c pass | grep 3
+
+int %test1(int %x, int %y) {
+entry:
+ %tmp2 = or int %x, %y ; <int> [#uses=1]
+ %tmp = seteq int %tmp2, 0 ; <bool> [#uses=1]
+ br bool %tmp, label %cond_true, label %return
+
+cond_true: ; preds = %entry
+ %tmp4 = seteq int %x, 0 ; <bool> [#uses=1]
+ br bool %tmp4, label %cond_true5, label %cond_false
+
+cond_true5: ; preds = %cond_true
+ %tmp6 = call int %pass( ) ; <int> [#uses=1]
+ ret int %tmp6
+
+cond_false:
+ %tmp8 = call int %fail ( ) ; <int> [#uses=1]
+ ret int %tmp8
+
+return: ; preds = %cond_next7
+ ret int 0
+}
+
+int %test2(int %x, int %y) {
+entry:
+ %tmp2 = or int %x, %y ; <int> [#uses=1]
+ %tmp = setne int %tmp2, 0 ; <bool> [#uses=1]
+ br bool %tmp, label %cond_true, label %return
+
+cond_true: ; preds = %entry
+ %tmp4 = seteq int %x, 0 ; <bool> [#uses=1]
+ br bool %tmp4, label %cond_true5, label %cond_false
+
+cond_true5: ; preds = %cond_true
+ %tmp6 = call int %pass1( ) ; <int> [#uses=1]
+ ret int %tmp6
+
+cond_false:
+ %tmp8 = call int %pass2( ) ; <int> [#uses=1]
+ ret int %tmp8
+
+return: ; preds = %cond_next7
+ ret int 0
+}
+
+declare int %fail()
+declare int %pass()
+declare int %pass1()
+declare int %pass2()
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-10-25-AddSetCC.ll b/llvm/test/Transforms/PredicateSimplifier/2006-10-25-AddSetCC.ll
new file mode 100644
index 00000000000..5c5a4a48d46
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-10-25-AddSetCC.ll
@@ -0,0 +1,27 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg -disable-output &&
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep -c pass | grep 2
+
+int %test(int %x, int %y) {
+entry:
+ %tmp2 = setlt int %x, %y
+ %tmp = setne bool %tmp2, true
+ br bool %tmp, label %cond_true, label %return
+
+cond_true: ; preds = %entry
+ %tmp4 = seteq int %x, %y ; <bool> [#uses=1]
+ br bool %tmp4, label %cond_true5, label %cond_false
+
+cond_true5: ; preds = %cond_true
+ %tmp6 = call int %pass1( ) ; <int> [#uses=1]
+ ret int %tmp6
+
+cond_false:
+ %tmp8 = call int %pass2( ) ; <int> [#uses=1]
+ ret int %tmp8
+
+return: ; preds = %cond_next7
+ ret int 0
+}
+
+declare int %pass1()
+declare int %pass2()
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ImpossibleGT.ll b/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ImpossibleGT.ll
new file mode 100644
index 00000000000..32ed49554f2
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ImpossibleGT.ll
@@ -0,0 +1,19 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+void %readMotionInfoFromNAL() {
+entry:
+ br bool false, label %bb2425, label %cond_next30
+
+cond_next30: ; preds = %entry
+ ret void
+
+bb2418: ; preds = %bb2425
+ ret void
+
+bb2425: ; preds = %entry
+ %tmp2427 = setgt int 0, 3 ; <bool> [#uses=1]
+ br bool %tmp2427, label %cond_next2429, label %bb2418
+
+cond_next2429: ; preds = %bb2425
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ReplacingZeros.ll b/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ReplacingZeros.ll
new file mode 100644
index 00000000000..74daa7e82b5
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-11-04-ReplacingZeros.ll
@@ -0,0 +1,30 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+int %test_wp_B_slice(int %select_method) {
+entry:
+ br label %bb309
+
+cond_true114: ; preds = %bb309
+ %tmp130 = setlt int 0, 128 ; <bool> [#uses=1]
+ %min = select bool %tmp130, int 0, int 127 ; <int> [#uses=2]
+ %tmp143 = load int* null ; <int> [#uses=1]
+ br bool false, label %bb303, label %bb314
+
+cond_true166: ; preds = %bb303
+ ret int 0
+
+cond_false200: ; preds = %bb303
+ %tmp205 = sdiv int %min, 2 ; <int> [#uses=1]
+ %iftmp.380.0.p = select bool false, int 0, int %tmp205 ; <int> [#uses=0]
+ ret int 0
+
+bb303: ; preds = %cond_true114
+ %tmp165 = seteq int %min, 0 ; <bool> [#uses=1]
+ br bool %tmp165, label %cond_true166, label %cond_false200
+
+bb309: ; preds = %bb19
+ br bool false, label %cond_true114, label %bb314
+
+bb314: ; preds = %bb309
+ ret int 0
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-11-05-CycleGTLT.ll b/llvm/test/Transforms/PredicateSimplifier/2006-11-05-CycleGTLT.ll
new file mode 100644
index 00000000000..fccc6db6cad
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-11-05-CycleGTLT.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+void %diff(int %N) {
+entry:
+ %tmp = setgt int %N, 0 ; <bool> [#uses=1]
+ br bool %tmp, label %bb519, label %bb744
+
+bb519: ; preds = %entry
+ %tmp720101 = setlt int %N, 0 ; <bool> [#uses=1]
+ br bool %tmp720101, label %bb744, label %bb744
+
+bb744: ; preds = %bb519, %entry
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-11-11-Squeeze.ll b/llvm/test/Transforms/PredicateSimplifier/2006-11-11-Squeeze.ll
new file mode 100644
index 00000000000..cf748cd9200
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-11-11-Squeeze.ll
@@ -0,0 +1,31 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+ %struct.cube_struct = type { int, int, int, int*, int*, int*, int*, int*, uint*, uint*, uint**, uint**, uint*, uint*, uint, int, int*, int, int }
+%cube = external global %struct.cube_struct ; <%struct.cube_struct*> [#uses=2]
+
+implementation ; Functions:
+
+fastcc void %cube_setup() {
+entry:
+ %tmp = load int* getelementptr (%struct.cube_struct* %cube, int 0, uint 2) ; <int> [#uses=2]
+ %tmp = setlt int %tmp, 0 ; <bool> [#uses=1]
+ br bool %tmp, label %bb, label %cond_next
+
+cond_next: ; preds = %entry
+ %tmp2 = load int* getelementptr (%struct.cube_struct* %cube, int 0, uint 1) ; <int> [#uses=2]
+ %tmp5 = setlt int %tmp2, %tmp ; <bool> [#uses=1]
+ br bool %tmp5, label %bb, label %bb6
+
+bb: ; preds = %cond_next, %entry
+ unreachable
+
+bb6: ; preds = %cond_next
+ %tmp98124 = setgt int %tmp2, 0 ; <bool> [#uses=1]
+ br bool %tmp98124, label %bb42, label %bb99
+
+bb42: ; preds = %bb6
+ ret void
+
+bb99: ; preds = %bb6
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/2006-11-12-MergeNodes.ll b/llvm/test/Transforms/PredicateSimplifier/2006-11-12-MergeNodes.ll
new file mode 100644
index 00000000000..5f143ed4a8b
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2006-11-12-MergeNodes.ll
@@ -0,0 +1,54 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+; ModuleID = 'b.bc'
+target datalayout = "e-p:32:32"
+target endian = little
+target pointersize = 32
+target triple = "i686-pc-linux-gnu"
+deplibs = [ "c", "crtend" ]
+ %struct.VDIR_ST = type { int, int, int, %struct.acl*, %struct.pfile*, %struct.vlink*, %struct.vlink*, %struct.vlink*, %struct.VDIR_ST*, %struct.VDIR_ST* }
+ %struct.acl = type { int, sbyte*, sbyte*, sbyte*, %struct.restrict*, %struct.acl*, %struct.acl* }
+ %struct.avalue = type { sbyte* }
+ %struct.pattrib = type { sbyte, sbyte*, sbyte*, %struct.avalue, %struct.pattrib*, %struct.pattrib* }
+ %struct.pfile = type { int, int, int, int, int, %struct.vlink*, %struct.vlink*, %struct.pattrib*, %struct.pfile*, %struct.pfile* }
+ %struct.restrict = type { %struct.acl*, %struct.acl* }
+ %struct.vlink = type { int, sbyte*, sbyte, int, sbyte*, %struct.vlink*, %struct.vlink*, sbyte*, sbyte*, sbyte*, sbyte*, int, int, %struct.acl*, int, int, sbyte*, %struct.pattrib*, %struct.pfile*, %struct.vlink*, %struct.vlink* }
+
+implementation ; Functions:
+
+void %vl_insert(%struct.vlink* %vl) {
+entry:
+ %tmp91 = call int %vl_comp( ) ; <int> [#uses=2]
+ %tmp93 = setgt int %tmp91, 0 ; <bool> [#uses=1]
+ br bool %tmp93, label %cond_next84, label %bb94
+
+cond_next84: ; preds = %entry
+ ret void
+
+bb94: ; preds = %entry
+ %tmp96 = seteq int %tmp91, 0 ; <bool> [#uses=1]
+ br bool %tmp96, label %cond_true97, label %cond_next203
+
+cond_true97: ; preds = %bb94
+ br bool false, label %cond_next105, label %cond_true102
+
+cond_true102: ; preds = %cond_true97
+ ret void
+
+cond_next105: ; preds = %cond_true97
+ %tmp110 = getelementptr %struct.vlink* %vl, int 0, uint 12 ; <int*> [#uses=1]
+ %tmp111 = load int* %tmp110 ; <int> [#uses=1]
+ %tmp129 = seteq int %tmp111, 0 ; <bool> [#uses=1]
+ br bool %tmp129, label %cond_true130, label %cond_next133
+
+cond_true130: ; preds = %cond_next105
+ ret void
+
+cond_next133: ; preds = %cond_next105
+ ret void
+
+cond_next203: ; preds = %bb94
+ ret void
+}
+
+declare int %vl_comp()
diff --git a/llvm/test/Transforms/PredicateSimplifier/2007-01-04-SelectSwitch.ll b/llvm/test/Transforms/PredicateSimplifier/2007-01-04-SelectSwitch.ll
new file mode 100644
index 00000000000..141d4e27c69
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/2007-01-04-SelectSwitch.ll
@@ -0,0 +1,19 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+void %ercMarkCurrMBConcealed(int %comp) {
+entry:
+ %tmp5 = icmp slt int %comp, 0 ; <bool> [#uses=2]
+ %comp_addr.0 = select bool %tmp5, int 0, int %comp ; <int> [#uses=1]
+ switch int %comp_addr.0, label %return [
+ int 0, label %bb
+ ]
+
+bb: ; preds = %entry
+ br bool %tmp5, label %bb87.bb97_crit_edge.critedge, label %return
+
+bb87.bb97_crit_edge.critedge: ; preds = %bb
+ ret void
+
+return: ; preds = %bb, %entry
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/dg.exp b/llvm/test/Transforms/PredicateSimplifier/dg.exp
new file mode 100644
index 00000000000..142de8a6c8f
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/dg.exp
@@ -0,0 +1,3 @@
+load_lib llvm-dg.exp
+
+llvm-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]] $objdir $srcdir $subdir $target_triplet $llvmgcc $llvmgxx $prcontext $llvmgcc_version
diff --git a/llvm/test/Transforms/PredicateSimplifier/predsimplify.ll b/llvm/test/Transforms/PredicateSimplifier/predsimplify.ll
new file mode 100644
index 00000000000..efe28d184ab
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/predsimplify.ll
@@ -0,0 +1,307 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail &&
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep -c pass | grep 4
+
+void %test1(int %x) {
+entry:
+ %A = seteq int %x, 0
+ br bool %A, label %then.1, label %else.1
+then.1:
+ %B = seteq int %x, 1
+ br bool %B, label %then.2, label %else.1
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ ret void
+}
+
+void %test2(int %x) {
+entry:
+ %A = seteq int %x, 0
+ %B = seteq int %x, 1
+ br bool %A, label %then.1, label %else.1
+then.1:
+ br bool %B, label %then.2, label %else.1
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ ret void
+}
+
+void %test3(int %x) {
+entry:
+ %A = seteq int %x, 0
+ %B = seteq int %x, 1
+ br bool %A, label %then.1, label %else.1
+then.1:
+ br bool %B, label %then.2, label %else.1
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ ret void
+}
+
+void %test4(int %x, int %y) {
+entry:
+ %A = seteq int %x, 0
+ %B = seteq int %y, 0
+ %C = and bool %A, %B
+ br bool %C, label %then.1, label %else.1
+then.1:
+ %D = seteq int %x, 0
+ br bool %D, label %then.2, label %else.2
+then.2:
+ %E = seteq int %y, 0
+ br bool %E, label %else.1, label %else.2
+else.1:
+ ret void
+else.2:
+ call void (...)* %fail( )
+ ret void
+}
+
+void %test5(int %x) {
+entry:
+ %A = seteq int %x, 0
+ br bool %A, label %then.1, label %else.1
+then.1:
+ ret void
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ %B = seteq int %x, 0
+ br bool %B, label %then.2, label %then.1
+}
+
+void %test6(int %x, int %y) {
+entry:
+ %A = seteq int %x, 0
+ %B = seteq int %y, 0
+ %C = or bool %A, %B
+ br bool %C, label %then.1, label %else.1
+then.1:
+ ret void
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ %D = seteq int %x, 0
+ br bool %D, label %then.2, label %else.2
+else.2:
+ %E = setne int %y, 0
+ br bool %E, label %then.1, label %then.2
+}
+
+void %test7(int %x) {
+entry:
+ %A = setne int %x, 0
+ %B = xor bool %A, true
+ br bool %B, label %then.1, label %else.1
+then.1:
+ %C = seteq int %x, 1
+ br bool %C, label %then.2, label %else.1
+then.2:
+ call void (...)* %fail( )
+ ret void
+else.1:
+ ret void
+}
+
+void %test8(int %x) {
+entry:
+ %A = add int %x, 1
+ %B = seteq int %x, 0
+ br bool %B, label %then.1, label %then.2
+then.1:
+ %C = seteq int %A, 1
+ br bool %C, label %then.2, label %else.2
+then.2:
+ ret void
+else.2:
+ call void (...)* %fail( )
+ 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 %test10() {
+entry:
+ %A = alloca int
+ %B = seteq int* %A, null
+ br bool %B, label %cond_true, label %cond_false
+
+cond_true:
+ call void (...)* %fail ( )
+ ret void
+
+cond_false:
+ call void (...)* %pass ( )
+ 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(...)
+
+declare void %pass(...)
diff --git a/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg1.ll b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg1.ll
new file mode 100644
index 00000000000..caa41b32803
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg1.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -verify
+
+void %dgefa() {
+entry:
+ br label %cond_true96
+
+cond_true: ; preds = %cond_true96
+ %tmp19 = seteq int %tmp10, %k.0 ; <bool> [#uses=1]
+ br bool %tmp19, label %cond_next, label %cond_true20
+
+cond_true20: ; preds = %cond_true
+ br label %cond_next
+
+cond_next: ; preds = %cond_true20, %cond_true
+ %tmp84 = setgt int %tmp3, 1999 ; <bool> [#uses=0]
+ ret void
+
+cond_true96: ; preds = %cond_true96, %entry
+ %k.0 = phi int [ 0, %entry ], [ 0, %cond_true96 ] ; <int> [#uses=3]
+ %tmp3 = add int %k.0, 1 ; <int> [#uses=1]
+ %tmp10 = add int 0, %k.0 ; <int> [#uses=1]
+ br bool false, label %cond_true96, label %cond_true
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg2.ll b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg2.ll
new file mode 100644
index 00000000000..e7593fa7ba1
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg2.ll
@@ -0,0 +1,49 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -verify
+
+; ModuleID = 'bugpoint-reduced-simplified.bc'
+target endian = little
+target pointersize = 32
+target triple = "i686-pc-linux-gnu"
+deplibs = [ "c", "crtend" ]
+ %struct.anon = type { %struct.set_family*, %struct.set_family*, %struct.set_family*, sbyte*, int, uint*, %struct.pair_struct*, sbyte**, %struct.symbolic_t*, %struct.symbolic_t* }
+ %struct.pair_struct = type { int, int*, int* }
+ %struct.set_family = type { int, int, int, int, int, uint*, %struct.set_family* }
+ %struct.symbolic_label_t = type { sbyte*, %struct.symbolic_label_t* }
+ %struct.symbolic_list_t = type { int, int, %struct.symbolic_list_t* }
+ %struct.symbolic_t = type { %struct.symbolic_list_t*, int, %struct.symbolic_label_t*, int, %struct.symbolic_t* }
+
+implementation ; Functions:
+
+void %find_pairing_cost(int %strategy) {
+entry:
+ br bool false, label %cond_true299, label %bb314
+
+bb94: ; preds = %cond_true299
+ switch int %strategy, label %bb246 [
+ int 0, label %bb196
+ int 1, label %bb159
+ ]
+
+cond_next113: ; preds = %cond_true299
+ switch int %strategy, label %bb246 [
+ int 0, label %bb196
+ int 1, label %bb159
+ ]
+
+bb159: ; preds = %cond_next113, %bb94
+ ret void
+
+bb196: ; preds = %cond_next113, %bb94
+ %Rsave.0.3 = phi %struct.set_family* [ null, %bb94 ], [ null, %cond_next113 ] ; <%struct.set_family*> [#uses=0]
+ ret void
+
+bb246: ; preds = %cond_next113, %bb94
+ br label %bb314
+
+cond_true299: ; preds = %entry
+ %tmp55 = setgt int %strategy, 0 ; <bool> [#uses=1]
+ br bool %tmp55, label %bb94, label %cond_next113
+
+bb314: ; preds = %bb246, %entry
+ ret void
+}
diff --git a/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg3.ll b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg3.ll
new file mode 100644
index 00000000000..82e48b744ab
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg3.ll
@@ -0,0 +1,21 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -simplifycfg | llvm-dis | grep pass
+
+void %regtest(int %x) {
+entry:
+ %A = seteq int %x, 0
+ br bool %A, label %middle, label %after
+middle:
+ br label %after
+after:
+ %B = seteq int %x, 0
+ br bool %B, label %then, label %else
+then:
+ br label %end
+else:
+ call void (...)* %pass( )
+ br label %end
+end:
+ ret void
+}
+
+declare void %pass(...)
diff --git a/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg4.ll b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg4.ll
new file mode 100644
index 00000000000..3817e87cde9
--- /dev/null
+++ b/llvm/test/Transforms/PredicateSimplifier/predsimplify.reg4.ll
@@ -0,0 +1,36 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -predsimplify -disable-output
+
+; ModuleID = '<stdin>'
+target endian = little
+target pointersize = 32
+target triple = "i686-pc-linux-gnu"
+
+implementation ; Functions:
+
+void %f(int %x, int %y) {
+entry:
+ %tmp = seteq int %x, 10 ; <bool> [#uses=1]
+ %tmp.not = xor bool %tmp, true ; <bool> [#uses=1]
+ %tmp3 = seteq int %x, %y ; <bool> [#uses=1]
+ %bothcond = and bool %tmp.not, %tmp3 ; <bool> [#uses=1]
+ br bool %bothcond, label %cond_true4, label %return
+
+cond_true4: ; preds = %entry
+ switch int %y, label %return [
+ int 9, label %bb
+ int 10, label %bb6
+ ]
+
+bb: ; preds = %cond_true4
+ call void %g( int 9 )
+ ret void
+
+bb6: ; preds = %cond_true4
+ call void %g( int 10 )
+ ret void
+
+return: ; preds = %cond_true4, %entry
+ ret void
+}
+
+declare void %g(int)
OpenPOWER on IntegriCloud