//===- MachineDomTreeUpdater.cpp -----------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the MachineDomTreeUpdater class, which provides a // uniform way to update dominator tree related data structures. // //===----------------------------------------------------------------------===// #include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/ADT/SmallSet.h" #include "llvm/Analysis/GenericDomTreeUpdaterImpl.h" #include "llvm/CodeGen/MachinePostDominators.h" #include "llvm/Support/GenericDomTree.h" #include #include #include namespace llvm { template class GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>; template void GenericDomTreeUpdater::recalculate(MachineFunction &MF); bool MachineDomTreeUpdater::forceFlushDeletedBB() { if (DeletedBBs.empty()) return false; for (auto *BB : DeletedBBs) { eraseDelBBNode(BB); BB->eraseFromParent(); } DeletedBBs.clear(); return true; } // The DT and PDT require the nodes related to updates // are not deleted when update functions are called. // So MachineBasicBlock deletions must be pended when the // UpdateStrategy is Lazy. When the UpdateStrategy is // Eager, the MachineBasicBlock will be deleted immediately. void MachineDomTreeUpdater::deleteBB(MachineBasicBlock *DelBB) { validateDeleteBB(DelBB); if (Strategy == UpdateStrategy::Lazy) { DeletedBBs.insert(DelBB); return; } eraseDelBBNode(DelBB); DelBB->eraseFromParent(); } void MachineDomTreeUpdater::validateDeleteBB(MachineBasicBlock *DelBB) { assert(DelBB && "Invalid push_back of nullptr DelBB."); assert(DelBB->pred_empty() && "DelBB has one or more predecessors."); } } // namespace llvm