[lld] [ELF][RISC-V] Add baseline test for ignored ABI behaviour (PR #214079)

Alexander Richardson via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 4 14:46:19 PDT 2026


https://github.com/arichardson updated https://github.com/llvm/llvm-project/pull/214079

>From 527ae5342dcece247d302ea884a58f8163da9992 Mon Sep 17 00:00:00 2001
From: Alexander Richardson <mail at alexrichardson.me>
Date: Tue, 4 Aug 2026 14:34:21 -0700
Subject: [PATCH 1/3] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.8-beta.1-arichardson
---
 lld/test/ELF/lto/riscv-target-abi.ll | 36 ++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 lld/test/ELF/lto/riscv-target-abi.ll

diff --git a/lld/test/ELF/lto/riscv-target-abi.ll b/lld/test/ELF/lto/riscv-target-abi.ll
new file mode 100644
index 0000000000000..2404d96cd1619
--- /dev/null
+++ b/lld/test/ELF/lto/riscv-target-abi.ll
@@ -0,0 +1,36 @@
+; REQUIRES: riscv
+
+;; The module flag asks for lp64d, but without -mcpu we default to no D extension,
+;; so we print a warning and ignore the module flag.
+; RUN: llvm-as %s -o %t.bc
+; RUN: ld.lld -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=WARN
+; WARN: Hard-float 'd' ABI can't be used for a target that doesn't support the D instruction set extension (ignoring target-abi)
+
+;; TODO: This is inconsistent: RISCVAsmPrinter::emitStartOfAsmFile sets e_flags
+;; based on the raw module flag not the ABI actually used for codegen.
+;; This means we are setting EF_RISCV_FLOAT_ABI_DOUBLE on a file built for soft float ABI
+; RUN: llvm-readobj --file-headers %t.so | FileCheck %s --check-prefix=FLAGS-ABI-IGNORED
+; FLAGS-ABI-IGNORED: Flags [ (0x4)
+; FLAGS-ABI-IGNORED-NEXT: EF_RISCV_FLOAT_ABI_DOUBLE (0x4)
+; FLAGS-ABI-IGNORED-NEXT: ]
+
+;; Passing -mcpu that defaults to D makes the ABI valid again, so no warning.
+; RUN: ld.lld -mllvm -mcpu=sifive-u74 -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=NOWARN --allow-empty
+; RUN: llvm-readobj --file-headers %t.so | FileCheck %s --check-prefix=FLAGS-MCPU
+; RUN: ld.lld -plugin-opt=mcpu=sifive-u74 -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=NOWARN --allow-empty
+; RUN: llvm-readobj --file-headers %t.so | FileCheck %s --check-prefix=FLAGS-MCPU
+; NOWARN-NOT: hard-float
+; FLAGS-MCPU: Flags [ (0x4)
+; FLAGS-MCPU-NEXT: EF_RISCV_FLOAT_ABI_DOUBLE (0x4)
+; FLAGS-MCPU-NEXT: EF_RISCV_RVC (0x1)
+; FLAGS-MCPU-NEXT: ]
+
+target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
+target triple = "riscv64"
+
+define void @_start() {
+  ret void
+}
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"target-abi", !"lp64d"}
\ No newline at end of file

>From 8470db41d14200cc799dfc38a77155b38e1bc357 Mon Sep 17 00:00:00 2001
From: Alexander Richardson <mail at alexrichardson.me>
Date: Tue, 4 Aug 2026 14:36:43 -0700
Subject: [PATCH 2/3] fix end of file

Created using spr 1.3.8-beta.1-arichardson
---
 lld/test/ELF/lto/riscv-target-abi.ll | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lld/test/ELF/lto/riscv-target-abi.ll b/lld/test/ELF/lto/riscv-target-abi.ll
index 2404d96cd1619..2d1f88275f17d 100644
--- a/lld/test/ELF/lto/riscv-target-abi.ll
+++ b/lld/test/ELF/lto/riscv-target-abi.ll
@@ -33,4 +33,4 @@ define void @_start() {
 }
 
 !llvm.module.flags = !{!0}
-!0 = !{i32 1, !"target-abi", !"lp64d"}
\ No newline at end of file
+!0 = !{i32 1, !"target-abi", !"lp64d"}

>From 42c92b963f8869a94a5a84872ed69531a32edc0a Mon Sep 17 00:00:00 2001
From: Alexander Richardson <mail at alexrichardson.me>
Date: Tue, 4 Aug 2026 14:45:54 -0700
Subject: [PATCH 3/3] fix typo

Created using spr 1.3.8-beta.1-arichardson
---
 lld/test/ELF/lto/riscv-target-abi.ll | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lld/test/ELF/lto/riscv-target-abi.ll b/lld/test/ELF/lto/riscv-target-abi.ll
index 2d1f88275f17d..fa96f7a73640a 100644
--- a/lld/test/ELF/lto/riscv-target-abi.ll
+++ b/lld/test/ELF/lto/riscv-target-abi.ll
@@ -3,7 +3,7 @@
 ;; The module flag asks for lp64d, but without -mcpu we default to no D extension,
 ;; so we print a warning and ignore the module flag.
 ; RUN: llvm-as %s -o %t.bc
-; RUN: ld.lld -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=WARN
+; RUN: ld.lld -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=WARN --implicit-check-not="ignoring target-abi"
 ; WARN: Hard-float 'd' ABI can't be used for a target that doesn't support the D instruction set extension (ignoring target-abi)
 
 ;; TODO: This is inconsistent: RISCVAsmPrinter::emitStartOfAsmFile sets e_flags
@@ -19,8 +19,8 @@
 ; RUN: llvm-readobj --file-headers %t.so | FileCheck %s --check-prefix=FLAGS-MCPU
 ; RUN: ld.lld -plugin-opt=mcpu=sifive-u74 -shared %t.bc -o %t.so 2>&1 | FileCheck %s --check-prefix=NOWARN --allow-empty
 ; RUN: llvm-readobj --file-headers %t.so | FileCheck %s --check-prefix=FLAGS-MCPU
-; NOWARN-NOT: hard-float
-; FLAGS-MCPU: Flags [ (0x4)
+; NOWARN-NOT: ignoring target-abi
+; FLAGS-MCPU: Flags [ (0x5)
 ; FLAGS-MCPU-NEXT: EF_RISCV_FLOAT_ABI_DOUBLE (0x4)
 ; FLAGS-MCPU-NEXT: EF_RISCV_RVC (0x1)
 ; FLAGS-MCPU-NEXT: ]



More information about the llvm-commits mailing list