[lld] [llvm] [RISCV] Remove -riscv-asm-relax-branches flag (PR #142855)

Sam Elliott via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 4 14:12:43 PDT 2025


https://github.com/lenary created https://github.com/llvm/llvm-project/pull/142855

This flag has been superseded by `.option exact`, as the test updates show.

Given the flag was always hidden, it makes sense to me to remove it, and move tests that required it to use `.option exact`.

>From 523e712c9f7209bd9e469799084b359b058826f6 Mon Sep 17 00:00:00 2001
From: Sam Elliott <quic_aelliott at quicinc.com>
Date: Wed, 4 Jun 2025 14:09:41 -0700
Subject: [PATCH] [RISCV] Remove -riscv-asm-relax-branches flag

This flag has been superseded by `.option exact`, as the test updates
show.

Given the flag was always hidden, it makes sense to me to remove it, and
move tests that required it to use `.option exact`.
---
 lld/test/ELF/riscv-branch.s                            |  6 ++++--
 lld/test/ELF/riscv-undefined-weak.s                    |  4 +++-
 llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp |  5 -----
 llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s   |  6 ++++--
 ...isable-relax.s => option-exact-long-jump-disable.s} | 10 +++++++---
 5 files changed, 18 insertions(+), 13 deletions(-)
 rename llvm/test/MC/RISCV/{long-jump-disable-relax.s => option-exact-long-jump-disable.s} (86%)

diff --git a/lld/test/ELF/riscv-branch.s b/lld/test/ELF/riscv-branch.s
index 1a2b446b5a43b..5f73fd19f9aa3 100644
--- a/lld/test/ELF/riscv-branch.s
+++ b/lld/test/ELF/riscv-branch.s
@@ -1,7 +1,7 @@
 # REQUIRES: riscv
 
-# RUN: llvm-mc -filetype=obj -triple=riscv32-unknown-elf -mattr=-relax -riscv-asm-relax-branches=0 %s -o %t.rv32.o
-# RUN: llvm-mc -filetype=obj -triple=riscv64-unknown-elf -mattr=-relax -riscv-asm-relax-branches=0 %s -o %t.rv64.o
+# RUN: llvm-mc -filetype=obj -triple=riscv32-unknown-elf %s -o %t.rv32.o
+# RUN: llvm-mc -filetype=obj -triple=riscv64-unknown-elf %s -o %t.rv64.o
 
 # RUN: ld.lld %t.rv32.o --defsym foo=_start+4 --defsym bar=_start -o %t.rv32
 # RUN: ld.lld %t.rv64.o --defsym foo=_start+4 --defsym bar=_start -o %t.rv64
@@ -30,6 +30,8 @@
 # RUN: not ld.lld %t.rv64.o --defsym foo=_start+1 --defsym bar=_start-1 -o /dev/null 2>&1 | FileCheck --check-prefix=ERROR-ALIGN %s
 # ERROR-ALIGN: improper alignment for relocation R_RISCV_BRANCH: 0x1 is not aligned to 2 bytes
 
+.option exact
+
 .global _start
 _start:
      beq x0, x0, foo
diff --git a/lld/test/ELF/riscv-undefined-weak.s b/lld/test/ELF/riscv-undefined-weak.s
index 57841127792ff..c89ac1fe10226 100644
--- a/lld/test/ELF/riscv-undefined-weak.s
+++ b/lld/test/ELF/riscv-undefined-weak.s
@@ -1,7 +1,7 @@
 # REQUIRES: riscv
 # RUN: llvm-mc -filetype=obj -triple=riscv64 /dev/null -o %t2.o
 # RUN: ld.lld -shared -soname=t2 %t2.o -o %t2.so
-# RUN: llvm-mc -filetype=obj -triple=riscv64 -riscv-asm-relax-branches=0 %s -o %t.o
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.o
 # RUN: llvm-readobj -r %t.o | FileCheck --check-prefix=RELOC %s
 
 # RUN: ld.lld -e absolute %t.o -o %t
