diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h index 9c563d761c1d9..201e35d30cee2 100644 --- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -18,6 +18,7 @@ #include "llvm/ADT/SparseBitVector.h" #include "llvm/ADT/ilist.h" #include "llvm/ADT/iterator_range.h" +#include "llvm/CodeGen/MachineFunctionAnalysisManager.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstrBundleIterator.h" #include "llvm/IR/DebugLoc.h" @@ -46,8 +47,6 @@ class LiveIntervals; class LiveVariables; class TargetRegisterClass; class TargetRegisterInfo; -template class AnalysisManager; -using MachineFunctionAnalysisManager = AnalysisManager; // This structure uniquely identifies a basic block section. // Possible values are diff --git a/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h b/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h index fcdc0becf31c1..ff9f743bd1276 100644 --- a/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h +++ b/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h @@ -20,6 +20,22 @@ namespace llvm { class MachinePostDominatorTree; +class MachineDomTreeUpdater; + +extern template class GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>; + +extern template void +GenericDomTreeUpdater::recalculate(MachineFunction + &MF); + +extern template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); +extern template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); class MachineDomTreeUpdater : public GenericDomTreeUpdater; - -extern template void -GenericDomTreeUpdater::recalculate(MachineFunction - &MF); - -extern template void GenericDomTreeUpdater< - MachineDomTreeUpdater, MachineDominatorTree, - MachinePostDominatorTree>::applyUpdatesImpl(); -extern template void GenericDomTreeUpdater< - MachineDomTreeUpdater, MachineDominatorTree, - MachinePostDominatorTree>::applyUpdatesImpl(); } // namespace llvm #endif // LLVM_CODEGEN_MACHINEDOMTREEUPDATER_H diff --git a/llvm/include/llvm/CodeGen/MachineDominators.h b/llvm/include/llvm/CodeGen/MachineDominators.h index 61635ff64502d..d373be6263f64 100644 --- a/llvm/include/llvm/CodeGen/MachineDominators.h +++ b/llvm/include/llvm/CodeGen/MachineDominators.h @@ -32,12 +32,6 @@ class MachineFunction; class Module; class raw_ostream; -template <> -inline void DominatorTreeBase::addRoot( - MachineBasicBlock *MBB) { - this->Roots.push_back(MBB); -} - extern template class DomTreeNodeBase; extern template class DominatorTreeBase; // DomTree diff --git a/llvm/include/llvm/CodeGen/MachineFunctionAnalysisManager.h b/llvm/include/llvm/CodeGen/MachineFunctionAnalysisManager.h new file mode 100644 index 0000000000000..ccf72d996dc4b --- /dev/null +++ b/llvm/include/llvm/CodeGen/MachineFunctionAnalysisManager.h @@ -0,0 +1,27 @@ +//===- llvm/CodeGen/MachineFunctionAnalysisManager.h ------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// Typedef for MachineFunctionAnalysisManager as an explicit instantiation of +// AnalysisManager. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_CODEGEN_MACHINEFUNCTIONANALYSISMANAGER +#define LLVM_CODEGEN_MACHINEFUNCTIONANALYSISMANAGER + +#include "llvm/IR/PassManager.h" + +namespace llvm { + +class MachineFunction; + +extern template class AnalysisManager; +using MachineFunctionAnalysisManager = AnalysisManager; + +} // namespace llvm + +#endif diff --git a/llvm/include/llvm/CodeGen/MachinePassManager.h b/llvm/include/llvm/CodeGen/MachinePassManager.h index 69b5f6e92940c..57a6c1a65be46 100644 --- a/llvm/include/llvm/CodeGen/MachinePassManager.h +++ b/llvm/include/llvm/CodeGen/MachinePassManager.h @@ -24,6 +24,7 @@ #include "llvm/ADT/FunctionExtras.h" #include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineFunctionAnalysisManager.h" #include "llvm/IR/PassManager.h" #include "llvm/IR/PassManagerInternal.h" #include "llvm/Support/Error.h" @@ -31,10 +32,6 @@ namespace llvm { class Module; class Function; -class MachineFunction; - -extern template class AnalysisManager; -using MachineFunctionAnalysisManager = AnalysisManager; /// An RAII based helper class to modify MachineFunctionProperties when running /// pass. Define a MFPropsModifier in PassT::run to set diff --git a/llvm/include/llvm/Support/GenericDomTree.h b/llvm/include/llvm/Support/GenericDomTree.h index d3f789dd00269..af542bae9f8c6 100644 --- a/llvm/include/llvm/Support/GenericDomTree.h +++ b/llvm/include/llvm/Support/GenericDomTree.h @@ -918,7 +918,7 @@ class DominatorTreeBase { } protected: - void addRoot(NodeT *BB) { this->Roots.push_back(BB); } + inline void addRoot(NodeT *BB) { this->Roots.push_back(BB); } DomTreeNodeBase *createNode(NodeT *BB, DomTreeNodeBase *IDom = nullptr) { diff --git a/llvm/lib/CodeGen/MachinePassManager.cpp b/llvm/lib/CodeGen/MachinePassManager.cpp index 3eed874903f7c..bbe386507fcd2 100644 --- a/llvm/lib/CodeGen/MachinePassManager.cpp +++ b/llvm/lib/CodeGen/MachinePassManager.cpp @@ -14,6 +14,8 @@ #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionAnalysis.h" #include "llvm/CodeGen/MachineModuleInfo.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/Module.h" #include "llvm/IR/PassManagerImpl.h" using namespace llvm;