[PATCH] D123449: [AArch64][SelectionDAG] Refactor to support more scalable vector extending stores

Allen zhong via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 14 10:33:55 PDT 2022


Allen added inline comments.


================
Comment at: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:7780
   if (StVT.isScalableVector())
-    report_fatal_error("Cannot scalarize scalable vector stores");
 
----------------
paulwalker-arm wrote:
> Allen wrote:
> > Allen wrote:
> > > paulwalker-arm wrote:
> > > > Thanks for the change @Allen.  Before accepting I just wanted to query this line.  What's the circumstance where it now triggers? (I tried `llvm-lit -v ../llvm-project/llvm/test/CodeGen/AArch64` without this change and nothing jumped out)  I ask because it's not immediate clear to me that the callers are happy for the scalarisation request to be ignored, hence the original error message.
> > > hi @paulwalker-arm,If we revert the following change, then we'll have 5 fail cases. I think none of them are Legal should also be work, as we pick them out are taken into account of the performance.
> > > 
> > > ```
> > > +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
> > > @@ -1214,12 +1214,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
> > >      }
> > >  
> > >      // Then, selectively enable those which we directly support.
> > > -    setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i8, Legal);
> > > -    setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i16, Legal);
> > > -    setTruncStoreAction(MVT::nxv2i64, MVT::nxv2i32, Legal);
> > > -    setTruncStoreAction(MVT::nxv4i32, MVT::nxv4i8, Legal);
> > > -    setTruncStoreAction(MVT::nxv4i32, MVT::nxv4i16, Legal);
> > > -    setTruncStoreAction(MVT::nxv8i16, MVT::nxv8i8, Legal);
> > > ```
> > > 
> > > the related failed cases
> > > ```
> > >  LLVM :: CodeGen/AArch64/spillfill-sve.ll
> > >   LLVM :: CodeGen/AArch64/sve-forward-st-to-ld.ll
> > >   LLVM :: CodeGen/AArch64/sve-split-store.ll
> > >   LLVM :: CodeGen/AArch64/sve-st1-addressing-mode-reg-reg.ll
> > >   LLVM :: CodeGen/AArch64/sve-trunc.ll
> > > ```
> > @paulwalker-arm, need I revert this line's change ?
> Your `setTruncStoreAction` related changes are fine.  I'm specifically only talking about the single line `report_fatal_error("Cannot scalarize scalable vector stores");`-> `return SDValue();` change.  This looks unnecessary and potentially wrong.  If I try this patch but with the `report_fatal_error` left intact I do not see any test failures.
sorry, may be I don't express clear!

I mean that, If I only keep the changes of setTruncStoreAction(VT, InnerVT, Expand) , but without picking out the ones, which are legal, then it will crash at report_fatal_error with above 5 test cases. 
So I change  report_fatal_error("Cannot scalarize scalable vector stores") into return SDValue() to avoid it.


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

https://reviews.llvm.org/D123449



More information about the llvm-commits mailing list