Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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. Reviewers: atrick Subscribers: mcrosier, mzolotukhin, llvm-commits Differential Revision: http://reviews.llvm.org/D18001 llvm-svn: 263644
- Loading branch information
1 parent
46bf454
commit 459b750
Showing
2 changed files
with
56 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-reuse.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |