[PATCH] D133282: [TargetLowering][X86][AMDGPU] Teach expandMUL_LOHI to handle a mix of sign and zero extend.
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 5 12:20:31 PDT 2022
craig.topper added a comment.
In D133282#3770947 <https://reviews.llvm.org/D133282#3770947>, @spatel wrote:
> Should we have a generic combine instead?
>
> If we have something like this - https://alive2.llvm.org/ce/z/NAmVa3 - then it's always better to get rid of the mul unless we have 'minsize':
>
> define i32 @src(i32 %x, i32 %y) {
> %ysign = ashr i32 %y, 31
> %m = mul i32 %x, %ysign
> ret i32 %m
> }
>
> define i32 @tgt(i32 %x, i32 %y) {
> %isneg = icmp slt i32 %y, 0
> %negx = sub i32 0, %x
> %m = select i1 %isneg, i32 %negx, i32 0
> ret i32 %m
> }
>
>
>
> % llc -o - mul.ll -mtriple=riscv32 -mattr=m
> srai a1, a1, 31
> mul a0, a0, a1
> ...
> neg a0, a0
> srai a1, a1, 31
> and a0, a1, a0
>
> % llc -o - mul.ll -mtriple=aarch64
> asr w8, w1, #31
> mul w0, w0, w8
> ...
> neg w8, w0
> and w0, w8, w1, asr #31
>
> % llc -o - mul.ll -mtriple=x86_64
> movl %esi, %eax
> sarl $31, %eax
> imull %edi, %eax
> ...
> movl %esi, %eax
> negl %edi
> sarl $31, %eax
> andl %edi, %eax
Would we do a second combine for (add Z, (and X, (neg Y)) to get the (sub Z, (and X, Y))?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D133282/new/
https://reviews.llvm.org/D133282
More information about the llvm-commits
mailing list