https://bugs.llvm.org/show_bug.cgi?id=52423
Bug ID: 52423
Summary: LFTR with wide backedge taken counts
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Loop Optimizer
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Created attachment 25423
--> https://bugs.llvm.org/attachment.cgi?id=25423&action=edit
WIP patch
This was noticed in the context of D109457, I don't yet know if it shows up
elsewhere, but I expect so.
test case:
; RUN: opt -indvars < %s -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"
declare void @bar()
define void @slt_constant_rhs(i16 %n.raw, i8 %start) mustprogress {
entry:
br label %for.body
for.body: ; preds = %entry, %for.body
%iv = phi i8 [ %iv.next, %for.body ], [ %start, %entry ]
%iv.next = add i8 %iv, 1
call void @bar()
%zext = zext i8 %iv.next to i16
%cmp = icmp slt i16 %zext, 254
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
ret void
}
With D109457 applied - so that we can compute a trip count for the loop - we
should be able to LFTR this loop.
Tracing through the code, we don't because the width of the BTC is 16, but the
width of the IV is 8. We unconditional reject this case.
I've attached a WIP patch which tries to check to see if we could legally
narrow the BTC, but it requires a few missing simplifications.
If D109457 ever lands, I'll probably finish this. I'm logging the bug mostly
so that the limitation doesn't get forgotten.
--
You are receiving this mail because:
You are on the CC list for the bug._______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs