diff --git a/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll b/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll new file mode 100644 index 000000000000..4881b5558d56 --- /dev/null +++ b/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll @@ -0,0 +1,54 @@ +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep 'setlt' +; ModuleID = 'visible.bc' +target datalayout = "e-p:32:32" +target endian = little +target pointersize = 32 +target triple = "i686-pc-linux-gnu" + %struct.point = type { int, int } + +implementation ; Functions: + +int %visible(int %direction, long %p1.0, long %p2.0, long %p3.0) { +entry: + %p1_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + %p2_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + %p3_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + "alloca point" = bitcast int 0 to int ; [#uses=0] + %tmp = bitcast %struct.point* %p1_addr to { long }* ; <{ long }*> [#uses=1] + %tmp = getelementptr { long }* %tmp, uint 0, uint 0 ; [#uses=1] + store long %p1.0, long* %tmp + %tmp1 = bitcast %struct.point* %p2_addr to { long }* ; <{ long }*> [#uses=1] + %tmp2 = getelementptr { long }* %tmp1, uint 0, uint 0 ; [#uses=1] + store long %p2.0, long* %tmp2 + %tmp3 = bitcast %struct.point* %p3_addr to { long }* ; <{ long }*> [#uses=1] + %tmp4 = getelementptr { long }* %tmp3, uint 0, uint 0 ; [#uses=1] + store long %p3.0, long* %tmp4 + %tmp = seteq int %direction, 0 ; [#uses=1] + %tmp5 = bitcast %struct.point* %p1_addr to { long }* ; <{ long }*> [#uses=1] + %tmp6 = getelementptr { long }* %tmp5, uint 0, uint 0 ; [#uses=1] + %tmp = load long* %tmp6 ; [#uses=1] + %tmp7 = bitcast %struct.point* %p2_addr to { long }* ; <{ long }*> [#uses=1] + %tmp8 = getelementptr { long }* %tmp7, uint 0, uint 0 ; [#uses=1] + %tmp9 = load long* %tmp8 ; [#uses=1] + %tmp10 = bitcast %struct.point* %p3_addr to { long }* ; <{ long }*> [#uses=1] + %tmp11 = getelementptr { long }* %tmp10, uint 0, uint 0 ; [#uses=1] + %tmp12 = load long* %tmp11 ; [#uses=1] + %tmp13 = call int %determinant( long %tmp, long %tmp9, long %tmp12 ) ; [#uses=2] + br bool %tmp, label %cond_true, label %cond_false + +cond_true: ; preds = %entry + %tmp14 = setlt int %tmp13, 0 ; [#uses=1] + %tmp14 = zext bool %tmp14 to int ; [#uses=1] + br label %return + +cond_false: ; preds = %entry + %tmp26 = setgt int %tmp13, 0 ; [#uses=1] + %tmp26 = zext bool %tmp26 to int ; [#uses=1] + br label %return + +return: ; preds = %cond_false, %cond_true + %retval.0 = phi int [ %tmp14, %cond_true ], [ %tmp26, %cond_false ] ; [#uses=1] + ret int %retval.0 +} + +declare int %determinant(long, long, long) diff --git a/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Select-ICmp.ll b/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Select-ICmp.ll new file mode 100644 index 000000000000..647e15df98f5 --- /dev/null +++ b/llvm/test/Regression/Transforms/InstCombine/2006-12-08-Select-ICmp.ll @@ -0,0 +1,42 @@ +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep select +target datalayout = "e-p:32:32" +target endian = little +target pointersize = 32 +target triple = "i686-pc-linux-gnu" + %struct.point = type { int, int } + +implementation ; Functions: + +int %visible(int %direction, long %p1.0, long %p2.0, long %p3.0) { +entry: + %p1_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + %p2_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + %p3_addr = alloca %struct.point ; <%struct.point*> [#uses=2] + %tmp = bitcast %struct.point* %p1_addr to { long }* ; <{ long }*> [#uses=1] + %tmp = getelementptr { long }* %tmp, int 0, uint 0 ; [#uses=1] + store long %p1.0, long* %tmp + %tmp1 = bitcast %struct.point* %p2_addr to { long }* ; <{ long }*> [#uses=1] + %tmp2 = getelementptr { long }* %tmp1, int 0, uint 0 ; [#uses=1] + store long %p2.0, long* %tmp2 + %tmp3 = bitcast %struct.point* %p3_addr to { long }* ; <{ long }*> [#uses=1] + %tmp4 = getelementptr { long }* %tmp3, int 0, uint 0 ; [#uses=1] + store long %p3.0, long* %tmp4 + %tmp = seteq int %direction, 0 ; [#uses=1] + %tmp5 = bitcast %struct.point* %p1_addr to { long }* ; <{ long }*> [#uses=1] + %tmp6 = getelementptr { long }* %tmp5, int 0, uint 0 ; [#uses=1] + %tmp = load long* %tmp6 ; [#uses=1] + %tmp7 = bitcast %struct.point* %p2_addr to { long }* ; <{ long }*> [#uses=1] + %tmp8 = getelementptr { long }* %tmp7, int 0, uint 0 ; [#uses=1] + %tmp9 = load long* %tmp8 ; [#uses=1] + %tmp10 = bitcast %struct.point* %p3_addr to { long }* ; <{ long }*> [#uses=1] + %tmp11 = getelementptr { long }* %tmp10, int 0, uint 0 ; [#uses=1] + %tmp12 = load long* %tmp11 ; [#uses=1] + %tmp13 = call int %determinant( long %tmp, long %tmp9, long %tmp12 ) ; [#uses=2] + %tmp14 = setlt int %tmp13, 0 ; [#uses=1] + %tmp26 = setgt int %tmp13, 0 ; [#uses=1] + %retval.0.in = select bool %tmp, bool %tmp14, bool %tmp26 ; [#uses=1] + %retval.0 = zext bool %retval.0.in to int ; [#uses=1] + ret int %retval.0 +} + +declare int %determinant(long, long, long) diff --git a/llvm/test/Regression/Transforms/InstCombine/JavaCompare.ll b/llvm/test/Regression/Transforms/InstCombine/JavaCompare.ll index cce96097a01b..11f706e5662d 100644 --- a/llvm/test/Regression/Transforms/InstCombine/JavaCompare.ll +++ b/llvm/test/Regression/Transforms/InstCombine/JavaCompare.ll @@ -1,7 +1,7 @@ ; This is the sequence of stuff that the Java front-end expands for a single ; <= comparison. Check to make sure we turn it into a <= (only) -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep -v setle | not grep '#uses' +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep -v 'icmp sle'| not grep '#uses' bool %le(int %A, int %B) { %c1 = setgt int %A, %B;