[llvm] [Sparc] Apply the GRLIB-TN-0011 errata workaround to ldstub (PR #205781)
Daniel Cederman via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 1 00:02:34 PDT 2026
https://github.com/doac updated https://github.com/llvm/llvm-project/pull/205781
>From 249966a6f455c36f393146e0bc718baa1ae1597e Mon Sep 17 00:00:00 2001
From: Daniel Cederman <cederman at gaisler.com>
Date: Wed, 24 Jun 2026 10:52:01 +0200
Subject: [PATCH 1/2] [Sparc] Apply the GRLIB-TN-0011 errata workaround to
ldstub
Add ldstub to the list of atomic instruction that needs to be aligned.
---
llvm/lib/Target/Sparc/SparcAsmPrinter.cpp | 4 ++++
llvm/test/CodeGen/SPARC/tn0011.ll | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
index c311af40ef142..39c5ab3b319a0 100644
--- a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
+++ b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
@@ -344,6 +344,10 @@ void SparcAsmPrinter::emitInstruction(const MachineInstr *MI) {
case SP::CASArr:
case SP::SWAPrr:
case SP::SWAPri:
+ case SP::LDSTUBrr:
+ case SP::LDSTUBri:
+ case SP::LDSTUBArr:
+ case SP::LDSTUBAri:
if (MF->getSubtarget<SparcSubtarget>().fixTN0011())
OutStreamer->emitCodeAlignment(Align(16), getSubtargetInfo());
break;
diff --git a/llvm/test/CodeGen/SPARC/tn0011.ll b/llvm/test/CodeGen/SPARC/tn0011.ll
index e13379eb54f4a..61f465432f0fc 100644
--- a/llvm/test/CodeGen/SPARC/tn0011.ll
+++ b/llvm/test/CodeGen/SPARC/tn0011.ll
@@ -24,3 +24,11 @@ entry:
%2 = atomicrmw xchg ptr %1, i32 %v seq_cst, align 4
ret i32 %2
}
+
+; CHECK: .p2align 4
+; CHECK-NEXT: ldstub
+define i32 @test_fence() {
+entry:
+ fence seq_cst
+ ret i32 0
+}
>From a207d4b69abcf64389c419f887f3f4d3a7b63cac Mon Sep 17 00:00:00 2001
From: Daniel Cederman <cederman at gaisler.com>
Date: Wed, 1 Jul 2026 08:37:33 +0200
Subject: [PATCH 2/2] [Sparc] Remove LDSTUBAri that is Sparc V9 only
---
llvm/lib/Target/Sparc/SparcAsmPrinter.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
index 39c5ab3b319a0..84768bc450703 100644
--- a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
+++ b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
@@ -347,7 +347,6 @@ void SparcAsmPrinter::emitInstruction(const MachineInstr *MI) {
case SP::LDSTUBrr:
case SP::LDSTUBri:
case SP::LDSTUBArr:
- case SP::LDSTUBAri:
if (MF->getSubtarget<SparcSubtarget>().fixTN0011())
OutStreamer->emitCodeAlignment(Align(16), getSubtargetInfo());
break;
More information about the llvm-commits
mailing list