[llvm] [CSKY] Emit build attributes in assembly output (PR #213507)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 1 22:43:25 PDT 2026
https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/213507
Fixes CodeGen/CSKY/fpu-abi-attribute.ll, failing since #212975.
emitTargetAttributes is implemented only by CSKYTargetELFStreamer, so
llc -filetype=asm drops every .csky_attribute directive. Move it to
CSKYTargetStreamer, as ARM and RISC-V do.
>From 180e96fb0501a7b4d6e430bc00ac6e391e0c519f Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Sat, 1 Aug 2026 22:08:26 -0700
Subject: [PATCH] [CSKY] Emit build attributes in assembly output
Fixes CodeGen/CSKY/fpu-abi-attribute.ll, failing since #212975.
emitTargetAttributes is implemented only by CSKYTargetELFStreamer, so
llc -filetype=asm drops every .csky_attribute directive. Move it to
CSKYTargetStreamer, as ARM and RISC-V do.
---
.../Target/CSKY/AsmParser/CSKYAsmParser.cpp | 6 +-
.../CSKY/MCTargetDesc/CSKYELFStreamer.cpp | 164 -----------------
.../CSKY/MCTargetDesc/CSKYELFStreamer.h | 3 -
.../CSKY/MCTargetDesc/CSKYTargetStreamer.cpp | 172 +++++++++++++++++-
.../CSKY/MCTargetDesc/CSKYTargetStreamer.h | 5 +-
llvm/test/MC/CSKY/default-build-attributes.s | 13 ++
6 files changed, 192 insertions(+), 171 deletions(-)
create mode 100644 llvm/test/MC/CSKY/default-build-attributes.s
diff --git a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
index 356df0cda0bf8..3f8e9a2f78842 100644
--- a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
+++ b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
@@ -51,6 +51,9 @@ static cl::opt<bool>
cl::init(false),
cl::desc("Enable C-SKY asm compressed instruction"));
+static cl::opt<bool> AddBuildAttributes("csky-add-build-attributes",
+ cl::init(true));
+
namespace {
struct CSKYOperand;
@@ -137,7 +140,8 @@ class CSKYAsmParser : public MCTargetAsmParser {
MRI = getContext().getRegisterInfo();
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
- getTargetStreamer().emitTargetAttributes(STI);
+ if (AddBuildAttributes)
+ getTargetStreamer().emitTargetAttributes(STI, /*HardFloatABI=*/false);
}
};
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.cpp b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.cpp
index 5a74a5adab558..61c4f9ea40334 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.cpp
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.cpp
@@ -21,10 +21,8 @@
#include "llvm/MC/MCSectionELF.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCSymbolELF.h"
-#include "llvm/Support/CSKYAttributes.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/LEB128.h"
-#include "llvm/TargetParser/CSKYTargetParser.h"
using namespace llvm;
@@ -176,165 +174,3 @@ void CSKYELFStreamer::EmitMappingSymbol(StringRef Name) {
Symbol->setType(ELF::STT_NOTYPE);
Symbol->setBinding(ELF::STB_LOCAL);
}
-
-void CSKYTargetELFStreamer::emitTargetAttributes(const MCSubtargetInfo &STI,
- bool HardFloatABI) {
- StringRef CPU = STI.getCPU();
- CSKY::ArchKind ArchID = CSKY::parseCPUArch(CPU);
-
- if (ArchID == CSKY::ArchKind::CK804)
- ArchID = CSKY::ArchKind::CK803;
-
- StringRef CPU_ARCH = CSKY::getArchName(ArchID);
-
- if (ArchID == CSKY::ArchKind::INVALID) {
- CPU = "ck810";
- CPU_ARCH = "ck810";
- }
- emitTextAttribute(CSKYAttrs::CSKY_ARCH_NAME, CPU_ARCH);
- emitTextAttribute(CSKYAttrs::CSKY_CPU_NAME, CPU);
-
- unsigned ISAFlag = 0;
- if (STI.hasFeature(CSKY::HasE1))
- ISAFlag |= CSKYAttrs::V2_ISA_E1;
-
- if (STI.hasFeature(CSKY::HasE2))
- ISAFlag |= CSKYAttrs::V2_ISA_1E2;
-
- if (STI.hasFeature(CSKY::Has2E3))
- ISAFlag |= CSKYAttrs::V2_ISA_2E3;
-
- if (STI.hasFeature(CSKY::HasMP))
- ISAFlag |= CSKYAttrs::ISA_MP;
-
- if (STI.hasFeature(CSKY::Has3E3r1))
- ISAFlag |= CSKYAttrs::V2_ISA_3E3R1;
-
- if (STI.hasFeature(CSKY::Has3r1E3r2))
- ISAFlag |= CSKYAttrs::V2_ISA_3E3R2;
-
- if (STI.hasFeature(CSKY::Has3r2E3r3))
- ISAFlag |= CSKYAttrs::V2_ISA_3E3R3;
-
- if (STI.hasFeature(CSKY::Has3E7))
- ISAFlag |= CSKYAttrs::V2_ISA_3E7;
-
- if (STI.hasFeature(CSKY::HasMP1E2))
- ISAFlag |= CSKYAttrs::ISA_MP_1E2;
-
- if (STI.hasFeature(CSKY::Has7E10))
- ISAFlag |= CSKYAttrs::V2_ISA_7E10;
-
- if (STI.hasFeature(CSKY::Has10E60))
- ISAFlag |= CSKYAttrs::V2_ISA_10E60;
-
- if (STI.hasFeature(CSKY::FeatureTrust))
- ISAFlag |= CSKYAttrs::ISA_TRUST;
-
- if (STI.hasFeature(CSKY::FeatureJAVA))
- ISAFlag |= CSKYAttrs::ISA_JAVA;
-
- if (STI.hasFeature(CSKY::FeatureCache))
- ISAFlag |= CSKYAttrs::ISA_CACHE;
-
- if (STI.hasFeature(CSKY::FeatureNVIC))
- ISAFlag |= CSKYAttrs::ISA_NVIC;
-
- if (STI.hasFeature(CSKY::FeatureDSP))
- ISAFlag |= CSKYAttrs::ISA_DSP;
-
- if (STI.hasFeature(CSKY::HasDSP1E2))
- ISAFlag |= CSKYAttrs::ISA_DSP_1E2;
-
- if (STI.hasFeature(CSKY::HasDSPE60))
- ISAFlag |= CSKYAttrs::V2_ISA_DSPE60;
-
- if (STI.hasFeature(CSKY::FeatureDSPV2))
- ISAFlag |= CSKYAttrs::ISA_DSP_ENHANCE;
-
- if (STI.hasFeature(CSKY::FeatureDSP_Silan))
- ISAFlag |= CSKYAttrs::ISA_DSP_SILAN;
-
- if (STI.hasFeature(CSKY::FeatureVDSPV1_128))
- ISAFlag |= CSKYAttrs::ISA_VDSP;
-
- if (STI.hasFeature(CSKY::FeatureVDSPV2))
- ISAFlag |= CSKYAttrs::ISA_VDSP_2;
-
- if (STI.hasFeature(CSKY::HasVDSP2E3))
- ISAFlag |= CSKYAttrs::ISA_VDSP_2E3;
-
- if (STI.hasFeature(CSKY::HasVDSP2E60F))
- ISAFlag |= CSKYAttrs::ISA_VDSP_2E60F;
-
- emitAttribute(CSKYAttrs::CSKY_ISA_FLAGS, ISAFlag);
-
- unsigned ISAExtFlag = 0;
- if (STI.hasFeature(CSKY::HasFLOATE1))
- ISAExtFlag |= CSKYAttrs::ISA_FLOAT_E1;
-
- if (STI.hasFeature(CSKY::HasFLOAT1E2))
- ISAExtFlag |= CSKYAttrs::ISA_FLOAT_1E2;
-
- if (STI.hasFeature(CSKY::HasFLOAT1E3))
- ISAExtFlag |= CSKYAttrs::ISA_FLOAT_1E3;
-
- if (STI.hasFeature(CSKY::HasFLOAT3E4))
- ISAExtFlag |= CSKYAttrs::ISA_FLOAT_3E4;
-
- if (STI.hasFeature(CSKY::HasFLOAT7E60))
- ISAExtFlag |= CSKYAttrs::ISA_FLOAT_7E60;
-
- emitAttribute(CSKYAttrs::CSKY_ISA_EXT_FLAGS, ISAExtFlag);
-
- if (STI.hasFeature(CSKY::FeatureDSP))
- emitAttribute(CSKYAttrs::CSKY_DSP_VERSION,
- CSKYAttrs::DSP_VERSION_EXTENSION);
- if (STI.hasFeature(CSKY::FeatureDSPV2))
- emitAttribute(CSKYAttrs::CSKY_DSP_VERSION, CSKYAttrs::DSP_VERSION_2);
-
- if (STI.hasFeature(CSKY::FeatureVDSPV2))
- emitAttribute(CSKYAttrs::CSKY_VDSP_VERSION, CSKYAttrs::VDSP_VERSION_2);
-
- if (STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
- STI.hasFeature(CSKY::FeatureFPUV2_DF))
- emitAttribute(CSKYAttrs::CSKY_FPU_VERSION, CSKYAttrs::FPU_VERSION_2);
- else if (STI.hasFeature(CSKY::FeatureFPUV3_HF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_SF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_DF))
- emitAttribute(CSKYAttrs::CSKY_FPU_VERSION, CSKYAttrs::FPU_VERSION_3);
-
- bool hasAnyFloatExt = STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
- STI.hasFeature(CSKY::FeatureFPUV2_DF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_HF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_SF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_DF);
-
- // The hard-float *ABI* (FP values in FP registers at call boundaries) is
- // selected by the "float-abi" module flag, resolved by the caller; it does
- // not depend on ModeHardFloat, which only distinguishes the soft-float ABI
- // that still uses hard-float instructions (SOFTFP) from pure soft float.
- if (hasAnyFloatExt && HardFloatABI)
- emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_HARD);
- else if (hasAnyFloatExt && STI.hasFeature(CSKY::ModeHardFloat))
- emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_SOFTFP);
- else
- emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_SOFT);
-
- unsigned HardFPFlag = 0;
- if (STI.hasFeature(CSKY::FeatureFPUV3_HF))
- HardFPFlag |= CSKYAttrs::FPU_HARDFP_HALF;
- if (STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_SF))
- HardFPFlag |= CSKYAttrs::FPU_HARDFP_SINGLE;
- if (STI.hasFeature(CSKY::FeatureFPUV2_DF) ||
- STI.hasFeature(CSKY::FeatureFPUV3_DF))
- HardFPFlag |= CSKYAttrs::FPU_HARDFP_DOUBLE;
-
- if (HardFPFlag != 0) {
- emitAttribute(CSKYAttrs::CSKY_FPU_DENORMAL, CSKYAttrs::NEEDED);
- emitAttribute(CSKYAttrs::CSKY_FPU_EXCEPTION, CSKYAttrs::NEEDED);
- emitTextAttribute(CSKYAttrs::CSKY_FPU_NUMBER_MODULE, "IEEE 754");
- emitAttribute(CSKYAttrs::CSKY_FPU_HARDFP, HardFPFlag);
- }
-}
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.h b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.h
index 876f8a1cf6759..69cdda683f51a 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.h
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYELFStreamer.h
@@ -91,9 +91,6 @@ class CSKYTargetELFStreamer : public CSKYTargetStreamer {
void finishAttributeSection() override;
size_t calculateContentSize() const;
- void emitTargetAttributes(const MCSubtargetInfo &STI,
- bool HardFloatABI = false) override;
-
public:
MCELFStreamer &getStreamer();
CSKYTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.cpp b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.cpp
index 97d9ef98d88d3..16a37ac9b58dd 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.cpp
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.cpp
@@ -7,12 +7,16 @@
//===----------------------------------------------------------------------===//
#include "CSKYTargetStreamer.h"
+#include "CSKYMCTargetDesc.h"
#include "MCTargetDesc/CSKYMCAsmInfo.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCSectionELF.h"
+#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/Support/CSKYAttributes.h"
#include "llvm/Support/FormattedStream.h"
+#include "llvm/TargetParser/CSKYTargetParser.h"
using namespace llvm;
@@ -125,7 +129,173 @@ void CSKYTargetStreamer::finish() {
}
void CSKYTargetStreamer::emitTargetAttributes(const MCSubtargetInfo &STI,
- bool HardFloatABI) {}
+ bool HardFloatABI) {
+ // AsmPrinter emits the attributes once for the module. Ignore the repeated
+ // requests from the parser instantiated for each inline asm block, which
+ // knows neither the CPU nor the float ABI selected for the module.
+ if (EmittedTargetAttributes)
+ return;
+ EmittedTargetAttributes = true;
+
+ StringRef CPU = STI.getCPU();
+ CSKY::ArchKind ArchID = CSKY::parseCPUArch(CPU);
+
+ if (ArchID == CSKY::ArchKind::CK804)
+ ArchID = CSKY::ArchKind::CK803;
+
+ StringRef CPU_ARCH = CSKY::getArchName(ArchID);
+
+ if (ArchID == CSKY::ArchKind::INVALID) {
+ CPU = "ck810";
+ CPU_ARCH = "ck810";
+ }
+ emitTextAttribute(CSKYAttrs::CSKY_ARCH_NAME, CPU_ARCH);
+ emitTextAttribute(CSKYAttrs::CSKY_CPU_NAME, CPU);
+
+ unsigned ISAFlag = 0;
+ if (STI.hasFeature(CSKY::HasE1))
+ ISAFlag |= CSKYAttrs::V2_ISA_E1;
+
+ if (STI.hasFeature(CSKY::HasE2))
+ ISAFlag |= CSKYAttrs::V2_ISA_1E2;
+
+ if (STI.hasFeature(CSKY::Has2E3))
+ ISAFlag |= CSKYAttrs::V2_ISA_2E3;
+
+ if (STI.hasFeature(CSKY::HasMP))
+ ISAFlag |= CSKYAttrs::ISA_MP;
+
+ if (STI.hasFeature(CSKY::Has3E3r1))
+ ISAFlag |= CSKYAttrs::V2_ISA_3E3R1;
+
+ if (STI.hasFeature(CSKY::Has3r1E3r2))
+ ISAFlag |= CSKYAttrs::V2_ISA_3E3R2;
+
+ if (STI.hasFeature(CSKY::Has3r2E3r3))
+ ISAFlag |= CSKYAttrs::V2_ISA_3E3R3;
+
+ if (STI.hasFeature(CSKY::Has3E7))
+ ISAFlag |= CSKYAttrs::V2_ISA_3E7;
+
+ if (STI.hasFeature(CSKY::HasMP1E2))
+ ISAFlag |= CSKYAttrs::ISA_MP_1E2;
+
+ if (STI.hasFeature(CSKY::Has7E10))
+ ISAFlag |= CSKYAttrs::V2_ISA_7E10;
+
+ if (STI.hasFeature(CSKY::Has10E60))
+ ISAFlag |= CSKYAttrs::V2_ISA_10E60;
+
+ if (STI.hasFeature(CSKY::FeatureTrust))
+ ISAFlag |= CSKYAttrs::ISA_TRUST;
+
+ if (STI.hasFeature(CSKY::FeatureJAVA))
+ ISAFlag |= CSKYAttrs::ISA_JAVA;
+
+ if (STI.hasFeature(CSKY::FeatureCache))
+ ISAFlag |= CSKYAttrs::ISA_CACHE;
+
+ if (STI.hasFeature(CSKY::FeatureNVIC))
+ ISAFlag |= CSKYAttrs::ISA_NVIC;
+
+ if (STI.hasFeature(CSKY::FeatureDSP))
+ ISAFlag |= CSKYAttrs::ISA_DSP;
+
+ if (STI.hasFeature(CSKY::HasDSP1E2))
+ ISAFlag |= CSKYAttrs::ISA_DSP_1E2;
+
+ if (STI.hasFeature(CSKY::HasDSPE60))
+ ISAFlag |= CSKYAttrs::V2_ISA_DSPE60;
+
+ if (STI.hasFeature(CSKY::FeatureDSPV2))
+ ISAFlag |= CSKYAttrs::ISA_DSP_ENHANCE;
+
+ if (STI.hasFeature(CSKY::FeatureDSP_Silan))
+ ISAFlag |= CSKYAttrs::ISA_DSP_SILAN;
+
+ if (STI.hasFeature(CSKY::FeatureVDSPV1_128))
+ ISAFlag |= CSKYAttrs::ISA_VDSP;
+
+ if (STI.hasFeature(CSKY::FeatureVDSPV2))
+ ISAFlag |= CSKYAttrs::ISA_VDSP_2;
+
+ if (STI.hasFeature(CSKY::HasVDSP2E3))
+ ISAFlag |= CSKYAttrs::ISA_VDSP_2E3;
+
+ if (STI.hasFeature(CSKY::HasVDSP2E60F))
+ ISAFlag |= CSKYAttrs::ISA_VDSP_2E60F;
+
+ emitAttribute(CSKYAttrs::CSKY_ISA_FLAGS, ISAFlag);
+
+ unsigned ISAExtFlag = 0;
+ if (STI.hasFeature(CSKY::HasFLOATE1))
+ ISAExtFlag |= CSKYAttrs::ISA_FLOAT_E1;
+
+ if (STI.hasFeature(CSKY::HasFLOAT1E2))
+ ISAExtFlag |= CSKYAttrs::ISA_FLOAT_1E2;
+
+ if (STI.hasFeature(CSKY::HasFLOAT1E3))
+ ISAExtFlag |= CSKYAttrs::ISA_FLOAT_1E3;
+
+ if (STI.hasFeature(CSKY::HasFLOAT3E4))
+ ISAExtFlag |= CSKYAttrs::ISA_FLOAT_3E4;
+
+ if (STI.hasFeature(CSKY::HasFLOAT7E60))
+ ISAExtFlag |= CSKYAttrs::ISA_FLOAT_7E60;
+
+ emitAttribute(CSKYAttrs::CSKY_ISA_EXT_FLAGS, ISAExtFlag);
+
+ if (STI.hasFeature(CSKY::FeatureDSP))
+ emitAttribute(CSKYAttrs::CSKY_DSP_VERSION,
+ CSKYAttrs::DSP_VERSION_EXTENSION);
+ if (STI.hasFeature(CSKY::FeatureDSPV2))
+ emitAttribute(CSKYAttrs::CSKY_DSP_VERSION, CSKYAttrs::DSP_VERSION_2);
+
+ if (STI.hasFeature(CSKY::FeatureVDSPV2))
+ emitAttribute(CSKYAttrs::CSKY_VDSP_VERSION, CSKYAttrs::VDSP_VERSION_2);
+
+ if (STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
+ STI.hasFeature(CSKY::FeatureFPUV2_DF))
+ emitAttribute(CSKYAttrs::CSKY_FPU_VERSION, CSKYAttrs::FPU_VERSION_2);
+ else if (STI.hasFeature(CSKY::FeatureFPUV3_HF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_SF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_DF))
+ emitAttribute(CSKYAttrs::CSKY_FPU_VERSION, CSKYAttrs::FPU_VERSION_3);
+
+ bool hasAnyFloatExt = STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
+ STI.hasFeature(CSKY::FeatureFPUV2_DF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_HF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_SF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_DF);
+
+ // The hard-float *ABI* (FP values in FP registers at call boundaries) is
+ // selected by the "float-abi" module flag, resolved by the caller; it does
+ // not depend on ModeHardFloat, which only distinguishes the soft-float ABI
+ // that still uses hard-float instructions (SOFTFP) from pure soft float.
+ if (hasAnyFloatExt && HardFloatABI)
+ emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_HARD);
+ else if (hasAnyFloatExt && STI.hasFeature(CSKY::ModeHardFloat))
+ emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_SOFTFP);
+ else
+ emitAttribute(CSKYAttrs::CSKY_FPU_ABI, CSKYAttrs::FPU_ABI_SOFT);
+
+ unsigned HardFPFlag = 0;
+ if (STI.hasFeature(CSKY::FeatureFPUV3_HF))
+ HardFPFlag |= CSKYAttrs::FPU_HARDFP_HALF;
+ if (STI.hasFeature(CSKY::FeatureFPUV2_SF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_SF))
+ HardFPFlag |= CSKYAttrs::FPU_HARDFP_SINGLE;
+ if (STI.hasFeature(CSKY::FeatureFPUV2_DF) ||
+ STI.hasFeature(CSKY::FeatureFPUV3_DF))
+ HardFPFlag |= CSKYAttrs::FPU_HARDFP_DOUBLE;
+
+ if (HardFPFlag != 0) {
+ emitAttribute(CSKYAttrs::CSKY_FPU_DENORMAL, CSKYAttrs::NEEDED);
+ emitAttribute(CSKYAttrs::CSKY_FPU_EXCEPTION, CSKYAttrs::NEEDED);
+ emitTextAttribute(CSKYAttrs::CSKY_FPU_NUMBER_MODULE, "IEEE 754");
+ emitAttribute(CSKYAttrs::CSKY_FPU_HARDFP, HardFPFlag);
+ }
+}
void CSKYTargetStreamer::emitAttribute(unsigned Attribute, unsigned Value) {}
void CSKYTargetStreamer::emitTextAttribute(unsigned Attribute,
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.h b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.h
index f6709c5745194..5a8b0e4c773f3 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.h
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYTargetStreamer.h
@@ -57,6 +57,8 @@ class CSKYTargetStreamer : public MCTargetStreamer {
unsigned ConstantCounter = 0;
+ bool EmittedTargetAttributes = false;
+
public:
CSKYTargetStreamer(MCStreamer &S);
@@ -64,8 +66,7 @@ class CSKYTargetStreamer : public MCTargetStreamer {
virtual void emitAttribute(unsigned Attribute, unsigned Value);
virtual void finishAttributeSection();
- virtual void emitTargetAttributes(const MCSubtargetInfo &STI,
- bool HardFloatABI = false);
+ void emitTargetAttributes(const MCSubtargetInfo &STI, bool HardFloatABI);
/// Add a new entry to the constant pool for the current section and return an
/// MCExpr that can be used to refer to the constant pool location.
const MCExpr *addConstantPoolEntry(const MCExpr *, SMLoc Loc,
diff --git a/llvm/test/MC/CSKY/default-build-attributes.s b/llvm/test/MC/CSKY/default-build-attributes.s
new file mode 100644
index 0000000000000..f3d68b2302953
--- /dev/null
+++ b/llvm/test/MC/CSKY/default-build-attributes.s
@@ -0,0 +1,13 @@
+# RUN: llvm-mc %s -triple=csky | FileCheck %s
+# RUN: llvm-mc %s -triple=csky -mcpu=ck860 | FileCheck %s --check-prefix=CK860
+# RUN: llvm-mc %s -triple=csky -csky-add-build-attributes=false | FileCheck %s --check-prefix=OFF
+
+nop
+
+# CHECK: .csky_attribute 4, "ck810"
+# CHECK-NEXT: .csky_attribute 5, "ck810"
+
+# CK860: .csky_attribute 4, "ck860"
+# CK860-NEXT: .csky_attribute 5, "ck860"
+
+# OFF-NOT: .csky_attribute
More information about the llvm-commits
mailing list