[PATCH] D115724: [InstCombine] Fold for masked scatters to a uniform address

Sander de Smalen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 16 13:28:55 PST 2021


sdesmalen added inline comments.


================
Comment at: llvm/test/Transforms/InstCombine/vscale_masked_intrinsics.ll:16
+  %broadcast.splatvalue = shufflevector <vscale x 4 x i16> %broadcast.value, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
+  call void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16> %broadcast.splatvalue, <vscale x 4 x i16*> %broadcast.splat, i32 2, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i32 1), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
+  ret void
----------------
CarolineConcatto wrote:
> sdesmalen wrote:
> > instead of passing an all true mask, you could simply insert 1 `i1 1` element into a zeroinitializer
> I have updated the all zero mask to be:
> <vscale x 4 x i1> zeroinitializer, 
> I don't know if I follow what you want here.
The comment says:
  ;; Value splat and  mask is not not all active/one

Yet in the test it uses an all-poison mask:

  <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i32 1), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer

this inserts `i1 1` into element 1 (not zero) of a poison vector, so you get:
  <poison, 1, poison, poison, ... >

and then does a splat of element 0, leading to
  <poison, poison, poison, poison, ...>

If you want to pass a mask that is not all active *and* not all ones *and* not all `poison`, I think you want something like this:

  <vscale x 4 x i1> insertelement (<vscale x 4 x i1> zeroinitializer, i1 true, i32 1)
  <=>
  <0, 1, 0, 0, ...>


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115724



More information about the llvm-commits mailing list