[clang] [llvm] [LLVM][SROA] Teach SROA how to "bitcast" between fixed and scalable vectors. (PR #130973)
Paul Walker via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 07:12:27 PDT 2025
================
@@ -554,6 +554,22 @@ class VectorType : public Type {
return VectorType::get(VTy->getElementType(), EltCnt * 2);
}
+ /// This static method returns a VectorType with the same size-in-bits as
+ /// SizeTy but with an element type that matches the scalar type of EltTy.
+ static VectorType *getWithSizeAndScalar(VectorType *SizeTy, Type *EltTy) {
+ if (SizeTy->getScalarType() == EltTy->getScalarType())
+ return SizeTy;
+
+ unsigned EltSize = EltTy->getScalarSizeInBits();
+ if (!SizeTy->getPrimitiveSizeInBits().isKnownMultipleOf(EltSize))
----------------
paulwalker-arm wrote:
Are you sure? The intent of this function is to create a VectorType that can be bitcasted, typically from/to `SizeTy`. When looking at `CastInst::castIsValid()` I can see it uses `getPrimitiveSizeInBits()` to determine validity.
To put another way, the check is ensuring the IR is consistent, essentially protecting against the case where the ElementCount calculation would be invalid. So I don't think this function cares about data layout?
https://github.com/llvm/llvm-project/pull/130973
More information about the cfe-commits
mailing list