[llvm] AMDGPU/PromoteAlloca: Refactor into analysis / commit phases (PR #170512)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 10 06:12:11 PST 2025
================
@@ -442,69 +543,58 @@ static Value *GEPToVectorIndex(GetElementPtrInst *GEP, AllocaInst *Alloca,
int64_t VecElemSize = DL.getTypeAllocSize(VecElemTy);
if (VarOffsets.size() > 1)
- return nullptr;
+ return {};
APInt IndexQuot;
int64_t Rem;
APInt::sdivrem(ConstOffset, VecElemSize, IndexQuot, Rem);
if (Rem != 0)
- return nullptr;
- if (VarOffsets.size() == 0)
- return ConstantInt::get(Ctx, IndexQuot);
+ return {};
+
+ GEPToVectorIndex Result;
- IRBuilder<> Builder(GEP);
+ if (!ConstOffset.isZero())
+ Result.ConstIndex = ConstantInt::get(Ctx, IndexQuot.sextOrTrunc(BW));
+
+ if (VarOffsets.empty())
+ return Result;
const auto &VarOffset = VarOffsets.front();
APInt OffsetQuot;
APInt::sdivrem(VarOffset.second, VecElemSize, OffsetQuot, Rem);
if (Rem != 0 || OffsetQuot.isZero())
- return nullptr;
-
- Value *Offset = VarOffset.first;
- if (!isa<IntegerType>(Offset->getType()))
- return nullptr;
+ return {};
- Offset = Builder.CreateSExtOrTrunc(Offset, Builder.getIntNTy(BW));
- if (Offset != VarOffset.first)
- NewInsts.push_back(cast<Instruction>(Offset));
+ Result.VarIndex = VarOffset.first;
+ auto *OffsetType = dyn_cast<IntegerType>(Result.VarIndex->getType());
+ if (!OffsetType)
+ return {};
if (!OffsetQuot.isOne()) {
- ConstantInt *ConstMul = ConstantInt::get(Ctx, OffsetQuot.sextOrTrunc(BW));
- Offset = Builder.CreateMul(Offset, ConstMul);
- if (Instruction *NewInst = dyn_cast<Instruction>(Offset))
- NewInsts.push_back(NewInst);
+ Result.VarMul = ConstantInt::get(Ctx, OffsetQuot.sextOrTrunc(BW));
----------------
ruiling wrote:
No parenthesis.
https://github.com/llvm/llvm-project/pull/170512
More information about the llvm-commits
mailing list