[all-commits] [llvm/llvm-project] 547544: [InstSimplify] Allow gep inbounds x, 0 -> x in non...
Nikita Popov via All-commits
all-commits at lists.llvm.org
Fri Jul 14 07:17:54 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 547544112b60da4c6a75210ca4fc6e3bd05914ec
https://github.com/llvm/llvm-project/commit/547544112b60da4c6a75210ca4fc6e3bd05914ec
Author: Nikita Popov <npopov at redhat.com>
Date: 2023-07-14 (Fri, 14 Jul 2023)
Changed paths:
M llvm/lib/Analysis/InstructionSimplify.cpp
M llvm/test/Transforms/InstCombine/select.ll
Log Message:
-----------
[InstSimplify] Allow gep inbounds x, 0 -> x in non-refining op replacement
After the semantics change from https://reviews.llvm.org/D154051,
gep inbounds x, 0 can no longer produce poison. As such, we can
also perform this fold during non-refining operand replacement
and avoid unnecessary drops of the inbounds flag.
The online alive2 version has not been update to the new
semantics yet, but we can use the following proof locally:
define ptr @src(ptr %base, i64 %offset) {
%cmp = icmp eq i64 %offset, 0
%gep = getelementptr inbounds i8, ptr %base, i64 %offset
%sel = select i1 %cmp, ptr %base, ptr %gep
ret ptr %sel
}
define ptr @tgt(ptr %base, i64 %offset) {
%gep = getelementptr inbounds i8, ptr %base, i64 %offset
ret ptr %gep
}
More information about the All-commits
mailing list