diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h index 109dc8812c24d..75c051712ae43 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h @@ -609,6 +609,15 @@ class LLVM_ABI CallLowering { virtual bool isTypeIsValidForThisReturn(EVT Ty) const { return false; } }; +extern template LLVM_ABI void +CallLowering::setArgFlags(CallLowering::ArgInfo &Arg, unsigned OpIdx, + const DataLayout &DL, + const Function &FuncInfo) const; + +extern template LLVM_ABI void +CallLowering::setArgFlags(CallLowering::ArgInfo &Arg, unsigned OpIdx, + const DataLayout &DL, + const CallBase &FuncInfo) const; } // end namespace llvm #endif // LLVM_CODEGEN_GLOBALISEL_CALLLOWERING_H diff --git a/llvm/include/llvm/CodeGenTypes/LowLevelType.h b/llvm/include/llvm/CodeGenTypes/LowLevelType.h index 06879e1f8d15b..d8e0848aff84d 100644 --- a/llvm/include/llvm/CodeGenTypes/LowLevelType.h +++ b/llvm/include/llvm/CodeGenTypes/LowLevelType.h @@ -28,6 +28,7 @@ #include "llvm/ADT/DenseMapInfo.h" #include "llvm/CodeGenTypes/MachineValueType.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include @@ -140,7 +141,7 @@ class LLT { explicit constexpr LLT() : IsScalar(false), IsPointer(false), IsVector(false), RawData(0) {} - explicit LLT(MVT VT); + LLVM_ABI explicit LLT(MVT VT); constexpr bool isValid() const { return IsScalar || RawData != 0; } constexpr bool isScalar() const { return IsScalar; } @@ -282,7 +283,7 @@ class LLT { return scalar(getScalarSizeInBits()); } - void print(raw_ostream &OS) const; + LLVM_ABI void print(raw_ostream &OS) const; #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) LLVM_DUMP_METHOD void dump() const; diff --git a/llvm/include/llvm/CodeGenTypes/MachineValueType.h b/llvm/include/llvm/CodeGenTypes/MachineValueType.h index c14abca027350..b8e91a022ec5e 100644 --- a/llvm/include/llvm/CodeGenTypes/MachineValueType.h +++ b/llvm/include/llvm/CodeGenTypes/MachineValueType.h @@ -17,6 +17,7 @@ #define LLVM_CODEGEN_MACHINEVALUETYPE_H #include "llvm/ADT/Sequence.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/TypeSize.h" @@ -65,10 +66,10 @@ namespace llvm { bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; } /// Support for debugging, callable in GDB: VT.dump() - void dump() const; + LLVM_ABI void dump() const; /// Implement operator<<. - void print(raw_ostream &OS) const; + LLVM_ABI void print(raw_ostream &OS) const; /// Return true if this is a valid simple valuetype. bool isValid() const { @@ -509,11 +510,11 @@ namespace llvm { /// otherwise they are invalid. /// NB: This includes pointer types, which require a DataLayout to convert /// to a concrete value type. - static MVT getVT(Type *Ty, bool HandleUnknown = false); + LLVM_ABI static MVT getVT(Type *Ty, bool HandleUnknown = false); /// Returns an APFloat semantics tag appropriate for the value type. If this /// is a vector type, the element semantics are returned. - const fltSemantics &getFltSemantics() const; + LLVM_ABI const fltSemantics &getFltSemantics() const; public: /// SimpleValueType Iteration diff --git a/llvm/lib/CodeGen/GlobalMergeFunctions.cpp b/llvm/lib/CodeGen/GlobalMergeFunctions.cpp index 84dc4ab0a5522..92ecfadf97c99 100644 --- a/llvm/lib/CodeGen/GlobalMergeFunctions.cpp +++ b/llvm/lib/CodeGen/GlobalMergeFunctions.cpp @@ -15,6 +15,7 @@ #include "llvm/Analysis/ModuleSummaryAnalysis.h" #include "llvm/CGData/CodeGenData.h" #include "llvm/CGData/CodeGenDataWriter.h" +#include "llvm/CodeGen/Passes.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/StructuralHash.h" #include "llvm/InitializePasses.h" diff --git a/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp b/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp index 72e4be0165bf8..15a175d6391dd 100644 --- a/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp +++ b/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp @@ -14,21 +14,22 @@ #include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/Analysis/GenericDomTreeUpdaterImpl.h" #include "llvm/CodeGen/MachinePostDominators.h" +#include "llvm/Support/Compiler.h" namespace llvm { -template class GenericDomTreeUpdater< +template class LLVM_EXPORT_TEMPLATE GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>; -template void +template LLVM_EXPORT_TEMPLATE void GenericDomTreeUpdater::recalculate(MachineFunction &MF); -template void GenericDomTreeUpdater< +template LLVM_EXPORT_TEMPLATE void GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>::applyUpdatesImpl(); -template void GenericDomTreeUpdater< +template LLVM_EXPORT_TEMPLATE void GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree>::applyUpdatesImpl(); diff --git a/llvm/lib/CodeGen/MachineDominators.cpp b/llvm/lib/CodeGen/MachineDominators.cpp index 917519f12a039..b221fa8b6de84 100644 --- a/llvm/lib/CodeGen/MachineDominators.cpp +++ b/llvm/lib/CodeGen/MachineDominators.cpp @@ -17,6 +17,7 @@ #include "llvm/Pass.h" #include "llvm/PassRegistry.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/GenericDomTreeConstruction.h" using namespace llvm; @@ -35,24 +36,29 @@ static cl::opt VerifyMachineDomInfoX( cl::desc("Verify machine dominator info (time consuming)")); namespace llvm { -template class DomTreeNodeBase; -template class DominatorTreeBase; // DomTreeBase +template class LLVM_EXPORT_TEMPLATE DomTreeNodeBase; +template class LLVM_EXPORT_TEMPLATE + DominatorTreeBase; // DomTreeBase namespace DomTreeBuilder { -template void Calculate(MBBDomTree &DT); -template void CalculateWithUpdates(MBBDomTree &DT, MBBUpdates U); +template LLVM_EXPORT_TEMPLATE void Calculate(MBBDomTree &DT); +template LLVM_EXPORT_TEMPLATE void +CalculateWithUpdates(MBBDomTree &DT, MBBUpdates U); -template void InsertEdge(MBBDomTree &DT, MachineBasicBlock *From, - MachineBasicBlock *To); +template LLVM_EXPORT_TEMPLATE void +InsertEdge(MBBDomTree &DT, MachineBasicBlock *From, + MachineBasicBlock *To); -template void DeleteEdge(MBBDomTree &DT, MachineBasicBlock *From, - MachineBasicBlock *To); +template LLVM_EXPORT_TEMPLATE void +DeleteEdge(MBBDomTree &DT, MachineBasicBlock *From, + MachineBasicBlock *To); -template void ApplyUpdates(MBBDomTree &DT, MBBDomTreeGraphDiff &, - MBBDomTreeGraphDiff *); +template LLVM_EXPORT_TEMPLATE void +ApplyUpdates(MBBDomTree &DT, MBBDomTreeGraphDiff &, + MBBDomTreeGraphDiff *); -template bool Verify(const MBBDomTree &DT, - MBBDomTree::VerificationLevel VL); +template LLVM_EXPORT_TEMPLATE bool +Verify(const MBBDomTree &DT, MBBDomTree::VerificationLevel VL); } // namespace DomTreeBuilder } diff --git a/llvm/lib/CodeGen/MachineLoopInfo.cpp b/llvm/lib/CodeGen/MachineLoopInfo.cpp index 1c97e5c9063e4..fdb1a470493ce 100644 --- a/llvm/lib/CodeGen/MachineLoopInfo.cpp +++ b/llvm/lib/CodeGen/MachineLoopInfo.cpp @@ -22,13 +22,16 @@ #include "llvm/InitializePasses.h" #include "llvm/Pass.h" #include "llvm/PassRegistry.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/GenericLoopInfoImpl.h" using namespace llvm; // Explicitly instantiate methods in LoopInfoImpl.h for MI-level Loops. -template class llvm::LoopBase; -template class llvm::LoopInfoBase; +template class LLVM_EXPORT_TEMPLATE + llvm::LoopBase; +template class LLVM_EXPORT_TEMPLATE + llvm::LoopInfoBase; AnalysisKey MachineLoopAnalysis::Key; diff --git a/llvm/lib/CodeGen/MachinePassManager.cpp b/llvm/lib/CodeGen/MachinePassManager.cpp index bbe386507fcd2..6e445f6787903 100644 --- a/llvm/lib/CodeGen/MachinePassManager.cpp +++ b/llvm/lib/CodeGen/MachinePassManager.cpp @@ -17,20 +17,21 @@ #include "llvm/IR/Function.h" #include "llvm/IR/Module.h" #include "llvm/IR/PassManagerImpl.h" +#include "llvm/Support/Compiler.h" using namespace llvm; AnalysisKey FunctionAnalysisManagerMachineFunctionProxy::Key; namespace llvm { -template class AnalysisManager; +template class LLVM_EXPORT_TEMPLATE AnalysisManager; template class PassManager; -template class InnerAnalysisManagerProxy; -template class InnerAnalysisManagerProxy; -template class OuterAnalysisManagerProxy; +template class LLVM_EXPORT_TEMPLATE + InnerAnalysisManagerProxy; +template class LLVM_EXPORT_TEMPLATE + InnerAnalysisManagerProxy; +template class LLVM_EXPORT_TEMPLATE + OuterAnalysisManagerProxy; } // namespace llvm bool FunctionAnalysisManagerMachineFunctionProxy::Result::invalidate( diff --git a/llvm/lib/CodeGen/MachinePostDominators.cpp b/llvm/lib/CodeGen/MachinePostDominators.cpp index 51637130addc4..1cb7e465881a2 100644 --- a/llvm/lib/CodeGen/MachinePostDominators.cpp +++ b/llvm/lib/CodeGen/MachinePostDominators.cpp @@ -18,22 +18,25 @@ using namespace llvm; namespace llvm { -template class DominatorTreeBase; // PostDomTreeBase +template class LLVM_EXPORT_TEMPLATE + DominatorTreeBase; // PostDomTreeBase namespace DomTreeBuilder { -template void Calculate(MBBPostDomTree &DT); -template void InsertEdge(MBBPostDomTree &DT, - MachineBasicBlock *From, - MachineBasicBlock *To); -template void DeleteEdge(MBBPostDomTree &DT, - MachineBasicBlock *From, - MachineBasicBlock *To); -template void ApplyUpdates(MBBPostDomTree &DT, - MBBPostDomTreeGraphDiff &, - MBBPostDomTreeGraphDiff *); -template bool Verify(const MBBPostDomTree &DT, - MBBPostDomTree::VerificationLevel VL); +template LLVM_EXPORT_TEMPLATE void +Calculate(MBBPostDomTree &DT); +template LLVM_EXPORT_TEMPLATE void +InsertEdge(MBBPostDomTree &DT, MachineBasicBlock *From, + MachineBasicBlock *To); +template LLVM_EXPORT_TEMPLATE void +DeleteEdge(MBBPostDomTree &DT, MachineBasicBlock *From, + MachineBasicBlock *To); +template LLVM_EXPORT_TEMPLATE void +ApplyUpdates(MBBPostDomTree &DT, MBBPostDomTreeGraphDiff &, + MBBPostDomTreeGraphDiff *); +template LLVM_EXPORT_TEMPLATE bool +Verify(const MBBPostDomTree &DT, + MBBPostDomTree::VerificationLevel VL); } // namespace DomTreeBuilder extern bool VerifyMachineDomInfo; diff --git a/llvm/lib/CodeGen/RegAllocScore.cpp b/llvm/lib/CodeGen/RegAllocScore.cpp index 8c140261c11ca..b86647dbe0a48 100644 --- a/llvm/lib/CodeGen/RegAllocScore.cpp +++ b/llvm/lib/CodeGen/RegAllocScore.cpp @@ -23,13 +23,16 @@ #include "llvm/Support/CommandLine.h" using namespace llvm; -cl::opt CopyWeight("regalloc-copy-weight", cl::init(0.2), cl::Hidden); -cl::opt LoadWeight("regalloc-load-weight", cl::init(4.0), cl::Hidden); -cl::opt StoreWeight("regalloc-store-weight", cl::init(1.0), cl::Hidden); -cl::opt CheapRematWeight("regalloc-cheap-remat-weight", cl::init(0.2), - cl::Hidden); -cl::opt ExpensiveRematWeight("regalloc-expensive-remat-weight", - cl::init(1.0), cl::Hidden); +LLVM_ABI cl::opt CopyWeight("regalloc-copy-weight", cl::init(0.2), + cl::Hidden); +LLVM_ABI cl::opt LoadWeight("regalloc-load-weight", cl::init(4.0), + cl::Hidden); +LLVM_ABI cl::opt StoreWeight("regalloc-store-weight", cl::init(1.0), + cl::Hidden); +LLVM_ABI cl::opt CheapRematWeight("regalloc-cheap-remat-weight", + cl::init(0.2), cl::Hidden); +LLVM_ABI cl::opt ExpensiveRematWeight("regalloc-expensive-remat-weight", + cl::init(1.0), cl::Hidden); #define DEBUG_TYPE "regalloc-score" RegAllocScore &RegAllocScore::operator+=(const RegAllocScore &Other) {