[PATCH] D55600: [TargetLowering] Add ISD::OR + ISD::XOR handling to SimplifyDemandedVectorElts

Simon Pilgrim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 13 06:30:43 PST 2018


RKSimon marked an inline comment as done.
RKSimon added inline comments.


================
Comment at: test/CodeGen/X86/packss.ll:271-275
   %1 = shl <4 x i64> %a0, <i64 63, i64 0, i64 63, i64 0>
   %2 = ashr <4 x i64> %1, <i64 63, i64 0, i64 63, i64 0>
   %3 = bitcast <4 x i64> %2 to <8 x i32>
   %4 = shufflevector <8 x i32> %3, <8 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
   %5 = trunc <8 x i32> %4 to <8 x i16>
----------------
andreadb wrote:
> Unrelated to this patch.
> 
> This may be hard to catch...
> 
> On AVX2 and AVX, we could probably simplify it to this (didn't verify that the shuffle mask is correct):
> 
> ```
> vpslld    $31, %ymm0, %ymm0
> vpsrad  $31, %ymm0, %ymm0
> vpshufd $1, %ymm0, %ymm0
> vextractf128 $1, %ymm0, %xmm1
> vpackssdw %xmm1, %xmm0, %xmm0
> ```
> 
> That would require quite a lot of knowledge about both demanded bits and demanded elts. Also, it requires that we sink the bitcast in the shift operands, and then we shuffle elements after.
> 
> This may be something worthy to investigate in future..
SimplifyDemandedVectorElts doesn't handle shifts yet - its on the list, but as you can see just OR/XOR support causes a lot a diffs!


Repository:
  rL LLVM

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

https://reviews.llvm.org/D55600





More information about the llvm-commits mailing list