forked from OSchip/llvm-project
Move the subtarget dependent features from SystemZTargetMachine
down to the subtarget. Add an initialization routine to assist. llvm-svn: 212124
This commit is contained in:
parent
f1bd22dfa4
commit
5234995e80
|
@ -80,9 +80,9 @@ static MachineOperand earlyUseOperand(MachineOperand Op) {
|
|||
return Op;
|
||||
}
|
||||
|
||||
SystemZTargetLowering::SystemZTargetLowering(SystemZTargetMachine &tm)
|
||||
: TargetLowering(tm, new TargetLoweringObjectFileELF()),
|
||||
Subtarget(*tm.getSubtargetImpl()) {
|
||||
SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &tm)
|
||||
: TargetLowering(tm, new TargetLoweringObjectFileELF()),
|
||||
Subtarget(tm.getSubtarget<SystemZSubtarget>()) {
|
||||
MVT PtrVT = getPointerTy();
|
||||
|
||||
// Set up the register classes.
|
||||
|
|
|
@ -198,7 +198,7 @@ class SystemZTargetMachine;
|
|||
|
||||
class SystemZTargetLowering : public TargetLowering {
|
||||
public:
|
||||
explicit SystemZTargetLowering(SystemZTargetMachine &TM);
|
||||
explicit SystemZTargetLowering(const TargetMachine &TM);
|
||||
|
||||
// Override TargetLowering.
|
||||
MVT getScalarShiftAmountTy(EVT LHSTy) const override {
|
||||
|
|
|
@ -23,13 +23,8 @@ using namespace llvm;
|
|||
// Pin the vtabel to this file.
|
||||
void SystemZSubtarget::anchor() {}
|
||||
|
||||
SystemZSubtarget::SystemZSubtarget(const std::string &TT,
|
||||
const std::string &CPU,
|
||||
const std::string &FS)
|
||||
: SystemZGenSubtargetInfo(TT, CPU, FS), HasDistinctOps(false),
|
||||
HasLoadStoreOnCond(false), HasHighWord(false), HasFPExtension(false),
|
||||
HasFastSerialization(false), HasInterlockedAccess1(false),
|
||||
TargetTriple(TT) {
|
||||
SystemZSubtarget &
|
||||
SystemZSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {
|
||||
std::string CPUName = CPU;
|
||||
if (CPUName.empty())
|
||||
CPUName = "generic";
|
||||
|
@ -37,11 +32,26 @@ SystemZSubtarget::SystemZSubtarget(const std::string &TT,
|
|||
if (CPUName == "generic")
|
||||
CPUName = sys::getHostCPUName();
|
||||
#endif
|
||||
|
||||
// Parse features string.
|
||||
ParseSubtargetFeatures(CPUName, FS);
|
||||
return *this;
|
||||
}
|
||||
|
||||
SystemZSubtarget::SystemZSubtarget(const std::string &TT,
|
||||
const std::string &CPU,
|
||||
const std::string &FS,
|
||||
const TargetMachine &TM)
|
||||
: SystemZGenSubtargetInfo(TT, CPU, FS), HasDistinctOps(false),
|
||||
HasLoadStoreOnCond(false), HasHighWord(false), HasFPExtension(false),
|
||||
HasFastSerialization(false), HasInterlockedAccess1(false),
|
||||
TargetTriple(TT),
|
||||
// Make sure that global data has at least 16 bits of alignment by
|
||||
// default, so that we can refer to it using LARL. We don't have any
|
||||
// special requirements for stack variables though.
|
||||
DL("E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"),
|
||||
InstrInfo(initializeSubtargetDependencies(CPU, FS)), TLInfo(TM),
|
||||
TSInfo(DL), FrameLowering() {}
|
||||
|
||||
// Return true if GV binds locally under reloc model RM.
|
||||
static bool bindsLocally(const GlobalValue *GV, Reloc::Model RM) {
|
||||
// For non-PIC, all symbols bind locally.
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
#ifndef SYSTEMZSUBTARGET_H
|
||||
#define SYSTEMZSUBTARGET_H
|
||||
|
||||
#include "SystemZFrameLowering.h"
|
||||
#include "SystemZISelLowering.h"
|
||||
#include "SystemZInstrInfo.h"
|
||||
#include "SystemZRegisterInfo.h"
|
||||
#include "SystemZSelectionDAGInfo.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include <string>
|
||||
|
@ -37,10 +43,26 @@ protected:
|
|||
|
||||
private:
|
||||
Triple TargetTriple;
|
||||
const DataLayout DL;
|
||||
SystemZInstrInfo InstrInfo;
|
||||
SystemZTargetLowering TLInfo;
|
||||
SystemZSelectionDAGInfo TSInfo;
|
||||
SystemZFrameLowering FrameLowering;
|
||||
|
||||
SystemZSubtarget &initializeSubtargetDependencies(StringRef CPU,
|
||||
StringRef FS);
|
||||
public:
|
||||
SystemZSubtarget(const std::string &TT, const std::string &CPU,
|
||||
const std::string &FS);
|
||||
const std::string &FS, const TargetMachine &TM);
|
||||
|
||||
const TargetFrameLowering *getFrameLowering() const { return &FrameLowering; }
|
||||
const SystemZInstrInfo *getInstrInfo() const { return &InstrInfo; }
|
||||
const DataLayout *getDataLayout() const { return &DL; }
|
||||
const SystemZRegisterInfo *getRegisterInfo() const {
|
||||
return &InstrInfo.getRegisterInfo();
|
||||
}
|
||||
const SystemZTargetLowering *getTargetLowering() const { return &TLInfo; }
|
||||
const TargetSelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; }
|
||||
|
||||
// This is important for reducing register pressure in vector code.
|
||||
bool useAA() const override { return true; }
|
||||
|
|
|
@ -25,12 +25,7 @@ SystemZTargetMachine::SystemZTargetMachine(const Target &T, StringRef TT,
|
|||
Reloc::Model RM, CodeModel::Model CM,
|
||||
CodeGenOpt::Level OL)
|
||||
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
|
||||
Subtarget(TT, CPU, FS),
|
||||
// Make sure that global data has at least 16 bits of alignment by
|
||||
// default, so that we can refer to it using LARL. We don't have any
|
||||
// special requirements for stack variables though.
|
||||
DL("E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"),
|
||||
InstrInfo(Subtarget), TLInfo(*this), TSInfo(DL), FrameLowering() {
|
||||
Subtarget(TT, CPU, FS, *this) {
|
||||
initAsmInfo();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,25 +15,15 @@
|
|||
#ifndef SYSTEMZTARGETMACHINE_H
|
||||
#define SYSTEMZTARGETMACHINE_H
|
||||
|
||||
#include "SystemZFrameLowering.h"
|
||||
#include "SystemZISelLowering.h"
|
||||
#include "SystemZInstrInfo.h"
|
||||
#include "SystemZRegisterInfo.h"
|
||||
#include "SystemZSelectionDAGInfo.h"
|
||||
#include "SystemZSubtarget.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/Target/TargetFrameLowering.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class TargetFrameLowering;
|
||||
|
||||
class SystemZTargetMachine : public LLVMTargetMachine {
|
||||
SystemZSubtarget Subtarget;
|
||||
const DataLayout DL;
|
||||
SystemZInstrInfo InstrInfo;
|
||||
SystemZTargetLowering TLInfo;
|
||||
SystemZSelectionDAGInfo TSInfo;
|
||||
SystemZFrameLowering FrameLowering;
|
||||
|
||||
public:
|
||||
SystemZTargetMachine(const Target &T, StringRef TT, StringRef CPU,
|
||||
|
@ -43,25 +33,25 @@ public:
|
|||
|
||||
// Override TargetMachine.
|
||||
const TargetFrameLowering *getFrameLowering() const override {
|
||||
return &FrameLowering;
|
||||
return getSubtargetImpl()->getFrameLowering();
|
||||
}
|
||||
const SystemZInstrInfo *getInstrInfo() const override {
|
||||
return &InstrInfo;
|
||||
return getSubtargetImpl()->getInstrInfo();
|
||||
}
|
||||
const SystemZSubtarget *getSubtargetImpl() const override {
|
||||
return &Subtarget;
|
||||
}
|
||||
const DataLayout *getDataLayout() const override {
|
||||
return &DL;
|
||||
return getSubtargetImpl()->getDataLayout();
|
||||
}
|
||||
const SystemZRegisterInfo *getRegisterInfo() const override {
|
||||
return &InstrInfo.getRegisterInfo();
|
||||
return getSubtargetImpl()->getRegisterInfo();
|
||||
}
|
||||
const SystemZTargetLowering *getTargetLowering() const override {
|
||||
return &TLInfo;
|
||||
return getSubtargetImpl()->getTargetLowering();
|
||||
}
|
||||
const TargetSelectionDAGInfo *getSelectionDAGInfo() const override {
|
||||
return &TSInfo;
|
||||
return getSubtargetImpl()->getSelectionDAGInfo();
|
||||
}
|
||||
|
||||
// Override LLVMTargetMachine
|
||||
|
|
Loading…
Reference in New Issue