[PATCH] D111836: [indvars] Use fact loop must exit to canonicalize to unsigned conditions
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 25 06:23:46 PDT 2021
spatel added a comment.
This patch causes an infinite loop in a compiled program:
https://llvm.org/PR52276
Here's an IR reduction of that example that shows what appears to be a miscompile with "opt -indvars" :
define i32 @PR52276(i32 %a, i32* %p) {
entry:
%cmp = icmp sgt i32 %a, 0
%conv = zext i1 %cmp to i32
%neg = xor i32 %a, -1
%cmp1 = icmp slt i32 %conv, %neg ; !!! This compare changes to ult
br i1 %cmp1, label %ph, label %exit
ph:
%b = load i32, i32* %p, align 4
br label %loop
loop:
%inc1 = phi i32 [ %b, %ph ], [ %inc, %loop ]
%inc = add nsw i32 %inc1, 1
br i1 %cmp1, label %loop, label %crit_edge, !llvm.loop !0
crit_edge:
%inc2 = phi i32 [ %inc, %loop ]
store i32 %inc2, i32* %p, align 4
br label %exit
exit:
ret i32 0
}
!0 = distinct !{!0, !1}
!1 = !{!"llvm.loop.mustprogress"}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111836/new/
https://reviews.llvm.org/D111836
More information about the llvm-commits
mailing list