[PATCH] D94073: [RISCV] Add vector integer mul/mulh/div/rem ISel patterns

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 5 10:14:44 PST 2021


craig.topper added a comment.

In D94073#2478965 <https://reviews.llvm.org/D94073#2478965>, @frasercrmck wrote:

> For a bit more context around the (surprising) `createConstant` issue:
>
>   // In other cases the element type is illegal and needs to be expanded, for
>   // example v2i64 on MIPS32. In this case, find the nearest legal type, split
>   // the value into n parts and use a vector type with n-times the elements.
>   // Then bitcast to the type requested.
>   // Legalizing constants too early makes the DAGCombiner's job harder so we
>   // only legalize if the DAG tells us we must produce legal types.
>   else if (NewNodesMustHaveLegalTypes && VT.isVector() &&
>            TLI->getTypeAction(*getContext(), EltVT) ==
>            TargetLowering::TypeExpandInteger) {
>     const APInt &NewVal = Elt->getValue();
>     EVT ViaEltVT = TLI->getTypeToTransformTo(*getContext(), EltVT);
>     unsigned ViaEltSizeInBits = ViaEltVT.getSizeInBits();
>     unsigned ViaVecNumElts = VT.getSizeInBits() / ViaEltSizeInBits;
>     EVT ViaVecVT = EVT::getVectorVT(*getContext(), ViaEltVT, ViaVecNumElts);
>   
>     // Check the temporary vector is the correct size. If this fails then
>     // getTypeToTransformTo() probably returned a type whose size (in bits)
>     // isn't a power-of-2 factor of the requested type size.
>     assert(ViaVecVT.getSizeInBits() == VT.getSizeInBits());
>
> It should be obvious to see how this has no chance of working for scalable vectors.
>
> I don't fully understand the constraints on `NewNodesMustHaveLegalTypes`: is it permissible to ask the target to custom-lower this case if they've marked `SPLAT_VECTOR` as `Custom`? Obviously we'd like this to be lowered to our `SPLAT_VECTOR_I64` if possible and to our custom sequence otherwise.

I'm not sure if we can call the custom handlers from inside of createConstant. We're technically in DAG combine not a legalization step. Why is DAGCombiner calling createConstant?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D94073



More information about the llvm-commits mailing list