summaryrefslogtreecommitdiff
path: root/test/Transforms
diff options
context:
space:
mode:
authorRoman Divacky <rdivacky@FreeBSD.org>2010-01-23 11:09:33 +0000
committerRoman Divacky <rdivacky@FreeBSD.org>2010-01-23 11:09:33 +0000
commit989df958a10f0beb90b89ccadd8351cbe51d90b1 (patch)
tree74eecbae571601ec6a626a53374b1eddc7b164a5 /test/Transforms
parent829000e035f46f2a227a5466e4e427a2f3cc00a9 (diff)
Notes
Diffstat (limited to 'test/Transforms')
-rw-r--r--test/Transforms/ConstProp/constant-expr.ll9
-rw-r--r--test/Transforms/IndVarSimplify/gep-with-mul-base.ll5
-rw-r--r--test/Transforms/InstCombine/apint-elim-logicalops.ll39
-rw-r--r--test/Transforms/InstCombine/bitcast-sext-vector.ll11
-rw-r--r--test/Transforms/InstCombine/canonicalize_branch.ll36
-rw-r--r--test/Transforms/InstCombine/fsub-fadd.ll39
-rw-r--r--test/Transforms/InstCombine/fsub-fsub.ll8
-rw-r--r--test/Transforms/InstCombine/fsub.ll23
-rw-r--r--test/Transforms/InstCombine/idioms.ll32
-rw-r--r--test/Transforms/InstCombine/signext.ll39
-rw-r--r--test/Transforms/InstCombine/xor2.ll10
-rw-r--r--test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll2
-rw-r--r--test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll8
-rw-r--r--test/Transforms/LoopStrengthReduce/icmp_use_postinc.ll27
-rw-r--r--test/Transforms/LoopStrengthReduce/related_indvars.ll2
-rw-r--r--test/Transforms/Mem2Reg/ConvertDebugInfo.ll31
-rw-r--r--test/Transforms/Reassociate/inverses.ll32
-rw-r--r--test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll18
18 files changed, 218 insertions, 153 deletions
diff --git a/test/Transforms/ConstProp/constant-expr.ll b/test/Transforms/ConstProp/constant-expr.ll
index eece37fa69df..996303293d18 100644
--- a/test/Transforms/ConstProp/constant-expr.ll
+++ b/test/Transforms/ConstProp/constant-expr.ll
@@ -57,4 +57,11 @@
@T4 = global i1* inttoptr (i64 trunc (i256 lshr (i256 or (i256 and (i256 and (i256 shl (i256 zext (i64 ptrtoint (i1* @B to i64) to i256), i256 64), i256 -6277101735386680763495507056286727952638980837032266301441), i256 6277101735386680763835789423207666416102355444464034512895), i256 shl (i256 zext (i64 ptrtoint (i1* @A to i64) to i256), i256 192)), i256 64) to i64) to i1*)
; CHECK: @T5 = global i1* @A
-@T5 = global i1* inttoptr (i64 add (i64 trunc (i256 lshr (i256 or (i256 and (i256 and (i256 shl (i256 zext (i64 ptrtoint (i1* @B to i64) to i256), i256 64), i256 -6277101735386680763495507056286727952638980837032266301441), i256 6277101735386680763835789423207666416102355444464034512895), i256 shl (i256 zext (i64 ptrtoint (i1* @A to i64) to i256), i256 192)), i256 192) to i64), i64 trunc (i256 lshr (i256 or (i256 and (i256 and (i256 shl (i256 zext (i64 ptrtoint (i1* @B to i64) to i256), i256 64), i256 -6277101735386680763495507056286727952638980837032266301441), i256 6277101735386680763835789423207666416102355444464034512895), i256 shl (i256 zext (i64 ptrtoint (i1* @A to i64) to i256), i256 192)), i256 128) to i64)) to i1*) \ No newline at end of file
+@T5 = global i1* inttoptr (i64 add (i64 trunc (i256 lshr (i256 or (i256 and (i256 and (i256 shl (i256 zext (i64 ptrtoint (i1* @B to i64) to i256), i256 64), i256 -6277101735386680763495507056286727952638980837032266301441), i256 6277101735386680763835789423207666416102355444464034512895), i256 shl (i256 zext (i64 ptrtoint (i1* @A to i64) to i256), i256 192)), i256 192) to i64), i64 trunc (i256 lshr (i256 or (i256 and (i256 and (i256 shl (i256 zext (i64 ptrtoint (i1* @B to i64) to i256), i256 64), i256 -6277101735386680763495507056286727952638980837032266301441), i256 6277101735386680763835789423207666416102355444464034512895), i256 shl (i256 zext (i64 ptrtoint (i1* @A to i64) to i256), i256 192)), i256 128) to i64)) to i1*)
+
+
+
+; PR6096
+
+; No check line. This used to crash llvm-as.
+@T6 = global <2 x i1> fcmp ole (<2 x float> fdiv (<2 x float> undef, <2 x float> <float 1.000000e+00, float 1.000000e+00>), <2 x float> zeroinitializer)
diff --git a/test/Transforms/IndVarSimplify/gep-with-mul-base.ll b/test/Transforms/IndVarSimplify/gep-with-mul-base.ll
index 780959407630..19d54ff2a22f 100644
--- a/test/Transforms/IndVarSimplify/gep-with-mul-base.ll
+++ b/test/Transforms/IndVarSimplify/gep-with-mul-base.ll
@@ -1,6 +1,7 @@
; RUN: opt < %s -indvars -S > %t
-; RUN: grep add %t | count 8
-; RUN: grep mul %t | count 7
+; RUN: grep add %t | count 6
+; RUN: grep sub %t | count 2
+; RUN: grep mul %t | count 6
define void @foo(i64 %n, i64 %m, i64 %o, double* nocapture %p) nounwind {
entry:
diff --git a/test/Transforms/InstCombine/apint-elim-logicalops.ll b/test/Transforms/InstCombine/apint-elim-logicalops.ll
deleted file mode 100644
index ec60e45d5491..000000000000
--- a/test/Transforms/InstCombine/apint-elim-logicalops.ll
+++ /dev/null
@@ -1,39 +0,0 @@
-; Test that elimination of logical operators works with
-; arbitrary precision integers.
-; RUN: opt < %s -instcombine -S | \
-; RUN: not grep {(and\|xor\|add\|shl\|shr)}
-; END.
-
-define i33 @test1(i33 %x) {
- %tmp.1 = and i33 %x, 65535 ; <i33> [#uses=1]
- %tmp.2 = xor i33 %tmp.1, -32768 ; <i33> [#uses=1]
- %tmp.3 = add i33 %tmp.2, 32768 ; <i33> [#uses=1]
- ret i33 %tmp.3
-}
-
-define i33 @test2(i33 %x) {
- %tmp.1 = and i33 %x, 65535 ; <i33> [#uses=1]
- %tmp.2 = xor i33 %tmp.1, 32768 ; <i33> [#uses=1]
- %tmp.3 = add i33 %tmp.2, -32768 ; <i33> [#uses=1]
- ret i33 %tmp.3
-}
-
-define i33 @test3(i16 %P) {
- %tmp.1 = zext i16 %P to i33 ; <i33> [#uses=1]
- %tmp.4 = xor i33 %tmp.1, 32768 ; <i33> [#uses=1]
- %tmp.5 = add i33 %tmp.4, -32768 ; <i33> [#uses=1]
- ret i33 %tmp.5
-}
-
-define i33 @test5(i33 %x) {
- %tmp.1 = and i33 %x, 254
- %tmp.2 = xor i33 %tmp.1, 128
- %tmp.3 = add i33 %tmp.2, -128
- ret i33 %tmp.3
-}
-
-define i33 @test6(i33 %x) {
- %tmp.2 = shl i33 %x, 16 ; <i33> [#uses=1]
- %tmp.4 = lshr i33 %tmp.2, 16 ; <i33> [#uses=1]
- ret i33 %tmp.4
-}
diff --git a/test/Transforms/InstCombine/bitcast-sext-vector.ll b/test/Transforms/InstCombine/bitcast-sext-vector.ll
new file mode 100644
index 000000000000..d70bdbaf3727
--- /dev/null
+++ b/test/Transforms/InstCombine/bitcast-sext-vector.ll
@@ -0,0 +1,11 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+; CHECK: sext
+; Don't fold zero/sign extensions with a bitcast between a vector and scalar.
+
+define i32 @t(<4 x i8> %src1, <4 x i8> %src2) nounwind readonly {
+entry:
+ %cmp = icmp eq <4 x i8> %src1, %src2; <<4 x i1>> [#uses=1]
+ %sext = sext <4 x i1> %cmp to <4 x i8>
+ %val = bitcast <4 x i8> %sext to i32
+ ret i32 %val
+}
diff --git a/test/Transforms/InstCombine/canonicalize_branch.ll b/test/Transforms/InstCombine/canonicalize_branch.ll
index 52aff3dcd475..24090abcb5ac 100644
--- a/test/Transforms/InstCombine/canonicalize_branch.ll
+++ b/test/Transforms/InstCombine/canonicalize_branch.ll
@@ -1,36 +1,44 @@
-; RUN: opt < %s -instcombine -S | \
-; RUN: not grep {icmp ne\|icmp ule\|icmp uge}
+; RUN: opt < %s -instcombine -S | FileCheck %s
define i32 @test1(i32 %X, i32 %Y) {
- %C = icmp ne i32 %X, %Y ; <i1> [#uses=1]
+ %C = icmp ne i32 %X, %Y
br i1 %C, label %T, label %F
-T: ; preds = %0
- ret i32 12
+; CHECK: @test1
+; CHECK: %C = icmp eq i32 %X, %Y
+; CHECK: br i1 %C, label %F, label %T
-F: ; preds = %0
+T:
+ ret i32 12
+F:
ret i32 123
}
define i32 @test2(i32 %X, i32 %Y) {
- %C = icmp ule i32 %X, %Y ; <i1> [#uses=1]
+ %C = icmp ule i32 %X, %Y
br i1 %C, label %T, label %F
-T: ; preds = %0
- ret i32 12
+; CHECK: @test2
+; CHECK: %C = icmp ugt i32 %X, %Y
+; CHECK: br i1 %C, label %F, label %T
-F: ; preds = %0
+T:
+ ret i32 12
+F:
ret i32 123
}
define i32 @test3(i32 %X, i32 %Y) {
- %C = icmp uge i32 %X, %Y ; <i1> [#uses=1]
+ %C = icmp uge i32 %X, %Y
br i1 %C, label %T, label %F
-T: ; preds = %0
- ret i32 12
+; CHECK: @test3
+; CHECK: %C = icmp ult i32 %X, %Y
+; CHECK: br i1 %C, label %F, label %T
-F: ; preds = %0
+T:
+ ret i32 12
+F:
ret i32 123
}
diff --git a/test/Transforms/InstCombine/fsub-fadd.ll b/test/Transforms/InstCombine/fsub-fadd.ll
deleted file mode 100644
index f4cff88343db..000000000000
--- a/test/Transforms/InstCombine/fsub-fadd.ll
+++ /dev/null
@@ -1,39 +0,0 @@
-; RUN: opt < %s -instcombine -S | FileCheck %s
-; <rdar://problem/7530098>
-
-define void @func(double* %rhi, double* %rlo, double %xh, double %xl, double %yh, double %yl) nounwind ssp {
-entry:
- %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
- %tmp = fmul double %xh, 0x41A0000002000000 ; <double> [#uses=2]
- %tmp1 = fsub double %xh, %tmp ; <double> [#uses=1]
- %tmp2 = fadd double %tmp1, %tmp ; <double> [#uses=3]
- %tmp3 = fsub double %xh, %tmp2 ; <double> [#uses=2]
- %tmp4 = fmul double %yh, 0x41A0000002000000 ; <double> [#uses=2]
- %tmp5 = fsub double %yh, %tmp4 ; <double> [#uses=1]
- %tmp6 = fadd double %tmp5, %tmp4 ; <double> [#uses=3]
- %tmp7 = fsub double %yh, %tmp6 ; <double> [#uses=2]
- %tmp8 = fmul double %xh, %yh ; <double> [#uses=3]
- %tmp9 = fmul double %tmp2, %tmp6 ; <double> [#uses=1]
- %tmp10 = fsub double %tmp9, %tmp8 ; <double> [#uses=1]
- %tmp11 = fmul double %tmp2, %tmp7 ; <double> [#uses=1]
- %tmp12 = fadd double %tmp10, %tmp11 ; <double> [#uses=1]
- %tmp13 = fmul double %tmp3, %tmp6 ; <double> [#uses=1]
- %tmp14 = fadd double %tmp12, %tmp13 ; <double> [#uses=1]
- %tmp15 = fmul double %tmp3, %tmp7 ; <double> [#uses=1]
- %tmp16 = fadd double %tmp14, %tmp15 ; <double> [#uses=1]
- %tmp17 = fmul double %xh, %yl ; <double> [#uses=1]
- %tmp18 = fmul double %xl, %yh ; <double> [#uses=1]
- %tmp19 = fadd double %tmp17, %tmp18 ; <double> [#uses=1]
- %tmp20 = fadd double %tmp19, %tmp16 ; <double> [#uses=2]
- %tmp21 = fadd double %tmp8, %tmp20 ; <double> [#uses=1]
- store double %tmp21, double* %rhi, align 8
- %tmp22 = load double* %rhi, align 8 ; <double> [#uses=1]
- %tmp23 = fsub double %tmp8, %tmp22 ; <double> [#uses=1]
- %tmp24 = fadd double %tmp23, %tmp20 ; <double> [#uses=1]
-
-; CHECK: %tmp23 = fsub double %tmp8, %tmp21
-; CHECK: %tmp24 = fadd double %tmp23, %tmp20
-
- store double %tmp24, double* %rlo, align 8
- ret void
-}
diff --git a/test/Transforms/InstCombine/fsub-fsub.ll b/test/Transforms/InstCombine/fsub-fsub.ll
deleted file mode 100644
index 94ebf090ff33..000000000000
--- a/test/Transforms/InstCombine/fsub-fsub.ll
+++ /dev/null
@@ -1,8 +0,0 @@
-; RUN: opt < %s -instcombine -S | grep fsub | count 2
-; PR4374
-
-define float @func(float %a, float %b) nounwind {
- %tmp3 = fsub float %a, %b
- %tmp4 = fsub float -0.000000e+00, %tmp3
- ret float %tmp4
-}
diff --git a/test/Transforms/InstCombine/fsub.ll b/test/Transforms/InstCombine/fsub.ll
new file mode 100644
index 000000000000..af2fadd2867b
--- /dev/null
+++ b/test/Transforms/InstCombine/fsub.ll
@@ -0,0 +1,23 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+; PR4374
+define float @test1(float %a, float %b) nounwind {
+ %t1 = fsub float %a, %b
+ %t2 = fsub float -0.000000e+00, %t1
+
+; CHECK: %t1 = fsub float %a, %b
+; CHECK-NEXT: %t2 = fsub float -0.000000e+00, %t1
+
+ ret float %t2
+}
+
+; <rdar://problem/7530098>
+define double @test2(double %x, double %y) nounwind {
+ %t1 = fadd double %x, %y
+ %t2 = fsub double %x, %t1
+
+; CHECK: %t1 = fadd double %x, %y
+; CHECK-NEXT: %t2 = fsub double %x, %t1
+
+ ret double %t2
+}
diff --git a/test/Transforms/InstCombine/idioms.ll b/test/Transforms/InstCombine/idioms.ll
new file mode 100644
index 000000000000..6b3567fc6e8d
--- /dev/null
+++ b/test/Transforms/InstCombine/idioms.ll
@@ -0,0 +1,32 @@
+; RUN: opt -instcombine %s -S | FileCheck %s
+
+; Check that code corresponding to the following C function is
+; simplified into a single ASR operation:
+;
+; int test_asr(int a, int b) {
+; return a < 0 ? -(-a - 1 >> b) - 1 : a >> b;
+; }
+;
+define i32 @test_asr(i32 %a, i32 %b) {
+entry:
+ %c = icmp slt i32 %a, 0
+ br i1 %c, label %bb2, label %bb3
+
+bb2:
+ %t1 = sub i32 0, %a
+ %not = sub i32 %t1, 1
+ %d = ashr i32 %not, %b
+ %t2 = sub i32 0, %d
+ %not2 = sub i32 %t2, 1
+ br label %bb4
+bb3:
+ %e = ashr i32 %a, %b
+ br label %bb4
+bb4:
+ %f = phi i32 [ %not2, %bb2 ], [ %e, %bb3 ]
+ ret i32 %f
+; CHECK: @test_asr
+; CHECK: bb4:
+; CHECK: %f = ashr i32 %a, %b
+; CHECK: ret i32 %f
+}
diff --git a/test/Transforms/InstCombine/signext.ll b/test/Transforms/InstCombine/signext.ll
index 008662e04e9d..1c52b62df4e0 100644
--- a/test/Transforms/InstCombine/signext.ll
+++ b/test/Transforms/InstCombine/signext.ll
@@ -1,12 +1,16 @@
-; RUN: opt < %s -instcombine -S | \
-; RUN: not grep {(and\|xor\|add\|shl\|shr)}
-; END.
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128:n8:16:32:64"
define i32 @test1(i32 %x) {
%tmp.1 = and i32 %x, 65535 ; <i32> [#uses=1]
%tmp.2 = xor i32 %tmp.1, -32768 ; <i32> [#uses=1]
%tmp.3 = add i32 %tmp.2, 32768 ; <i32> [#uses=1]
ret i32 %tmp.3
+; CHECK: @test1
+; CHECK: %sext1 = shl i32 %x, 16
+; CHECK: %tmp.3 = ashr i32 %sext1, 16
+; CHECK: ret i32 %tmp.3
}
define i32 @test2(i32 %x) {
@@ -14,6 +18,10 @@ define i32 @test2(i32 %x) {
%tmp.2 = xor i32 %tmp.1, 32768 ; <i32> [#uses=1]
%tmp.3 = add i32 %tmp.2, -32768 ; <i32> [#uses=1]
ret i32 %tmp.3
+; CHECK: @test2
+; CHECK: %sext1 = shl i32 %x, 16
+; CHECK: %tmp.3 = ashr i32 %sext1, 16
+; CHECK: ret i32 %tmp.3
}
define i32 @test3(i16 %P) {
@@ -21,6 +29,9 @@ define i32 @test3(i16 %P) {
%tmp.4 = xor i32 %tmp.1, 32768 ; <i32> [#uses=1]
%tmp.5 = add i32 %tmp.4, -32768 ; <i32> [#uses=1]
ret i32 %tmp.5
+; CHECK: @test3
+; CHECK: %tmp.5 = sext i16 %P to i32
+; CHECK: ret i32 %tmp.5
}
define i32 @test4(i16 %P) {
@@ -28,18 +39,38 @@ define i32 @test4(i16 %P) {
%tmp.4 = xor i32 %tmp.1, 32768 ; <i32> [#uses=1]
%tmp.5 = add i32 %tmp.4, -32768 ; <i32> [#uses=1]
ret i32 %tmp.5
+; CHECK: @test4
+; CHECK: %tmp.5 = sext i16 %P to i32
+; CHECK: ret i32 %tmp.5
}
define i32 @test5(i32 %x) {
- %tmp.1 = and i32 %x, 254 ; <i32> [#uses=1]
+ %tmp.1 = and i32 %x, 255 ; <i32> [#uses=1]
%tmp.2 = xor i32 %tmp.1, 128 ; <i32> [#uses=1]
%tmp.3 = add i32 %tmp.2, -128 ; <i32> [#uses=1]
ret i32 %tmp.3
+; CHECK: @test5
+; CHECK: %sext1 = shl i32 %x, 24
+; CHECK: %tmp.3 = ashr i32 %sext1, 24
+; CHECK: ret i32 %tmp.3
}
define i32 @test6(i32 %x) {
%tmp.2 = shl i32 %x, 16 ; <i32> [#uses=1]
%tmp.4 = ashr i32 %tmp.2, 16 ; <i32> [#uses=1]
ret i32 %tmp.4
+; CHECK: @test6
+; CHECK: %tmp.2 = shl i32 %x, 16
+; CHECK: %tmp.4 = ashr i32 %tmp.2, 16
+; CHECK: ret i32 %tmp.4
}
+define i32 @test7(i16 %P) {
+ %tmp.1 = zext i16 %P to i32 ; <i32> [#uses=1]
+ %sext1 = shl i32 %tmp.1, 16 ; <i32> [#uses=1]
+ %tmp.5 = ashr i32 %sext1, 16 ; <i32> [#uses=1]
+ ret i32 %tmp.5
+; CHECK: @test7
+; CHECK: %tmp.5 = sext i16 %P to i32
+; CHECK: ret i32 %tmp.5
+}
diff --git a/test/Transforms/InstCombine/xor2.ll b/test/Transforms/InstCombine/xor2.ll
index 23a991581376..de3d65dd8cbb 100644
--- a/test/Transforms/InstCombine/xor2.ll
+++ b/test/Transforms/InstCombine/xor2.ll
@@ -41,3 +41,13 @@ define i32 @test3(i32 %tmp1) {
%ov110 = xor i32 %ov31, 153
ret i32 %ov110
}
+
+define i32 @test4(i32 %A, i32 %B) {
+ %1 = xor i32 %A, -1
+ %2 = ashr i32 %1, %B
+ %3 = xor i32 %2, -1
+ ret i32 %3
+; CHECK: @test4
+; CHECK: %1 = ashr i32 %A, %B
+; CHECK: ret i32 %1
+}
diff --git a/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll b/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll
index 56a89f6502b9..36941ad6d36c 100644
--- a/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll
+++ b/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-0.ll
@@ -6,7 +6,7 @@ target triple = "x86_64-apple-darwin9"
; happens before the relevant use, so the comparison stride can't be
; easily changed.
-define void @foo() {
+define void @foo() nounwind {
entry:
br label %loop
diff --git a/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll b/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll
index 8a3978bb2ee5..ea8a259ecd85 100644
--- a/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll
+++ b/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-1.ll
@@ -1,10 +1,10 @@
-; RUN: llc %s -o - --x86-asm-syntax=att | grep {cmpq \$8}
+; RUN: llc %s -o - --x86-asm-syntax=att | grep {cmp. \$8}
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-apple-darwin9"
-; This is like change-compare-stride-trickiness-0.ll except the comparison
-; happens after the relevant use, so the comparison stride can be
-; easily changed.
+; The comparison happens after the relevant use, so the stride can easily
+; be changed. The comparison can be done in a narrower mode than the
+; induction variable.
define void @foo() nounwind {
entry:
diff --git a/test/Transforms/LoopStrengthReduce/icmp_use_postinc.ll b/test/Transforms/LoopStrengthReduce/icmp_use_postinc.ll
deleted file mode 100644
index 4ad5d1478d6c..000000000000
--- a/test/Transforms/LoopStrengthReduce/icmp_use_postinc.ll
+++ /dev/null
@@ -1,27 +0,0 @@
-; RUN: opt < %s -loop-reduce -S | FileCheck %s
-
-define i32 @main(i32 %argc, i8** nocapture %argv) nounwind ssp {
-entry:
- br i1 undef, label %bb4.preheader, label %bb.nph8
-
-bb4.preheader: ; preds = %entry
- br label %bb4
-
-bb1: ; preds = %bb4
- br i1 undef, label %bb.nph8, label %bb3
-
-bb3: ; preds = %bb1
- %phitmp = add i32 %indvar, 1 ; <i32> [#uses=1]
- br label %bb4
-
-bb4: ; preds = %bb3, %bb4.preheader
-; CHECK: %lsr.iv = phi
-; CHECK: %lsr.iv.next = add i32 %lsr.iv, 1
-; CHECK: %0 = icmp slt i32 %lsr.iv.next, %argc
- %indvar = phi i32 [ 1, %bb4.preheader ], [ %phitmp, %bb3 ] ; <i32> [#uses=2]
- %0 = icmp slt i32 %indvar, %argc ; <i1> [#uses=1]
- br i1 %0, label %bb1, label %bb.nph8
-
-bb.nph8: ; preds = %bb4, %bb1, %entry
- unreachable
-}
diff --git a/test/Transforms/LoopStrengthReduce/related_indvars.ll b/test/Transforms/LoopStrengthReduce/related_indvars.ll
index 249437880769..12942bf10a5a 100644
--- a/test/Transforms/LoopStrengthReduce/related_indvars.ll
+++ b/test/Transforms/LoopStrengthReduce/related_indvars.ll
@@ -7,7 +7,7 @@
; *D++ = F;
; }
-define void @foo(double* %D, double* %E, double %F) {
+define void @foo(double* %D, double* %E, double %F) nounwind {
entry:
%tmp.24 = icmp eq double* %D, %E ; <i1> [#uses=1]
br i1 %tmp.24, label %return, label %no_exit
diff --git a/test/Transforms/Mem2Reg/ConvertDebugInfo.ll b/test/Transforms/Mem2Reg/ConvertDebugInfo.ll
new file mode 100644
index 000000000000..8e309c0901e1
--- /dev/null
+++ b/test/Transforms/Mem2Reg/ConvertDebugInfo.ll
@@ -0,0 +1,31 @@
+; RUN: opt < %s -mem2reg -S | FileCheck %s
+
+target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
+
+define double @testfunc(i32 %i, double %j) {
+ %I = alloca i32 ; <i32*> [#uses=4]
+ call void @llvm.dbg.declare(metadata !{i32* %I}, metadata !0)
+ %J = alloca double ; <double*> [#uses=2]
+ call void @llvm.dbg.declare(metadata !{double* %J}, metadata !1)
+; CHECK: call void @llvm.dbg.value(metadata !{i32 %i}, i64 0, metadata !0)
+ store i32 %i, i32* %I
+; CHECK: call void @llvm.dbg.value(metadata !{double %j}, i64 0, metadata !1)
+ store double %j, double* %J
+ %t1 = load i32* %I ; <i32> [#uses=1]
+ %t2 = add i32 %t1, 1 ; <i32> [#uses=1]
+ store i32 %t2, i32* %I
+ %t3 = load i32* %I ; <i32> [#uses=1]
+ %t4 = sitofp i32 %t3 to double ; <double> [#uses=1]
+ %t5 = load double* %J ; <double> [#uses=1]
+ %t6 = fmul double %t4, %t5 ; <double> [#uses=1]
+ ret double %t6
+}
+
+declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
+
+!bar = !{!0}
+!foo = !{!2}
+
+!0 = metadata !{i32 459008, metadata !1, metadata !"foo", metadata !2, i32 5, metadata !"foo"} ; [ DW_TAG_auto_variable ]
+!1 = metadata !{i32 459008, metadata !1, metadata !"foo", metadata !0, i32 5, metadata !1} ; [ DW_TAG_auto_variable ]
+!2 = metadata !{i32 458804, i32 0, metadata !2, metadata !"foo", metadata !"bar", metadata !"bar", metadata !2, i32 3, metadata !0, i1 false, i1 true} ; [ DW_TAG_variable ]
diff --git a/test/Transforms/Reassociate/inverses.ll b/test/Transforms/Reassociate/inverses.ll
index fa1a4bd1d01e..34abdc7aae0d 100644
--- a/test/Transforms/Reassociate/inverses.ll
+++ b/test/Transforms/Reassociate/inverses.ll
@@ -1,28 +1,34 @@
-; RUN: opt < %s -reassociate -dce -S | \
-; RUN: not grep {\\(and\\|sub\\)}
+; RUN: opt < %s -reassociate -die -S | FileCheck %s
define i32 @test1(i32 %a, i32 %b) {
- %tmp.2 = and i32 %b, %a ; <i32> [#uses=1]
- %tmp.4 = xor i32 %a, -1 ; <i32> [#uses=1]
+ %tmp.2 = and i32 %b, %a
+ %tmp.4 = xor i32 %a, -1
; (A&B)&~A == 0
- %tmp.5 = and i32 %tmp.2, %tmp.4 ; <i32> [#uses=1]
+ %tmp.5 = and i32 %tmp.2, %tmp.4
ret i32 %tmp.5
+; CHECK: @test1
+; CHECK: ret i32 0
}
define i32 @test2(i32 %a, i32 %b) {
- %tmp.1 = and i32 %a, 1234 ; <i32> [#uses=1]
- %tmp.2 = and i32 %b, %tmp.1 ; <i32> [#uses=1]
- %tmp.4 = xor i32 %a, -1 ; <i32> [#uses=1]
+ %tmp.1 = and i32 %a, 1234
+ %tmp.2 = and i32 %b, %tmp.1
+ %tmp.4 = xor i32 %a, -1
; A&~A == 0
- %tmp.5 = and i32 %tmp.2, %tmp.4 ; <i32> [#uses=1]
+ %tmp.5 = and i32 %tmp.2, %tmp.4
ret i32 %tmp.5
+; CHECK: @test2
+; CHECK: ret i32 0
}
define i32 @test3(i32 %b, i32 %a) {
- %tmp.1 = add i32 %a, 1234 ; <i32> [#uses=1]
- %tmp.2 = add i32 %b, %tmp.1 ; <i32> [#uses=1]
- %tmp.4 = sub i32 0, %a ; <i32> [#uses=1]
+ %tmp.1 = add i32 %a, 1234
+ %tmp.2 = add i32 %b, %tmp.1
+ %tmp.4 = sub i32 0, %a
; (b+(a+1234))+-a -> b+1234
- %tmp.5 = add i32 %tmp.2, %tmp.4 ; <i32> [#uses=1]
+ %tmp.5 = add i32 %tmp.2, %tmp.4
ret i32 %tmp.5
+; CHECK: @test3
+; CHECK: %tmp.5 = add i32 %b, 1234
+; CHECK: ret i32 %tmp.5
}
diff --git a/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll b/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll
new file mode 100644
index 000000000000..74cf251503c3
--- /dev/null
+++ b/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll
@@ -0,0 +1,18 @@
+; RUN: opt < %s -scalarrepl -S | FileCheck %s
+; Radar 7552893
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
+
+%struct.test = type { [3 x double ] }
+
+define arm_apcscc void @test_memcpy_self() nounwind {
+; CHECK: @test_memcpy_self
+; CHECK-NOT: alloca
+; CHECK: ret void
+ %1 = alloca %struct.test
+ %2 = bitcast %struct.test* %1 to i8*
+ call void @llvm.memcpy.i32(i8* %2, i8* %2, i32 24, i32 4)
+ ret void
+}
+
+declare void @llvm.memcpy.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind