diff --git a/llvm/lib/CodeGen/AntiDepBreaker.h b/llvm/include/llvm/CodeGen/AntiDepBreaker.h rename from llvm/lib/CodeGen/AntiDepBreaker.h rename to llvm/include/llvm/CodeGen/AntiDepBreaker.h --- a/llvm/lib/CodeGen/AntiDepBreaker.h +++ b/llvm/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 @@ } }; +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/llvm/lib/CodeGen/AggressiveAntiDepBreaker.h b/llvm/lib/CodeGen/AggressiveAntiDepBreaker.h --- a/llvm/lib/CodeGen/AggressiveAntiDepBreaker.h +++ b/llvm/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/llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp b/llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp --- a/llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp +++ b/llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp @@ -1011,3 +1011,9 @@ return Broken; } + +AntiDepBreaker *llvm::createAggressiveAntiDepBreaker( + MachineFunction &MFi, const RegisterClassInfo &RCI, + TargetSubtargetInfo::RegClassVector &CriticalPathRCs) { + return new AggressiveAntiDepBreaker(MFi, RCI, CriticalPathRCs); +} diff --git a/llvm/lib/CodeGen/CriticalAntiDepBreaker.h b/llvm/lib/CodeGen/CriticalAntiDepBreaker.h --- a/llvm/lib/CodeGen/CriticalAntiDepBreaker.h +++ b/llvm/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/llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp b/llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp --- a/llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp +++ b/llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp @@ -702,3 +702,9 @@ return Broken; } + +AntiDepBreaker * +llvm::createCriticalAntiDepBreaker(MachineFunction &MFi, + const RegisterClassInfo &RCI) { + return new CriticalAntiDepBreaker(MFi, RCI); +} diff --git a/llvm/lib/CodeGen/PostRASchedulerList.cpp b/llvm/lib/CodeGen/PostRASchedulerList.cpp --- a/llvm/lib/CodeGen/PostRASchedulerList.cpp +++ b/llvm/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 @@ 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() {