forked from OSchip/llvm-project
[ARM][NFC] Avoid recreating MCSubtargetInfo in ARMAsmBackend
After D41349, we can now directly access MCSubtargetInfo from createARM*AsmBackend. This patch makes use of this, avoiding the need to create a fresh MCSubtargetInfo (which was previously always done with a blank CPU and feature string). Given the total size of the change remains pretty tiny and we're removing the old explicit destructor, I changed the STI field to a reference rather than a pointer. Differential Revision: https://reviews.llvm.org/D41693 llvm-svn: 321707
This commit is contained in:
parent
dcc0ba9bbb
commit
46db78b743
|
@ -172,8 +172,8 @@ void ARMAsmBackend::handleAssemblerFlag(MCAssemblerFlag Flag) {
|
|||
}
|
||||
|
||||
unsigned ARMAsmBackend::getRelaxedOpcode(unsigned Op) const {
|
||||
bool HasThumb2 = STI->getFeatureBits()[ARM::FeatureThumb2];
|
||||
bool HasV8MBaselineOps = STI->getFeatureBits()[ARM::HasV8MBaselineOps];
|
||||
bool HasThumb2 = STI.getFeatureBits()[ARM::FeatureThumb2];
|
||||
bool HasV8MBaselineOps = STI.getFeatureBits()[ARM::HasV8MBaselineOps];
|
||||
|
||||
switch (Op) {
|
||||
default:
|
||||
|
@ -389,7 +389,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
|
|||
case FK_SecRel_4:
|
||||
return Value;
|
||||
case ARM::fixup_arm_movt_hi16:
|
||||
if (IsResolved || !STI->getTargetTriple().isOSBinFormatELF())
|
||||
if (IsResolved || !STI.getTargetTriple().isOSBinFormatELF())
|
||||
Value >>= 16;
|
||||
LLVM_FALLTHROUGH;
|
||||
case ARM::fixup_arm_movw_lo16: {
|
||||
|
@ -401,7 +401,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
|
|||
return Value;
|
||||
}
|
||||
case ARM::fixup_t2_movt_hi16:
|
||||
if (IsResolved || !STI->getTargetTriple().isOSBinFormatELF())
|
||||
if (IsResolved || !STI.getTargetTriple().isOSBinFormatELF())
|
||||
Value >>= 16;
|
||||
LLVM_FALLTHROUGH;
|
||||
case ARM::fixup_t2_movw_lo16: {
|
||||
|
@ -591,7 +591,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
|
|||
case ARM::fixup_arm_thumb_cp:
|
||||
// On CPUs supporting Thumb2, this will be relaxed to an ldr.w, otherwise we
|
||||
// could have an error on our hands.
|
||||
if (!STI->getFeatureBits()[ARM::FeatureThumb2] && IsResolved) {
|
||||
if (!STI.getFeatureBits()[ARM::FeatureThumb2] && IsResolved) {
|
||||
const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup, Value);
|
||||
if (FixupDiagnostic) {
|
||||
Ctx.reportError(Fixup.getLoc(), FixupDiagnostic);
|
||||
|
@ -615,8 +615,8 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
|
|||
}
|
||||
case ARM::fixup_arm_thumb_br:
|
||||
// Offset by 4 and don't encode the lower bit, which is always 0.
|
||||
if (!STI->getFeatureBits()[ARM::FeatureThumb2] &&
|
||||
!STI->getFeatureBits()[ARM::HasV8MBaselineOps]) {
|
||||
if (!STI.getFeatureBits()[ARM::FeatureThumb2] &&
|
||||
!STI.getFeatureBits()[ARM::HasV8MBaselineOps]) {
|
||||
const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup, Value);
|
||||
if (FixupDiagnostic) {
|
||||
Ctx.reportError(Fixup.getLoc(), FixupDiagnostic);
|
||||
|
@ -626,7 +626,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
|
|||
return ((Value - 4) >> 1) & 0x7ff;
|
||||
case ARM::fixup_arm_thumb_bcc:
|
||||
// Offset by 4 and don't encode the lower bit, which is always 0.
|
||||
if (!STI->getFeatureBits()[ARM::FeatureThumb2]) {
|
||||
if (!STI.getFeatureBits()[ARM::FeatureThumb2]) {
|
||||
const char *FixupDiagnostic = reasonForFixupRelaxation(Fixup, Value);
|
||||
if (FixupDiagnostic) {
|
||||
Ctx.reportError(Fixup.getLoc(), FixupDiagnostic);
|
||||
|
@ -1154,24 +1154,25 @@ static MachO::CPUSubTypeARM getMachOSubTypeFromArch(StringRef Arch) {
|
|||
}
|
||||
|
||||
MCAsmBackend *llvm::createARMAsmBackend(const Target &T,
|
||||
const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const Triple &TheTriple, StringRef CPU,
|
||||
const MCTargetOptions &Options,
|
||||
bool isLittle) {
|
||||
const Triple &TheTriple = STI.getTargetTriple();
|
||||
switch (TheTriple.getObjectFormat()) {
|
||||
default:
|
||||
llvm_unreachable("unsupported object format");
|
||||
case Triple::MachO: {
|
||||
MachO::CPUSubTypeARM CS = getMachOSubTypeFromArch(TheTriple.getArchName());
|
||||
return new ARMAsmBackendDarwin(T, TheTriple, MRI, CS);
|
||||
return new ARMAsmBackendDarwin(T, STI, MRI, CS);
|
||||
}
|
||||
case Triple::COFF:
|
||||
assert(TheTriple.isOSWindows() && "non-Windows ARM COFF is not supported");
|
||||
return new ARMAsmBackendWinCOFF(T, TheTriple);
|
||||
return new ARMAsmBackendWinCOFF(T, STI);
|
||||
case Triple::ELF:
|
||||
assert(TheTriple.isOSBinFormatELF() && "using ELF for non-ELF target");
|
||||
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
|
||||
return new ARMAsmBackendELF(T, TheTriple, OSABI, isLittle);
|
||||
return new ARMAsmBackendELF(T, STI, OSABI, isLittle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1179,30 +1180,26 @@ MCAsmBackend *llvm::createARMLEAsmBackend(const Target &T,
|
|||
const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options) {
|
||||
return createARMAsmBackend(T, MRI, STI.getTargetTriple(), STI.getCPU(),
|
||||
Options, true);
|
||||
return createARMAsmBackend(T, STI, MRI, Options, true);
|
||||
}
|
||||
|
||||
MCAsmBackend *llvm::createARMBEAsmBackend(const Target &T,
|
||||
const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options) {
|
||||
return createARMAsmBackend(T, MRI, STI.getTargetTriple(), STI.getCPU(),
|
||||
Options, false);
|
||||
return createARMAsmBackend(T, STI, MRI, Options, false);
|
||||
}
|
||||
|
||||
MCAsmBackend *llvm::createThumbLEAsmBackend(const Target &T,
|
||||
const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options) {
|
||||
return createARMAsmBackend(T, MRI, STI.getTargetTriple(), STI.getCPU(),
|
||||
Options, true);
|
||||
return createARMAsmBackend(T, STI, MRI, Options, true);
|
||||
}
|
||||
|
||||
MCAsmBackend *llvm::createThumbBEAsmBackend(const Target &T,
|
||||
const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options) {
|
||||
return createARMAsmBackend(T, MRI, STI.getTargetTriple(), STI.getCPU(),
|
||||
Options, false);
|
||||
return createARMAsmBackend(T, STI, MRI, Options, false);
|
||||
}
|
||||
|
|
|
@ -19,22 +19,20 @@
|
|||
namespace llvm {
|
||||
|
||||
class ARMAsmBackend : public MCAsmBackend {
|
||||
const MCSubtargetInfo *STI;
|
||||
const MCSubtargetInfo &STI;
|
||||
bool isThumbMode; // Currently emitting Thumb code.
|
||||
bool IsLittleEndian; // Big or little endian.
|
||||
public:
|
||||
ARMAsmBackend(const Target &T, const Triple &TT, bool IsLittle)
|
||||
: MCAsmBackend(), STI(ARM_MC::createARMMCSubtargetInfo(TT, "", "")),
|
||||
isThumbMode(TT.getArchName().startswith("thumb")),
|
||||
ARMAsmBackend(const Target &T, const MCSubtargetInfo &STI, bool IsLittle)
|
||||
: MCAsmBackend(), STI(STI),
|
||||
isThumbMode(STI.getTargetTriple().isThumb()),
|
||||
IsLittleEndian(IsLittle) {}
|
||||
|
||||
~ARMAsmBackend() override { delete STI; }
|
||||
|
||||
unsigned getNumFixupKinds() const override {
|
||||
return ARM::NumTargetFixupKinds;
|
||||
}
|
||||
|
||||
bool hasNOP() const { return STI->getFeatureBits()[ARM::HasV6T2Ops]; }
|
||||
bool hasNOP() const { return STI.getFeatureBits()[ARM::HasV6T2Ops]; }
|
||||
|
||||
const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const override;
|
||||
|
||||
|
|
|
@ -19,10 +19,10 @@ class ARMAsmBackendDarwin : public ARMAsmBackend {
|
|||
const MCRegisterInfo &MRI;
|
||||
public:
|
||||
const MachO::CPUSubTypeARM Subtype;
|
||||
ARMAsmBackendDarwin(const Target &T, const Triple &TT,
|
||||
ARMAsmBackendDarwin(const Target &T, const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI, MachO::CPUSubTypeARM st)
|
||||
: ARMAsmBackend(T, TT, /* IsLittleEndian */ true), MRI(MRI), Subtype(st) {
|
||||
}
|
||||
: ARMAsmBackend(T, STI, /* IsLittleEndian */ true), MRI(MRI),
|
||||
Subtype(st) {}
|
||||
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
|
|
|
@ -20,9 +20,9 @@ namespace {
|
|||
class ARMAsmBackendELF : public ARMAsmBackend {
|
||||
public:
|
||||
uint8_t OSABI;
|
||||
ARMAsmBackendELF(const Target &T, const Triple &TT, uint8_t OSABI,
|
||||
ARMAsmBackendELF(const Target &T, const MCSubtargetInfo &STI, uint8_t OSABI,
|
||||
bool IsLittle)
|
||||
: ARMAsmBackend(T, TT, IsLittle), OSABI(OSABI) {}
|
||||
: ARMAsmBackend(T, STI, IsLittle), OSABI(OSABI) {}
|
||||
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
|
|
|
@ -17,8 +17,8 @@ using namespace llvm;
|
|||
namespace {
|
||||
class ARMAsmBackendWinCOFF : public ARMAsmBackend {
|
||||
public:
|
||||
ARMAsmBackendWinCOFF(const Target &T, const Triple &TheTriple)
|
||||
: ARMAsmBackend(T, TheTriple, true) {}
|
||||
ARMAsmBackendWinCOFF(const Target &T, const MCSubtargetInfo &STI)
|
||||
: ARMAsmBackend(T, STI, true) {}
|
||||
std::unique_ptr<MCObjectWriter>
|
||||
createObjectWriter(raw_pwrite_stream &OS) const override {
|
||||
return createARMWinCOFFObjectWriter(OS, /*Is64Bit=*/false);
|
||||
|
|
|
@ -68,8 +68,8 @@ MCCodeEmitter *createARMBEMCCodeEmitter(const MCInstrInfo &MCII,
|
|||
const MCRegisterInfo &MRI,
|
||||
MCContext &Ctx);
|
||||
|
||||
MCAsmBackend *createARMAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||
const Triple &TT, StringRef CPU,
|
||||
MCAsmBackend *createARMAsmBackend(const Target &T, const MCSubtargetInfo &STI,
|
||||
const MCRegisterInfo &MRI,
|
||||
const MCTargetOptions &Options,
|
||||
bool IsLittleEndian);
|
||||
|
||||
|
|
Loading…
Reference in New Issue