mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 16:17:38 +00:00
Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change.
This update was done with the following bash script:
find test/Transforms -name "*.ll" | \
while read NAME; do
echo "$NAME"
if ! grep -q "^; *RUN: *llc" $NAME; then
TEMP=`mktemp -t temp`
cp $NAME $TEMP
sed -n "s/^define [^@]*@\([A-Za-z0-9_]*\)(.*$/\1/p" < $NAME | \
while read FUNC; do
sed -i '' "s/;\(.*\)\([A-Za-z0-9_]*\):\( *\)@$FUNC\([( ]*\)\$/;\1\2-LABEL:\3@$FUNC(/g" $TEMP
done
mv $TEMP $NAME
fi
done
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186268 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,28 +1,28 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i1 @add(i1 %x) {
|
||||
; CHECK: @add
|
||||
; CHECK-LABEL: @add(
|
||||
%z = add i1 %x, %x
|
||||
ret i1 %z
|
||||
; CHECK: ret i1 false
|
||||
}
|
||||
|
||||
define i1 @sub(i1 %x) {
|
||||
; CHECK: @sub
|
||||
; CHECK-LABEL: @sub(
|
||||
%z = sub i1 false, %x
|
||||
ret i1 %z
|
||||
; CHECK: ret i1 %x
|
||||
}
|
||||
|
||||
define i1 @mul(i1 %x) {
|
||||
; CHECK: @mul
|
||||
; CHECK-LABEL: @mul(
|
||||
%z = mul i1 %x, %x
|
||||
ret i1 %z
|
||||
; CHECK: ret i1 %x
|
||||
}
|
||||
|
||||
define i1 @ne(i1 %x) {
|
||||
; CHECK: @ne
|
||||
; CHECK-LABEL: @ne(
|
||||
%z = icmp ne i1 %x, 0
|
||||
ret i1 %z
|
||||
; CHECK: ret i1 %x
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i32 @factorize(i32 %x, i32 %y) {
|
||||
; CHECK: @factorize
|
||||
; CHECK-LABEL: @factorize(
|
||||
; (X | 1) & (X | 2) -> X | (1 & 2) -> X
|
||||
%l = or i32 %x, 1
|
||||
%r = or i32 %x, 2
|
||||
@@ -11,7 +11,7 @@ define i32 @factorize(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @factorize2(i32 %x) {
|
||||
; CHECK: @factorize2
|
||||
; CHECK-LABEL: @factorize2(
|
||||
; 3*X - 2*X -> X
|
||||
%l = mul i32 3, %x
|
||||
%r = mul i32 2, %x
|
||||
@@ -21,7 +21,7 @@ define i32 @factorize2(i32 %x) {
|
||||
}
|
||||
|
||||
define i32 @factorize3(i32 %x, i32 %a, i32 %b) {
|
||||
; CHECK: @factorize3
|
||||
; CHECK-LABEL: @factorize3(
|
||||
; (X | (A|B)) & (X | B) -> X | ((A|B) & B) -> X | B
|
||||
%aORb = or i32 %a, %b
|
||||
%l = or i32 %x, %aORb
|
||||
@@ -32,7 +32,7 @@ define i32 @factorize3(i32 %x, i32 %a, i32 %b) {
|
||||
}
|
||||
|
||||
define i32 @factorize4(i32 %x, i32 %y) {
|
||||
; CHECK: @factorize4
|
||||
; CHECK-LABEL: @factorize4(
|
||||
%sh = shl i32 %y, 1
|
||||
%ml = mul i32 %sh, %x
|
||||
%mr = mul i32 %x, %y
|
||||
@@ -42,7 +42,7 @@ define i32 @factorize4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @factorize5(i32 %x, i32 %y) {
|
||||
; CHECK: @factorize5
|
||||
; CHECK-LABEL: @factorize5(
|
||||
%sh = mul i32 %y, 2
|
||||
%ml = mul i32 %sh, %x
|
||||
%mr = mul i32 %x, %y
|
||||
@@ -52,7 +52,7 @@ define i32 @factorize5(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @expand(i32 %x) {
|
||||
; CHECK: @expand
|
||||
; CHECK-LABEL: @expand(
|
||||
; ((X & 1) | 2) & 1 -> ((X & 1) & 1) | (2 & 1) -> (X & 1) | 0 -> X & 1
|
||||
%a = and i32 %x, 1
|
||||
%b = or i32 %a, 2
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i32 @shift_select(i1 %cond) {
|
||||
; CHECK: @shift_select
|
||||
; CHECK-LABEL: @shift_select(
|
||||
%s = select i1 %cond, i32 0, i32 1
|
||||
%r = lshr i32 %s, 1
|
||||
ret i32 %r
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define <2 x i32> @sdiv(<2 x i32> %x) {
|
||||
; CHECK: @sdiv
|
||||
; CHECK-LABEL: @sdiv(
|
||||
%div = sdiv <2 x i32> %x, <i32 1, i32 1>
|
||||
ret <2 x i32> %div
|
||||
; CHECK: ret <2 x i32> %x
|
||||
|
||||
@@ -14,7 +14,7 @@ lpad:
|
||||
%exc_ptr2 = insertvalue { i8*, i32 } undef, i8* %exc_ptr, 0
|
||||
%filter2 = insertvalue { i8*, i32 } %exc_ptr2, i32 %filter, 1
|
||||
resume { i8*, i32 } %filter2
|
||||
; CHECK: @test1
|
||||
; CHECK-LABEL: @test1(
|
||||
; CHECK-NOT: extractvalue
|
||||
; CHECK-NOT: insertvalue
|
||||
}
|
||||
@@ -25,5 +25,5 @@ define { i8, i32 } @test2({ i8*, i32 } %x) {
|
||||
%ex = extractvalue { i8*, i32 } %x, 1
|
||||
%ins = insertvalue { i8, i32 } undef, i32 %ex, 1
|
||||
ret { i8, i32 } %ins
|
||||
; CHECK: @test2
|
||||
; CHECK-LABEL: @test2(
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i64 @pow2(i32 %x) {
|
||||
; CHECK: @pow2
|
||||
; CHECK-LABEL: @pow2(
|
||||
%negx = sub i32 0, %x
|
||||
%x2 = and i32 %x, %negx
|
||||
%e = zext i32 %x2 to i64
|
||||
@@ -12,7 +12,7 @@ define i64 @pow2(i32 %x) {
|
||||
}
|
||||
|
||||
define i64 @pow2b(i32 %x) {
|
||||
; CHECK: @pow2b
|
||||
; CHECK-LABEL: @pow2b(
|
||||
%sh = shl i32 2, %x
|
||||
%e = zext i32 %sh to i64
|
||||
%nege = sub i64 0, %e
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
declare {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a, i8 %b)
|
||||
|
||||
define i1 @test_uadd1() {
|
||||
; CHECK: @test_uadd1
|
||||
; CHECK-LABEL: @test_uadd1(
|
||||
%x = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 254, i8 3)
|
||||
%overflow = extractvalue {i8, i1} %x, 1
|
||||
ret i1 %overflow
|
||||
@@ -11,7 +11,7 @@ define i1 @test_uadd1() {
|
||||
}
|
||||
|
||||
define i8 @test_uadd2() {
|
||||
; CHECK: @test_uadd2
|
||||
; CHECK-LABEL: @test_uadd2(
|
||||
%x = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 254, i8 44)
|
||||
%result = extractvalue {i8, i1} %x, 0
|
||||
ret i8 %result
|
||||
@@ -21,7 +21,7 @@ define i8 @test_uadd2() {
|
||||
declare i256 @llvm.cttz.i256(i256 %src, i1 %is_zero_undef)
|
||||
|
||||
define i256 @test_cttz() {
|
||||
; CHECK: @test_cttz
|
||||
; CHECK-LABEL: @test_cttz(
|
||||
%x = call i256 @llvm.cttz.i256(i256 10, i1 false)
|
||||
ret i256 %x
|
||||
; CHECK-NEXT: ret i256 1
|
||||
@@ -30,7 +30,7 @@ define i256 @test_cttz() {
|
||||
declare i256 @llvm.ctpop.i256(i256 %src)
|
||||
|
||||
define i256 @test_ctpop() {
|
||||
; CHECK: @test_ctpop
|
||||
; CHECK-LABEL: @test_ctpop(
|
||||
%x = call i256 @llvm.ctpop.i256(i256 10)
|
||||
ret i256 %x
|
||||
; CHECK-NEXT: ret i256 2
|
||||
@@ -40,7 +40,7 @@ define i256 @test_ctpop() {
|
||||
declare float @fabs(float %x)
|
||||
|
||||
define float @test_fabs_libcall() {
|
||||
; CHECK: @test_fabs_libcall
|
||||
; CHECK-LABEL: @test_fabs_libcall(
|
||||
|
||||
%x = call float @fabs(float -42.0)
|
||||
; This is still a real function call, so instsimplify won't nuke it -- other
|
||||
@@ -61,7 +61,7 @@ declare float @llvm.nearbyint.f32(float) nounwind readnone
|
||||
|
||||
; Test idempotent intrinsics
|
||||
define float @test_idempotence(float %a) {
|
||||
; CHECK: @test_idempotence
|
||||
; CHECK-LABEL: @test_idempotence(
|
||||
|
||||
; CHECK: fabs
|
||||
; CHECK-NOT: fabs
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
target datalayout = "p:32:32"
|
||||
|
||||
define i1 @ptrtoint() {
|
||||
; CHECK: @ptrtoint
|
||||
; CHECK-LABEL: @ptrtoint(
|
||||
%a = alloca i8
|
||||
%tmp = ptrtoint i8* %a to i32
|
||||
%r = icmp eq i32 %tmp, 0
|
||||
@@ -11,7 +11,7 @@ define i1 @ptrtoint() {
|
||||
}
|
||||
|
||||
define i1 @bitcast() {
|
||||
; CHECK: @bitcast
|
||||
; CHECK-LABEL: @bitcast(
|
||||
%a = alloca i32
|
||||
%b = alloca i64
|
||||
%x = bitcast i32* %a to i8*
|
||||
@@ -22,7 +22,7 @@ define i1 @bitcast() {
|
||||
}
|
||||
|
||||
define i1 @gep() {
|
||||
; CHECK: @gep
|
||||
; CHECK-LABEL: @gep(
|
||||
%a = alloca [3 x i8], align 8
|
||||
%x = getelementptr inbounds [3 x i8]* %a, i32 0, i32 0
|
||||
%cmp = icmp eq i8* %x, null
|
||||
@@ -31,7 +31,7 @@ define i1 @gep() {
|
||||
}
|
||||
|
||||
define i1 @gep2() {
|
||||
; CHECK: @gep2
|
||||
; CHECK-LABEL: @gep2(
|
||||
%a = alloca [3 x i8], align 8
|
||||
%x = getelementptr inbounds [3 x i8]* %a, i32 0, i32 0
|
||||
%y = getelementptr inbounds [3 x i8]* %a, i32 0, i32 0
|
||||
@@ -46,7 +46,7 @@ define i1 @gep2() {
|
||||
@gepz = extern_weak global %gept
|
||||
|
||||
define i1 @gep3() {
|
||||
; CHECK: @gep3
|
||||
; CHECK-LABEL: @gep3(
|
||||
%x = alloca %gept, align 8
|
||||
%a = getelementptr %gept* %x, i64 0, i32 0
|
||||
%b = getelementptr %gept* %x, i64 0, i32 1
|
||||
@@ -56,7 +56,7 @@ define i1 @gep3() {
|
||||
}
|
||||
|
||||
define i1 @gep4() {
|
||||
; CHECK: @gep4
|
||||
; CHECK-LABEL: @gep4(
|
||||
%x = alloca %gept, align 8
|
||||
%a = getelementptr %gept* @gepy, i64 0, i32 0
|
||||
%b = getelementptr %gept* @gepy, i64 0, i32 1
|
||||
@@ -66,7 +66,7 @@ define i1 @gep4() {
|
||||
}
|
||||
|
||||
define i1 @gep5() {
|
||||
; CHECK: @gep5
|
||||
; CHECK-LABEL: @gep5(
|
||||
%x = alloca %gept, align 8
|
||||
%a = getelementptr inbounds %gept* %x, i64 0, i32 1
|
||||
%b = getelementptr %gept* @gepy, i64 0, i32 0
|
||||
@@ -77,7 +77,7 @@ define i1 @gep5() {
|
||||
|
||||
define i1 @gep6(%gept* %x) {
|
||||
; Same as @gep3 but potentially null.
|
||||
; CHECK: @gep6
|
||||
; CHECK-LABEL: @gep6(
|
||||
%a = getelementptr %gept* %x, i64 0, i32 0
|
||||
%b = getelementptr %gept* %x, i64 0, i32 1
|
||||
%equal = icmp eq i32* %a, %b
|
||||
@@ -86,7 +86,7 @@ define i1 @gep6(%gept* %x) {
|
||||
}
|
||||
|
||||
define i1 @gep7(%gept* %x) {
|
||||
; CHECK: @gep7
|
||||
; CHECK-LABEL: @gep7(
|
||||
%a = getelementptr %gept* %x, i64 0, i32 0
|
||||
%b = getelementptr %gept* @gepz, i64 0, i32 0
|
||||
%equal = icmp eq i32* %a, %b
|
||||
@@ -95,7 +95,7 @@ define i1 @gep7(%gept* %x) {
|
||||
}
|
||||
|
||||
define i1 @gep8(%gept* %x) {
|
||||
; CHECK: @gep8
|
||||
; CHECK-LABEL: @gep8(
|
||||
%a = getelementptr %gept* %x, i32 1
|
||||
%b = getelementptr %gept* %x, i32 -1
|
||||
%equal = icmp ugt %gept* %a, %b
|
||||
@@ -104,7 +104,7 @@ define i1 @gep8(%gept* %x) {
|
||||
}
|
||||
|
||||
define i1 @gep9(i8* %ptr) {
|
||||
; CHECK: @gep9
|
||||
; CHECK-LABEL: @gep9(
|
||||
; CHECK-NOT: ret
|
||||
; CHECK: ret i1 true
|
||||
|
||||
@@ -124,7 +124,7 @@ entry:
|
||||
}
|
||||
|
||||
define i1 @gep10(i8* %ptr) {
|
||||
; CHECK: @gep10
|
||||
; CHECK-LABEL: @gep10(
|
||||
; CHECK-NOT: ret
|
||||
; CHECK: ret i1 true
|
||||
|
||||
@@ -140,7 +140,7 @@ entry:
|
||||
}
|
||||
|
||||
define i1 @gep11(i8* %ptr) {
|
||||
; CHECK: @gep11
|
||||
; CHECK-LABEL: @gep11(
|
||||
; CHECK-NOT: ret
|
||||
; CHECK: ret i1 true
|
||||
|
||||
@@ -153,7 +153,7 @@ entry:
|
||||
}
|
||||
|
||||
define i1 @gep12(i8* %ptr) {
|
||||
; CHECK: @gep12
|
||||
; CHECK-LABEL: @gep12(
|
||||
; CHECK-NOT: ret
|
||||
; CHECK: ret i1 %cmp
|
||||
|
||||
@@ -166,7 +166,7 @@ entry:
|
||||
}
|
||||
|
||||
define i1 @gep13(i8* %ptr) {
|
||||
; CHECK: @gep13
|
||||
; CHECK-LABEL: @gep13(
|
||||
; We can prove this GEP is non-null because it is inbounds.
|
||||
%x = getelementptr inbounds i8* %ptr, i32 1
|
||||
%cmp = icmp eq i8* %x, null
|
||||
@@ -175,7 +175,7 @@ define i1 @gep13(i8* %ptr) {
|
||||
}
|
||||
|
||||
define i1 @gep14({ {}, i8 }* %ptr) {
|
||||
; CHECK: @gep14
|
||||
; CHECK-LABEL: @gep14(
|
||||
; We can't simplify this because the offset of one in the GEP actually doesn't
|
||||
; move the pointer.
|
||||
%x = getelementptr inbounds { {}, i8 }* %ptr, i32 0, i32 1
|
||||
@@ -185,7 +185,7 @@ define i1 @gep14({ {}, i8 }* %ptr) {
|
||||
}
|
||||
|
||||
define i1 @gep15({ {}, [4 x {i8, i8}]}* %ptr, i32 %y) {
|
||||
; CHECK: @gep15
|
||||
; CHECK-LABEL: @gep15(
|
||||
; We can prove this GEP is non-null even though there is a user value, as we
|
||||
; would necessarily violate inbounds on one side or the other.
|
||||
%x = getelementptr inbounds { {}, [4 x {i8, i8}]}* %ptr, i32 0, i32 1, i32 %y, i32 1
|
||||
@@ -195,7 +195,7 @@ define i1 @gep15({ {}, [4 x {i8, i8}]}* %ptr, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @gep16(i8* %ptr, i32 %a) {
|
||||
; CHECK: @gep16
|
||||
; CHECK-LABEL: @gep16(
|
||||
; We can prove this GEP is non-null because it is inbounds and because we know
|
||||
; %b is non-zero even though we don't know its value.
|
||||
%b = or i32 %a, 1
|
||||
@@ -206,7 +206,7 @@ define i1 @gep16(i8* %ptr, i32 %a) {
|
||||
}
|
||||
|
||||
define i1 @zext(i32 %x) {
|
||||
; CHECK: @zext
|
||||
; CHECK-LABEL: @zext(
|
||||
%e1 = zext i32 %x to i64
|
||||
%e2 = zext i32 %x to i64
|
||||
%r = icmp eq i64 %e1, %e2
|
||||
@@ -215,7 +215,7 @@ define i1 @zext(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @zext2(i1 %x) {
|
||||
; CHECK: @zext2
|
||||
; CHECK-LABEL: @zext2(
|
||||
%e = zext i1 %x to i32
|
||||
%c = icmp ne i32 %e, 0
|
||||
ret i1 %c
|
||||
@@ -223,7 +223,7 @@ define i1 @zext2(i1 %x) {
|
||||
}
|
||||
|
||||
define i1 @zext3() {
|
||||
; CHECK: @zext3
|
||||
; CHECK-LABEL: @zext3(
|
||||
%e = zext i1 1 to i32
|
||||
%c = icmp ne i32 %e, 0
|
||||
ret i1 %c
|
||||
@@ -231,7 +231,7 @@ define i1 @zext3() {
|
||||
}
|
||||
|
||||
define i1 @sext(i32 %x) {
|
||||
; CHECK: @sext
|
||||
; CHECK-LABEL: @sext(
|
||||
%e1 = sext i32 %x to i64
|
||||
%e2 = sext i32 %x to i64
|
||||
%r = icmp eq i64 %e1, %e2
|
||||
@@ -240,7 +240,7 @@ define i1 @sext(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @sext2(i1 %x) {
|
||||
; CHECK: @sext2
|
||||
; CHECK-LABEL: @sext2(
|
||||
%e = sext i1 %x to i32
|
||||
%c = icmp ne i32 %e, 0
|
||||
ret i1 %c
|
||||
@@ -248,7 +248,7 @@ define i1 @sext2(i1 %x) {
|
||||
}
|
||||
|
||||
define i1 @sext3() {
|
||||
; CHECK: @sext3
|
||||
; CHECK-LABEL: @sext3(
|
||||
%e = sext i1 1 to i32
|
||||
%c = icmp ne i32 %e, 0
|
||||
ret i1 %c
|
||||
@@ -256,7 +256,7 @@ define i1 @sext3() {
|
||||
}
|
||||
|
||||
define i1 @add(i32 %x, i32 %y) {
|
||||
; CHECK: @add
|
||||
; CHECK-LABEL: @add(
|
||||
%l = lshr i32 %x, 1
|
||||
%q = lshr i32 %y, 1
|
||||
%r = or i32 %q, 1
|
||||
@@ -267,7 +267,7 @@ define i1 @add(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @add2(i8 %x, i8 %y) {
|
||||
; CHECK: @add2
|
||||
; CHECK-LABEL: @add2(
|
||||
%l = or i8 %x, 128
|
||||
%r = or i8 %y, 129
|
||||
%s = add i8 %l, %r
|
||||
@@ -277,7 +277,7 @@ define i1 @add2(i8 %x, i8 %y) {
|
||||
}
|
||||
|
||||
define i1 @add3(i8 %x, i8 %y) {
|
||||
; CHECK: @add3
|
||||
; CHECK-LABEL: @add3(
|
||||
%l = zext i8 %x to i32
|
||||
%r = zext i8 %y to i32
|
||||
%s = add i32 %l, %r
|
||||
@@ -287,7 +287,7 @@ define i1 @add3(i8 %x, i8 %y) {
|
||||
}
|
||||
|
||||
define i1 @add4(i32 %x, i32 %y) {
|
||||
; CHECK: @add4
|
||||
; CHECK-LABEL: @add4(
|
||||
%z = add nsw i32 %y, 1
|
||||
%s1 = add nsw i32 %x, %y
|
||||
%s2 = add nsw i32 %x, %z
|
||||
@@ -297,7 +297,7 @@ define i1 @add4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @add5(i32 %x, i32 %y) {
|
||||
; CHECK: @add5
|
||||
; CHECK-LABEL: @add5(
|
||||
%z = add nuw i32 %y, 1
|
||||
%s1 = add nuw i32 %x, %z
|
||||
%s2 = add nuw i32 %x, %y
|
||||
@@ -307,7 +307,7 @@ define i1 @add5(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @add6(i64 %A, i64 %B) {
|
||||
; CHECK: @add6
|
||||
; CHECK-LABEL: @add6(
|
||||
%s1 = add i64 %A, %B
|
||||
%s2 = add i64 %B, %A
|
||||
%cmp = icmp eq i64 %s1, %s2
|
||||
@@ -316,7 +316,7 @@ define i1 @add6(i64 %A, i64 %B) {
|
||||
}
|
||||
|
||||
define i1 @addpowtwo(i32 %x, i32 %y) {
|
||||
; CHECK: @addpowtwo
|
||||
; CHECK-LABEL: @addpowtwo(
|
||||
%l = lshr i32 %x, 1
|
||||
%r = shl i32 1, %y
|
||||
%s = add i32 %l, %r
|
||||
@@ -326,7 +326,7 @@ define i1 @addpowtwo(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @or(i32 %x) {
|
||||
; CHECK: @or
|
||||
; CHECK-LABEL: @or(
|
||||
%o = or i32 %x, 1
|
||||
%c = icmp eq i32 %o, 0
|
||||
ret i1 %c
|
||||
@@ -334,7 +334,7 @@ define i1 @or(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @shl(i32 %x) {
|
||||
; CHECK: @shl
|
||||
; CHECK-LABEL: @shl(
|
||||
%s = shl i32 1, %x
|
||||
%c = icmp eq i32 %s, 0
|
||||
ret i1 %c
|
||||
@@ -342,7 +342,7 @@ define i1 @shl(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @lshr1(i32 %x) {
|
||||
; CHECK: @lshr1
|
||||
; CHECK-LABEL: @lshr1(
|
||||
%s = lshr i32 -1, %x
|
||||
%c = icmp eq i32 %s, 0
|
||||
ret i1 %c
|
||||
@@ -350,7 +350,7 @@ define i1 @lshr1(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @lshr2(i32 %x) {
|
||||
; CHECK: @lshr2
|
||||
; CHECK-LABEL: @lshr2(
|
||||
%s = lshr i32 %x, 30
|
||||
%c = icmp ugt i32 %s, 8
|
||||
ret i1 %c
|
||||
@@ -358,7 +358,7 @@ define i1 @lshr2(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @lshr3(i32 %x) {
|
||||
; CHECK: @lshr3
|
||||
; CHECK-LABEL: @lshr3(
|
||||
%s = lshr i32 %x, %x
|
||||
%c = icmp eq i32 %s, 0
|
||||
ret i1 %c
|
||||
@@ -366,7 +366,7 @@ define i1 @lshr3(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @ashr1(i32 %x) {
|
||||
; CHECK: @ashr1
|
||||
; CHECK-LABEL: @ashr1(
|
||||
%s = ashr i32 -1, %x
|
||||
%c = icmp eq i32 %s, 0
|
||||
ret i1 %c
|
||||
@@ -374,7 +374,7 @@ define i1 @ashr1(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @ashr2(i32 %x) {
|
||||
; CHECK: @ashr2
|
||||
; CHECK-LABEL: @ashr2(
|
||||
%s = ashr i32 %x, 30
|
||||
%c = icmp slt i32 %s, -5
|
||||
ret i1 %c
|
||||
@@ -382,7 +382,7 @@ define i1 @ashr2(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @ashr3(i32 %x) {
|
||||
; CHECK: @ashr3
|
||||
; CHECK-LABEL: @ashr3(
|
||||
%s = ashr i32 %x, %x
|
||||
%c = icmp eq i32 %s, 0
|
||||
ret i1 %c
|
||||
@@ -390,7 +390,7 @@ define i1 @ashr3(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @select1(i1 %cond) {
|
||||
; CHECK: @select1
|
||||
; CHECK-LABEL: @select1(
|
||||
%s = select i1 %cond, i32 1, i32 0
|
||||
%c = icmp eq i32 %s, 1
|
||||
ret i1 %c
|
||||
@@ -398,7 +398,7 @@ define i1 @select1(i1 %cond) {
|
||||
}
|
||||
|
||||
define i1 @select2(i1 %cond) {
|
||||
; CHECK: @select2
|
||||
; CHECK-LABEL: @select2(
|
||||
%x = zext i1 %cond to i32
|
||||
%s = select i1 %cond, i32 %x, i32 0
|
||||
%c = icmp ne i32 %s, 0
|
||||
@@ -407,7 +407,7 @@ define i1 @select2(i1 %cond) {
|
||||
}
|
||||
|
||||
define i1 @select3(i1 %cond) {
|
||||
; CHECK: @select3
|
||||
; CHECK-LABEL: @select3(
|
||||
%x = zext i1 %cond to i32
|
||||
%s = select i1 %cond, i32 1, i32 %x
|
||||
%c = icmp ne i32 %s, 0
|
||||
@@ -416,7 +416,7 @@ define i1 @select3(i1 %cond) {
|
||||
}
|
||||
|
||||
define i1 @select4(i1 %cond) {
|
||||
; CHECK: @select4
|
||||
; CHECK-LABEL: @select4(
|
||||
%invert = xor i1 %cond, 1
|
||||
%s = select i1 %invert, i32 0, i32 1
|
||||
%c = icmp ne i32 %s, 0
|
||||
@@ -425,7 +425,7 @@ define i1 @select4(i1 %cond) {
|
||||
}
|
||||
|
||||
define i1 @select5(i32 %x) {
|
||||
; CHECK: @select5
|
||||
; CHECK-LABEL: @select5(
|
||||
%c = icmp eq i32 %x, 0
|
||||
%s = select i1 %c, i32 1, i32 %x
|
||||
%c2 = icmp eq i32 %s, 0
|
||||
@@ -434,7 +434,7 @@ define i1 @select5(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @select6(i32 %x) {
|
||||
; CHECK: @select6
|
||||
; CHECK-LABEL: @select6(
|
||||
%c = icmp sgt i32 %x, 0
|
||||
%s = select i1 %c, i32 %x, i32 4
|
||||
%c2 = icmp eq i32 %s, 0
|
||||
@@ -443,7 +443,7 @@ define i1 @select6(i32 %x) {
|
||||
}
|
||||
|
||||
define i1 @urem1(i32 %X, i32 %Y) {
|
||||
; CHECK: @urem1
|
||||
; CHECK-LABEL: @urem1(
|
||||
%A = urem i32 %X, %Y
|
||||
%B = icmp ult i32 %A, %Y
|
||||
ret i1 %B
|
||||
@@ -451,7 +451,7 @@ define i1 @urem1(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @urem2(i32 %X, i32 %Y) {
|
||||
; CHECK: @urem2
|
||||
; CHECK-LABEL: @urem2(
|
||||
%A = urem i32 %X, %Y
|
||||
%B = icmp eq i32 %A, %Y
|
||||
ret i1 %B
|
||||
@@ -459,7 +459,7 @@ define i1 @urem2(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @urem3(i32 %X) {
|
||||
; CHECK: @urem3
|
||||
; CHECK-LABEL: @urem3(
|
||||
%A = urem i32 %X, 10
|
||||
%B = icmp ult i32 %A, 15
|
||||
ret i1 %B
|
||||
@@ -467,7 +467,7 @@ define i1 @urem3(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @urem4(i32 %X) {
|
||||
; CHECK: @urem4
|
||||
; CHECK-LABEL: @urem4(
|
||||
%A = urem i32 %X, 15
|
||||
%B = icmp ult i32 %A, 10
|
||||
ret i1 %B
|
||||
@@ -475,7 +475,7 @@ define i1 @urem4(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @urem5(i16 %X, i32 %Y) {
|
||||
; CHECK: @urem5
|
||||
; CHECK-LABEL: @urem5(
|
||||
%A = zext i16 %X to i32
|
||||
%B = urem i32 %A, %Y
|
||||
%C = icmp slt i32 %B, %Y
|
||||
@@ -484,7 +484,7 @@ define i1 @urem5(i16 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @urem6(i32 %X, i32 %Y) {
|
||||
; CHECK: @urem6
|
||||
; CHECK-LABEL: @urem6(
|
||||
%A = urem i32 %X, %Y
|
||||
%B = icmp ugt i32 %Y, %A
|
||||
ret i1 %B
|
||||
@@ -492,7 +492,7 @@ define i1 @urem6(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @urem7(i32 %X) {
|
||||
; CHECK: @urem7
|
||||
; CHECK-LABEL: @urem7(
|
||||
%A = urem i32 1, %X
|
||||
%B = icmp sgt i32 %A, %X
|
||||
ret i1 %B
|
||||
@@ -500,7 +500,7 @@ define i1 @urem7(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @srem1(i32 %X) {
|
||||
; CHECK: @srem1
|
||||
; CHECK-LABEL: @srem1(
|
||||
%A = srem i32 %X, -5
|
||||
%B = icmp sgt i32 %A, 5
|
||||
ret i1 %B
|
||||
@@ -508,7 +508,7 @@ define i1 @srem1(i32 %X) {
|
||||
}
|
||||
|
||||
; PR9343 #15
|
||||
; CHECK: @srem2
|
||||
; CHECK-LABEL: @srem2(
|
||||
; CHECK: ret i1 false
|
||||
define i1 @srem2(i16 %X, i32 %Y) {
|
||||
%A = zext i16 %X to i32
|
||||
@@ -518,7 +518,7 @@ define i1 @srem2(i16 %X, i32 %Y) {
|
||||
ret i1 %D
|
||||
}
|
||||
|
||||
; CHECK: @srem3
|
||||
; CHECK-LABEL: @srem3(
|
||||
; CHECK-NEXT: ret i1 false
|
||||
define i1 @srem3(i16 %X, i32 %Y) {
|
||||
%A = zext i16 %X to i32
|
||||
@@ -530,7 +530,7 @@ define i1 @srem3(i16 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @udiv1(i32 %X) {
|
||||
; CHECK: @udiv1
|
||||
; CHECK-LABEL: @udiv1(
|
||||
%A = udiv i32 %X, 1000000
|
||||
%B = icmp ult i32 %A, 5000
|
||||
ret i1 %B
|
||||
@@ -538,7 +538,7 @@ define i1 @udiv1(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @udiv2(i32 %X, i32 %Y, i32 %Z) {
|
||||
; CHECK: @udiv2
|
||||
; CHECK-LABEL: @udiv2(
|
||||
%A = udiv exact i32 10, %Z
|
||||
%B = udiv exact i32 20, %Z
|
||||
%C = icmp ult i32 %A, %B
|
||||
@@ -547,7 +547,7 @@ define i1 @udiv2(i32 %X, i32 %Y, i32 %Z) {
|
||||
}
|
||||
|
||||
define i1 @udiv3(i32 %X, i32 %Y) {
|
||||
; CHECK: @udiv3
|
||||
; CHECK-LABEL: @udiv3(
|
||||
%A = udiv i32 %X, %Y
|
||||
%C = icmp ugt i32 %A, %X
|
||||
ret i1 %C
|
||||
@@ -555,7 +555,7 @@ define i1 @udiv3(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @udiv4(i32 %X, i32 %Y) {
|
||||
; CHECK: @udiv4
|
||||
; CHECK-LABEL: @udiv4(
|
||||
%A = udiv i32 %X, %Y
|
||||
%C = icmp ule i32 %A, %X
|
||||
ret i1 %C
|
||||
@@ -563,7 +563,7 @@ define i1 @udiv4(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define i1 @udiv5(i32 %X) {
|
||||
; CHECK: @udiv5
|
||||
; CHECK-LABEL: @udiv5(
|
||||
%A = udiv i32 123, %X
|
||||
%C = icmp ugt i32 %A, 124
|
||||
ret i1 %C
|
||||
@@ -572,7 +572,7 @@ define i1 @udiv5(i32 %X) {
|
||||
|
||||
; PR11340
|
||||
define i1 @udiv6(i32 %X) nounwind {
|
||||
; CHECK: @udiv6
|
||||
; CHECK-LABEL: @udiv6(
|
||||
%A = udiv i32 1, %X
|
||||
%C = icmp eq i32 %A, 0
|
||||
ret i1 %C
|
||||
@@ -581,7 +581,7 @@ define i1 @udiv6(i32 %X) nounwind {
|
||||
|
||||
|
||||
define i1 @sdiv1(i32 %X) {
|
||||
; CHECK: @sdiv1
|
||||
; CHECK-LABEL: @sdiv1(
|
||||
%A = sdiv i32 %X, 1000000
|
||||
%B = icmp slt i32 %A, 3000
|
||||
ret i1 %B
|
||||
@@ -589,7 +589,7 @@ define i1 @sdiv1(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @or1(i32 %X) {
|
||||
; CHECK: @or1
|
||||
; CHECK-LABEL: @or1(
|
||||
%A = or i32 %X, 62
|
||||
%B = icmp ult i32 %A, 50
|
||||
ret i1 %B
|
||||
@@ -597,7 +597,7 @@ define i1 @or1(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @and1(i32 %X) {
|
||||
; CHECK: @and1
|
||||
; CHECK-LABEL: @and1(
|
||||
%A = and i32 %X, 62
|
||||
%B = icmp ugt i32 %A, 70
|
||||
ret i1 %B
|
||||
@@ -605,7 +605,7 @@ define i1 @and1(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @mul1(i32 %X) {
|
||||
; CHECK: @mul1
|
||||
; CHECK-LABEL: @mul1(
|
||||
; Square of a non-zero number is non-zero if there is no overflow.
|
||||
%Y = or i32 %X, 1
|
||||
%M = mul nuw i32 %Y, %Y
|
||||
@@ -615,7 +615,7 @@ define i1 @mul1(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @mul2(i32 %X) {
|
||||
; CHECK: @mul2
|
||||
; CHECK-LABEL: @mul2(
|
||||
; Square of a non-zero number is positive if there is no signed overflow.
|
||||
%Y = or i32 %X, 1
|
||||
%M = mul nsw i32 %Y, %Y
|
||||
@@ -625,7 +625,7 @@ define i1 @mul2(i32 %X) {
|
||||
}
|
||||
|
||||
define i1 @mul3(i32 %X, i32 %Y) {
|
||||
; CHECK: @mul3
|
||||
; CHECK-LABEL: @mul3(
|
||||
; Product of non-negative numbers is non-negative if there is no signed overflow.
|
||||
%XX = mul nsw i32 %X, %X
|
||||
%YY = mul nsw i32 %Y, %Y
|
||||
@@ -636,7 +636,7 @@ define i1 @mul3(i32 %X, i32 %Y) {
|
||||
}
|
||||
|
||||
define <2 x i1> @vectorselect1(<2 x i1> %cond) {
|
||||
; CHECK: @vectorselect1
|
||||
; CHECK-LABEL: @vectorselect1(
|
||||
%invert = xor <2 x i1> %cond, <i1 1, i1 1>
|
||||
%s = select <2 x i1> %invert, <2 x i32> <i32 0, i32 0>, <2 x i32> <i32 1, i32 1>
|
||||
%c = icmp ne <2 x i32> %s, <i32 0, i32 0>
|
||||
@@ -708,7 +708,7 @@ define zeroext i1 @external_compare(i32* noalias %x) {
|
||||
}
|
||||
|
||||
define i1 @alloca_gep(i64 %a, i64 %b) {
|
||||
; CHECK: @alloca_gep
|
||||
; CHECK-LABEL: @alloca_gep(
|
||||
; We can prove this GEP is non-null because it is inbounds and the pointer
|
||||
; is non-null.
|
||||
%strs = alloca [1000 x [1001 x i8]], align 16
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
; PR8862
|
||||
|
||||
; CHECK: @shift1
|
||||
; CHECK-LABEL: @shift1(
|
||||
; CHECK: ret i32 %A
|
||||
define i32 @shift1(i32 %A, i32 %B) {
|
||||
%C = lshr exact i32 %A, %B
|
||||
@@ -10,7 +10,7 @@ define i32 @shift1(i32 %A, i32 %B) {
|
||||
ret i32 %D
|
||||
}
|
||||
|
||||
; CHECK: @shift2
|
||||
; CHECK-LABEL: @shift2(
|
||||
; CHECK: lshr
|
||||
; CHECK: ret i32 %D
|
||||
define i32 @shift2(i32 %A, i32 %B) {
|
||||
@@ -19,7 +19,7 @@ define i32 @shift2(i32 %A, i32 %B) {
|
||||
ret i32 %D
|
||||
}
|
||||
|
||||
; CHECK: @shift3
|
||||
; CHECK-LABEL: @shift3(
|
||||
; CHECK: ret i32 %A
|
||||
define i32 @shift3(i32 %A, i32 %B) {
|
||||
%C = ashr exact i32 %A, %B
|
||||
@@ -27,7 +27,7 @@ define i32 @shift3(i32 %A, i32 %B) {
|
||||
ret i32 %D
|
||||
}
|
||||
|
||||
; CHECK: @shift4
|
||||
; CHECK-LABEL: @shift4(
|
||||
; CHECK: ret i32 %A
|
||||
define i32 @shift4(i32 %A, i32 %B) {
|
||||
%C = shl nuw i32 %A, %B
|
||||
@@ -35,7 +35,7 @@ define i32 @shift4(i32 %A, i32 %B) {
|
||||
ret i32 %D
|
||||
}
|
||||
|
||||
; CHECK: @shift5
|
||||
; CHECK-LABEL: @shift5(
|
||||
; CHECK: ret i32 %A
|
||||
define i32 @shift5(i32 %A, i32 %B) {
|
||||
%C = shl nsw i32 %A, %B
|
||||
|
||||
@@ -71,7 +71,7 @@ define float @fadd_fsub_0(float %a) {
|
||||
}
|
||||
|
||||
; fsub nnan ninf x, x ==> 0.0
|
||||
; CHECK: @fsub_x_x
|
||||
; CHECK-LABEL: @fsub_x_x(
|
||||
define float @fsub_x_x(float %a) {
|
||||
; X - X ==> 0
|
||||
%zero1 = fsub nnan ninf float %a, %a
|
||||
@@ -92,7 +92,7 @@ define float @fsub_x_x(float %a) {
|
||||
}
|
||||
|
||||
; fadd nsz X, 0 ==> X
|
||||
; CHECK: @nofold_fadd_x_0
|
||||
; CHECK-LABEL: @nofold_fadd_x_0(
|
||||
define float @nofold_fadd_x_0(float %a) {
|
||||
; Dont fold
|
||||
; CHECK: %no_zero1 = fadd
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define double @fdiv_of_undef(double %X) {
|
||||
; CHECK: @fdiv_of_undef
|
||||
; CHECK-LABEL: @fdiv_of_undef(
|
||||
; undef / X -> undef
|
||||
%r = fdiv double undef, %X
|
||||
ret double %r
|
||||
@@ -9,7 +9,7 @@ define double @fdiv_of_undef(double %X) {
|
||||
}
|
||||
|
||||
define double @fdiv_by_undef(double %X) {
|
||||
; CHECK: @fdiv_by_undef
|
||||
; CHECK-LABEL: @fdiv_by_undef(
|
||||
; X / undef -> undef
|
||||
%r = fdiv double %X, undef
|
||||
ret double %r
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
; fsub 0, (fsub 0, X) ==> X
|
||||
; CHECK: @fsub_0_0_x
|
||||
; CHECK-LABEL: @fsub_0_0_x(
|
||||
define float @fsub_0_0_x(float %a) {
|
||||
%t1 = fsub float -0.0, %a
|
||||
%ret = fsub float -0.0, %t1
|
||||
@@ -11,7 +11,7 @@ define float @fsub_0_0_x(float %a) {
|
||||
}
|
||||
|
||||
; fsub X, 0 ==> X
|
||||
; CHECK: @fsub_x_0
|
||||
; CHECK-LABEL: @fsub_x_0(
|
||||
define float @fsub_x_0(float %a) {
|
||||
%ret = fsub float %a, 0.0
|
||||
; CHECK: ret float %a
|
||||
@@ -19,7 +19,7 @@ define float @fsub_x_0(float %a) {
|
||||
}
|
||||
|
||||
; fadd X, -0 ==> X
|
||||
; CHECK: @fadd_x_n0
|
||||
; CHECK-LABEL: @fadd_x_n0(
|
||||
define float @fadd_x_n0(float %a) {
|
||||
%ret = fadd float %a, -0.0
|
||||
; CHECK: ret float %a
|
||||
@@ -27,7 +27,7 @@ define float @fadd_x_n0(float %a) {
|
||||
}
|
||||
|
||||
; fmul X, 1.0 ==> X
|
||||
; CHECK: @fmul_X_1
|
||||
; CHECK-LABEL: @fmul_X_1(
|
||||
define double @fmul_X_1(double %a) {
|
||||
%b = fmul double 1.000000e+00, %a ; <double> [#uses=1]
|
||||
; CHECK: ret double %a
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i1 @max1(i32 %x, i32 %y) {
|
||||
; CHECK: @max1
|
||||
; CHECK-LABEL: @max1(
|
||||
%c = icmp sgt i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp slt i32 %m, %x
|
||||
@@ -10,7 +10,7 @@ define i1 @max1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max2(i32 %x, i32 %y) {
|
||||
; CHECK: @max2
|
||||
; CHECK-LABEL: @max2(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp sge i32 %m, %x
|
||||
@@ -19,7 +19,7 @@ define i1 @max2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max3(i32 %x, i32 %y) {
|
||||
; CHECK: @max3
|
||||
; CHECK-LABEL: @max3(
|
||||
%c = icmp ugt i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp ult i32 %m, %x
|
||||
@@ -28,7 +28,7 @@ define i1 @max3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max4(i32 %x, i32 %y) {
|
||||
; CHECK: @max4
|
||||
; CHECK-LABEL: @max4(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp uge i32 %m, %x
|
||||
@@ -37,7 +37,7 @@ define i1 @max4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max5(i32 %x, i32 %y) {
|
||||
; CHECK: @max5
|
||||
; CHECK-LABEL: @max5(
|
||||
%c = icmp sgt i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp sgt i32 %x, %m
|
||||
@@ -46,7 +46,7 @@ define i1 @max5(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max6(i32 %x, i32 %y) {
|
||||
; CHECK: @max6
|
||||
; CHECK-LABEL: @max6(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp sle i32 %x, %m
|
||||
@@ -55,7 +55,7 @@ define i1 @max6(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max7(i32 %x, i32 %y) {
|
||||
; CHECK: @max7
|
||||
; CHECK-LABEL: @max7(
|
||||
%c = icmp ugt i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp ugt i32 %x, %m
|
||||
@@ -64,7 +64,7 @@ define i1 @max7(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @max8(i32 %x, i32 %y) {
|
||||
; CHECK: @max8
|
||||
; CHECK-LABEL: @max8(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%m = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp ule i32 %x, %m
|
||||
@@ -73,7 +73,7 @@ define i1 @max8(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min1(i32 %x, i32 %y) {
|
||||
; CHECK: @min1
|
||||
; CHECK-LABEL: @min1(
|
||||
%c = icmp sgt i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp sgt i32 %m, %x
|
||||
@@ -82,7 +82,7 @@ define i1 @min1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min2(i32 %x, i32 %y) {
|
||||
; CHECK: @min2
|
||||
; CHECK-LABEL: @min2(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp sle i32 %m, %x
|
||||
@@ -91,7 +91,7 @@ define i1 @min2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min3(i32 %x, i32 %y) {
|
||||
; CHECK: @min3
|
||||
; CHECK-LABEL: @min3(
|
||||
%c = icmp ugt i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp ugt i32 %m, %x
|
||||
@@ -100,7 +100,7 @@ define i1 @min3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min4(i32 %x, i32 %y) {
|
||||
; CHECK: @min4
|
||||
; CHECK-LABEL: @min4(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp ule i32 %m, %x
|
||||
@@ -109,7 +109,7 @@ define i1 @min4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min5(i32 %x, i32 %y) {
|
||||
; CHECK: @min5
|
||||
; CHECK-LABEL: @min5(
|
||||
%c = icmp sgt i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp slt i32 %x, %m
|
||||
@@ -118,7 +118,7 @@ define i1 @min5(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min6(i32 %x, i32 %y) {
|
||||
; CHECK: @min6
|
||||
; CHECK-LABEL: @min6(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp sge i32 %x, %m
|
||||
@@ -127,7 +127,7 @@ define i1 @min6(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min7(i32 %x, i32 %y) {
|
||||
; CHECK: @min7
|
||||
; CHECK-LABEL: @min7(
|
||||
%c = icmp ugt i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp ult i32 %x, %m
|
||||
@@ -136,7 +136,7 @@ define i1 @min7(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @min8(i32 %x, i32 %y) {
|
||||
; CHECK: @min8
|
||||
; CHECK-LABEL: @min8(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%m = select i1 %c, i32 %y, i32 %x
|
||||
%r = icmp uge i32 %x, %m
|
||||
@@ -145,7 +145,7 @@ define i1 @min8(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin1
|
||||
; CHECK-LABEL: @maxmin1(
|
||||
%c1 = icmp sge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp sge i32 %x, %z
|
||||
@@ -156,7 +156,7 @@ define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin2
|
||||
; CHECK-LABEL: @maxmin2(
|
||||
%c1 = icmp sge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp sge i32 %x, %z
|
||||
@@ -167,7 +167,7 @@ define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin3
|
||||
; CHECK-LABEL: @maxmin3(
|
||||
%c1 = icmp sge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp sge i32 %x, %z
|
||||
@@ -178,7 +178,7 @@ define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin4
|
||||
; CHECK-LABEL: @maxmin4(
|
||||
%c1 = icmp sge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp sge i32 %x, %z
|
||||
@@ -189,7 +189,7 @@ define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin5
|
||||
; CHECK-LABEL: @maxmin5(
|
||||
%c1 = icmp uge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp uge i32 %x, %z
|
||||
@@ -200,7 +200,7 @@ define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin6
|
||||
; CHECK-LABEL: @maxmin6(
|
||||
%c1 = icmp uge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp uge i32 %x, %z
|
||||
@@ -211,7 +211,7 @@ define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin7
|
||||
; CHECK-LABEL: @maxmin7(
|
||||
%c1 = icmp uge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp uge i32 %x, %z
|
||||
@@ -222,7 +222,7 @@ define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
|
||||
; CHECK: @maxmin8
|
||||
; CHECK-LABEL: @maxmin8(
|
||||
%c1 = icmp uge i32 %x, %y
|
||||
%max = select i1 %c1, i32 %x, i32 %y
|
||||
%c2 = icmp uge i32 %x, %z
|
||||
@@ -233,7 +233,7 @@ define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
|
||||
}
|
||||
|
||||
define i1 @eqcmp1(i32 %x, i32 %y) {
|
||||
; CHECK: @eqcmp1
|
||||
; CHECK-LABEL: @eqcmp1(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%max = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp eq i32 %max, %x
|
||||
@@ -242,7 +242,7 @@ define i1 @eqcmp1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @eqcmp2(i32 %x, i32 %y) {
|
||||
; CHECK: @eqcmp2
|
||||
; CHECK-LABEL: @eqcmp2(
|
||||
%c = icmp sge i32 %x, %y
|
||||
%max = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp eq i32 %x, %max
|
||||
@@ -251,7 +251,7 @@ define i1 @eqcmp2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @eqcmp3(i32 %x, i32 %y) {
|
||||
; CHECK: @eqcmp3
|
||||
; CHECK-LABEL: @eqcmp3(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%max = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp eq i32 %max, %x
|
||||
@@ -260,7 +260,7 @@ define i1 @eqcmp3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i1 @eqcmp4(i32 %x, i32 %y) {
|
||||
; CHECK: @eqcmp4
|
||||
; CHECK-LABEL: @eqcmp4(
|
||||
%c = icmp uge i32 %x, %y
|
||||
%max = select i1 %c, i32 %x, i32 %y
|
||||
%r = icmp eq i32 %x, %max
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
; PR12189
|
||||
define i1 @test1(i32 %x) {
|
||||
; CHECK: @test1
|
||||
; CHECK-LABEL: @test1(
|
||||
br i1 true, label %a, label %b
|
||||
|
||||
a:
|
||||
|
||||
@@ -3,7 +3,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define i64 @ptrdiff1(i8* %ptr) {
|
||||
; CHECK: @ptrdiff1
|
||||
; CHECK-LABEL: @ptrdiff1(
|
||||
; CHECK-NEXT: ret i64 42
|
||||
|
||||
%first = getelementptr inbounds i8* %ptr, i32 0
|
||||
@@ -15,7 +15,7 @@ define i64 @ptrdiff1(i8* %ptr) {
|
||||
}
|
||||
|
||||
define i64 @ptrdiff2(i8* %ptr) {
|
||||
; CHECK: @ptrdiff2
|
||||
; CHECK-LABEL: @ptrdiff2(
|
||||
; CHECK-NEXT: ret i64 42
|
||||
|
||||
%first1 = getelementptr inbounds i8* %ptr, i32 0
|
||||
@@ -34,7 +34,7 @@ define i64 @ptrdiff2(i8* %ptr) {
|
||||
|
||||
define i64 @ptrdiff3(i8* %ptr) {
|
||||
; Don't bother with non-inbounds GEPs.
|
||||
; CHECK: @ptrdiff3
|
||||
; CHECK-LABEL: @ptrdiff3(
|
||||
; CHECK: getelementptr
|
||||
; CHECK: sub
|
||||
; CHECK: ret
|
||||
@@ -49,7 +49,7 @@ define i64 @ptrdiff3(i8* %ptr) {
|
||||
|
||||
define <4 x i32> @ptrdiff4(<4 x i8*> %arg) nounwind {
|
||||
; Handle simple cases of vectors of pointers.
|
||||
; CHECK: @ptrdiff4
|
||||
; CHECK-LABEL: @ptrdiff4(
|
||||
; CHECK: ret <4 x i32> zeroinitializer
|
||||
%p1 = ptrtoint <4 x i8*> %arg to <4 x i32>
|
||||
%bc = bitcast <4 x i8*> %arg to <4 x i32*>
|
||||
@@ -73,6 +73,6 @@ bb:
|
||||
%tmp6 = ptrtoint [2 x i32]* %tmp5 to i32
|
||||
%tmp7 = sub i32 %tmp3, %tmp6
|
||||
ret i32 %tmp7
|
||||
; CHECK: @ptrdiff5
|
||||
; CHECK-LABEL: @ptrdiff5(
|
||||
; CHECK: ret i32 0
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i32 @add1(i32 %x) {
|
||||
; CHECK: @add1
|
||||
; CHECK-LABEL: @add1(
|
||||
; (X + -1) + 1 -> X
|
||||
%l = add i32 %x, -1
|
||||
%r = add i32 %l, 1
|
||||
@@ -10,7 +10,7 @@ define i32 @add1(i32 %x) {
|
||||
}
|
||||
|
||||
define i32 @and1(i32 %x, i32 %y) {
|
||||
; CHECK: @and1
|
||||
; CHECK-LABEL: @and1(
|
||||
; (X & Y) & X -> X & Y
|
||||
%l = and i32 %x, %y
|
||||
%r = and i32 %l, %x
|
||||
@@ -19,7 +19,7 @@ define i32 @and1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @and2(i32 %x, i32 %y) {
|
||||
; CHECK: @and2
|
||||
; CHECK-LABEL: @and2(
|
||||
; X & (X & Y) -> X & Y
|
||||
%r = and i32 %x, %y
|
||||
%l = and i32 %x, %r
|
||||
@@ -28,7 +28,7 @@ define i32 @and2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @or1(i32 %x, i32 %y) {
|
||||
; CHECK: @or1
|
||||
; CHECK-LABEL: @or1(
|
||||
; (X | Y) | X -> X | Y
|
||||
%l = or i32 %x, %y
|
||||
%r = or i32 %l, %x
|
||||
@@ -37,7 +37,7 @@ define i32 @or1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @or2(i32 %x, i32 %y) {
|
||||
; CHECK: @or2
|
||||
; CHECK-LABEL: @or2(
|
||||
; X | (X | Y) -> X | Y
|
||||
%r = or i32 %x, %y
|
||||
%l = or i32 %x, %r
|
||||
@@ -46,7 +46,7 @@ define i32 @or2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @xor1(i32 %x, i32 %y) {
|
||||
; CHECK: @xor1
|
||||
; CHECK-LABEL: @xor1(
|
||||
; (X ^ Y) ^ X = Y
|
||||
%l = xor i32 %x, %y
|
||||
%r = xor i32 %l, %x
|
||||
@@ -55,7 +55,7 @@ define i32 @xor1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @xor2(i32 %x, i32 %y) {
|
||||
; CHECK: @xor2
|
||||
; CHECK-LABEL: @xor2(
|
||||
; X ^ (X ^ Y) = Y
|
||||
%r = xor i32 %x, %y
|
||||
%l = xor i32 %x, %r
|
||||
@@ -64,7 +64,7 @@ define i32 @xor2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sub1(i32 %x, i32 %y) {
|
||||
; CHECK: @sub1
|
||||
; CHECK-LABEL: @sub1(
|
||||
%d = sub i32 %x, %y
|
||||
%r = sub i32 %x, %d
|
||||
ret i32 %r
|
||||
@@ -72,7 +72,7 @@ define i32 @sub1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sub2(i32 %x) {
|
||||
; CHECK: @sub2
|
||||
; CHECK-LABEL: @sub2(
|
||||
; X - (X + 1) -> -1
|
||||
%xp1 = add i32 %x, 1
|
||||
%r = sub i32 %x, %xp1
|
||||
@@ -81,7 +81,7 @@ define i32 @sub2(i32 %x) {
|
||||
}
|
||||
|
||||
define i32 @sub3(i32 %x, i32 %y) {
|
||||
; CHECK: @sub3
|
||||
; CHECK-LABEL: @sub3(
|
||||
; ((X + 1) + Y) - (Y + 1) -> X
|
||||
%xp1 = add i32 %x, 1
|
||||
%lhs = add i32 %xp1, %y
|
||||
@@ -92,7 +92,7 @@ define i32 @sub3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sdiv1(i32 %x, i32 %y) {
|
||||
; CHECK: @sdiv1
|
||||
; CHECK-LABEL: @sdiv1(
|
||||
; (no overflow X * Y) / Y -> X
|
||||
%mul = mul nsw i32 %x, %y
|
||||
%r = sdiv i32 %mul, %y
|
||||
@@ -101,7 +101,7 @@ define i32 @sdiv1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sdiv2(i32 %x, i32 %y) {
|
||||
; CHECK: @sdiv2
|
||||
; CHECK-LABEL: @sdiv2(
|
||||
; (((X / Y) * Y) / Y) -> X / Y
|
||||
%div = sdiv i32 %x, %y
|
||||
%mul = mul i32 %div, %y
|
||||
@@ -111,7 +111,7 @@ define i32 @sdiv2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sdiv3(i32 %x, i32 %y) {
|
||||
; CHECK: @sdiv3
|
||||
; CHECK-LABEL: @sdiv3(
|
||||
; (X rem Y) / Y -> 0
|
||||
%rem = srem i32 %x, %y
|
||||
%div = sdiv i32 %rem, %y
|
||||
@@ -120,7 +120,7 @@ define i32 @sdiv3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sdiv4(i32 %x, i32 %y) {
|
||||
; CHECK: @sdiv4
|
||||
; CHECK-LABEL: @sdiv4(
|
||||
; (X / Y) * Y -> X if the division is exact
|
||||
%div = sdiv exact i32 %x, %y
|
||||
%mul = mul i32 %div, %y
|
||||
@@ -129,7 +129,7 @@ define i32 @sdiv4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @sdiv5(i32 %x, i32 %y) {
|
||||
; CHECK: @sdiv5
|
||||
; CHECK-LABEL: @sdiv5(
|
||||
; Y * (X / Y) -> X if the division is exact
|
||||
%div = sdiv exact i32 %x, %y
|
||||
%mul = mul i32 %y, %div
|
||||
@@ -139,7 +139,7 @@ define i32 @sdiv5(i32 %x, i32 %y) {
|
||||
|
||||
|
||||
define i32 @udiv1(i32 %x, i32 %y) {
|
||||
; CHECK: @udiv1
|
||||
; CHECK-LABEL: @udiv1(
|
||||
; (no overflow X * Y) / Y -> X
|
||||
%mul = mul nuw i32 %x, %y
|
||||
%r = udiv i32 %mul, %y
|
||||
@@ -148,7 +148,7 @@ define i32 @udiv1(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @udiv2(i32 %x, i32 %y) {
|
||||
; CHECK: @udiv2
|
||||
; CHECK-LABEL: @udiv2(
|
||||
; (((X / Y) * Y) / Y) -> X / Y
|
||||
%div = udiv i32 %x, %y
|
||||
%mul = mul i32 %div, %y
|
||||
@@ -158,7 +158,7 @@ define i32 @udiv2(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @udiv3(i32 %x, i32 %y) {
|
||||
; CHECK: @udiv3
|
||||
; CHECK-LABEL: @udiv3(
|
||||
; (X rem Y) / Y -> 0
|
||||
%rem = urem i32 %x, %y
|
||||
%div = udiv i32 %rem, %y
|
||||
@@ -167,7 +167,7 @@ define i32 @udiv3(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @udiv4(i32 %x, i32 %y) {
|
||||
; CHECK: @udiv4
|
||||
; CHECK-LABEL: @udiv4(
|
||||
; (X / Y) * Y -> X if the division is exact
|
||||
%div = udiv exact i32 %x, %y
|
||||
%mul = mul i32 %div, %y
|
||||
@@ -176,7 +176,7 @@ define i32 @udiv4(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i32 @udiv5(i32 %x, i32 %y) {
|
||||
; CHECK: @udiv5
|
||||
; CHECK-LABEL: @udiv5(
|
||||
; Y * (X / Y) -> X if the division is exact
|
||||
%div = udiv exact i32 %x, %y
|
||||
%mul = mul i32 %y, %div
|
||||
@@ -185,7 +185,7 @@ define i32 @udiv5(i32 %x, i32 %y) {
|
||||
}
|
||||
|
||||
define i16 @trunc1(i32 %x) {
|
||||
; CHECK: @trunc1
|
||||
; CHECK-LABEL: @trunc1(
|
||||
%y = add i32 %x, 1
|
||||
%tx = trunc i32 %x to i16
|
||||
%ty = trunc i32 %y to i16
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
define i32 @select1(i32 %x, i1 %b) {
|
||||
; CHECK: @select1
|
||||
; CHECK-LABEL: @select1(
|
||||
%rhs = select i1 %b, i32 %x, i32 1
|
||||
%rem = srem i32 %x, %rhs
|
||||
ret i32 %rem
|
||||
@@ -9,7 +9,7 @@ define i32 @select1(i32 %x, i1 %b) {
|
||||
}
|
||||
|
||||
define i32 @select2(i32 %x, i1 %b) {
|
||||
; CHECK: @select2
|
||||
; CHECK-LABEL: @select2(
|
||||
%rhs = select i1 %b, i32 %x, i32 1
|
||||
%rem = urem i32 %x, %rhs
|
||||
ret i32 %rem
|
||||
|
||||
Reference in New Issue
Block a user