MBlazeTargetMachine.cpp [plain text]
#include "MBlazeTargetMachine.h"
#include "MBlaze.h"
#include "llvm/PassManager.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Target/TargetOptions.h"
using namespace llvm;
extern "C" void LLVMInitializeMBlazeTarget() {
RegisterTargetMachine<MBlazeTargetMachine> X(TheMBlazeTarget);
}
MBlazeTargetMachine::
MBlazeTargetMachine(const Target &T, StringRef TT,
StringRef CPU, StringRef FS, const TargetOptions &Options,
Reloc::Model RM, CodeModel::Model CM,
CodeGenOpt::Level OL)
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
Subtarget(TT, CPU, FS),
DataLayout("E-p:32:32:32-i8:8:8-i16:16:16"),
InstrInfo(*this),
FrameLowering(Subtarget),
TLInfo(*this), TSInfo(*this), ELFWriterInfo(*this),
InstrItins(Subtarget.getInstrItineraryData()) {
}
namespace {
class MBlazePassConfig : public TargetPassConfig {
public:
MBlazePassConfig(MBlazeTargetMachine *TM, PassManagerBase &PM)
: TargetPassConfig(TM, PM) {}
MBlazeTargetMachine &getMBlazeTargetMachine() const {
return getTM<MBlazeTargetMachine>();
}
virtual bool addInstSelector();
virtual bool addPreEmitPass();
};
}
TargetPassConfig *MBlazeTargetMachine::createPassConfig(PassManagerBase &PM) {
return new MBlazePassConfig(this, PM);
}
bool MBlazePassConfig::addInstSelector() {
addPass(createMBlazeISelDag(getMBlazeTargetMachine()));
return false;
}
bool MBlazePassConfig::addPreEmitPass() {
addPass(createMBlazeDelaySlotFillerPass(getMBlazeTargetMachine()));
return true;
}