[llvm] [TargetLowering][AMDGPU][ARM][RISCV][X86] Teach SimplifyDemandedBits to combine (srl (sra X, C1), ShAmt) -> sra(X, C1+ShAmt) (PR #101751)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 3 01:13:23 PDT 2024
topperc wrote:
> This patch breaks zext pattern:
>
> ```
> ; bin/llc -mtriple=riscv64 test.ll -o -
> define i32 @func0000000000000000(i32 signext %0, i16 signext %1) nounwind {
> entry:
> %2 = sdiv i16 %1, 2
> %3 = zext i16 %2 to i32
> %4 = add i32 %3, %0
> ret i32 %4
> }
> ```
>
> Before:
>
> ```
> func0000000000000000:
> slli a2, a1, 48
> srli a2, a2, 63
> add a1, a1, a2
> slli a1, a1, 48
> srai a1, a1, 48
> slli a1, a1, 47
> srli a1, a1, 48
> addw a0, a1, a0
> ret
> ```
>
> After:
>
> ```
> func0000000000000000:
> slli a2, a1, 48
> srli a2, a2, 63
> add a1, a1, a2
> slli a1, a1, 48
> srai a1, a1, 49
> lui a2, 16
> addi a2, a2, -1
> and a1, a1, a2
> addw a0, a1, a0
> ret
> ```
>
> `and X, 2^16-1` can be lowered to `(X << 48) u>> 48`.
Thanks. I think I have an idea how to fix it. We can do this https://alive2.llvm.org/ce/z/kUowrW
https://github.com/llvm/llvm-project/pull/101751
More information about the llvm-commits
mailing list