Skip to content

Commit cf00036

Browse files
nikicAlexisPerry
authored andcommitted
[InstCombine] Preserve all gep flags in gep of select fold
1 parent 6218edf commit cf00036

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,10 +2332,10 @@ static Instruction *foldSelectGEP(GetElementPtrInst &GEP,
23322332
// Propagate 'inbounds' and metadata from existing instructions.
23332333
// Note: using IRBuilder to create the constants for efficiency.
23342334
SmallVector<Value *, 4> IndexC(GEP.indices());
2335-
bool IsInBounds = GEP.isInBounds();
2335+
GEPNoWrapFlags NW = GEP.getNoWrapFlags();
23362336
Type *Ty = GEP.getSourceElementType();
2337-
Value *NewTrueC = Builder.CreateGEP(Ty, TrueC, IndexC, "", IsInBounds);
2338-
Value *NewFalseC = Builder.CreateGEP(Ty, FalseC, IndexC, "", IsInBounds);
2337+
Value *NewTrueC = Builder.CreateGEP(Ty, TrueC, IndexC, "", NW);
2338+
Value *NewFalseC = Builder.CreateGEP(Ty, FalseC, IndexC, "", NW);
23392339
return SelectInst::Create(Cond, NewTrueC, NewFalseC, "", nullptr, Sel);
23402340
}
23412341

llvm/test/Transforms/InstCombine/getelementptr.ll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,4 +1760,24 @@ define ptr @gep_to_i8_nusw_nuw(ptr %p) {
17601760
ret ptr %gep
17611761
}
17621762

1763+
define ptr @gep_sel_const(i1 %c) {
1764+
; CHECK-LABEL: @gep_sel_const(
1765+
; CHECK-NEXT: [[GEP:%.*]] = select i1 [[C:%.*]], ptr getelementptr (i8, ptr @A, i64 5), ptr getelementptr (i8, ptr @B, i64 5)
1766+
; CHECK-NEXT: ret ptr [[GEP]]
1767+
;
1768+
%sel = select i1 %c, ptr @A, ptr @B
1769+
%gep = getelementptr i8, ptr %sel, i64 5
1770+
ret ptr %gep
1771+
}
1772+
1773+
define ptr @gep_sel_const_nuw(i1 %c) {
1774+
; CHECK-LABEL: @gep_sel_const_nuw(
1775+
; CHECK-NEXT: [[GEP:%.*]] = select i1 [[C:%.*]], ptr getelementptr nuw (i8, ptr @A, i64 5), ptr getelementptr nuw (i8, ptr @B, i64 5)
1776+
; CHECK-NEXT: ret ptr [[GEP]]
1777+
;
1778+
%sel = select i1 %c, ptr @A, ptr @B
1779+
%gep = getelementptr nuw i8, ptr %sel, i64 5
1780+
ret ptr %gep
1781+
}
1782+
17631783
!0 = !{!"branch_weights", i32 2, i32 10}

0 commit comments

Comments
 (0)