[llvm] [RISCV][llvm-exegesis] Add missing operand frm for FCVT_D_W (PR #149989)
Jim Lin via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 22 22:11:50 PDT 2025
https://github.com/tclin914 updated https://github.com/llvm/llvm-project/pull/149989
>From 33b313b64ed23de49e2857306fcdc47ec044cfdf Mon Sep 17 00:00:00 2001
From: Jim Lin <jim at andestech.com>
Date: Tue, 22 Jul 2025 15:59:44 +0800
Subject: [PATCH 1/5] [RISCV][llvm-exegesis] Add missing operand frm for
FCVT_D_W
We encountered the index of operand out of bounds crash because FCVT_D_W lacks frm operand.
---
llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
index 676479b3d5792..d54df2b5dc0ef 100644
--- a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
@@ -651,8 +651,10 @@ static std::vector<MCInst> loadFP64RegBits32(const MCSubtargetInfo &STI,
}
std::vector<MCInst> Instrs = loadIntReg(STI, ScratchIntReg, Bits);
- Instrs.push_back(
- MCInstBuilder(RISCV::FCVT_D_W).addReg(Reg).addReg(ScratchIntReg));
+ Instrs.push_back(MCInstBuilder(RISCV::FCVT_D_W)
+ .addReg(Reg)
+ .addReg(ScratchIntReg)
+ .addImm(7));
return Instrs;
}
>From 3d5d1e5b98dc36f2350ee0eb4041d743b3df508e Mon Sep 17 00:00:00 2001
From: Jim Lin <jim at andestech.com>
Date: Wed, 23 Jul 2025 10:44:01 +0800
Subject: [PATCH 2/5] Add testcase
---
llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
diff --git a/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s b/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
new file mode 100644
index 0000000000000..f75c80ef4191b
--- /dev/null
+++ b/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
@@ -0,0 +1,7 @@
+# RUN: llvm-exegesis -mode=latency -mtriple=riscv32-unknown-linux-gnu --mcpu=generic --dump-object-to-disk=%d --benchmark-phase=assemble-measured-code --opcode-name=FADD_D -mattr="+d" 2>&1
+# RUN: llvm-objdump -M numeric -d %d > %t.s
+# RUN: FileCheck %s --check-prefix=FCVT_D_W_ASM < %t.s
+
+FCVT_D_W_ASM: <foo>:
+FCVT_D_W_ASM: li x30, 0x0
+FCVT_D_W_ASM-NEXT: fcvt.d.w f{{[0-9]|[12][0-9]|3[01]}}, x30
>From 2071318e0adf1eda4b07716f76fbb50b111c5936 Mon Sep 17 00:00:00 2001
From: Jim Lin <jim at andestech.com>
Date: Wed, 23 Jul 2025 10:46:10 +0800
Subject: [PATCH 3/5] Use the enum from RISCVBaseInfo.h and change it to RNE
(imm = 0)
---
llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
index d54df2b5dc0ef..77e0e435e1b8c 100644
--- a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
@@ -654,7 +654,7 @@ static std::vector<MCInst> loadFP64RegBits32(const MCSubtargetInfo &STI,
Instrs.push_back(MCInstBuilder(RISCV::FCVT_D_W)
.addReg(Reg)
.addReg(ScratchIntReg)
- .addImm(7));
+ .addImm(RISCVFPRndMode::RoundingMode::RNE));
return Instrs;
}
>From 4025094a98620295db97b32dd1136f96742aaa92 Mon Sep 17 00:00:00 2001
From: Jim Lin <jim at andestech.com>
Date: Wed, 23 Jul 2025 13:07:27 +0800
Subject: [PATCH 4/5] Use RISCVFPRndMode::RNE instead
---
llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
index 77e0e435e1b8c..ea830bd5f753d 100644
--- a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
@@ -654,7 +654,7 @@ static std::vector<MCInst> loadFP64RegBits32(const MCSubtargetInfo &STI,
Instrs.push_back(MCInstBuilder(RISCV::FCVT_D_W)
.addReg(Reg)
.addReg(ScratchIntReg)
- .addImm(RISCVFPRndMode::RoundingMode::RNE));
+ .addImm(RISCVFPRndMode::RNE));
return Instrs;
}
>From 77ae587fccb2016e714f693558989ae7f237755d Mon Sep 17 00:00:00 2001
From: Jim Lin <jim at andestech.com>
Date: Wed, 23 Jul 2025 13:08:41 +0800
Subject: [PATCH 5/5] Use default `CHECK` prefix
---
llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s b/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
index f75c80ef4191b..153e86aed9552 100644
--- a/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
+++ b/llvm/test/tools/llvm-exegesis/RISCV/set-reg-init-check.s
@@ -1,7 +1,7 @@
# RUN: llvm-exegesis -mode=latency -mtriple=riscv32-unknown-linux-gnu --mcpu=generic --dump-object-to-disk=%d --benchmark-phase=assemble-measured-code --opcode-name=FADD_D -mattr="+d" 2>&1
# RUN: llvm-objdump -M numeric -d %d > %t.s
-# RUN: FileCheck %s --check-prefix=FCVT_D_W_ASM < %t.s
+# RUN: FileCheck %s < %t.s
-FCVT_D_W_ASM: <foo>:
-FCVT_D_W_ASM: li x30, 0x0
-FCVT_D_W_ASM-NEXT: fcvt.d.w f{{[0-9]|[12][0-9]|3[01]}}, x30
+CHECK: <foo>:
+CHECK: li x30, 0x0
+CHECK-NEXT: fcvt.d.w f{{[0-9]|[12][0-9]|3[01]}}, x30
More information about the llvm-commits
mailing list