Skip to content

Commit 8d32322

Browse files
author
git apple-llvm automerger
committed
Merge commit 'eb3f2be36df4' from llvm.org/main into next
2 parents aa56848 + eb3f2be commit 8d32322

File tree

2 files changed

+50
-8
lines changed

2 files changed

+50
-8
lines changed

llvm/lib/Analysis/PHITransAddr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ Value *PHITransAddr::insertTranslatedSubExpr(
390390
InVal->getName() + ".phi.trans.insert",
391391
PredBB->getTerminator()->getIterator());
392392
Result->setDebugLoc(Inst->getDebugLoc());
393-
Result->setIsInBounds(GEP->isInBounds());
393+
Result->setNoWrapFlags(GEP->getNoWrapFlags());
394394
NewInsts.push_back(Result);
395395
return Result;
396396
}

llvm/test/Transforms/GVN/PRE/pre-load.ll

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,48 @@ block4:
147147
ret i32 %PRE
148148
}
149149

150+
; Same as test4, with a nuw flag on the GEP.
151+
define i32 @test4_nuw(ptr %p, ptr %q, ptr %Hack, i1 %C) {
152+
; CHECK-LABEL: @test4_nuw(
153+
; CHECK-NEXT: block1:
154+
; CHECK-NEXT: br i1 [[C:%.*]], label [[BLOCK2:%.*]], label [[BLOCK3:%.*]]
155+
; CHECK: block2:
156+
; CHECK-NEXT: [[P3_PHI_TRANS_INSERT:%.*]] = getelementptr nuw i32, ptr [[Q:%.*]], i32 1
157+
; CHECK-NEXT: [[PRE_PRE:%.*]] = load i32, ptr [[P3_PHI_TRANS_INSERT]], align 4
158+
; CHECK-NEXT: br label [[BLOCK4:%.*]]
159+
; CHECK: block3:
160+
; CHECK-NEXT: [[B:%.*]] = getelementptr i32, ptr [[Q]], i32 1
161+
; CHECK-NEXT: store ptr [[B]], ptr [[HACK:%.*]], align 8
162+
; CHECK-NEXT: [[A:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1
163+
; CHECK-NEXT: store i32 0, ptr [[A]], align 4
164+
; CHECK-NEXT: br label [[BLOCK4]]
165+
; CHECK: block4:
166+
; CHECK-NEXT: [[PRE:%.*]] = phi i32 [ 0, [[BLOCK3]] ], [ [[PRE_PRE]], [[BLOCK2]] ]
167+
; CHECK-NEXT: [[P2:%.*]] = phi ptr [ [[P]], [[BLOCK3]] ], [ [[Q]], [[BLOCK2]] ]
168+
; CHECK-NEXT: [[P3:%.*]] = getelementptr nuw i32, ptr [[P2]], i32 1
169+
; CHECK-NEXT: ret i32 [[PRE]]
170+
;
171+
block1:
172+
br i1 %C, label %block2, label %block3
173+
174+
block2:
175+
br label %block4
176+
177+
block3:
178+
%B = getelementptr i32, ptr %q, i32 1
179+
store ptr %B, ptr %Hack
180+
181+
%A = getelementptr i32, ptr %p, i32 1
182+
store i32 0, ptr %A
183+
br label %block4
184+
185+
block4:
186+
%P2 = phi ptr [%p, %block3], [%q, %block2]
187+
%P3 = getelementptr nuw i32, ptr %P2, i32 1
188+
%PRE = load i32, ptr %P3
189+
ret i32 %PRE
190+
}
191+
150192
;void test5(int N, ptr G) {
151193
; int j;
152194
; for (j = 0; j < N - 1; j++)
@@ -553,10 +595,10 @@ define void @test12(ptr %p) personality ptr @__CxxFrameHandler3 {
553595
; CHECK-LABEL: @test12(
554596
; CHECK-NEXT: block1:
555597
; CHECK-NEXT: invoke void @f()
556-
; CHECK-NEXT: to label [[BLOCK2:%.*]] unwind label [[CATCH_DISPATCH:%.*]]
598+
; CHECK-NEXT: to label [[BLOCK2:%.*]] unwind label [[CATCH_DISPATCH:%.*]]
557599
; CHECK: block2:
558600
; CHECK-NEXT: invoke void @f()
559-
; CHECK-NEXT: to label [[BLOCK3:%.*]] unwind label [[CLEANUP:%.*]]
601+
; CHECK-NEXT: to label [[BLOCK3:%.*]] unwind label [[CLEANUP:%.*]]
560602
; CHECK: block3:
561603
; CHECK-NEXT: ret void
562604
; CHECK: catch.dispatch:
@@ -880,7 +922,7 @@ define void @test19(i1 %cond, ptr %p1, ptr %p2)
880922
; CHECK-NEXT: br label [[END:%.*]]
881923
; CHECK: else:
882924
; CHECK-NEXT: invoke void @f()
883-
; CHECK-NEXT: to label [[ELSE_END_CRIT_EDGE:%.*]] unwind label [[LPAD:%.*]]
925+
; CHECK-NEXT: to label [[ELSE_END_CRIT_EDGE:%.*]] unwind label [[LPAD:%.*]]
884926
; CHECK: else.end_crit_edge:
885927
; CHECK-NEXT: [[V1_PRE:%.*]] = load i64, ptr [[P1]], align 8
886928
; CHECK-NEXT: br label [[END]]
@@ -891,7 +933,7 @@ define void @test19(i1 %cond, ptr %p1, ptr %p2)
891933
; CHECK-NEXT: ret void
892934
; CHECK: lpad:
893935
; CHECK-NEXT: [[LP:%.*]] = landingpad { ptr, i32 }
894-
; CHECK-NEXT: cleanup
936+
; CHECK-NEXT: cleanup
895937
; CHECK-NEXT: [[V3:%.*]] = load i64, ptr [[P1]], align 8
896938
; CHECK-NEXT: [[OR:%.*]] = or i64 [[V3]], 200
897939
; CHECK-NEXT: store i64 [[OR]], ptr [[P1]], align 8
@@ -974,9 +1016,9 @@ define void @test21(i1 %cond, i32 %code, ptr %p1, ptr %p2) {
9741016
; CHECK-NEXT: br label [[IF_END:%.*]]
9751017
; CHECK: if.else:
9761018
; CHECK-NEXT: switch i32 [[CODE:%.*]], label [[IF_END]] [
977-
; CHECK-NEXT: i32 1, label [[IF_END]]
978-
; CHECK-NEXT: i32 2, label [[IF_END]]
979-
; CHECK-NEXT: i32 3, label [[IF_END]]
1019+
; CHECK-NEXT: i32 1, label [[IF_END]]
1020+
; CHECK-NEXT: i32 2, label [[IF_END]]
1021+
; CHECK-NEXT: i32 3, label [[IF_END]]
9801022
; CHECK-NEXT: ]
9811023
; CHECK: if.end:
9821024
; CHECK-NEXT: [[V2:%.*]] = load i16, ptr [[P1]], align 2

0 commit comments

Comments
 (0)