mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-18 14:31:27 +00:00
Move all of the hexagon subtarget dependent variables from the target
machine to the subtarget. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211824 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
460f2ac45f
commit
061b8c389c
@ -48,10 +48,8 @@ EnableIEEERndNear(
|
|||||||
cl::Hidden, cl::ZeroOrMore, cl::init(false),
|
cl::Hidden, cl::ZeroOrMore, cl::init(false),
|
||||||
cl::desc("Generate non-chopped conversion from fp to int."));
|
cl::desc("Generate non-chopped conversion from fp to int."));
|
||||||
|
|
||||||
HexagonSubtarget::HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS):
|
HexagonSubtarget &
|
||||||
HexagonGenSubtargetInfo(TT, CPU, FS),
|
HexagonSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {
|
||||||
CPUString(CPU.str()) {
|
|
||||||
|
|
||||||
// If the programmer has not specified a Hexagon version, default to -mv4.
|
// If the programmer has not specified a Hexagon version, default to -mv4.
|
||||||
if (CPUString.empty())
|
if (CPUString.empty())
|
||||||
CPUString = "hexagonv4";
|
CPUString = "hexagonv4";
|
||||||
@ -70,6 +68,15 @@ HexagonSubtarget::HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS):
|
|||||||
}
|
}
|
||||||
|
|
||||||
ParseSubtargetFeatures(CPUString, FS);
|
ParseSubtargetFeatures(CPUString, FS);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
HexagonSubtarget::HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS,
|
||||||
|
const TargetMachine &TM)
|
||||||
|
: HexagonGenSubtargetInfo(TT, CPU, FS), CPUString(CPU.str()),
|
||||||
|
DL("e-m:e-p:32:32-i1:32-i64:64-a:0-n32"),
|
||||||
|
InstrInfo(initializeSubtargetDependencies(CPU, FS)), TLInfo(TM),
|
||||||
|
TSInfo(DL), FrameLowering() {
|
||||||
|
|
||||||
// Initialize scheduling itinerary for the specified CPU.
|
// Initialize scheduling itinerary for the specified CPU.
|
||||||
InstrItins = getInstrItineraryForCPU(CPUString);
|
InstrItins = getInstrItineraryForCPU(CPUString);
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
#ifndef Hexagon_SUBTARGET_H
|
#ifndef Hexagon_SUBTARGET_H
|
||||||
#define Hexagon_SUBTARGET_H
|
#define Hexagon_SUBTARGET_H
|
||||||
|
|
||||||
|
#include "HexagonFrameLowering.h"
|
||||||
|
#include "HexagonInstrInfo.h"
|
||||||
|
#include "HexagonISelLowering.h"
|
||||||
|
#include "HexagonSelectionDAGInfo.h"
|
||||||
|
#include "llvm/IR/DataLayout.h"
|
||||||
#include "llvm/Target/TargetMachine.h"
|
#include "llvm/Target/TargetMachine.h"
|
||||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -28,6 +33,7 @@ namespace llvm {
|
|||||||
|
|
||||||
class HexagonSubtarget : public HexagonGenSubtargetInfo {
|
class HexagonSubtarget : public HexagonGenSubtargetInfo {
|
||||||
virtual void anchor();
|
virtual void anchor();
|
||||||
|
|
||||||
bool UseMemOps;
|
bool UseMemOps;
|
||||||
bool ModeIEEERndNear;
|
bool ModeIEEERndNear;
|
||||||
|
|
||||||
@ -37,16 +43,35 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
HexagonArchEnum HexagonArchVersion;
|
HexagonArchEnum HexagonArchVersion;
|
||||||
|
private:
|
||||||
std::string CPUString;
|
std::string CPUString;
|
||||||
|
const DataLayout DL; // Calculates type size & alignment.
|
||||||
|
HexagonInstrInfo InstrInfo;
|
||||||
|
HexagonTargetLowering TLInfo;
|
||||||
|
HexagonSelectionDAGInfo TSInfo;
|
||||||
|
HexagonFrameLowering FrameLowering;
|
||||||
InstrItineraryData InstrItins;
|
InstrItineraryData InstrItins;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS);
|
HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS,
|
||||||
|
const TargetMachine &TM);
|
||||||
|
|
||||||
/// getInstrItins - Return the instruction itineraies based on subtarget
|
/// getInstrItins - Return the instruction itineraies based on subtarget
|
||||||
/// selection.
|
/// selection.
|
||||||
const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
|
const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
|
||||||
|
const HexagonInstrInfo *getInstrInfo() const { return &InstrInfo; }
|
||||||
|
const HexagonRegisterInfo *getRegisterInfo() const {
|
||||||
|
return &InstrInfo.getRegisterInfo();
|
||||||
|
}
|
||||||
|
const HexagonTargetLowering *getTargetLowering() const { return &TLInfo; }
|
||||||
|
const HexagonFrameLowering *getFrameLowering() const {
|
||||||
|
return &FrameLowering;
|
||||||
|
}
|
||||||
|
const HexagonSelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; }
|
||||||
|
const DataLayout *getDataLayout() const { return &DL; }
|
||||||
|
|
||||||
|
HexagonSubtarget &initializeSubtargetDependencies(StringRef CPU,
|
||||||
|
StringRef FS);
|
||||||
|
|
||||||
/// ParseSubtargetFeatures - Parses features string setting specified
|
/// ParseSubtargetFeatures - Parses features string setting specified
|
||||||
/// subtarget options. Definition of function is auto generated by tblgen.
|
/// subtarget options. Definition of function is auto generated by tblgen.
|
||||||
|
@ -70,9 +70,7 @@ HexagonTargetMachine::HexagonTargetMachine(const Target &T, StringRef TT,
|
|||||||
Reloc::Model RM, CodeModel::Model CM,
|
Reloc::Model RM, CodeModel::Model CM,
|
||||||
CodeGenOpt::Level OL)
|
CodeGenOpt::Level OL)
|
||||||
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
|
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
|
||||||
DL("e-m:e-p:32:32-i1:32-i64:64-a:0-n32"), Subtarget(TT, CPU, FS),
|
Subtarget(TT, CPU, FS, *this) {
|
||||||
InstrInfo(Subtarget), TLInfo(*this), TSInfo(DL),
|
|
||||||
FrameLowering() {
|
|
||||||
initAsmInfo();
|
initAsmInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,12 +14,8 @@
|
|||||||
#ifndef HexagonTARGETMACHINE_H
|
#ifndef HexagonTARGETMACHINE_H
|
||||||
#define HexagonTARGETMACHINE_H
|
#define HexagonTARGETMACHINE_H
|
||||||
|
|
||||||
#include "HexagonFrameLowering.h"
|
|
||||||
#include "HexagonISelLowering.h"
|
|
||||||
#include "HexagonInstrInfo.h"
|
#include "HexagonInstrInfo.h"
|
||||||
#include "HexagonSelectionDAGInfo.h"
|
|
||||||
#include "HexagonSubtarget.h"
|
#include "HexagonSubtarget.h"
|
||||||
#include "llvm/IR/DataLayout.h"
|
|
||||||
#include "llvm/Target/TargetMachine.h"
|
#include "llvm/Target/TargetMachine.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@ -27,12 +23,7 @@ namespace llvm {
|
|||||||
class Module;
|
class Module;
|
||||||
|
|
||||||
class HexagonTargetMachine : public LLVMTargetMachine {
|
class HexagonTargetMachine : public LLVMTargetMachine {
|
||||||
const DataLayout DL; // Calculates type size & alignment.
|
|
||||||
HexagonSubtarget Subtarget;
|
HexagonSubtarget Subtarget;
|
||||||
HexagonInstrInfo InstrInfo;
|
|
||||||
HexagonTargetLowering TLInfo;
|
|
||||||
HexagonSelectionDAGInfo TSInfo;
|
|
||||||
HexagonFrameLowering FrameLowering;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HexagonTargetMachine(const Target &T, StringRef TT,StringRef CPU,
|
HexagonTargetMachine(const Target &T, StringRef TT,StringRef CPU,
|
||||||
@ -41,33 +32,29 @@ public:
|
|||||||
CodeGenOpt::Level OL);
|
CodeGenOpt::Level OL);
|
||||||
|
|
||||||
const HexagonInstrInfo *getInstrInfo() const override {
|
const HexagonInstrInfo *getInstrInfo() const override {
|
||||||
return &InstrInfo;
|
return getSubtargetImpl()->getInstrInfo();
|
||||||
}
|
}
|
||||||
const HexagonSubtarget *getSubtargetImpl() const override {
|
const HexagonSubtarget *getSubtargetImpl() const override {
|
||||||
return &Subtarget;
|
return &Subtarget;
|
||||||
}
|
}
|
||||||
const HexagonRegisterInfo *getRegisterInfo() const override {
|
const HexagonRegisterInfo *getRegisterInfo() const override {
|
||||||
return &InstrInfo.getRegisterInfo();
|
return getSubtargetImpl()->getRegisterInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
const InstrItineraryData* getInstrItineraryData() const override {
|
const InstrItineraryData* getInstrItineraryData() const override {
|
||||||
return &getSubtargetImpl()->getInstrItineraryData();
|
return &getSubtargetImpl()->getInstrItineraryData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const HexagonTargetLowering* getTargetLowering() const override {
|
const HexagonTargetLowering* getTargetLowering() const override {
|
||||||
return &TLInfo;
|
return getSubtargetImpl()->getTargetLowering();
|
||||||
}
|
}
|
||||||
|
|
||||||
const HexagonFrameLowering* getFrameLowering() const override {
|
const HexagonFrameLowering* getFrameLowering() const override {
|
||||||
return &FrameLowering;
|
return getSubtargetImpl()->getFrameLowering();
|
||||||
}
|
}
|
||||||
|
|
||||||
const HexagonSelectionDAGInfo* getSelectionDAGInfo() const override {
|
const HexagonSelectionDAGInfo* getSelectionDAGInfo() const override {
|
||||||
return &TSInfo;
|
return getSubtargetImpl()->getSelectionDAGInfo();
|
||||||
|
}
|
||||||
|
const DataLayout *getDataLayout() const override {
|
||||||
|
return getSubtargetImpl()->getDataLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
const DataLayout *getDataLayout() const override { return &DL; }
|
|
||||||
static unsigned getModuleMatchQuality(const Module &M);
|
static unsigned getModuleMatchQuality(const Module &M);
|
||||||
|
|
||||||
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
|
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user