From 8898b1be979d7484ba655ac46fa6494fd16d5da8 Mon Sep 17 00:00:00 2001 From: Mirko Brkusanin Date: Wed, 23 Oct 2019 12:24:35 +0200 Subject: [PATCH] [Mips] Use appropriate private label prefix based on Mips ABI MipsMCAsmInfo was using '$' prefix for Mips32 and '.L' for Mips64 regardless of -target-abi option. By passing MCTargetOptions to MCAsmInfo we can find out Mips ABI and pick appropriate prefix. Tags: #llvm, #clang, #lldb Differential Revision: https://reviews.llvm.org/D66795 --- include/llvm/Support/TargetRegistry.h | 15 ++++++----- lib/CodeGen/LLVMTargetMachine.cpp | 4 +-- lib/MC/MCDisassembler/Disassembler.cpp | 5 +++- lib/Object/ModuleSymbolTable.cpp | 4 +-- .../MCTargetDesc/AArch64MCTargetDesc.cpp | 3 ++- .../AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp | 4 ++- .../AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h | 2 +- .../ARC/MCTargetDesc/ARCMCTargetDesc.cpp | 3 ++- .../ARM/MCTargetDesc/ARMMCTargetDesc.cpp | 3 ++- lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.cpp | 2 +- lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.h | 2 +- lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h | 2 +- .../MCTargetDesc/HexagonMCTargetDesc.cpp | 3 ++- .../Lanai/MCTargetDesc/LanaiMCAsmInfo.cpp | 3 ++- .../Lanai/MCTargetDesc/LanaiMCAsmInfo.h | 3 ++- .../MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp | 3 ++- .../MSP430/MCTargetDesc/MSP430MCAsmInfo.h | 2 +- .../Mips/MCTargetDesc/MipsMCAsmInfo.cpp | 18 +++++++------ lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h | 3 ++- .../Mips/MCTargetDesc/MipsMCTargetDesc.cpp | 5 ++-- .../NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp | 3 ++- .../NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h | 3 ++- .../PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp | 3 ++- .../RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp | 3 ++- .../Sparc/MCTargetDesc/SparcMCTargetDesc.cpp | 6 +++-- .../MCTargetDesc/SystemZMCTargetDesc.cpp | 3 ++- .../MCTargetDesc/WebAssemblyMCAsmInfo.cpp | 3 ++- .../MCTargetDesc/WebAssemblyMCAsmInfo.h | 3 ++- .../MCTargetDesc/WebAssemblyMCTargetDesc.cpp | 5 ++-- .../X86/MCTargetDesc/X86MCTargetDesc.cpp | 3 ++- .../XCore/MCTargetDesc/XCoreMCTargetDesc.cpp | 3 ++- .../Mips/compactbranches/no-beqzc-bnezc.ll | 4 +-- test/MC/Mips/macro-li.d.s | 26 +++++++++---------- test/MC/Mips/macro-li.s.s | 12 ++++----- test/MC/Mips/private-prefix.s | 22 ++++++++++++++++ tools/dsymutil/DwarfStreamer.cpp | 4 +-- tools/llvm-cfi-verify/lib/FileAnalysis.cpp | 5 +++- tools/llvm-dwp/llvm-dwp.cpp | 5 ++-- tools/llvm-exegesis/lib/Analysis.cpp | 5 +++- tools/llvm-jitlink/llvm-jitlink.cpp | 5 +++- .../llvm-mc-assemble-fuzzer.cpp | 6 ++--- tools/llvm-mc/Disassembler.cpp | 6 +++-- tools/llvm-mc/Disassembler.h | 3 ++- tools/llvm-mc/llvm-mc.cpp | 5 ++-- tools/llvm-mca/llvm-mca.cpp | 4 ++- tools/llvm-objdump/MachODump.cpp | 10 ++++--- tools/llvm-objdump/llvm-objdump.cpp | 4 ++- tools/llvm-rtdyld/llvm-rtdyld.cpp | 5 +++- tools/sancov/sancov.cpp | 4 ++- unittests/DebugInfo/DWARF/DwarfGenerator.cpp | 4 +-- .../JITLink/JITLinkTestCommon.cpp | 4 ++- unittests/MC/DwarfLineTables.cpp | 4 ++- unittests/MC/MCInstPrinter.cpp | 4 ++- 53 files changed, 180 insertions(+), 98 deletions(-) create mode 100644 test/MC/Mips/private-prefix.s diff --git a/include/llvm/Support/TargetRegistry.h b/include/llvm/Support/TargetRegistry.h index f4bc26b858c..30292b35614 100644 --- a/include/llvm/Support/TargetRegistry.h +++ b/include/llvm/Support/TargetRegistry.h @@ -128,7 +128,8 @@ public: using ArchMatchFnTy = bool (*)(Triple::ArchType Arch); using MCAsmInfoCtorFnTy = MCAsmInfo *(*)(const MCRegisterInfo &MRI, - const Triple &TT); + const Triple &TT, + const MCTargetOptions &Options); using MCInstrInfoCtorFnTy = MCInstrInfo *(*)(); using MCInstrAnalysisCtorFnTy = MCInstrAnalysis *(*)(const MCInstrInfo *Info); using MCRegInfoCtorFnTy = MCRegisterInfo *(*)(const Triple &TT); @@ -335,11 +336,11 @@ public: /// feature set; it should always be provided. Generally this should be /// either the target triple from the module, or the target triple of the /// host if that does not exist. - MCAsmInfo *createMCAsmInfo(const MCRegisterInfo &MRI, - StringRef TheTriple) const { + MCAsmInfo *createMCAsmInfo(const MCRegisterInfo &MRI, StringRef TheTriple, + const MCTargetOptions &Options) const { if (!MCAsmInfoCtorFn) return nullptr; - return MCAsmInfoCtorFn(MRI, Triple(TheTriple)); + return MCAsmInfoCtorFn(MRI, Triple(TheTriple), Options); } /// createMCInstrInfo - Create a MCInstrInfo implementation. @@ -948,9 +949,9 @@ template struct RegisterMCAsmInfo { } private: - static MCAsmInfo *Allocator(const MCRegisterInfo & /*MRI*/, - const Triple &TT) { - return new MCAsmInfoImpl(TT); + static MCAsmInfo *Allocator(const MCRegisterInfo & /*MRI*/, const Triple &TT, + const MCTargetOptions &Options) { + return new MCAsmInfoImpl(TT, Options); } }; diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index 1c362aec6e6..50c178ff759 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -48,8 +48,8 @@ void LLVMTargetMachine::initAsmInfo() { STI.reset(TheTarget.createMCSubtargetInfo( getTargetTriple().str(), getTargetCPU(), getTargetFeatureString())); - MCAsmInfo *TmpAsmInfo = - TheTarget.createMCAsmInfo(*MRI, getTargetTriple().str()); + MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo( + *MRI, getTargetTriple().str(), Options.MCOptions); // TargetSelect.h moved to a different directory between LLVM 2.9 and 3.0, // and if the old one gets included then MCAsmInfo will be NULL and // we'll crash later. diff --git a/lib/MC/MCDisassembler/Disassembler.cpp b/lib/MC/MCDisassembler/Disassembler.cpp index 21bdc2eaea3..4123d12e1cc 100644 --- a/lib/MC/MCDisassembler/Disassembler.cpp +++ b/lib/MC/MCDisassembler/Disassembler.cpp @@ -24,6 +24,7 @@ #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSchedule.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/TargetRegistry.h" @@ -56,8 +57,10 @@ LLVMCreateDisasmCPUFeatures(const char *TT, const char *CPU, if (!MRI) return nullptr; + MCTargetOptions MCOptions; // Get the assembler info needed to setup the MCContext. - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TT)); + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TT, MCOptions)); if (!MAI) return nullptr; diff --git a/lib/Object/ModuleSymbolTable.cpp b/lib/Object/ModuleSymbolTable.cpp index d1e0ce5edae..17ac4afda2d 100644 --- a/lib/Object/ModuleSymbolTable.cpp +++ b/lib/Object/ModuleSymbolTable.cpp @@ -83,7 +83,8 @@ initializeRecordStreamer(const Module &M, if (!MRI) return; - std::unique_ptr MAI(T->createMCAsmInfo(*MRI, TT.str())); + MCTargetOptions MCOptions; + std::unique_ptr MAI(T->createMCAsmInfo(*MRI, TT.str(), MCOptions)); if (!MAI) return; @@ -109,7 +110,6 @@ initializeRecordStreamer(const Module &M, std::unique_ptr Parser( createMCAsmParser(SrcMgr, MCCtx, Streamer, *MAI)); - MCTargetOptions MCOptions; std::unique_ptr TAP( T->createMCAsmParser(*STI, *Parser, *MCII, MCOptions)); if (!TAP) diff --git a/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp b/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp index 1d583ec0087..0cafd5dd12f 100644 --- a/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp +++ b/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp @@ -238,7 +238,8 @@ static MCRegisterInfo *createAArch64MCRegisterInfo(const Triple &Triple) { } static MCAsmInfo *createAArch64MCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TheTriple) { + const Triple &TheTriple, + const MCTargetOptions &Options) { MCAsmInfo *MAI; if (TheTriple.isOSBinFormatMachO()) MAI = new AArch64MCAsmInfoDarwin(TheTriple.getArch() == Triple::aarch64_32); diff --git a/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp b/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp index 9e04ab9bae9..9644e66fda4 100644 --- a/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp +++ b/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp @@ -14,7 +14,9 @@ using namespace llvm; -AMDGPUMCAsmInfo::AMDGPUMCAsmInfo(const Triple &TT) : MCAsmInfoELF() { +AMDGPUMCAsmInfo::AMDGPUMCAsmInfo(const Triple &TT, + const MCTargetOptions &Options) + : MCAsmInfoELF() { CodePointerSize = (TT.getArch() == Triple::amdgcn) ? 8 : 4; StackGrowsUp = true; HasSingleParameterDotFile = false; diff --git a/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h b/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h index 71e63ec27a8..65c9b1917bf 100644 --- a/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h +++ b/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h @@ -25,7 +25,7 @@ class Triple; // with 'L' as a local symbol. class AMDGPUMCAsmInfo : public MCAsmInfoELF { public: - explicit AMDGPUMCAsmInfo(const Triple &TT); + explicit AMDGPUMCAsmInfo(const Triple &TT, const MCTargetOptions &Options); bool shouldOmitSectionDirective(StringRef SectionName) const override; unsigned getMaxInstLength(const MCSubtargetInfo *STI) const override; }; diff --git a/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp b/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp index aa4818cd57a..84753453027 100644 --- a/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp +++ b/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp @@ -52,7 +52,8 @@ static MCSubtargetInfo *createARCMCSubtargetInfo(const Triple &TT, } static MCAsmInfo *createARCMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new ARCMCAsmInfo(TT); // Initial state of the frame pointer is SP. diff --git a/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp b/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp index 90022a8d88a..b546335efb9 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp @@ -187,7 +187,8 @@ static MCRegisterInfo *createARMMCRegisterInfo(const Triple &Triple) { } static MCAsmInfo *createARMMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TheTriple) { + const Triple &TheTriple, + const MCTargetOptions &Options) { MCAsmInfo *MAI; if (TheTriple.isOSDarwin() || TheTriple.isOSBinFormatMachO()) MAI = new ARMMCAsmInfoDarwin(TheTriple); diff --git a/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.cpp b/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.cpp index 99b2172c562..c25a2b23201 100644 --- a/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.cpp +++ b/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.cpp @@ -16,7 +16,7 @@ namespace llvm { -AVRMCAsmInfo::AVRMCAsmInfo(const Triple &TT) { +AVRMCAsmInfo::AVRMCAsmInfo(const Triple &TT, const MCTargetOptions &Options) { CodePointerSize = 2; CalleeSaveStackSlotSize = 2; CommentString = ";"; diff --git a/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.h b/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.h index b2fa18777bc..17dd77f6266 100644 --- a/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.h +++ b/lib/Target/AVR/MCTargetDesc/AVRMCAsmInfo.h @@ -22,7 +22,7 @@ class Triple; /// Specifies the format of AVR assembly files. class AVRMCAsmInfo : public MCAsmInfo { public: - explicit AVRMCAsmInfo(const Triple &TT); + explicit AVRMCAsmInfo(const Triple &TT, const MCTargetOptions &Options); }; } // end namespace llvm diff --git a/lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h b/lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h index 04a6a87cebc..97f0cbd5860 100644 --- a/lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h +++ b/lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h @@ -21,7 +21,7 @@ class Target; class BPFMCAsmInfo : public MCAsmInfo { public: - explicit BPFMCAsmInfo(const Triple &TT) { + explicit BPFMCAsmInfo(const Triple &TT, const MCTargetOptions &Options) { if (TT.getArch() == Triple::bpfeb) IsLittleEndian = false; diff --git a/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp b/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp index 870ab9e94a6..85198ec65f9 100644 --- a/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp +++ b/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp @@ -219,7 +219,8 @@ static MCRegisterInfo *createHexagonMCRegisterInfo(const Triple &TT) { } static MCAsmInfo *createHexagonMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new HexagonMCAsmInfo(TT); // VirtualFP = (R30 + #0). diff --git a/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.cpp b/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.cpp index 14d3dac26d1..f1c17489704 100644 --- a/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.cpp +++ b/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.cpp @@ -18,7 +18,8 @@ using namespace llvm; void LanaiMCAsmInfo::anchor() {} -LanaiMCAsmInfo::LanaiMCAsmInfo(const Triple & /*TheTriple*/) { +LanaiMCAsmInfo::LanaiMCAsmInfo(const Triple & /*TheTriple*/, + const MCTargetOptions &Options) { IsLittleEndian = false; PrivateGlobalPrefix = ".L"; WeakRefDirective = "\t.weak\t"; diff --git a/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.h b/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.h index 265af425d03..f0352d02129 100644 --- a/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.h +++ b/lib/Target/Lanai/MCTargetDesc/LanaiMCAsmInfo.h @@ -22,7 +22,8 @@ class LanaiMCAsmInfo : public MCAsmInfoELF { void anchor() override; public: - explicit LanaiMCAsmInfo(const Triple &TheTriple); + explicit LanaiMCAsmInfo(const Triple &TheTriple, + const MCTargetOptions &Options); }; } // namespace llvm diff --git a/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp b/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp index db5a49dd22a..cfdc44ada77 100644 --- a/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp +++ b/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp @@ -15,7 +15,8 @@ using namespace llvm; void MSP430MCAsmInfo::anchor() { } -MSP430MCAsmInfo::MSP430MCAsmInfo(const Triple &TT) { +MSP430MCAsmInfo::MSP430MCAsmInfo(const Triple &TT, + const MCTargetOptions &Options) { CodePointerSize = CalleeSaveStackSlotSize = 2; CommentString = ";"; diff --git a/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h b/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h index 93979df037e..c4ff4a9eefb 100644 --- a/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h +++ b/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h @@ -22,7 +22,7 @@ class MSP430MCAsmInfo : public MCAsmInfoELF { void anchor() override; public: - explicit MSP430MCAsmInfo(const Triple &TT); + explicit MSP430MCAsmInfo(const Triple &TT, const MCTargetOptions &Options); }; } // namespace llvm diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp b/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp index ec78158d387..5182205edae 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp @@ -11,25 +11,27 @@ //===----------------------------------------------------------------------===// #include "MipsMCAsmInfo.h" +#include "MipsABIInfo.h" #include "llvm/ADT/Triple.h" using namespace llvm; void MipsMCAsmInfo::anchor() { } -MipsMCAsmInfo::MipsMCAsmInfo(const Triple &TheTriple) { +MipsMCAsmInfo::MipsMCAsmInfo(const Triple &TheTriple, + const MCTargetOptions &Options) { IsLittleEndian = TheTriple.isLittleEndian(); - if (TheTriple.isMIPS64() && TheTriple.getEnvironment() != Triple::GNUABIN32) + MipsABIInfo ABI = MipsABIInfo::computeTargetABI(TheTriple, "", Options); + + if (TheTriple.isMIPS64() && !ABI.IsN32()) CodePointerSize = CalleeSaveStackSlotSize = 8; - // FIXME: This condition isn't quite right but it's the best we can do until - // this object can identify the ABI. It will misbehave when using O32 - // on a mips64*-* triple. - if (TheTriple.isMIPS32()) { + if (ABI.IsO32()) PrivateGlobalPrefix = "$"; - PrivateLabelPrefix = "$"; - } + else if (ABI.IsN32() || ABI.IsN64()) + PrivateGlobalPrefix = ".L"; + PrivateLabelPrefix = PrivateGlobalPrefix; AlignmentIsInBytes = false; Data16bitsDirective = "\t.2byte\t"; diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h b/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h index 867f4d223de..d8bfe58d24a 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h +++ b/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h @@ -22,7 +22,8 @@ class MipsMCAsmInfo : public MCAsmInfoELF { void anchor() override; public: - explicit MipsMCAsmInfo(const Triple &TheTriple); + explicit MipsMCAsmInfo(const Triple &TheTriple, + const MCTargetOptions &Options); }; } // namespace llvm diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp index 79c47d1b650..2aee3e8956b 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp @@ -81,8 +81,9 @@ static MCSubtargetInfo *createMipsMCSubtargetInfo(const Triple &TT, } static MCAsmInfo *createMipsMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { - MCAsmInfo *MAI = new MipsMCAsmInfo(TT); + const Triple &TT, + const MCTargetOptions &Options) { + MCAsmInfo *MAI = new MipsMCAsmInfo(TT, Options); unsigned SP = MRI.getDwarfRegNum(Mips::SP, true); MCCFIInstruction Inst = MCCFIInstruction::createDefCfaRegister(nullptr, SP); diff --git a/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp b/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp index 556745825a1..7e1da9b7a94 100644 --- a/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp +++ b/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp @@ -17,7 +17,8 @@ using namespace llvm; void NVPTXMCAsmInfo::anchor() {} -NVPTXMCAsmInfo::NVPTXMCAsmInfo(const Triple &TheTriple) { +NVPTXMCAsmInfo::NVPTXMCAsmInfo(const Triple &TheTriple, + const MCTargetOptions &Options) { if (TheTriple.getArch() == Triple::nvptx64) { CodePointerSize = CalleeSaveStackSlotSize = 8; } diff --git a/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h b/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h index e888526da89..ce5ca99c539 100644 --- a/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h +++ b/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h @@ -23,7 +23,8 @@ class NVPTXMCAsmInfo : public MCAsmInfo { virtual void anchor(); public: - explicit NVPTXMCAsmInfo(const Triple &TheTriple); + explicit NVPTXMCAsmInfo(const Triple &TheTriple, + const MCTargetOptions &Options); /// Return true if the .section directive should be omitted when /// emitting \p SectionName. For example: diff --git a/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp index 90c3c8d20ed..a9717bfc308 100644 --- a/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp +++ b/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp @@ -76,7 +76,8 @@ static MCSubtargetInfo *createPPCMCSubtargetInfo(const Triple &TT, } static MCAsmInfo *createPPCMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TheTriple) { + const Triple &TheTriple, + const MCTargetOptions &Options) { bool isPPC64 = (TheTriple.getArch() == Triple::ppc64 || TheTriple.getArch() == Triple::ppc64le); diff --git a/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp b/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp index 5a4c86e48f1..2e44b5ebb5b 100644 --- a/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp +++ b/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp @@ -51,7 +51,8 @@ static MCRegisterInfo *createRISCVMCRegisterInfo(const Triple &TT) { } static MCAsmInfo *createRISCVMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new RISCVMCAsmInfo(TT); Register SP = MRI.getDwarfRegNum(RISCV::X2, true); diff --git a/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp b/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp index ce593bb6677..e4b1f0bc9bc 100644 --- a/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp +++ b/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp @@ -33,7 +33,8 @@ using namespace llvm; #include "SparcGenRegisterInfo.inc" static MCAsmInfo *createSparcMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new SparcELFMCAsmInfo(TT); unsigned Reg = MRI.getDwarfRegNum(SP::O6, true); MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, Reg, 0); @@ -42,7 +43,8 @@ static MCAsmInfo *createSparcMCAsmInfo(const MCRegisterInfo &MRI, } static MCAsmInfo *createSparcV9MCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new SparcELFMCAsmInfo(TT); unsigned Reg = MRI.getDwarfRegNum(SP::O6, true); MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, Reg, 2047); diff --git a/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp b/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp index 3c0300cfd8f..e40d0f11068 100644 --- a/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp +++ b/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp @@ -147,7 +147,8 @@ unsigned SystemZMC::getFirstReg(unsigned Reg) { } static MCAsmInfo *createSystemZMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new SystemZMCAsmInfo(TT); MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, diff --git a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.cpp b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.cpp index 8f6531563e1..c3d259e6ff2 100644 --- a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.cpp +++ b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.cpp @@ -21,7 +21,8 @@ using namespace llvm; WebAssemblyMCAsmInfo::~WebAssemblyMCAsmInfo() = default; // anchor. -WebAssemblyMCAsmInfo::WebAssemblyMCAsmInfo(const Triple &T) { +WebAssemblyMCAsmInfo::WebAssemblyMCAsmInfo(const Triple &T, + const MCTargetOptions &Options) { CodePointerSize = CalleeSaveStackSlotSize = T.isArch64Bit() ? 8 : 4; // TODO: What should MaxInstLength be? diff --git a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.h b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.h index 9efbbf881f5..5ba4dcf8c4b 100644 --- a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.h +++ b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCAsmInfo.h @@ -22,7 +22,8 @@ class Triple; class WebAssemblyMCAsmInfo final : public MCAsmInfoWasm { public: - explicit WebAssemblyMCAsmInfo(const Triple &T); + explicit WebAssemblyMCAsmInfo(const Triple &T, + const MCTargetOptions &Options); ~WebAssemblyMCAsmInfo() override; }; diff --git a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp index 9c8ca1f13b1..0eccbbf78f8 100644 --- a/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ b/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp @@ -35,8 +35,9 @@ using namespace llvm; #include "WebAssemblyGenRegisterInfo.inc" static MCAsmInfo *createMCAsmInfo(const MCRegisterInfo & /*MRI*/, - const Triple &TT) { - return new WebAssemblyMCAsmInfo(TT); + const Triple &TT, + const MCTargetOptions &Options) { + return new WebAssemblyMCAsmInfo(TT, Options); } static MCInstrInfo *createMCInstrInfo() { diff --git a/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp b/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp index ced9eacc8b9..56a7615850c 100644 --- a/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp +++ b/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp @@ -323,7 +323,8 @@ static MCRegisterInfo *createX86MCRegisterInfo(const Triple &TT) { } static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TheTriple) { + const Triple &TheTriple, + const MCTargetOptions &Options) { bool is64Bit = TheTriple.getArch() == Triple::x86_64; MCAsmInfo *MAI; diff --git a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp index 877f38e22f9..02519864854 100644 --- a/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp +++ b/lib/Target/XCore/MCTargetDesc/XCoreMCTargetDesc.cpp @@ -55,7 +55,8 @@ createXCoreMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) { } static MCAsmInfo *createXCoreMCAsmInfo(const MCRegisterInfo &MRI, - const Triple &TT) { + const Triple &TT, + const MCTargetOptions &Options) { MCAsmInfo *MAI = new XCoreMCAsmInfo(TT); // Initial state of the frame pointer is SP. diff --git a/test/CodeGen/Mips/compactbranches/no-beqzc-bnezc.ll b/test/CodeGen/Mips/compactbranches/no-beqzc-bnezc.ll index 7a9f287c1b4..2bda921d57a 100644 --- a/test/CodeGen/Mips/compactbranches/no-beqzc-bnezc.ll +++ b/test/CodeGen/Mips/compactbranches/no-beqzc-bnezc.ll @@ -103,7 +103,7 @@ define i64 @f5(i64 %a, i64 %b) { define i32 @f6(i32 %a) { ; CHECK-LABEL: f6: -; CHECK: beqzc ${{[0-9]+}}, $BB +; CHECK: beqzc ${{[0-9]+}}, {{((\$)|(\.L))}}BB %cmp = icmp eq i32 %a, 0 br i1 %cmp, label %if.then, label %if.end @@ -117,7 +117,7 @@ define i32 @f6(i32 %a) { define i32 @f7(i32 %a) { ; CHECK-LABEL: f7: -; CHECK: bnezc ${{[0-9]+}}, $BB +; CHECK: bnezc ${{[0-9]+}}, {{((\$)|(\.L))}}BB %cmp = icmp eq i32 0, %a br i1 %cmp, label %if.then, label %if.end diff --git a/test/MC/Mips/macro-li.d.s b/test/MC/Mips/macro-li.d.s index fae5b3d6ec7..89fd7e93839 100644 --- a/test/MC/Mips/macro-li.d.s +++ b/test/MC/Mips/macro-li.d.s @@ -18,7 +18,7 @@ li.d $4, 0.0 li.d $4, 1.12345 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4607738388174016296 # ALL-NEXT: .text @@ -62,7 +62,7 @@ li.d $4, 1.0 li.d $4, 12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180239360 # ALL-NEXT: .text @@ -94,7 +94,7 @@ li.d $4, 12345678910 li.d $4, 12345678910.0 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180239360 # ALL-NEXT: .text @@ -126,7 +126,7 @@ li.d $4, 12345678910.0 li.d $4, 0.4 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4600877379321698714 # ALL-NEXT: .text @@ -164,7 +164,7 @@ li.d $4, 1.5 li.d $4, 12345678910.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180304087 # ALL-NEXT: .text @@ -197,7 +197,7 @@ li.d $4, 12345678910.12345678910 li.d $4, 12345678910123456789.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4892433759227321879 # ALL-NEXT: .text @@ -243,7 +243,7 @@ li.d $f4, 0.0 li.d $f4, 1.12345 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4607738388174016296 # ALL-NEXT: .text @@ -288,7 +288,7 @@ li.d $f4, 1.0 li.d $f4, 12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180239360 # ALL-NEXT: .text @@ -311,7 +311,7 @@ li.d $f4, 12345678910 li.d $f4, 12345678910.0 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180239360 # ALL-NEXT: .text @@ -334,7 +334,7 @@ li.d $f4, 12345678910.0 li.d $f4, 0.4 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4600877379321698714 # ALL-NEXT: .text @@ -379,7 +379,7 @@ li.d $f4, 2.5 li.d $f4, 2.515625 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4612847102706319360 # ALL-NEXT: .text @@ -402,7 +402,7 @@ li.d $f4, 2.515625 li.d $f4, 12345678910.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4757770298180304087 # ALL-NEXT: .text @@ -425,7 +425,7 @@ li.d $f4, 12345678910.12345678910 li.d $f4, 12345678910123456789.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL-NEXT: [[LABEL:\$tmp[0-9]+]]: +# ALL-NEXT: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL-NEXT: .p2align 3 # ALL-NEXT: .8byte 4892433759227321879 # ALL-NEXT: .text diff --git a/test/MC/Mips/macro-li.s.s b/test/MC/Mips/macro-li.s.s index ec1bc9a1dd0..0e8b8f9c8db 100644 --- a/test/MC/Mips/macro-li.s.s +++ b/test/MC/Mips/macro-li.s.s @@ -52,7 +52,7 @@ li.s $f4, 0.0 li.s $f4, 1.12345 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1066388790 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] @@ -82,7 +82,7 @@ li.s $f4, 1.0 li.s $f4, 12345678910 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1345844999 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] @@ -104,7 +104,7 @@ li.s $f4, 12345678910 li.s $f4, 12345678910.0 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1345844999 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] @@ -127,7 +127,7 @@ li.s $f4, 12345678910.0 li.s $f4, 0.4 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1053609165 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] @@ -153,7 +153,7 @@ li.s $f4, 1.5 li.s $f4, 12345678910.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1345844999 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] @@ -175,7 +175,7 @@ li.s $f4, 12345678910.12345678910 li.s $f4, 12345678910123456789.12345678910 # ALL: .section .rodata,"a",@progbits -# ALL: [[LABEL:\$tmp[0-9]+]]: +# ALL: [[LABEL:((\$)|(\.L))tmp[0-9]+]]: # ALL: .4byte 1596675242 # ALL: .text # O32-N32-PIC: lw $1, %got([[LABEL]])($gp) # encoding: [A,A,0x81,0x8f] diff --git a/test/MC/Mips/private-prefix.s b/test/MC/Mips/private-prefix.s new file mode 100644 index 00000000000..c2f295ac592 --- /dev/null +++ b/test/MC/Mips/private-prefix.s @@ -0,0 +1,22 @@ +# RUN: llvm-mc %s -triple=mips --target-abi=o32 | FileCheck %s --check-prefix=O32 +# RUN: llvm-mc %s -triple=mips --target-abi=n32 | FileCheck %s --check-prefix=N32 +# RUN: llvm-mc %s -triple=mips --target-abi=n64 | FileCheck %s --check-prefix=N64 +# RUN: llvm-mc %s -triple=mips64 --target-abi=o32 | FileCheck %s --check-prefix=O32 +# RUN: llvm-mc %s -triple=mips64 --target-abi=n32 | FileCheck %s --check-prefix=N32 +# RUN: llvm-mc %s -triple=mips64 --target-abi=n64 | FileCheck %s --check-prefix=N64 +# RUN: llvm-mc %s -triple=mips | FileCheck %s --check-prefix=O32 +# RUN: llvm-mc %s -triple=mips-gnu | FileCheck %s --check-prefix=O32 +# RUN: llvm-mc %s -triple=mips-gnuabin32 | FileCheck %s --check-prefix=N32 +# RUN: llvm-mc %s -triple=mips-gnuabi64 | FileCheck %s --check-prefix=O32 +# RUN: llvm-mc %s -triple=mips64 | FileCheck %s --check-prefix=N64 +# RUN: llvm-mc %s -triple=mips64-gnu | FileCheck %s --check-prefix=N64 +# RUN: llvm-mc %s -triple=mips64-gnuabin32 | FileCheck %s --check-prefix=N32 +# RUN: llvm-mc %s -triple=mips64-gnuabi64 | FileCheck %s --check-prefix=N64 + +# Checks if correct private global and label prefixes are used based on target +# options. + +# O32: $tmp0: +# N32: .Ltmp0: +# N64: .Ltmp0: +li.d $4, 1.12345 diff --git a/tools/dsymutil/DwarfStreamer.cpp b/tools/dsymutil/DwarfStreamer.cpp index 88ca4b34a3e..8747aee458f 100644 --- a/tools/dsymutil/DwarfStreamer.cpp +++ b/tools/dsymutil/DwarfStreamer.cpp @@ -61,7 +61,8 @@ bool DwarfStreamer::init(Triple TheTriple) { if (!MRI) return error(Twine("no register info for target ") + TripleName, Context); - MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); + MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) return error("no asm info for target " + TripleName, Context); @@ -73,7 +74,6 @@ bool DwarfStreamer::init(Triple TheTriple) { if (!MSTI) return error("no subtarget info for target " + TripleName, Context); - MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); MAB = TheTarget->createMCAsmBackend(*MSTI, *MRI, MCOptions); if (!MAB) return error("no asm backend for target " + TripleName, Context); diff --git a/tools/llvm-cfi-verify/lib/FileAnalysis.cpp b/tools/llvm-cfi-verify/lib/FileAnalysis.cpp index 03f6e3f8a11..9ef894b40c4 100644 --- a/tools/llvm-cfi-verify/lib/FileAnalysis.cpp +++ b/tools/llvm-cfi-verify/lib/FileAnalysis.cpp @@ -22,6 +22,7 @@ #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/Binary.h" #include "llvm/Object/COFF.h" #include "llvm/Object/ELFObjectFile.h" @@ -387,7 +388,9 @@ Error FileAnalysis::initialiseDisassemblyMembers() { return make_error( "Failed to initialise RegisterInfo."); - AsmInfo.reset(ObjectTarget->createMCAsmInfo(*RegisterInfo, TripleName)); + MCTargetOptions MCOptions; + AsmInfo.reset( + ObjectTarget->createMCAsmInfo(*RegisterInfo, TripleName, MCOptions)); if (!AsmInfo) return make_error("Failed to initialise AsmInfo."); diff --git a/tools/llvm-dwp/llvm-dwp.cpp b/tools/llvm-dwp/llvm-dwp.cpp index 0c629f506f4..23513ef8fb4 100644 --- a/tools/llvm-dwp/llvm-dwp.cpp +++ b/tools/llvm-dwp/llvm-dwp.cpp @@ -676,7 +676,9 @@ int main(int argc, char **argv) { if (!MRI) return error(Twine("no register info for target ") + TripleName, Context); - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) return error("no asm info for target " + TripleName, Context); @@ -716,7 +718,6 @@ int main(int argc, char **argv) { OS = BOS.getPointer(); } - MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); std::unique_ptr MS(TheTarget->createMCObjectStreamer( TheTriple, MC, std::unique_ptr(MAB), MAB->createObjectWriter(*OS), std::unique_ptr(MCE), *MSTI, diff --git a/tools/llvm-exegesis/lib/Analysis.cpp b/tools/llvm-exegesis/lib/Analysis.cpp index 0fa0767b71d..62f3d652de2 100644 --- a/tools/llvm-exegesis/lib/Analysis.cpp +++ b/tools/llvm-exegesis/lib/Analysis.cpp @@ -10,6 +10,7 @@ #include "BenchmarkResult.h" #include "llvm/ADT/STLExtras.h" #include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/FormatVariadic.h" #include #include @@ -163,7 +164,9 @@ Analysis::Analysis(const Target &Target, std::unique_ptr InstrInfo, const InstructionBenchmark &FirstPoint = Clustering.getPoints().front(); RegInfo_.reset(Target.createMCRegInfo(FirstPoint.LLVMTriple)); - AsmInfo_.reset(Target.createMCAsmInfo(*RegInfo_, FirstPoint.LLVMTriple)); + MCTargetOptions MCOptions; + AsmInfo_.reset( + Target.createMCAsmInfo(*RegInfo_, FirstPoint.LLVMTriple, MCOptions)); SubtargetInfo_.reset(Target.createMCSubtargetInfo(FirstPoint.LLVMTriple, FirstPoint.CpuName, "")); InstPrinter_.reset(Target.createMCInstPrinter( diff --git a/tools/llvm-jitlink/llvm-jitlink.cpp b/tools/llvm-jitlink/llvm-jitlink.cpp index 7edbea23a04..251e79cf56d 100644 --- a/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/tools/llvm-jitlink/llvm-jitlink.cpp @@ -23,6 +23,7 @@ #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/COFF.h" #include "llvm/Object/MachO.h" #include "llvm/Object/ObjectFile.h" @@ -693,7 +694,9 @@ Error runChecks(Session &S) { TripleName, inconvertibleErrorCode())); - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions; + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) ExitOnErr(make_error("Unable to create target asm info " + TripleName, diff --git a/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp b/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp index d59229e6496..6c5961f7027 100644 --- a/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp +++ b/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp @@ -161,7 +161,9 @@ int AssembleOneInput(const uint8_t *Data, size_t Size) { abort(); } - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) { errs() << "Unable to create target asm info!"; abort(); @@ -193,8 +195,6 @@ int AssembleOneInput(const uint8_t *Data, size_t Size) { std::unique_ptr CE = nullptr; std::unique_ptr MAB = nullptr; - MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); - std::string OutputString; raw_string_ostream Out(OutputString); auto FOut = std::make_unique(Out); diff --git a/tools/llvm-mc/Disassembler.cpp b/tools/llvm-mc/Disassembler.cpp index 1ddbddfa184..07fe0d589b5 100644 --- a/tools/llvm-mc/Disassembler.cpp +++ b/tools/llvm-mc/Disassembler.cpp @@ -133,7 +133,8 @@ static bool ByteArrayFromString(ByteArrayTy &ByteArray, int Disassembler::disassemble(const Target &T, const std::string &Triple, MCSubtargetInfo &STI, MCStreamer &Streamer, MemoryBuffer &Buffer, SourceMgr &SM, - MCContext &Ctx, raw_ostream &Out) { + MCContext &Ctx, raw_ostream &Out, + const MCTargetOptions &MCOptions) { std::unique_ptr MRI(T.createMCRegInfo(Triple)); if (!MRI) { @@ -141,7 +142,8 @@ int Disassembler::disassemble(const Target &T, const std::string &Triple, return -1; } - std::unique_ptr MAI(T.createMCAsmInfo(*MRI, Triple)); + std::unique_ptr MAI( + T.createMCAsmInfo(*MRI, Triple, MCOptions)); if (!MAI) { errs() << "error: no assembly info for target " << Triple << "\n"; return -1; diff --git a/tools/llvm-mc/Disassembler.h b/tools/llvm-mc/Disassembler.h index dcd8c279c91..a1603e58498 100644 --- a/tools/llvm-mc/Disassembler.h +++ b/tools/llvm-mc/Disassembler.h @@ -25,13 +25,14 @@ class SourceMgr; class MCContext; class MCSubtargetInfo; class MCStreamer; +class MCTargetOptions; class Disassembler { public: static int disassemble(const Target &T, const std::string &Triple, MCSubtargetInfo &STI, MCStreamer &Streamer, MemoryBuffer &Buffer, SourceMgr &SM, MCContext &Ctx, - raw_ostream &Out); + raw_ostream &Out, const MCTargetOptions &MCOptions); }; } // namespace llvm diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index c23740a3094..6aa347d98be 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -351,7 +351,8 @@ int main(int argc, char **argv) { std::unique_ptr MRI(TheTarget->createMCRegInfo(TripleName)); assert(MRI && "Unable to create target register info!"); - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); assert(MAI && "Unable to create target asm info!"); MAI->setRelaxELFRelocations(RelaxELFRel); @@ -518,7 +519,7 @@ int main(int argc, char **argv) { } if (disassemble) Res = Disassembler::disassemble(*TheTarget, TripleName, *STI, *Str, *Buffer, - SrcMgr, Ctx, Out->os()); + SrcMgr, Ctx, Out->os(), MCOptions); // Keep output if no errors. if (Res == 0) { diff --git a/tools/llvm-mca/llvm-mca.cpp b/tools/llvm-mca/llvm-mca.cpp index 99c45eebdd8..ccb8fd2e957 100644 --- a/tools/llvm-mca/llvm-mca.cpp +++ b/tools/llvm-mca/llvm-mca.cpp @@ -353,7 +353,9 @@ int main(int argc, char **argv) { std::unique_ptr MRI(TheTarget->createMCRegInfo(TripleName)); assert(MRI && "Unable to create target register info!"); - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); assert(MAI && "Unable to create target asm info!"); MCObjectFileInfo MOFI; diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index e4684d0f160..fc3503dd0ec 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -29,6 +29,7 @@ #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Support/Casting.h" @@ -7208,11 +7209,12 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, FeaturesStr = Features.getString(); } + MCTargetOptions MCOptions; // Set up disassembler. std::unique_ptr MRI( TheTarget->createMCRegInfo(TripleName)); std::unique_ptr AsmInfo( - TheTarget->createMCAsmInfo(*MRI, TripleName)); + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); std::unique_ptr STI( TheTarget->createMCSubtargetInfo(TripleName, MachOMCPU, FeaturesStr)); MCContext Ctx(AsmInfo.get(), MRI.get(), nullptr); @@ -7262,7 +7264,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, if (ThumbTarget) { ThumbMRI.reset(ThumbTarget->createMCRegInfo(ThumbTripleName)); ThumbAsmInfo.reset( - ThumbTarget->createMCAsmInfo(*ThumbMRI, ThumbTripleName)); + ThumbTarget->createMCAsmInfo(*ThumbMRI, ThumbTripleName, MCOptions)); ThumbSTI.reset( ThumbTarget->createMCSubtargetInfo(ThumbTripleName, MachOMCPU, FeaturesStr)); @@ -7405,7 +7407,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, reportError(MachDSYM.takeError(), DSYMPath); return; } - + // We need to keep the Binary alive with the buffer DbgObj = &*MachDSYM.get(); DSYMBinary = std::move(*MachDSYM); @@ -7827,7 +7829,7 @@ static void findUnwindRelocNameAddend(const MachOObjectFile *Obj, auto Sym = Symbols.upper_bound(Addr); if (Sym == Symbols.begin()) { // The first symbol in the object is after this reference, the best we can - // do is section-relative notation. + // do is section-relative notation. if (Expected NameOrErr = RelocSection.getName()) Name = *NameOrErr; else diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 34a44b3b7fa..a9014caf4bd 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -37,6 +37,7 @@ #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/Archive.h" #include "llvm/Object/COFF.h" #include "llvm/Object/COFFImportFile.h" @@ -1539,8 +1540,9 @@ static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) { "no register info for target " + TripleName); // Set up disassembler. + MCTargetOptions MCOptions; std::unique_ptr AsmInfo( - TheTarget->createMCAsmInfo(*MRI, TripleName)); + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!AsmInfo) reportError(Obj->getFileName(), "no assembly info for target " + TripleName); diff --git a/tools/llvm-rtdyld/llvm-rtdyld.cpp b/tools/llvm-rtdyld/llvm-rtdyld.cpp index 3a36e770948..9b84c46d390 100644 --- a/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -23,6 +23,7 @@ #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/SymbolSize.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/DynamicLibrary.h" @@ -749,7 +750,9 @@ static int linkAndVerify() { if (!MRI) ErrorAndExit("Unable to create target register info!"); - std::unique_ptr MAI(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions; + std::unique_ptr MAI( + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) ErrorAndExit("Unable to create target asm info!"); diff --git a/tools/sancov/sancov.cpp b/tools/sancov/sancov.cpp index e0cc8a7cf84..1e6d92f6be8 100644 --- a/tools/sancov/sancov.cpp +++ b/tools/sancov/sancov.cpp @@ -21,6 +21,7 @@ #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Object/Archive.h" #include "llvm/Object/Binary.h" #include "llvm/Object/COFF.h" @@ -717,8 +718,9 @@ static void getObjectCoveragePoints(const object::ObjectFile &O, TheTarget->createMCRegInfo(TripleName)); failIfEmpty(MRI, "no register info for target " + TripleName); + MCTargetOptions MCOptions; std::unique_ptr AsmInfo( - TheTarget->createMCAsmInfo(*MRI, TripleName)); + TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); failIfEmpty(AsmInfo, "no asm info for target " + TripleName); std::unique_ptr MOFI(new MCObjectFileInfo); diff --git a/unittests/DebugInfo/DWARF/DwarfGenerator.cpp b/unittests/DebugInfo/DWARF/DwarfGenerator.cpp index 2e062e8fe96..11bc084ca6f 100644 --- a/unittests/DebugInfo/DWARF/DwarfGenerator.cpp +++ b/unittests/DebugInfo/DWARF/DwarfGenerator.cpp @@ -409,7 +409,8 @@ llvm::Error dwarfgen::Generator::init(Triple TheTriple, uint16_t V) { TripleName, inconvertibleErrorCode()); - MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); + MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); if (!MAI) return make_error("no asm info for target " + TripleName, inconvertibleErrorCode()); @@ -419,7 +420,6 @@ llvm::Error dwarfgen::Generator::init(Triple TheTriple, uint16_t V) { return make_error("no subtarget info for target " + TripleName, inconvertibleErrorCode()); - MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); MAB = TheTarget->createMCAsmBackend(*MSTI, *MRI, MCOptions); if (!MAB) return make_error("no asm backend for target " + TripleName, diff --git a/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp b/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp index c5d7dc2fdc9..bbf88e11d80 100644 --- a/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp +++ b/unittests/ExecutionEngine/JITLink/JITLinkTestCommon.cpp @@ -10,6 +10,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCParser/MCTargetAsmParser.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/TargetSelect.h" using namespace llvm::jitlink; @@ -59,7 +60,8 @@ Error JITLinkTestCommon::TestResources::initializeTripleSpecifics(Triple &TT) { if (!MRI) report_fatal_error("Could not build MCRegisterInfo for triple"); - MAI.reset(TheTarget->createMCAsmInfo(*MRI, TT.getTriple())); + MCTargetOptions MCOptions; + MAI.reset(TheTarget->createMCAsmInfo(*MRI, TT.getTriple(), MCOptions)); if (!MAI) report_fatal_error("Could not build MCAsmInfo for triple"); diff --git a/unittests/MC/DwarfLineTables.cpp b/unittests/MC/DwarfLineTables.cpp index 88e9565e1ca..635c2c389e6 100644 --- a/unittests/MC/DwarfLineTables.cpp +++ b/unittests/MC/DwarfLineTables.cpp @@ -12,6 +12,7 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCDwarf.h" #include "llvm/MC/MCRegisterInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "gtest/gtest.h" @@ -37,7 +38,8 @@ struct Context { return; MRI.reset(TheTarget->createMCRegInfo(Triple)); - MAI.reset(TheTarget->createMCAsmInfo(*MRI, Triple)); + MCTargetOptions MCOptions; + MAI.reset(TheTarget->createMCAsmInfo(*MRI, Triple, MCOptions)); Ctx = std::make_unique(MAI.get(), MRI.get(), nullptr); } diff --git a/unittests/MC/MCInstPrinter.cpp b/unittests/MC/MCInstPrinter.cpp index 069437d97a7..14bbb03ee1d 100644 --- a/unittests/MC/MCInstPrinter.cpp +++ b/unittests/MC/MCInstPrinter.cpp @@ -9,6 +9,7 @@ #include "llvm/MC/MCInstPrinter.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Target/TargetMachine.h" @@ -40,7 +41,8 @@ public: return; MRI.reset(TheTarget->createMCRegInfo(TripleName)); - MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName)); + MCTargetOptions MCOptions; + MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); MII.reset(TheTarget->createMCInstrInfo()); Printer.reset(TheTarget->createMCInstPrinter( Triple(TripleName), MAI->getAssemblerDialect(), *MAI, *MII, *MRI));