Skip to content

[RISCV] Remove -riscv-asm-relax-branches flag #142855

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

lenary
Copy link
Member

@lenary lenary commented Jun 4, 2025

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.

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`.
@llvmbot
Copy link
Member

llvmbot commented Jun 4, 2025

@llvm/pr-subscribers-mc
@llvm/pr-subscribers-lld-elf

@llvm/pr-subscribers-backend-risc-v

Author: Sam Elliott (lenary)

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/142855.diff

5 Files Affected:

  • (modified) lld/test/ELF/riscv-branch.s (+4-2)
  • (modified) lld/test/ELF/riscv-undefined-weak.s (+3-1)
  • (modified) llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp (-5)
  • (modified) llvm/test/ExecutionEngine/JITLink/RISCV/ELF_branch.s (+4-2)
  • (renamed) llvm/test/MC/RISCV/option-exact-long-jump-disable.s (+7-3)
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:

lenary added a commit to lenary/eld that referenced this pull request Jun 4, 2025
This is being removed from LLVM, as the same functionality is available
using `.option exact`, and llvm/llvm-project#142855 makes the same
change to this test.
lenary added a commit to lenary/eld that referenced this pull request Jun 4, 2025
This is being removed from LLVM, as the same functionality is available
using `.option exact`, and llvm/llvm-project#142855 makes the same
change to this test.

Signed-off-by: Sam Elliott <quic_aelliott@quicinc.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants