[clang] [Clang] Remove 3-element vector load and store special handling (PR #104661)
Craig Topper via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 15 17:39:32 PST 2024
================
@@ -2146,21 +2145,21 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, Address Addr,
Addr = Addr.withPointer(Builder.CreateThreadLocalAddress(GV),
NotKnownNonNull);
+ // Handles vectors of sizes that are likely to be expanded to a larger size
+ // to optimize performance.
llvm::Type *SrcTy = Value->getType();
if (const auto *ClangVecTy = Ty->getAs<VectorType>()) {
- auto *VecTy = dyn_cast<llvm::FixedVectorType>(SrcTy);
- if (!CGM.getCodeGenOpts().PreserveVec3Type) {
- // Handle vec3 special.
- if (VecTy && !ClangVecTy->isExtVectorBoolType() &&
- cast<llvm::FixedVectorType>(VecTy)->getNumElements() == 3) {
- // Our source is a vec3, do a shuffle vector to make it a vec4.
- Value = Builder.CreateShuffleVector(Value, ArrayRef<int>{0, 1, 2, -1},
- "extractVec");
- SrcTy = llvm::FixedVectorType::get(VecTy->getElementType(), 4);
+ if (auto *VecTy = dyn_cast<llvm::FixedVectorType>(SrcTy)) {
+ auto *NewVecTy = getTarget().getOptimalVectorType(VecTy, getLangOpts());
+ if (!ClangVecTy->isExtVectorBoolType() && VecTy != NewVecTy) {
+ SmallVector<int, 4> Mask(NewVecTy->getNumElements(), -1);
+ for (unsigned I = 0; I < VecTy->getNumElements(); ++I)
+ Mask[I] = I;
----------------
topperc wrote:
std::iota?
https://github.com/llvm/llvm-project/pull/104661
More information about the cfe-commits
mailing list