diff options
| author | Tim Northover <tnorthover@apple.com> | 2016-05-27 16:56:54 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2016-05-27 16:56:54 +0000 |
| commit | 32b4d15e0a8a059ec4b350ccd2c506bd870f46e1 (patch) | |
| tree | 508c01b23a1f6771a50da9f7d3cebb2926df00e8 /llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll | |
| parent | f6f815bf399ca8313abbe4953ba340b4c7699a99 (diff) | |
| download | bcm5719-llvm-32b4d15e0a8a059ec4b350ccd2c506bd870f46e1.tar.gz bcm5719-llvm-32b4d15e0a8a059ec4b350ccd2c506bd870f46e1.zip | |
Move test to X86 directory: I think it depends on X86 TTI.
llvm-svn: 271019
Diffstat (limited to 'llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll')
| -rw-r--r-- | llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll b/llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll new file mode 100644 index 00000000000..ee0a245c5e0 --- /dev/null +++ b/llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll @@ -0,0 +1,75 @@ +; RUN: opt -S -loop-vectorize -mtriple=x86_64-apple-darwin %s | FileCheck %s + +; Two mostly identical functions. The only difference is the presence of +; fast-math flags on the second. The loop is a pretty simple reduction: + +; for (int i = 0; i < 32; ++i) +; if (arr[i] != 42) +; tot += arr[i]; + +define double @sumIfScalar(double* nocapture readonly %arr) { +; CHECK-LABEL: define double @sumIfScalar +; CHECK-NOT: <2 x double> + +entry: + br label %loop + +loop: + %i = phi i32 [0, %entry], [%i.next, %next.iter] + %tot = phi double [0.0, %entry], [%tot.next, %next.iter] + + %addr = getelementptr double, double* %arr, i32 %i + %nextval = load double, double* %addr + + %tst = fcmp une double %nextval, 42.0 + br i1 %tst, label %do.add, label %no.add + +do.add: + %tot.new = fadd double %tot, %nextval + br label %next.iter + +no.add: + br label %next.iter + +next.iter: + %tot.next = phi double [%tot, %no.add], [%tot.new, %do.add] + %i.next = add i32 %i, 1 + %again = icmp ult i32 %i.next, 32 + br i1 %again, label %loop, label %done + +done: + ret double %tot.next +} + +define double @sumIfVector(double* nocapture readonly %arr) { +; CHECK-LABEL: define double @sumIfVector +; CHECK: <2 x double> +entry: + br label %loop + +loop: + %i = phi i32 [0, %entry], [%i.next, %next.iter] + %tot = phi double [0.0, %entry], [%tot.next, %next.iter] + + %addr = getelementptr double, double* %arr, i32 %i + %nextval = load double, double* %addr + + %tst = fcmp fast une double %nextval, 42.0 + br i1 %tst, label %do.add, label %no.add + +do.add: + %tot.new = fadd fast double %tot, %nextval + br label %next.iter + +no.add: + br label %next.iter + +next.iter: + %tot.next = phi double [%tot, %no.add], [%tot.new, %do.add] + %i.next = add i32 %i, 1 + %again = icmp ult i32 %i.next, 32 + br i1 %again, label %loop, label %done + +done: + ret double %tot.next +} |

