Skip to content

Commit 9a86d0a

Browse files
committed
[InstCombine] Prefer source over result element type (NFC)
For single-index GEPs the source and result element types are the same, but using the source type is semantically more correct.
1 parent 94a6b9c commit 9a86d0a

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ Instruction *InstCombinerImpl::foldSelectOpOp(SelectInst &SI, Instruction *TI,
485485
}
486486
if (auto *TGEP = dyn_cast<GetElementPtrInst>(TI)) {
487487
auto *FGEP = cast<GetElementPtrInst>(FI);
488-
Type *ElementType = TGEP->getResultElementType();
488+
Type *ElementType = TGEP->getSourceElementType();
489489
return TGEP->isInBounds() && FGEP->isInBounds()
490490
? GetElementPtrInst::CreateInBounds(ElementType, Op0, {Op1})
491491
: GetElementPtrInst::Create(ElementType, Op0, {Op1});
@@ -3706,7 +3706,7 @@ Instruction *InstCombinerImpl::visitSelectInst(SelectInst &SI) {
37063706
Value *Idx = Gep->getOperand(1);
37073707
if (isa<VectorType>(CondVal->getType()) && !isa<VectorType>(Idx->getType()))
37083708
return nullptr;
3709-
Type *ElementType = Gep->getResultElementType();
3709+
Type *ElementType = Gep->getSourceElementType();
37103710
Value *NewT = Idx;
37113711
Value *NewF = Constant::getNullValue(Idx->getType());
37123712
if (Swap)

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2973,10 +2973,10 @@ Instruction *InstCombinerImpl::visitGetElementPtrInst(GetElementPtrInst &GEP) {
29732973
cast<OverflowingBinaryOperator>(GEP.getOperand(1))->hasNoSignedWrap(),
29742974
Idx1, Idx2);
29752975
auto *NewPtr =
2976-
Builder.CreateGEP(GEP.getResultElementType(), GEP.getPointerOperand(),
2976+
Builder.CreateGEP(GEP.getSourceElementType(), GEP.getPointerOperand(),
29772977
Idx1, "", IsInBounds);
29782978
return replaceInstUsesWith(
2979-
GEP, Builder.CreateGEP(GEP.getResultElementType(), NewPtr, Idx2, "",
2979+
GEP, Builder.CreateGEP(GEP.getSourceElementType(), NewPtr, Idx2, "",
29802980
IsInBounds));
29812981
}
29822982
ConstantInt *C;
@@ -2991,12 +2991,12 @@ Instruction *InstCombinerImpl::visitGetElementPtrInst(GetElementPtrInst &GEP) {
29912991
bool IsInBounds = CanPreserveInBounds(
29922992
/*IsNSW=*/true, Idx1, C);
29932993
auto *NewPtr = Builder.CreateGEP(
2994-
GEP.getResultElementType(), GEP.getPointerOperand(),
2994+
GEP.getSourceElementType(), GEP.getPointerOperand(),
29952995
Builder.CreateSExt(Idx1, GEP.getOperand(1)->getType()), "",
29962996
IsInBounds);
29972997
return replaceInstUsesWith(
29982998
GEP,
2999-
Builder.CreateGEP(GEP.getResultElementType(), NewPtr,
2999+
Builder.CreateGEP(GEP.getSourceElementType(), NewPtr,
30003000
Builder.CreateSExt(C, GEP.getOperand(1)->getType()),
30013001
"", IsInBounds));
30023002
}

0 commit comments

Comments
 (0)