Skip to content

Commit 07cb93e

Browse files
committed
[NFCI][PromoteMem2Reg] Don't handle the first successor out of order
Additionally handler successors in regular order, so that two successors cases are handled exactly as before, so we need to less tests. Additionally reverse order here results in more natural 'phi' arguments list order. Pull Request: llvm#142464
1 parent 7ced328 commit 07cb93e

File tree

3 files changed

+13
-17
lines changed

3 files changed

+13
-17
lines changed

llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,24 +1215,20 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred,
12151215
}
12161216

12171217
// 'Recurse' to our successors.
1218-
succ_iterator I = succ_begin(BB), E = succ_end(BB);
1219-
if (I == E)
1220-
return;
12211218

12221219
// Keep track of the successors so we don't visit the same successor twice
12231220
SmallPtrSet<BasicBlock *, 8> VisitedSuccs;
12241221

1225-
// Handle the first successor after the rest, to mimic legacy behaviour.
1226-
// FIXME: Handle them in regular order.
1227-
VisitedSuccs.insert(*I);
1228-
++I;
1229-
1230-
for (; I != E; ++I)
1231-
if (VisitedSuccs.insert(*I).second)
1232-
Worklist.emplace_back(*I, BB, IncomingVals, IncomingLocs);
1233-
1234-
Worklist.emplace_back(*succ_begin(BB), BB, std::move(IncomingVals),
1235-
std::move(IncomingLocs));
1222+
for (BasicBlock *S : reverse(successors(BB)))
1223+
if (VisitedSuccs.insert(S).second) {
1224+
if (VisitedSuccs.size() > 1) {
1225+
// Let the first successor own allocated arrays, other will make a copy.
1226+
IncomingVals = Worklist.back().Values;
1227+
IncomingLocs = Worklist.back().Locations;
1228+
}
1229+
Worklist.emplace_back(S, BB, std::move(IncomingVals),
1230+
std::move(IncomingLocs));
1231+
}
12361232
}
12371233

12381234
void llvm::PromoteMemToReg(ArrayRef<AllocaInst *> Allocas, DominatorTree &DT,

llvm/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ define ptr @_Z3fooRSt6vectorIiSaIiEE(ptr %X) {
215215
; IC_SROA-NEXT: [[TMP27:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_0]], i32 4
216216
; IC_SROA-NEXT: br label [[BB18_I_I]]
217217
; IC_SROA: bb18.i.i:
218-
; IC_SROA-NEXT: [[__FIRST_ADDR_I_I_SROA_0_1:%.*]] = phi ptr [ [[TMP27]], [[BB17_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ]
218+
; IC_SROA-NEXT: [[__FIRST_ADDR_I_I_SROA_0_1:%.*]] = phi ptr [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ], [ [[TMP27]], [[BB17_I_I]] ]
219219
; IC_SROA-NEXT: [[TMP28:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_1]], align 4
220220
; IC_SROA-NEXT: [[TMP29:%.*]] = icmp eq i32 [[TMP28]], 42
221221
; IC_SROA-NEXT: br i1 [[TMP29]], label [[BB20_I_I:%.*]], label [[BB21_I_I:%.*]]
@@ -225,7 +225,7 @@ define ptr @_Z3fooRSt6vectorIiSaIiEE(ptr %X) {
225225
; IC_SROA-NEXT: [[TMP30:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_1]], i32 4
226226
; IC_SROA-NEXT: br label [[BB22_I_I]]
227227
; IC_SROA: bb22.i.i:
228-
; IC_SROA-NEXT: [[__FIRST_ADDR_I_I_SROA_0_2:%.*]] = phi ptr [ [[TMP30]], [[BB21_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ]
228+
; IC_SROA-NEXT: [[__FIRST_ADDR_I_I_SROA_0_2:%.*]] = phi ptr [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ], [ [[TMP30]], [[BB21_I_I]] ]
229229
; IC_SROA-NEXT: [[TMP31:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_2]], align 4
230230
; IC_SROA-NEXT: [[TMP32:%.*]] = icmp eq i32 [[TMP31]], 42
231231
; IC_SROA-NEXT: br i1 [[TMP32]], label [[BB24_I_I:%.*]], label [[BB25_I_I:%.*]]

llvm/test/Transforms/SimplifyCFG/Hexagon/switch-to-lookup-table.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ define i32 @foo(i32 %x) #0 section ".tcm_text" {
4343
; DISABLE: sw.default:
4444
; DISABLE-NEXT: br label [[RETURN]]
4545
; DISABLE: return:
46-
; DISABLE-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 19, [[SW_DEFAULT]] ], [ 33, [[SW_BB5]] ], [ 12, [[SW_BB4]] ], [ 22, [[SW_BB3]] ], [ 14, [[SW_BB2]] ], [ 20, [[SW_BB1]] ], [ 9, [[ENTRY:%.*]] ]
46+
; DISABLE-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 19, [[SW_DEFAULT]] ], [ 20, [[SW_BB1]] ], [ 14, [[SW_BB2]] ], [ 22, [[SW_BB3]] ], [ 12, [[SW_BB4]] ], [ 33, [[SW_BB5]] ], [ 9, [[ENTRY:%.*]] ]
4747
; DISABLE-NEXT: ret i32 [[RETVAL_0]]
4848
;
4949
entry:

0 commit comments

Comments
 (0)