diff options
Diffstat (limited to 'lib/CodeGen/MachineBasicBlock.cpp')
| -rw-r--r-- | lib/CodeGen/MachineBasicBlock.cpp | 47 | 
1 files changed, 29 insertions, 18 deletions
| diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 81597afe6b02..209abf34d885 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -13,7 +13,7 @@  #include "llvm/CodeGen/MachineBasicBlock.h"  #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/CodeGen/LiveIntervalAnalysis.h" +#include "llvm/CodeGen/LiveIntervals.h"  #include "llvm/CodeGen/LiveVariables.h"  #include "llvm/CodeGen/MachineDominators.h"  #include "llvm/CodeGen/MachineFunction.h" @@ -21,6 +21,9 @@  #include "llvm/CodeGen/MachineLoopInfo.h"  #include "llvm/CodeGen/MachineRegisterInfo.h"  #include "llvm/CodeGen/SlotIndexes.h" +#include "llvm/CodeGen/TargetInstrInfo.h" +#include "llvm/CodeGen/TargetRegisterInfo.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h"  #include "llvm/IR/BasicBlock.h"  #include "llvm/IR/DataLayout.h"  #include "llvm/IR/DebugInfoMetadata.h" @@ -30,10 +33,7 @@  #include "llvm/Support/DataTypes.h"  #include "llvm/Support/Debug.h"  #include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetInstrInfo.h"  #include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetRegisterInfo.h" -#include "llvm/Target/TargetSubtargetInfo.h"  #include <algorithm>  using namespace llvm; @@ -42,6 +42,8 @@ using namespace llvm;  MachineBasicBlock::MachineBasicBlock(MachineFunction &MF, const BasicBlock *B)      : BB(B), Number(-1), xParent(&MF) {    Insts.Parent = this; +  if (B) +    IrrLoopHeaderWeight = B->getIrrLoopHeaderWeight();  }  MachineBasicBlock::~MachineBasicBlock() { @@ -68,6 +70,10 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineBasicBlock &MBB) {    return OS;  } +Printable llvm::printMBBReference(const MachineBasicBlock &MBB) { +  return Printable([&MBB](raw_ostream &OS) { return MBB.printAsOperand(OS); }); +} +  /// When an MBB is added to an MF, we need to update the parent pointer of the  /// MBB, the MBB numbering, and any instructions in the MBB to be on the right  /// operand list for registers. @@ -111,7 +117,7 @@ void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr *N) {    assert(N->getParent() && "machine instruction not in a basic block");    // Remove from the use/def lists. -  if (MachineFunction *MF = N->getParent()->getParent()) +  if (MachineFunction *MF = N->getMF())      N->RemoveRegOperandsFromUseLists(MF->getRegInfo());    N->setParent(nullptr); @@ -261,8 +267,8 @@ void MachineBasicBlock::print(raw_ostream &OS, const SlotIndexes *Indexes)         << " is null\n";      return;    } -  const Function *F = MF->getFunction(); -  const Module *M = F ? F->getParent() : nullptr; +  const Function &F = MF->getFunction(); +  const Module *M = F.getParent();    ModuleSlotTracker MST(M);    print(OS, MST, Indexes);  } @@ -279,7 +285,7 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,    if (Indexes)      OS << Indexes->getMBBStartIdx(this) << '\t'; -  OS << "BB#" << getNumber() << ": "; +  OS << printMBBReference(*this) << ": ";    const char *Comma = "";    if (const BasicBlock *LBB = getBasicBlock()) { @@ -300,7 +306,7 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,      if (Indexes) OS << '\t';      OS << "    Live Ins:";      for (const auto &LI : LiveIns) { -      OS << ' ' << PrintReg(LI.PhysReg, TRI); +      OS << ' ' << printReg(LI.PhysReg, TRI);        if (!LI.LaneMask.all())          OS << ':' << PrintLaneMask(LI.LaneMask);      } @@ -311,7 +317,7 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,      if (Indexes) OS << '\t';      OS << "    Predecessors according to CFG:";      for (const_pred_iterator PI = pred_begin(), E = pred_end(); PI != E; ++PI) -      OS << " BB#" << (*PI)->getNumber(); +      OS << " " << printMBBReference(*(*PI));      OS << '\n';    } @@ -332,17 +338,23 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,      if (Indexes) OS << '\t';      OS << "    Successors according to CFG:";      for (const_succ_iterator SI = succ_begin(), E = succ_end(); SI != E; ++SI) { -      OS << " BB#" << (*SI)->getNumber(); +      OS << " " << printMBBReference(*(*SI));        if (!Probs.empty())          OS << '(' << *getProbabilityIterator(SI) << ')';      }      OS << '\n';    } +  if (IrrLoopHeaderWeight) { +    if (Indexes) OS << '\t'; +    OS << "    Irreducible loop header weight: " +       << IrrLoopHeaderWeight.getValue(); +    OS << '\n'; +  }  }  void MachineBasicBlock::printAsOperand(raw_ostream &OS,                                         bool /*PrintType*/) const { -  OS << "BB#" << getNumber(); +  OS << "%bb." << getNumber();  }  void MachineBasicBlock::removeLiveIn(MCPhysReg Reg, LaneBitmask LaneMask) { @@ -759,10 +771,9 @@ MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ,    MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock();    MF->insert(std::next(MachineFunction::iterator(this)), NMBB); -  DEBUG(dbgs() << "Splitting critical edge:" -        " BB#" << getNumber() -        << " -- BB#" << NMBB->getNumber() -        << " -- BB#" << Succ->getNumber() << '\n'); +  DEBUG(dbgs() << "Splitting critical edge: " << printMBBReference(*this) +               << " -- " << printMBBReference(*NMBB) << " -- " +               << printMBBReference(*Succ) << '\n');    LiveIntervals *LIS = P.getAnalysisIfAvailable<LiveIntervals>();    SlotIndexes *Indexes = P.getAnalysisIfAvailable<SlotIndexes>(); @@ -1015,8 +1026,8 @@ bool MachineBasicBlock::canSplitCriticalEdge(    // case that we can't handle. Since this never happens in properly optimized    // code, just skip those edges.    if (TBB && TBB == FBB) { -    DEBUG(dbgs() << "Won't split critical edge after degenerate BB#" -                 << getNumber() << '\n'); +    DEBUG(dbgs() << "Won't split critical edge after degenerate " +                 << printMBBReference(*this) << '\n');      return false;    }    return true; | 
