brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 15a175d Raw
70 lines · cpp
1//===- MachineDomTreeUpdater.cpp -----------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements the MachineDomTreeUpdater class, which provides a10// uniform way to update dominator tree related data structures.11//12//===----------------------------------------------------------------------===//13 14#include "llvm/CodeGen/MachineDomTreeUpdater.h"15#include "llvm/Analysis/GenericDomTreeUpdaterImpl.h"16#include "llvm/CodeGen/MachinePostDominators.h"17#include "llvm/Support/Compiler.h"18 19namespace llvm {20 21template class LLVM_EXPORT_TEMPLATE GenericDomTreeUpdater<22    MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>;23 24template LLVM_EXPORT_TEMPLATE void25GenericDomTreeUpdater<MachineDomTreeUpdater, MachineDominatorTree,26                      MachinePostDominatorTree>::recalculate(MachineFunction27                                                                 &MF);28 29template LLVM_EXPORT_TEMPLATE void GenericDomTreeUpdater<30    MachineDomTreeUpdater, MachineDominatorTree,31    MachinePostDominatorTree>::applyUpdatesImpl</*IsForward=*/true>();32template LLVM_EXPORT_TEMPLATE void GenericDomTreeUpdater<33    MachineDomTreeUpdater, MachineDominatorTree,34    MachinePostDominatorTree>::applyUpdatesImpl</*IsForward=*/false>();35 36bool MachineDomTreeUpdater::forceFlushDeletedBB() {37  if (DeletedBBs.empty())38    return false;39 40  for (auto *BB : DeletedBBs) {41    eraseDelBBNode(BB);42    BB->eraseFromParent();43  }44  DeletedBBs.clear();45  return true;46}47 48// The DT and PDT require the nodes related to updates49// are not deleted when update functions are called.50// So MachineBasicBlock deletions must be pended when the51// UpdateStrategy is Lazy. When the UpdateStrategy is52// Eager, the MachineBasicBlock will be deleted immediately.53void MachineDomTreeUpdater::deleteBB(MachineBasicBlock *DelBB) {54  validateDeleteBB(DelBB);55  if (Strategy == UpdateStrategy::Lazy) {56    DeletedBBs.insert(DelBB);57    return;58  }59 60  eraseDelBBNode(DelBB);61  DelBB->eraseFromParent();62}63 64void MachineDomTreeUpdater::validateDeleteBB(MachineBasicBlock *DelBB) {65  assert(DelBB && "Invalid push_back of nullptr DelBB.");66  assert(DelBB->pred_empty() && "DelBB has one or more predecessors.");67}68 69} // namespace llvm70