[llvm] [BOLT][RISCV] Fix atomic-add operand order (PR #215493)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 01:47:03 PDT 2026


https://github.com/Thrrreeee updated https://github.com/llvm/llvm-project/pull/215493

>From 5599723aaf8ae114cca05d5a4abe6e1cdcf2e480 Mon Sep 17 00:00:00 2001
From: Thrrreeeee <1379998393 at qq.com>
Date: Wed, 5 Aug 2026 11:08:49 +0800
Subject: [PATCH 1/2] [BOLT][RISCV] Fix atomic-add operand order

---
 bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
index d1a0572277874..e2de69fa1875c 100644
--- a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
+++ b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
@@ -555,10 +555,11 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
 
   void atomicAdd(MCInst &Inst, MCPhysReg RegAtomic, MCPhysReg RegTo,
                  MCPhysReg RegCnt) const {
+    // AMO operands are ordered as rd, rs2 (value), rs1 (address).
     Inst = MCInstBuilder(atomicAddOpc())
                .addReg(RegAtomic)
-               .addReg(RegTo)
-               .addReg(RegCnt);
+               .addReg(RegCnt)
+               .addReg(RegTo);
   }
 
   InstructionListType createRegCmpJE(MCPhysReg RegNo, const MCSymbol *Target,

>From e3cfcfc4a8bfbe482357ea44a176432076300a41 Mon Sep 17 00:00:00 2001
From: Thrrreeeee <1379998393 at qq.com>
Date: Tue, 11 Aug 2026 16:46:40 +0800
Subject: [PATCH 2/2] add test

---
 bolt/test/runtime/RISCV/basic-instrumentation.s | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/bolt/test/runtime/RISCV/basic-instrumentation.s b/bolt/test/runtime/RISCV/basic-instrumentation.s
index e926f98cef43b..4b7b5189f741a 100644
--- a/bolt/test/runtime/RISCV/basic-instrumentation.s
+++ b/bolt/test/runtime/RISCV/basic-instrumentation.s
@@ -2,6 +2,9 @@
 
 # RUN: %clang %cflags -Wl,-q -o %t.exe %s
 # RUN: llvm-bolt --instrument --instrumentation-file=%t.fdata -o %t.instr %t.exe
+# RUN: llvm-objdump -d --no-show-raw-insn --disassemble-symbols=main %t.instr \
+# RUN:   | FileCheck %s --check-prefix=INSTR
+# INSTR: amoadd.d zero, a1, (a0)
 
 ## Run the profiled binary and check that the profile reports at least that `f`
 ## has been called.



More information about the llvm-commits mailing list