summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/LoopStrengthReduce/AArch64
diff options
context:
space:
mode:
authorGeoff Berry <gberry@codeaurora.org>2016-06-06 19:10:46 +0000
committerGeoff Berry <gberry@codeaurora.org>2016-06-06 19:10:46 +0000
commit43e5160d0ef1313136a053dc77128be80ea204cb (patch)
treefa17b3451e64f48e9196605f6a7a28e3e6002420 /llvm/test/Transforms/LoopStrengthReduce/AArch64
parentba8dbbe86f3d21221783f29b96585e3fa25e9a28 (diff)
downloadbcm5719-llvm-43e5160d0ef1313136a053dc77128be80ea204cb.tar.gz
bcm5719-llvm-43e5160d0ef1313136a053dc77128be80ea204cb.zip
Reapply [LSR] Create fewer redundant instructions.
Summary: Fix LSRInstance::HoistInsertPosition() to check the original insert position block first for a canonical insertion point that is dominated by all inputs. This leads to SCEV being able to reuse more instructions since it currently tracks the instructions it creates for reuse by keeping a table of <Value, insert point> pairs. Originally reviewed in http://reviews.llvm.org/D18001 Reviewers: atrick Subscribers: llvm-commits, mzolotukhin, mcrosier Differential Revision: http://reviews.llvm.org/D18480 llvm-svn: 271929
Diffstat (limited to 'llvm/test/Transforms/LoopStrengthReduce/AArch64')
-rw-r--r--llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-reuse.ll34
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-reuse.ll b/llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-reuse.ll
new file mode 100644
index 00000000000..a2dfe81b108
--- /dev/null
+++ b/llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-reuse.ll
@@ -0,0 +1,34 @@
+; RUN: llc -mtriple=arm64-unknown-unknown -print-lsr-output < %s 2>&1 | FileCheck %s
+
+declare void @foo(i64)
+
+; Verify that redundant adds aren't inserted by LSR.
+; CHECK-LABEL: @bar(
+define void @bar(double* %A) {
+entry:
+ br label %while.cond
+
+while.cond:
+; CHECK-LABEL: while.cond:
+; CHECK: add i64 %lsr.iv, 1
+; CHECK-NOT: add i64 %lsr.iv, 1
+; CHECK-LABEL: land.rhs:
+ %indvars.iv28 = phi i64 [ %indvars.iv.next29, %land.rhs ], [ 50, %entry ]
+ %cmp = icmp sgt i64 %indvars.iv28, 0
+ br i1 %cmp, label %land.rhs, label %while.end
+
+land.rhs:
+ %indvars.iv.next29 = add nsw i64 %indvars.iv28, -1
+ %arrayidx = getelementptr inbounds double, double* %A, i64 %indvars.iv.next29
+ %Aload = load double, double* %arrayidx, align 8
+ %cmp1 = fcmp oeq double %Aload, 0.000000e+00
+ br i1 %cmp1, label %while.cond, label %if.end
+
+while.end:
+ %indvars.iv28.lcssa = phi i64 [ %indvars.iv28, %while.cond ]
+ tail call void @foo(i64 %indvars.iv28.lcssa)
+ br label %if.end
+
+if.end:
+ ret void
+}
OpenPOWER on IntegriCloud