[llvm] 7982980 - [AMDGPUPromoteAlloca][NFC] Avoid unnecessary APInt/int64_t conversions (#157864)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 00:51:59 PDT 2025
Author: Fabian Ritter
Date: 2025-09-12T09:51:55+02:00
New Revision: 7982980e078481fb1c52360691206f10160b1e5a
URL: https://github.com/llvm/llvm-project/commit/7982980e078481fb1c52360691206f10160b1e5a
DIFF: https://github.com/llvm/llvm-project/commit/7982980e078481fb1c52360691206f10160b1e5a.diff
LOG: [AMDGPUPromoteAlloca][NFC] Avoid unnecessary APInt/int64_t conversions (#157864)
Follow-up to #157682
Added:
Modified:
llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
index 7dbe1235a98b5..ddabd25894414 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
@@ -406,6 +406,7 @@ static Value *GEPToVectorIndex(GetElementPtrInst *GEP, AllocaInst *Alloca,
SmallVector<Instruction *> &NewInsts) {
// TODO: Extracting a "multiple of X" from a GEP might be a useful generic
// helper.
+ LLVMContext &Ctx = GEP->getContext();
unsigned BW = DL.getIndexTypeSizeInBits(GEP->getType());
SmallMapVector<Value *, APInt, 4> VarOffsets;
APInt ConstOffset(BW, 0);
@@ -438,27 +439,24 @@ static Value *GEPToVectorIndex(GetElementPtrInst *GEP, AllocaInst *Alloca,
assert(CurPtr == Alloca && "GEP not based on alloca");
- unsigned VecElemSize = DL.getTypeAllocSize(VecElemTy);
+ int64_t VecElemSize = DL.getTypeAllocSize(VecElemTy);
if (VarOffsets.size() > 1)
return nullptr;
APInt IndexQuot;
- APInt Rem;
- APInt::sdivrem(ConstOffset, APInt(ConstOffset.getBitWidth(), VecElemSize),
- IndexQuot, Rem);
- if (!Rem.isZero())
+ int64_t Rem;
+ APInt::sdivrem(ConstOffset, VecElemSize, IndexQuot, Rem);
+ if (Rem != 0)
return nullptr;
if (VarOffsets.size() == 0)
- return ConstantInt::get(GEP->getContext(), IndexQuot);
+ return ConstantInt::get(Ctx, IndexQuot);
IRBuilder<> Builder(GEP);
const auto &VarOffset = VarOffsets.front();
APInt OffsetQuot;
- APInt::sdivrem(VarOffset.second,
- APInt(VarOffset.second.getBitWidth(), VecElemSize), OffsetQuot,
- Rem);
- if (!Rem.isZero() || OffsetQuot.isZero())
+ APInt::sdivrem(VarOffset.second, VecElemSize, OffsetQuot, Rem);
+ if (Rem != 0 || OffsetQuot.isZero())
return nullptr;
Value *Offset = VarOffset.first;
@@ -468,7 +466,7 @@ static Value *GEPToVectorIndex(GetElementPtrInst *GEP, AllocaInst *Alloca,
if (!OffsetQuot.isOne()) {
ConstantInt *ConstMul =
- ConstantInt::get(OffsetType, OffsetQuot.getSExtValue());
+ ConstantInt::get(Ctx, OffsetQuot.sext(OffsetType->getBitWidth()));
Offset = Builder.CreateMul(Offset, ConstMul);
if (Instruction *NewInst = dyn_cast<Instruction>(Offset))
NewInsts.push_back(NewInst);
@@ -477,7 +475,7 @@ static Value *GEPToVectorIndex(GetElementPtrInst *GEP, AllocaInst *Alloca,
return Offset;
ConstantInt *ConstIndex =
- ConstantInt::get(OffsetType, IndexQuot.getSExtValue());
+ ConstantInt::get(Ctx, IndexQuot.sext(OffsetType->getBitWidth()));
Value *IndexAdd = Builder.CreateAdd(Offset, ConstIndex);
if (Instruction *NewInst = dyn_cast<Instruction>(IndexAdd))
NewInsts.push_back(NewInst);
More information about the llvm-commits
mailing list