diff --git a/lib/CodeGen/AntiDepBreaker.h b/include/llvm/CodeGen/AntiDepBreaker.h similarity index 89% rename from lib/CodeGen/AntiDepBreaker.h rename to include/llvm/CodeGen/AntiDepBreaker.h index b1114859513..813a3c5a35e 100644 --- a/lib/CodeGen/AntiDepBreaker.h +++ b/include/llvm/CodeGen/AntiDepBreaker.h @@ -19,6 +19,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineOperand.h" #include "llvm/CodeGen/ScheduleDAG.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/Support/Compiler.h" #include #include @@ -26,9 +27,11 @@ namespace llvm { +class RegisterClassInfo; + /// This class works in conjunction with the post-RA scheduler to rename /// registers to break register anti-dependencies (WAR hazards). -class LLVM_LIBRARY_VISIBILITY AntiDepBreaker { +class AntiDepBreaker { public: using DbgValueVector = std::vector>; @@ -82,6 +85,13 @@ public: } }; +AntiDepBreaker *createAggressiveAntiDepBreaker( + MachineFunction &MFi, const RegisterClassInfo &RCI, + TargetSubtargetInfo::RegClassVector &CriticalPathRCs); + +AntiDepBreaker *createCriticalAntiDepBreaker(MachineFunction &MFi, + const RegisterClassInfo &RCI); + } // end namespace llvm #endif // LLVM_LIB_CODEGEN_ANTIDEPBREAKER_H diff --git a/lib/CodeGen/AggressiveAntiDepBreaker.cpp b/lib/CodeGen/AggressiveAntiDepBreaker.cpp index f64b775a8b7..1b6cf156b52 100644 --- a/lib/CodeGen/AggressiveAntiDepBreaker.cpp +++ b/lib/CodeGen/AggressiveAntiDepBreaker.cpp @@ -1011,3 +1011,9 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies( return Broken; } + +AntiDepBreaker *llvm::createAggressiveAntiDepBreaker( + MachineFunction &MFi, const RegisterClassInfo &RCI, + TargetSubtargetInfo::RegClassVector &CriticalPathRCs) { + return new AggressiveAntiDepBreaker(MFi, RCI, CriticalPathRCs); +} diff --git a/lib/CodeGen/AggressiveAntiDepBreaker.h b/lib/CodeGen/AggressiveAntiDepBreaker.h index 0cf2e6d78f7..419cb762694 100644 --- a/lib/CodeGen/AggressiveAntiDepBreaker.h +++ b/lib/CodeGen/AggressiveAntiDepBreaker.h @@ -16,8 +16,8 @@ #ifndef LLVM_LIB_CODEGEN_AGGRESSIVEANTIDEPBREAKER_H #define LLVM_LIB_CODEGEN_AGGRESSIVEANTIDEPBREAKER_H -#include "AntiDepBreaker.h" #include "llvm/ADT/BitVector.h" +#include "llvm/CodeGen/AntiDepBreaker.h" #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/Support/Compiler.h" #include diff --git a/lib/CodeGen/CriticalAntiDepBreaker.cpp b/lib/CodeGen/CriticalAntiDepBreaker.cpp index 8d9d48402b3..9b1792650a9 100644 --- a/lib/CodeGen/CriticalAntiDepBreaker.cpp +++ b/lib/CodeGen/CriticalAntiDepBreaker.cpp @@ -702,3 +702,9 @@ BreakAntiDependencies(const std::vector &SUnits, return Broken; } + +AntiDepBreaker * +llvm::createCriticalAntiDepBreaker(MachineFunction &MFi, + const RegisterClassInfo &RCI) { + return new CriticalAntiDepBreaker(MFi, RCI); +} diff --git a/lib/CodeGen/CriticalAntiDepBreaker.h b/lib/CodeGen/CriticalAntiDepBreaker.h index 4e127ce525c..640506b6e9e 100644 --- a/lib/CodeGen/CriticalAntiDepBreaker.h +++ b/lib/CodeGen/CriticalAntiDepBreaker.h @@ -15,8 +15,8 @@ #ifndef LLVM_LIB_CODEGEN_CRITICALANTIDEPBREAKER_H #define LLVM_LIB_CODEGEN_CRITICALANTIDEPBREAKER_H -#include "AntiDepBreaker.h" #include "llvm/ADT/BitVector.h" +#include "llvm/CodeGen/AntiDepBreaker.h" #include "llvm/Support/Compiler.h" #include #include diff --git a/lib/CodeGen/PostRASchedulerList.cpp b/lib/CodeGen/PostRASchedulerList.cpp index d68959935ce..b85f00a61ea 100644 --- a/lib/CodeGen/PostRASchedulerList.cpp +++ b/lib/CodeGen/PostRASchedulerList.cpp @@ -17,11 +17,9 @@ // //===----------------------------------------------------------------------===// -#include "AggressiveAntiDepBreaker.h" -#include "AntiDepBreaker.h" -#include "CriticalAntiDepBreaker.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/CodeGen/AntiDepBreaker.h" #include "llvm/CodeGen/LatencyPriorityQueue.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -220,11 +218,11 @@ SchedulePostRATDList::SchedulePostRATDList( assert((AntiDepMode == TargetSubtargetInfo::ANTIDEP_NONE || MRI.tracksLiveness()) && "Live-ins must be accurate for anti-dependency breaking"); - AntiDepBreak = - ((AntiDepMode == TargetSubtargetInfo::ANTIDEP_ALL) ? - (AntiDepBreaker *)new AggressiveAntiDepBreaker(MF, RCI, CriticalPathRCs) : - ((AntiDepMode == TargetSubtargetInfo::ANTIDEP_CRITICAL) ? - (AntiDepBreaker *)new CriticalAntiDepBreaker(MF, RCI) : nullptr)); + AntiDepBreak = ((AntiDepMode == TargetSubtargetInfo::ANTIDEP_ALL) + ? createAggressiveAntiDepBreaker(MF, RCI, CriticalPathRCs) + : ((AntiDepMode == TargetSubtargetInfo::ANTIDEP_CRITICAL) + ? createCriticalAntiDepBreaker(MF, RCI) + : nullptr)); } SchedulePostRATDList::~SchedulePostRATDList() {