[llvm] 0722f3d - Revert rGb803294cf78714303db2d3647291a2308347ef23 : "[InstCombine] Fold (select C, (gep Ptr, Idx), Ptr) -> (gep Ptr, (select C, Idx, 0)) (PR50183)"
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 14 03:49:03 PDT 2021
Author: Simon Pilgrim
Date: 2021-07-14T11:48:37+01:00
New Revision: 0722f3d0fad16d2427acf66a591bf3597fd0e0d8
URL: https://github.com/llvm/llvm-project/commit/0722f3d0fad16d2427acf66a591bf3597fd0e0d8
DIFF: https://github.com/llvm/llvm-project/commit/0722f3d0fad16d2427acf66a591bf3597fd0e0d8.diff
LOG: Revert rGb803294cf78714303db2d3647291a2308347ef23 : "[InstCombine] Fold (select C, (gep Ptr, Idx), Ptr) -> (gep Ptr, (select C, Idx, 0)) (PR50183)"
Missed some BPF test changes that need addressing
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
llvm/test/Transforms/InstCombine/select-gep.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
index fb9750d59e656..eadc826c7190d 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -2933,33 +2933,6 @@ Instruction *InstCombinerImpl::visitSelectInst(SelectInst &SI) {
if (Instruction *I = foldSelectExtConst(SI))
return I;
- // Fold (select C, (gep Ptr, Idx), Ptr) -> (gep Ptr, (select C, Idx, 0))
- // Fold (select C, Ptr, (gep Ptr, Idx)) -> (gep Ptr, (select C, 0, Idx))
- auto SelectGepWithBase = [&](GetElementPtrInst *Gep, Value *Base,
- bool Swap) -> GetElementPtrInst * {
- Value *Ptr = Gep->getPointerOperand();
- if (Gep->getNumOperands() != 2 || Gep->getPointerOperand() != Base ||
- !Gep->hasOneUse())
- return nullptr;
- Type *ElementType = Gep->getResultElementType();
- Value *Idx = Gep->getOperand(1);
- Value *NewT = Idx;
- Value *NewF = Constant::getNullValue(Idx->getType());
- if (Swap)
- std::swap(NewT, NewF);
- Value *NewSI =
- Builder.CreateSelect(CondVal, NewT, NewF, SI.getName() + ".idx", &SI);
- return Gep->isInBounds()
- ? GetElementPtrInst::CreateInBounds(ElementType, Ptr, {NewSI})
- : GetElementPtrInst::Create(ElementType, Ptr, {NewSI});
- };
- if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal))
- if (auto *NewGep = SelectGepWithBase(TrueGep, FalseVal, false))
- return NewGep;
- if (auto *FalseGep = dyn_cast<GetElementPtrInst>(FalseVal))
- if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true))
- return NewGep;
-
// See if we can fold the select into one of our operands.
if (SelType->isIntOrIntVectorTy() || SelType->isFPOrFPVectorTy()) {
if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal))
diff --git a/llvm/test/Transforms/InstCombine/select-gep.ll b/llvm/test/Transforms/InstCombine/select-gep.ll
index bba67091b3fa2..77710cee416d2 100644
--- a/llvm/test/Transforms/InstCombine/select-gep.ll
+++ b/llvm/test/Transforms/InstCombine/select-gep.ll
@@ -74,9 +74,9 @@ define i32* @test2(i32* %p, i64 %x, i64 %y) {
; PR50183
define i32* @test2a(i32* %p, i64 %x, i64 %y) {
; CHECK-LABEL: @test2a(
-; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT: [[SELECT_IDX:%.*]] = select i1 [[CMP]], i64 [[X]], i64 0
-; CHECK-NEXT: [[SELECT:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[SELECT_IDX]]
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
+; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP]], i32* [[P]]
; CHECK-NEXT: ret i32* [[SELECT]]
;
%gep = getelementptr inbounds i32, i32* %p, i64 %x
@@ -88,9 +88,9 @@ define i32* @test2a(i32* %p, i64 %x, i64 %y) {
; PR50183
define i32* @test2b(i32* %p, i64 %x, i64 %y) {
; CHECK-LABEL: @test2b(
-; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT: [[SELECT_IDX:%.*]] = select i1 [[CMP]], i64 0, i64 [[X]]
-; CHECK-NEXT: [[SELECT:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[SELECT_IDX]]
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
+; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], i32* [[P]], i32* [[GEP]]
; CHECK-NEXT: ret i32* [[SELECT]]
;
%gep = getelementptr inbounds i32, i32* %p, i64 %x
More information about the llvm-commits
mailing list