@@ -12,6 +12,8 @@
 # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefixes=CHECK,PLT %s
 # RUN: llvm-readelf -x .data %t | FileCheck --check-prefixes=HEX,HEX-WITH-PLT %s
 
+.option exact
+
 .weak target
 .global absolute, relative, branch
 
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
index 424c3fe5f829f..6a42e646b3f22 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
@@ -27,8 +27,6 @@
 
 using namespace llvm;
 
-static cl::opt<bool> RelaxBranches("riscv-asm-relax-branches", cl::init(true),
-                                   cl::Hidden);
 // Temporary workaround for old linkers that do not support ULEB128 relocations,
 // which are abused by DWARF v5 DW_LLE_offset_pair/DW_RLE_offset_pair
 // implemented in Clang/LLVM.
@@ -110,9 +108,6 @@ bool RISCVAsmBackend::fixupNeedsRelaxationAdvanced(const MCFixup &Fixup,
                                                    const MCValue &,
                                                    uint64_t Value,
                                                    bool Resolved) const {
-  if (!RelaxBranches)
-    return false;
-
   int64_t Offset = int64_t(Value);
   unsigned Kind = Fixup.getTargetKind();
 
diff --git a/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s b/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s
index 29d3c5906d200..5d3a048ae69c6 100644
--- a/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s
+++ b/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s
@@ -1,7 +1,7 @@
 # RUN: rm -rf %t && mkdir -p %t
-# RUN: llvm-mc -triple=riscv64 -filetype=obj -riscv-asm-relax-branches=0 \
+# RUN: llvm-mc -triple=riscv64 -filetype=obj \
 # RUN:     -o %t/elf_riscv64_branch.o %s
-# RUN: llvm-mc -triple=riscv32 -filetype=obj -riscv-asm-relax-branches=0 \
+# RUN: llvm-mc -triple=riscv32 -filetype=obj \
 # RUN:     -o %t/elf_riscv32_branch.o %s
 # RUN: llvm-jitlink -noexec \
 # RUN:     -slab-allocate 100Kb -slab-address 0xfff00ff4 -slab-page-size 4096 \
@@ -13,6 +13,8 @@
 # RUN:     -check %s %t/elf_riscv32_branch.o
 #
 
+        .option exact
+
         .text
 # Empty main entry point.
         .globl  main
diff --git a/llvm/test/MC/RISCV/long-jump-disable-relax.s b/llvm/test/MC/RISCV/option-exact-long-jump-disable.s
similarity index 86%
rename from llvm/test/MC/RISCV/long-jump-disable-relax.s
rename to llvm/test/MC/RISCV/option-exact-long-jump-disable.s
index 815c2dfcec07a..6e4b5fdd31e17 100644
--- a/llvm/test/MC/RISCV/long-jump-disable-relax.s
+++ b/llvm/test/MC/RISCV/option-exact-long-jump-disable.s
@@ -1,14 +1,16 @@
-## Test that long branches are not relaxed with -riscv-asm-relax-branches=0
+## Test that long branches are not relaxed with .option exact
 # RUN: split-file %s %t
 # RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+c \
-# RUN:       -riscv-asm-relax-branches=0 %t/pass.s \
+# RUN:       %t/pass.s \
 # RUN:     | llvm-objdump -dr -M no-aliases - \
 # RUN:     | FileCheck %t/pass.s
 # RUN: not llvm-mc -filetype=obj -triple=riscv64 -mattr=+c -o /dev/null \
-# RUN:       -riscv-asm-relax-branches=0 %t/fail.s 2>&1 \
+# RUN:       %t/fail.s 2>&1 \
 # RUN:     | FileCheck %t/fail.s
 
 #--- pass.s
+  .option exact
+
   .text
 test_undefined:
 ## Branches to undefined symbols should not be relaxed
@@ -33,6 +35,8 @@ test_defined_in_range:
 bar:
 
 #--- fail.s
+  .option exact
+
   .text
 ## Branches to defined out-of-range symbols should report an error
 test_defined_out_of_range:



More information about the llvm-commits mailing list