[llvm] [SeparateConstOffsetFromGEP] Support GEP reordering for different types (PR #90802)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue May 7 17:31:55 PDT 2024
================
@@ -972,22 +972,23 @@ SeparateConstOffsetFromGEP::lowerToArithmetics(GetElementPtrInst *Variadic,
bool SeparateConstOffsetFromGEP::reorderGEP(GetElementPtrInst *GEP,
TargetTransformInfo &TTI) {
- Type *GEPType = GEP->getResultElementType();
+ Type *GEPType = GEP->getSourceElementType();
// TODO: support reordering for non-trivial GEP chains
if (GEPType->isAggregateType() || GEP->getNumIndices() != 1)
return false;
auto PtrGEP = dyn_cast<GetElementPtrInst>(GEP->getPointerOperand());
if (!PtrGEP)
return false;
- Type *PtrGEPType = PtrGEP->getResultElementType();
+ Type *PtrGEPType = PtrGEP->getSourceElementType();
// TODO: support reordering for non-trivial GEP chains
if (PtrGEPType->isAggregateType() || PtrGEP->getNumIndices() != 1)
return false;
- // TODO: support reordering for non-trivial GEP chains
- if (PtrGEPType != GEPType ||
- PtrGEP->getSourceElementType() != GEP->getSourceElementType())
+ bool GEPIsPtr = GEPType->getScalarType()->isPtrOrPtrVectorTy();
+ bool PtrGEPIsPtr = PtrGEPType->getScalarType()->isPtrOrPtrVectorTy();
+
+ if (GEPIsPtr != PtrGEPIsPtr)
----------------
nikic wrote:
What's the point of this check? Why do we care that the source element type is a pointer or vector of pointers?
https://github.com/llvm/llvm-project/pull/90802
More information about the llvm-commits
mailing list