llvm-project/llvm/lib/Target/Foot/FootTargetMachine.cpp
2025-10-21 18:25:06 -04:00

77 lines
2.3 KiB
C++

#include "Foot.h"
#include "FootTargetMachine.h"
#include "FootTargetObjectFile.h"
#include "TargetInfo/FootTargetInfo.h"
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
#include "llvm/MC/TargetRegistry.h"
using namespace llvm;
static const char* FootDataLayoutStr =
"e-"
"p:32:32-"
"n8:16:32-"
"i64:64:64-i32:32:32-i16:16:32-"
"f32:32:32-"
"v32:32:32";
using namespace llvm;
FootTargetMachine::FootTargetMachine(const Target &T, const Triple &TT,
StringRef CPU, StringRef FS,
const TargetOptions &Options,
std::optional<Reloc::Model> RM,
std::optional<CodeModel::Model> CM,
CodeGenOptLevel OL,
bool JIT)
: CodeGenTargetMachineImpl(T, FootDataLayoutStr, TT, CPU, FS, Options, RM ? *RM : Reloc::Static, CM ? *CM : CodeModel::Small, OL) {
initAsmInfo();
}
FootTargetMachine::~FootTargetMachine() = default;
TargetPassConfig *FootTargetMachine::createPassConfig(PassManagerBase &PM) {
return new FootPassConfig(*this, PM);
}
TargetLoweringObjectFile *FootTargetMachine::getObjFileLowering() const {
static FootTargetObjectFileELF TLOF;
return &TLOF;
}
const FootSubtarget *FootTargetMachine::getSubtargetImpl(const Function &F) const {
Attribute CPUAttr = F.getFnAttribute("target-cpu");
Attribute FSAttr = F.getFnAttribute("target-features");
StringRef CPU = CPUAttr.isValid() ? CPUAttr.getValueAsString() : TargetCPU;
StringRef FS = FSAttr.isValid() ? FSAttr.getValueAsString() : TargetFS;
if (!SubtargetSingleton) {
SubtargetSingleton = std::make_unique<FootSubtarget>(TargetTriple, CPU, FS, *this);
}
return SubtargetSingleton.get();
}
FootPassConfig::FootPassConfig(TargetMachine &TM, PassManagerBase &PM) :
TargetPassConfig(TM, PM) {}
bool FootPassConfig::addInstSelector() {
addPass(createFootISelDAG(getFootTargetMachine()));
return false;
}
void FootPassConfig::addIRPasses() {
TargetPassConfig::addIRPasses();
}
void FootPassConfig::addPreEmitPass() {
addPass(createFootRemovePseudoInstructionsPassForLegacyPM());
}
extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeFootTarget()
{
RegisterTargetMachine<FootTargetMachine> X(getTheFootTarget());
}