https://github.com/ilovepi updated https://github.com/llvm/llvm-project/pull/90267
>From 788f58b302f20a000db3a9741e54cc861c9dcb88 Mon Sep 17 00:00:00 2001 From: Paul Kirth <paulki...@google.com> Date: Mon, 1 Jul 2024 10:13:23 -0700 Subject: [PATCH] Fix mismerge Created using spr 1.3.4 --- lld/ELF/Arch/RISCV.cpp | 70 ++++++++----------- lld/test/ELF/riscv-attributes.s | 4 +- llvm/include/llvm/Support/RISCVAttributes.h | 4 +- .../MCTargetDesc/RISCVTargetStreamer.cpp | 15 ++-- 4 files changed, 39 insertions(+), 54 deletions(-) diff --git a/lld/ELF/Arch/RISCV.cpp b/lld/ELF/Arch/RISCV.cpp index 1d9be92601006..0d0ab5de9acc1 100644 --- a/lld/ELF/Arch/RISCV.cpp +++ b/lld/ELF/Arch/RISCV.cpp @@ -1088,65 +1088,51 @@ static void mergeAtomic(DenseMap<unsigned, unsigned>::iterator it, const InputSectionBase *oldSection, const InputSectionBase *newSection, unsigned int oldTag, unsigned int newTag) { - using RISCVAttrs::RISCVAtomicAbiTag; + using RISCVAttrs::RISCVAtomicAbiTag::AtomicABI; // Same tags stay the same, and UNKNOWN is compatible with anything - if (oldTag == newTag || - newTag == static_cast<unsigned>(RISCVAtomicAbiTag::UNKNOWN)) + if (oldTag == newTag || newTag == AtomicABI::UNKNOWN) return; - auto reportAbiError = [&]() { - errorOrWarn("atomic abi mismatch for " + oldSection->name + "\n>>> " + - toString(oldSection) + ": atomic_abi=" + Twine(oldTag) + - "\n>>> " + toString(newSection) + - ": atomic_abi=" + Twine(newTag)); - }; - - switch (static_cast<RISCVAtomicAbiTag>(oldTag)) { - case RISCVAtomicAbiTag::UNKNOWN: + switch (oldTag) { + case AtomicABI::UNKNOWN: it->getSecond() = newTag; return; - case RISCVAtomicAbiTag::A6C: - switch (static_cast<RISCVAtomicAbiTag>(newTag)) { - case RISCVAtomicAbiTag::A6S: - it->getSecond() = static_cast<unsigned>(RISCVAtomicAbiTag::A6C); + case AtomicABI::A6C: + switch (newTag) { + case AtomicABI::A6S: + it->getSecond() = AtomicABI::A6C; return; - case RISCVAtomicAbiTag::A7: - reportAbiError(); + case AtomicABI::A7: + errorOrWarn(toString(oldSection) + " has atomic_abi=" + Twine(oldTag) + + " but " + toString(newSection) + + " has atomic_abi=" + Twine(newTag)); return; - case RISCVAttrs::RISCVAtomicAbiTag::UNKNOWN: - case RISCVAttrs::RISCVAtomicAbiTag::A6C: - break; }; - break; - case RISCVAtomicAbiTag::A6S: - switch (static_cast<RISCVAtomicAbiTag>(newTag)) { - case RISCVAtomicAbiTag::A6C: - it->getSecond() = static_cast<unsigned>(RISCVAtomicAbiTag::A6C); + case AtomicABI::A6S: + switch (newTag) { + case AtomicABI::A6C: + it->getSecond() = AtomicABI::A6C; return; - case RISCVAtomicAbiTag::A7: - it->getSecond() = static_cast<unsigned>(RISCVAtomicAbiTag::A7); + case AtomicABI::A7: + it->getSecond() = AtomicABI::A7; return; - case RISCVAttrs::RISCVAtomicAbiTag::UNKNOWN: - case RISCVAttrs::RISCVAtomicAbiTag::A6S: - break; }; - break; - case RISCVAtomicAbiTag::A7: - switch (static_cast<RISCVAtomicAbiTag>(newTag)) { - case RISCVAtomicAbiTag::A6S: - it->getSecond() = static_cast<unsigned>(RISCVAtomicAbiTag::A7); + case AtomicABI::A7: + switch (newTag) { + case AtomicABI::A6S: + it->getSecond() = AtomicABI::A7; return; - case RISCVAtomicAbiTag::A6C: - reportAbiError(); + case AtomicABI::A6C: + errorOrWarn(toString(oldSection) + " has atomic_abi=" + Twine(oldTag) + + " but " + toString(newSection) + + " has atomic_abi=" + Twine(newTag)); return; - case RISCVAttrs::RISCVAtomicAbiTag::UNKNOWN: - case RISCVAttrs::RISCVAtomicAbiTag::A7: - break; }; + default: + llvm_unreachable("unknown AtomicABI"); }; - llvm_unreachable("unknown AtomicABI"); } static RISCVAttributesSection * diff --git a/lld/test/ELF/riscv-attributes.s b/lld/test/ELF/riscv-attributes.s index 38b0fe8e7797e..91321f33297aa 100644 --- a/lld/test/ELF/riscv-attributes.s +++ b/lld/test/ELF/riscv-attributes.s @@ -48,9 +48,7 @@ # RUN: llvm-mc -filetype=obj -triple=riscv64 atomic_abi_A6C.s -o atomic_abi_A6C.o # RUN: llvm-mc -filetype=obj -triple=riscv64 atomic_abi_A7.s -o atomic_abi_A7.o # RUN: not ld.lld atomic_abi_A6C.o atomic_abi_A7.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=ATOMIC_ABI_ERROR --implicit-check-not=error: -# ATOMIC_ABI_ERROR: error: atomic abi mismatch for .riscv.attributes -# ATOMIC_ABI_ERROR-NEXT: >>> atomic_abi_A6C.o:(.riscv.attributes): atomic_abi=1 -# ATOMIC_ABI_ERROR-NEXT: >>> atomic_abi_A7.o:(.riscv.attributes): atomic_abi=3 +# ATOMIC_ABI_ERROR: error: atomic_abi_A6C.o:(.riscv.attributes) has atomic_abi=1 but atomic_abi_A7.o:(.riscv.attributes) has atomic_abi=3 # RUN: llvm-mc -filetype=obj -triple=riscv64 atomic_abi_A6S.s -o atomic_abi_A6S.o # RUN: ld.lld atomic_abi_A6S.o atomic_abi_A6C.o -o atomic_abi_A6C_A6S diff --git a/llvm/include/llvm/Support/RISCVAttributes.h b/llvm/include/llvm/Support/RISCVAttributes.h index 07476e818cb77..5def890a72735 100644 --- a/llvm/include/llvm/Support/RISCVAttributes.h +++ b/llvm/include/llvm/Support/RISCVAttributes.h @@ -35,7 +35,8 @@ enum AttrType : unsigned { ATOMIC_ABI = 14, }; -enum class RISCVAtomicAbiTag : unsigned { +namespace RISCVAtomicAbiTag { +enum AtomicABI : unsigned { // Values for Tag_RISCV_atomic_abi // Defined at // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#tag_riscv_atomic_abi-14-uleb128version @@ -44,6 +45,7 @@ enum class RISCVAtomicAbiTag : unsigned { A6S = 2, A7 = 3, }; +} // namespace RISCVAtomicAbiTag enum { NOT_ALLOWED = 0, ALLOWED = 1 }; diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp index 99f57f47835ab..335f7ac14f951 100644 --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp @@ -23,10 +23,10 @@ using namespace llvm; // This option controls wether or not we emit ELF attributes for ABI features, // like RISC-V atomics or X3 usage. -static cl::opt<bool> RiscvAbiAttr( - "riscv-abi-attributes", - cl::desc("Enable emitting RISC-V ELF attributes for ABI features"), - cl::Hidden); +static cl::opt<bool> + RiscvAbiAttr("riscv-abi-attributes", + cl::desc("Enable emitting RISC-V ELF attributes for ABI features"), + cl::Hidden); RISCVTargetStreamer::RISCVTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} @@ -85,10 +85,9 @@ void RISCVTargetStreamer::emitTargetAttributes(const MCSubtargetInfo &STI, } if (RiscvAbiAttr && STI.hasFeature(RISCV::FeatureStdExtA)) { - unsigned AtomicABITag = static_cast<unsigned>( - STI.hasFeature(RISCV::FeatureNoTrailingSeqCstFence) - ? RISCVAttrs::RISCVAtomicAbiTag::A6C - : RISCVAttrs::RISCVAtomicAbiTag::A6S); + unsigned AtomicABITag = STI.hasFeature(RISCV::FeatureNoTrailingSeqCstFence) + ? RISCVAttrs::RISCVAtomicAbiTag::AtomicABI::A6C + : RISCVAttrs::RISCVAtomicAbiTag::AtomicABI::A6S; emitAttribute(RISCVAttrs::ATOMIC_ABI, AtomicABITag); } } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits