[PATCH] D96663: [InstCombine] Fold icmp (select c, const, arg), null if arg has nonnullattr
Juneyoung Lee via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 23 22:15:57 PST 2021
aqjune added a comment.
Instead of adding two transformations, I tweaked InstCombinerImpl::foldICmpInstWithConstantNotInt so it fires if icmp is comparing to null and select's true/false operands are either a constant or nonnullattr argument.
It allows:
%.0.i = select i1 %2, i8* null, i8* %x
%4 = icmp ne i8* %.0.i, null
call void @llvm.assume(i1 %4)
ret i8* %.0.1
=>
%.0.i = select i1 %2, i8* null, i8* %x
%temp = xor i1 %2, 1
call void @llvm.assume(i1 %temp)
ret i8* %.0.1
=>
...
ret i8* %x
BTW, fixing SimplifyCFG to replace phi operand with null doesn't work for the Rust example because phi is already folded into select before inlining. It roughly looks like this: https://godbolt.org/z/c38qon
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96663/new/
https://reviews.llvm.org/D96663
More information about the llvm-commits
mailing list