Skip to content

Commit 3acbeb2

Browse files
dmitryryintelsys_zuul
authored andcommitted
Switch to using LLVMTargetMachine in VC.
Initialized GenX pass in BackendPlugin. Change-Id: Ibff3c2e8a5235dfa4a9377deeae141b4d188b677
1 parent e0fa6e2 commit 3acbeb2

File tree

5 files changed

+72
-2
lines changed

5 files changed

+72
-2
lines changed

IGC/VectorCompiler/include/vc/GenXCodeGen/GenXTarget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3030
extern "C" void LLVMInitializeGenXTargetInfo();
3131
extern "C" void LLVMInitializeGenXTarget();
3232
extern "C" void LLVMInitializeGenXTargetMC();
33+
extern "C" void LLVMInitializeGenXPasses();
3334

3435
namespace llvm {
3536
void initializeGenX() {

IGC/VectorCompiler/lib/BackendPlugin/BackendPlugin.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2828

2929
static int initializeAll() {
3030
llvm::initializeGenX();
31+
LLVMInitializeGenXPasses();
3132
return 0;
3233
}
3334

IGC/VectorCompiler/lib/GenXCodeGen/GenXTargetMachine.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6060
#include "llvm/Analysis/Passes.h"
6161
#include "llvm/Analysis/TargetTransformInfo.h"
6262
#include "llvm/CodeGen/Passes.h"
63+
#include "llvm/CodeGen/TargetPassConfig.h"
6364
#include "llvm/IR/LegacyPassManager.h"
6465
#include "llvm/IR/Verifier.h"
6566
#include "llvm/InitializePasses.h"
@@ -143,17 +144,38 @@ TargetTransformInfo GenXTargetMachine::getTargetTransformInfo(const Function &F)
143144

144145
} // namespace llvm
145146

147+
namespace {
148+
149+
class GenXPassConfig : public TargetPassConfig {
150+
public:
151+
GenXPassConfig(GenXTargetMachine &TM, PassManagerBase &PM)
152+
: TargetPassConfig(TM, PM) {}
153+
154+
GenXTargetMachine &getGenXTargetMachine() const {
155+
return getTM<GenXTargetMachine>();
156+
}
157+
};
158+
159+
} // namespace
160+
146161
GenXTargetMachine::GenXTargetMachine(const Target &T, const Triple &TT,
147162
StringRef CPU, StringRef FS,
148163
const TargetOptions &Options,
149164
Optional<Reloc::Model> RM,
150165
Optional<CodeModel::Model> CM,
151166
CodeGenOpt::Level OL, bool Is64Bit)
152-
: IGCLLVM::TargetMachine(T, getDL(Is64Bit), TT, CPU, FS, Options),
167+
: IGCLLVM::LLVMTargetMachine(T, getDL(Is64Bit), TT, CPU, FS, Options,
168+
RM ? RM.getValue() : Reloc::Model::Static,
169+
CM ? CM.getValue() : CodeModel::Model::Small,
170+
OL),
153171
Is64Bit(Is64Bit), Subtarget(TT, CPU, FS) {}
154172

155173
GenXTargetMachine::~GenXTargetMachine() = default;
156174

175+
TargetPassConfig *GenXTargetMachine::createPassConfig(PassManagerBase &PM) {
176+
return new GenXPassConfig(*this, PM);
177+
}
178+
157179
void GenXTargetMachine32::anchor() {}
158180

159181
GenXTargetMachine32::GenXTargetMachine32(const Target &T, const Triple &TT,
@@ -183,6 +205,10 @@ extern "C" void LLVMInitializeGenXTarget() {
183205
RegisterTargetMachine<GenXTargetMachine64> Y(getTheGenXTarget64());
184206
}
185207

208+
extern "C" void LLVMInitializeGenXPasses() {
209+
llvm::initializeGenXPasses(*PassRegistry::getPassRegistry());
210+
}
211+
186212
//===----------------------------------------------------------------------===//
187213
// Pass Pipeline Configuration
188214
//===----------------------------------------------------------------------===//

IGC/VectorCompiler/lib/GenXCodeGen/GenXTargetMachine.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace llvm {
4848
class raw_pwrite_stream;
4949
class MachineModuleInfo;
5050

51-
class GenXTargetMachine : public IGCLLVM::TargetMachine {
51+
class GenXTargetMachine : public IGCLLVM::LLVMTargetMachine {
5252
bool Is64Bit;
5353
GenXSubtarget Subtarget;
5454

@@ -67,6 +67,8 @@ class GenXTargetMachine : public IGCLLVM::TargetMachine {
6767

6868
void adjustPassManager(PassManagerBuilder &PMBuilder) override;
6969

70+
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
71+
7072
virtual const DataLayout *getDataLayout() const { return &DL; }
7173

7274
virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const override {

IGC/WrapperLLVM/include/llvmWrapper/Target/TargetMachine.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,46 @@ namespace IGCLLVM {
6969
}
7070
};
7171
#endif
72+
73+
#if LLVM_VERSION_MAJOR < 10
74+
using LLVMTargetMachine = llvm::LLVMTargetMachine;
75+
#else
76+
class LLVMTargetMachine : public llvm::LLVMTargetMachine
77+
{
78+
public:
79+
using CodeGenFileType = llvm::CodeGenFileType;
80+
81+
protected:
82+
LLVMTargetMachine(const llvm::Target &T, llvm::StringRef DataLayoutString,
83+
const llvm::Triple &TargetTriple, llvm::StringRef CPU,
84+
llvm::StringRef FS, const llvm::TargetOptions &Options,
85+
llvm::Reloc::Model RM, llvm::CodeModel::Model CM,
86+
llvm::CodeGenOpt::Level OL)
87+
: llvm::LLVMTargetMachine(T, DataLayoutString, TargetTriple, CPU, FS,
88+
Options, RM, CM, OL) {}
89+
90+
private:
91+
bool addPassesToEmitFile(llvm::PassManagerBase &PM,
92+
llvm::raw_pwrite_stream &o, llvm::raw_pwrite_stream *pi,
93+
llvm::CodeGenFileType FileType, bool DisableVerify,
94+
llvm::MachineModuleInfoWrapperPass *MMIWP) override
95+
{
96+
llvm::MachineModuleInfo *MMI = nullptr;
97+
if (MMIWP)
98+
MMI = &MMIWP->getMMI();
99+
return addPassesToEmitFile(PM, o, pi, FileType, DisableVerify, MMI);
100+
}
101+
102+
public:
103+
virtual bool addPassesToEmitFile(llvm::PassManagerBase &PM,
104+
llvm::raw_pwrite_stream &o, llvm::raw_pwrite_stream *pi,
105+
CodeGenFileType FileType, bool DisableVerify,
106+
llvm::MachineModuleInfo *MMI)
107+
{
108+
return true;
109+
}
110+
};
111+
#endif
72112
} // namespace IGCLLVM
73113

74114
#endif

0 commit comments

Comments
 (0)