Skip to content

Commit dacf1ec

Browse files
committed
[AMDGPU] Improve StructurizeCFG pass performance by using SSAUpdaterBulk.
1 parent 00cb966 commit dacf1ec

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

llvm/lib/Transforms/Scalar/StructurizeCFG.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
4848
#include "llvm/Transforms/Utils/Local.h"
4949
#include "llvm/Transforms/Utils/SSAUpdater.h"
50+
#include "llvm/Transforms/Utils/SSAUpdaterBulk.h"
5051
#include <cassert>
5152
#include <utility>
5253

@@ -317,7 +318,7 @@ class StructurizeCFG {
317318

318319
void collectInfos();
319320

320-
void insertConditions(bool Loops);
321+
void insertConditions(bool Loops, SSAUpdaterBulk &PhiInserter);
321322

322323
void simplifyConditions();
323324

@@ -600,10 +601,9 @@ void StructurizeCFG::collectInfos() {
600601
}
601602

602603
/// Insert the missing branch conditions
603-
void StructurizeCFG::insertConditions(bool Loops) {
604+
void StructurizeCFG::insertConditions(bool Loops, SSAUpdaterBulk &PhiInserter) {
604605
BranchVector &Conds = Loops ? LoopConds : Conditions;
605606
Value *Default = Loops ? BoolTrue : BoolFalse;
606-
SSAUpdater PhiInserter;
607607

608608
for (BranchInst *Term : Conds) {
609609
assert(Term->isConditional());
@@ -619,22 +619,23 @@ void StructurizeCFG::insertConditions(bool Loops) {
619619
Term->setCondition(PI.Pred);
620620
CondBranchWeights::setMetadata(*Term, PI.Weights);
621621
} else {
622-
PhiInserter.Initialize(Boolean, "");
623-
PhiInserter.AddAvailableValue(Loops ? SuccFalse : Parent, Default);
622+
unsigned Variable = PhiInserter.AddVariable("", Boolean);
623+
PhiInserter.AddAvailableValue(Variable, Loops ? SuccFalse : Parent,
624+
Default);
624625

625626
NearestCommonDominator Dominator(DT);
626627
Dominator.addBlock(Parent);
627628

628629
for (auto [BB, PI] : Preds) {
629630
assert(BB != Parent);
630-
PhiInserter.AddAvailableValue(BB, PI.Pred);
631+
PhiInserter.AddAvailableValue(Variable, BB, PI.Pred);
631632
Dominator.addAndRememberBlock(BB);
632633
}
633634

634635
if (!Dominator.resultIsRememberedBlock())
635-
PhiInserter.AddAvailableValue(Dominator.result(), Default);
636+
PhiInserter.AddAvailableValue(Variable, Dominator.result(), Default);
636637

637-
Term->setCondition(PhiInserter.GetValueInMiddleOfBlock(Parent));
638+
PhiInserter.AddUse(Variable, &Term->getOperandUse(0));
638639
}
639640
}
640641
}
@@ -1321,8 +1322,12 @@ bool StructurizeCFG::run(Region *R, DominatorTree *DT) {
13211322
orderNodes();
13221323
collectInfos();
13231324
createFlow();
1324-
insertConditions(false);
1325-
insertConditions(true);
1325+
1326+
SSAUpdaterBulk PhiInserter;
1327+
insertConditions(false, PhiInserter);
1328+
insertConditions(true, PhiInserter);
1329+
PhiInserter.RewriteAllUses(DT);
1330+
13261331
setPhiValues();
13271332
simplifyConditions();
13281333
simplifyAffectedPhis();

0 commit comments

Comments
 (0)