Skip to content

Commit eedc55a

Browse files
committed
[SROA] When unfolding gep of phi, insert gep into predecessor
Instead of inserting all the geps into the entry block, insert them into the corresponding phi predecessor.
1 parent 0d66659 commit eedc55a

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

llvm/lib/Transforms/Scalar/SROA.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4123,7 +4123,6 @@ class AggLoadStoreRewriter : public InstVisitor<AggLoadStoreRewriter, bool> {
41234123
Type *SourceTy = GEPI.getSourceElementType();
41244124
// We only handle arguments, constants, and static allocas here, so we can
41254125
// insert GEPs at the end of the entry block.
4126-
IRB.SetInsertPoint(GEPI.getFunction()->getEntryBlock().getTerminator());
41274126
for (unsigned I = 0, E = Phi->getNumIncomingValues(); I != E; ++I) {
41284127
Value *Op = Phi->getIncomingValue(I);
41294128
BasicBlock *BB = Phi->getIncomingBlock(I);
@@ -4132,6 +4131,7 @@ class AggLoadStoreRewriter : public InstVisitor<AggLoadStoreRewriter, bool> {
41324131
NewGEP = NewPhi->getIncomingValue(NI);
41334132
} else {
41344133
SmallVector<Value *> NewOps = GetNewOps(Op);
4134+
IRB.SetInsertPoint(BB->getTerminator());
41354135
NewGEP =
41364136
IRB.CreateGEP(SourceTy, NewOps[0], ArrayRef(NewOps).drop_front(),
41374137
Phi->getName() + ".sroa.gep", GEPI.getNoWrapFlags());

llvm/test/Transforms/SROA/phi-and-select.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -767,14 +767,14 @@ define void @PR20822(i1 %c1, i1 %c2, ptr %ptr) {
767767
; CHECK-LABEL: @PR20822(
768768
; CHECK-NEXT: entry:
769769
; CHECK-NEXT: [[F_SROA_0:%.*]] = alloca i32, align 4
770-
; CHECK-NEXT: [[F1_SROA_GEP:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[PTR:%.*]], i32 0, i32 0
771770
; CHECK-NEXT: br i1 [[C1:%.*]], label [[IF_END:%.*]], label [[FOR_COND:%.*]]
772771
; CHECK: for.cond:
773772
; CHECK-NEXT: br label [[IF_END]]
774773
; CHECK: if.end:
775774
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ poison, [[ENTRY:%.*]] ], [ poison, [[FOR_COND]] ]
776775
; CHECK-NEXT: br i1 [[C2:%.*]], label [[IF_THEN5:%.*]], label [[IF_THEN2:%.*]]
777776
; CHECK: if.then2:
777+
; CHECK-NEXT: [[F1_SROA_GEP:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[PTR:%.*]], i32 0, i32 0
778778
; CHECK-NEXT: br label [[IF_THEN5]]
779779
; CHECK: if.then5:
780780
; CHECK-NEXT: [[F1_SROA_PHI:%.*]] = phi ptr [ [[F1_SROA_GEP]], [[IF_THEN2]] ], [ [[F_SROA_0]], [[IF_END]] ]

llvm/test/Transforms/SROA/phi-gep.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,9 +644,9 @@ define i1 @test_phi_mem2reg_entry_block_alloca_not_at_beginning(i1 %arg) {
644644
; CHECK-NEXT: call void @f()
645645
; CHECK-NEXT: [[ALLOCA:%.*]] = alloca i64, align 8
646646
; CHECK-NEXT: [[PHI_SROA_GEP:%.*]] = getelementptr i64, ptr [[ALLOCA]], i64 1
647-
; CHECK-NEXT: [[PHI_SROA_GEP1:%.*]] = getelementptr i64, ptr [[ALLOCA]], i64 2
648647
; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB2:%.*]], label [[BB3:%.*]]
649648
; CHECK: bb2:
649+
; CHECK-NEXT: [[PHI_SROA_GEP1:%.*]] = getelementptr i64, ptr [[ALLOCA]], i64 2
650650
; CHECK-NEXT: br label [[BB3]]
651651
; CHECK: bb3:
652652
; CHECK-NEXT: [[PHI_SROA_PHI:%.*]] = phi ptr [ [[PHI_SROA_GEP]], [[BB:%.*]] ], [ [[PHI_SROA_GEP1]], [[BB2]] ]
@@ -706,9 +706,9 @@ define i64 @test_unfold_phi_duplicate_phi_entry(ptr %arg, i8 %arg1, i1 %arg2) {
706706
; CHECK-LABEL: @test_unfold_phi_duplicate_phi_entry(
707707
; CHECK-NEXT: bb:
708708
; CHECK-NEXT: [[ALLOCA_SROA_0:%.*]] = alloca i64, align 8
709-
; CHECK-NEXT: [[PHI_SROA_GEP:%.*]] = getelementptr i64, ptr [[ARG:%.*]], i64 1
710709
; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB5:%.*]], label [[BB3:%.*]]
711710
; CHECK: bb3:
711+
; CHECK-NEXT: [[PHI_SROA_GEP:%.*]] = getelementptr i64, ptr [[ARG:%.*]], i64 1
712712
; CHECK-NEXT: switch i8 [[ARG1:%.*]], label [[BB4:%.*]] [
713713
; CHECK-NEXT: i8 0, label [[BB5]]
714714
; CHECK-NEXT: i8 1, label [[BB5]]

0 commit comments

Comments
 (0)