diff options
author | Florian Hahn <flo@fhahn.com> | 2024-08-27 11:55:47 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2024-08-27 11:55:47 +0100 |
commit | d43a80936d437d217d5a6dbbaa5fb131c27e7085 (patch) | |
tree | 6f44774df147763616a11934f6a03a2d8cd9bfd0 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | 7c188abb4fe28d9784b12125e6924df2ce7de078 (diff) | |
download | llvm-d43a80936d437d217d5a6dbbaa5fb131c27e7085.zip llvm-d43a80936d437d217d5a6dbbaa5fb131c27e7085.tar.gz llvm-d43a80936d437d217d5a6dbbaa5fb131c27e7085.tar.bz2 |
Revert "[LAA] Remove loop-invariant check added in 234cc40adc61."
This reverts commit a80053322b765eec93951e21db490c55521da2d8.
The new asserts exposed an underlying issue where the expanded bounds
could wrap, causing the parts of the code to incorrectly determine that
accesses do not overlap.
Reproducer below based on @mstorsjo's test case.
opt -passes='print<access-info>'
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
define i32 @j(ptr %P, i32 %x, i32 %y) {
entry:
%gep.P.4 = getelementptr inbounds nuw i8, ptr %P, i32 4
%gep.P.8 = getelementptr inbounds nuw i8, ptr %P, i32 8
br label %loop
loop:
%1 = phi i32 [ %x, %entry ], [ %sel, %loop.latch ]
%iv = phi i32 [ %y, %entry ], [ %iv.next, %loop.latch ]
%gep.iv = getelementptr inbounds i64, ptr %gep.P.8, i32 %iv
%l = load i32, ptr %gep.iv, align 4
%c.1 = icmp eq i32 %l, 3
br i1 %c.1, label %loop.latch, label %if.then
if.then: ; preds = %for.body
store i64 0, ptr %gep.iv, align 4
%l.2 = load i32, ptr %gep.P.4
br label %loop.latch
loop.latch:
%sel = phi i32 [ %l.2, %if.then ], [ %1, %loop ]
%iv.next = add nsw i32 %iv, 1
%c.2 = icmp slt i32 %iv.next, %sel
br i1 %c.2, label %loop, label %exit
exit:
%res = phi i32 [ %iv.next, %loop.latch ]
ret i32 %res
}
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
0 files changed, 0 insertions, 0 deletions