[PATCH] D107766: [InstCombine] Get rid of `hasOneUses()` when swapping `lshr` and `zext`
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 9 08:59:31 PDT 2021
spatel added a comment.
If we want to solve this as an instcombine (or maybe aggressive-instcombine) problem, we have to expand the pattern to make it clearly profitable. I'm not sure how to generalize it, but we can do the narrowing starting from the trunc and remove an instruction:
https://alive2.llvm.org/ce/z/lwtDwZ
define i16 @src(i8 %x) {
%z = zext i8 %x to i32
%s = lshr i32 %z, 1
%a = add nuw nsw i32 %s, %z
%s2 = lshr i32 %a, 2
%t = trunc i32 %s2 to i16
ret i16 %t
}
define i16 @tgt(i8 %x) {
%z = zext i8 %x to i16
%s = lshr i16 %z, 1
%a = add nuw nsw i16 %s, %z
%s2 = lshr i16 %a, 2
ret i16 %s2
}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D107766/new/
https://reviews.llvm.org/D107766
More information about the llvm-commits
mailing list