summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2016-05-27 16:56:54 +0000
committerTim Northover <tnorthover@apple.com>2016-05-27 16:56:54 +0000
commit32b4d15e0a8a059ec4b350ccd2c506bd870f46e1 (patch)
tree508c01b23a1f6771a50da9f7d3cebb2926df00e8 /llvm/test/Transforms/LoopVectorize/X86/imprecise-through-phis.ll
parentf6f815bf399ca8313abbe4953ba340b4c7699a99 (diff)
downloadbcm5719-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.ll75
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
+}
OpenPOWER on IntegriCloud