diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2010-01-23 11:09:33 +0000 |
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2010-01-23 11:09:33 +0000 |
| commit | 989df958a10f0beb90b89ccadd8351cbe51d90b1 (patch) | |
| tree | 74eecbae571601ec6a626a53374b1eddc7b164a5 /test/Transforms | |
| parent | 829000e035f46f2a227a5466e4e427a2f3cc00a9 (diff) | |
Notes
Diffstat (limited to 'test/Transforms')
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 |
