From 145449b1e420787bb99721a429341fa6be3adfb6 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sun, 3 Jul 2022 16:10:23 +0200 Subject: Vendor import of llvm-project main llvmorg-15-init-15358-g53dc0f107877. --- llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp') diff --git a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp index 1bb80be8ef99..0b36e8708a03 100644 --- a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp +++ b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp @@ -27,9 +27,7 @@ #include "llvm/IR/CFG.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/Instructions.h" -#include "llvm/IR/Type.h" #include "llvm/InitializePasses.h" -#include "llvm/Support/ErrorHandling.h" #include "llvm/Transforms/Utils.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Cloning.h" @@ -317,18 +315,11 @@ llvm::SplitKnownCriticalEdge(Instruction *TI, unsigned SuccNum, // predecessors of BB. static BasicBlock * findIBRPredecessor(BasicBlock *BB, SmallVectorImpl &OtherPreds) { - // If the block doesn't have any PHIs, we don't care about it, since there's - // no point in splitting it. - PHINode *PN = dyn_cast(BB->begin()); - if (!PN) - return nullptr; - // Verify we have exactly one IBR predecessor. // Conservatively bail out if one of the other predecessors is not a "regular" // terminator (that is, not a switch or a br). BasicBlock *IBB = nullptr; - for (unsigned Pred = 0, E = PN->getNumIncomingValues(); Pred != E; ++Pred) { - BasicBlock *PredBB = PN->getIncomingBlock(Pred); + for (BasicBlock *PredBB : predecessors(BB)) { Instruction *PredTerm = PredBB->getTerminator(); switch (PredTerm->getOpcode()) { case Instruction::IndirectBr: @@ -349,6 +340,7 @@ findIBRPredecessor(BasicBlock *BB, SmallVectorImpl &OtherPreds) { } bool llvm::SplitIndirectBrCriticalEdges(Function &F, + bool IgnoreBlocksWithoutPHI, BranchProbabilityInfo *BPI, BlockFrequencyInfo *BFI) { // Check whether the function has any indirectbrs, and collect which blocks @@ -370,6 +362,9 @@ bool llvm::SplitIndirectBrCriticalEdges(Function &F, bool ShouldUpdateAnalysis = BPI && BFI; bool Changed = false; for (BasicBlock *Target : Targets) { + if (IgnoreBlocksWithoutPHI && Target->phis().empty()) + continue; + SmallVector OtherPreds; BasicBlock *IBRPred = findIBRPredecessor(Target, OtherPreds); // If we did not found an indirectbr, or the indirectbr is the only -- cgit v1.2.3