[llvm] [InstCombine] Handle more scalable geps in EmitGEPOffset (PR #71699)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 10 05:41:45 PST 2023
================
@@ -36,25 +36,18 @@ Value *llvm::emitGEPOffset(IRBuilderBase *Builder, const DataLayout &DL,
Result = Offset;
};
- // Build a mask for high order bits.
- unsigned IntPtrWidth = IntIdxTy->getScalarType()->getIntegerBitWidth();
- uint64_t PtrSizeMask =
- std::numeric_limits<uint64_t>::max() >> (64 - IntPtrWidth);
-
gep_type_iterator GTI = gep_type_begin(GEP);
for (User::op_iterator i = GEP->op_begin() + 1, e = GEP->op_end(); i != e;
++i, ++GTI) {
Value *Op = *i;
- TypeSize TSize = DL.getTypeAllocSize(GTI.getIndexedType());
- uint64_t Size = TSize.getKnownMinValue() & PtrSizeMask;
if (Constant *OpC = dyn_cast<Constant>(Op)) {
if (OpC->isZeroValue())
continue;
// Handle a struct index, which adds its field offset to the pointer.
if (StructType *STy = GTI.getStructTypeOrNull()) {
uint64_t OpValue = OpC->getUniqueInteger().getZExtValue();
- Size = DL.getStructLayout(STy)->getElementOffset(OpValue);
+ unsigned Size = DL.getStructLayout(STy)->getElementOffset(OpValue);
----------------
nikic wrote:
```suggestion
uint64_t Size = DL.getStructLayout(STy)->getElementOffset(OpValue);
```
https://github.com/llvm/llvm-project/pull/71699
More information about the llvm-commits
mailing list