diff options
| author | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
|---|---|---|
| committer | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
| commit | 83b3d8267225d585678d5d3af9bba5735f4b415d (patch) | |
| tree | 9d6c2ad7bfd568186e83a39e6f03e1c0bf415715 /llvm/test/Transforms/PredicateSimplifier | |
| parent | 100602d7561ca5e245db6194bddae86357d203d4 (diff) | |
| download | bcm5719-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')
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) |

