[PATCH] D62100: [DAGCombine][X86][AMDGPU][AArch64] (srl (shl x, c1), c2) with c1 != c2 handling

Simon Pilgrim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 26 11:34:54 PDT 2019


RKSimon added inline comments.


================
Comment at: test/CodeGen/AArch64/arm64-bitfield-extract.ll:396
 ; LLC-NEXT:    ldr w8, [x0]
+; LLC-NEXT:    and w8, w8, #0x3ffffff8
 ; LLC-NEXT:    bfxil w8, w1, #16, #3
----------------
lebedev.ri wrote:
> After actually looking at `-debug` output, this regression happens because of `SimplifyDemandedBits()`,
> which ignores `AArch64TargetLowering::isDesirableToCommuteWithShift()` override.
> So when we get to `AArch64TargetLowering::isBitfieldExtractOp()`, we have
> ```
> t18: i32 = srl t15, Constant:i64<2>
>   t15: i32 = or t26, t24
>     t26: i32 = and t7, Constant:i32<1073741816>
>       t7: i32,ch = load<(load 4 from %ir.y, align 8)> t0, t2, undef:i64
>         t2: i64,ch = CopyFromReg t0, Register:i64 %0
>           t1: i64 = Register %0
>         t6: i64 = undef
>       t25: i32 = Constant<1073741816>
>     t24: i32 = and t12, Constant:i32<4>
>       t12: i32 = srl t4, Constant:i64<16>
>         t4: i32,ch = CopyFromReg t0, Register:i32 %1
>           t3: i32 = Register %1
>         t11: i64 = Constant<16>
>       t23: i32 = Constant<4>
>   t17: i64 = Constant<2>
> ```
> I'm not sure how to turn this pattern on it's head to produce `ubfx` again.
@lebedev.ri Which SimplifyDemandedBits transforms is missing this?


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62100/new/

https://reviews.llvm.org/D62100





More information about the llvm-commits mailing list