[PATCH] D82211: [SVE] Remove calls to VectorType::getNumElements from ExecutionEngine

Sander de Smalen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 23 08:31:27 PDT 2020


sdesmalen added inline comments.


================
Comment at: llvm/lib/ExecutionEngine/ExecutionEngine.cpp:630
         // if the whole vector is 'undef' just reserve memory for the value.
-        auto *VTy = cast<VectorType>(C->getType());
+        auto *VTy = cast<FixedVectorType>(C->getType());
         Type *ElemTy = VTy->getElementType();
----------------
fpetrogalli wrote:
> Like you have done below, it would be useful to have the following comment before the explicit cast:
> 
> ```
> // FIXME: this needs to handle scalable vectors correctly
> ```
> 
> On a side note - haven't you changed the compiler behavior here? What was resulting in a warning (taking this case for a scalable vector) would be resulting in a crash (if I understand correctly).
> 
> Given that the scalable case will look different from the fixed width one, why not just duplicate the code for each of the two case statements, making sure that the scalable one uses scalable vectors (with the current behavior) and the fixed vector one uses fixed vectors (with the warning removed). Something like:
> 
> ```
>       case Type::FixedVectorTyID:
>         // if the whole vector is 'undef' just reserve memory for the value.
>         auto *VTy = cast<FixedVectorType>(C->getType());
>         Type *ElemTy = VTy->getElementType();
>         unsigned int elemNum = VTy->getNumElements();
>         Result.AggregateVal.resize(elemNum);
>         if (ElemTy->isIntegerTy())
>           for (unsigned int i = 0; i < elemNum; ++i)
>             Result.AggregateVal[i].IntVal =
>                 APInt(ElemTy->getPrimitiveSizeInBits(), 0);
>         break;
>       case Type::ScalableVectorTyID:
>         // if the whole vector is 'undef' just reserve memory for the value.
>         auto *VTy = cast<ScalableVectorType>(C->getType());
>         Type *ElemTy = VTy->getElementType();
>         // FIX ME: fix implementation for scalable vectors
>         unsigned int elemNum = VTy->getElementCount().Min;
>         Result.AggregateVal.resize(elemNum);
>         if (ElemTy->isIntegerTy())
>           for (unsigned int i = 0; i < elemNum; ++i)
>             Result.AggregateVal[i].IntVal =
>                 APInt(ElemTy->getPrimitiveSizeInBits(), 0);
>         break;
> ```
Would this not be sufficient:
```case Type::ScalableVectorTyID:
  // FIXME: Add ExecutionEngine support for scalable vectors
  report_fatal_error("Scalable vector support not yet implemented in ExecutionEngine");```
?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82211





More information about the llvm-commits mailing list