[llvm] 31f47dd - [RISCV] Update evaluateBranch for Xqci (#141718)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 28 10:59:05 PDT 2025
Author: Sam Elliott
Date: 2025-05-28T10:59:03-07:00
New Revision: 31f47dd0fa05cfcc06b74a17a192cb179d7510c1
URL: https://github.com/llvm/llvm-project/commit/31f47dd0fa05cfcc06b74a17a192cb179d7510c1
DIFF: https://github.com/llvm/llvm-project/commit/31f47dd0fa05cfcc06b74a17a192cb179d7510c1.diff
LOG: [RISCV] Update evaluateBranch for Xqci (#141718)
This implements RISCVMCInstrAnalysis::evaluateBranch for the two Xqci
pc-relative jumps, which were otherwise not being displayed correctly
when disassembling.
This also adds tests for all Xqci branches, and also the Core-V branches
as they work, but did not have coverage.
Added:
llvm/test/MC/Disassembler/RISCV/branch-targets-xcv.txt
llvm/test/MC/Disassembler/RISCV/branch-targets-xqci.txt
Modified:
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp
index d1bc6aa9a1e33..f3b93f032588c 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp
@@ -212,24 +212,24 @@ class RISCVMCInstrAnalysis : public MCInstrAnalysis {
return true;
}
- if (Inst.getOpcode() == RISCV::C_JAL || Inst.getOpcode() == RISCV::C_J) {
+ switch (Inst.getOpcode()) {
+ case RISCV::C_J:
+ case RISCV::C_JAL:
+ case RISCV::QC_E_J:
+ case RISCV::QC_E_JAL:
Target = Addr + Inst.getOperand(0).getImm();
return true;
- }
-
- if (Inst.getOpcode() == RISCV::JAL) {
+ case RISCV::JAL:
Target = Addr + Inst.getOperand(1).getImm();
return true;
- }
-
- if (Inst.getOpcode() == RISCV::JALR) {
+ case RISCV::JALR: {
if (auto TargetRegState = getGPRState(Inst.getOperand(1).getReg())) {
Target = *TargetRegState + Inst.getOperand(2).getImm();
return true;
}
-
return false;
}
+ }
return false;
}
diff --git a/llvm/test/MC/Disassembler/RISCV/branch-targets-xcv.txt b/llvm/test/MC/Disassembler/RISCV/branch-targets-xcv.txt
new file mode 100644
index 0000000000000..64ac7b7bf8e6b
--- /dev/null
+++ b/llvm/test/MC/Disassembler/RISCV/branch-targets-xcv.txt
@@ -0,0 +1,25 @@
+# RUN: llvm-mc -assemble -triple riscv32 \
+# RUN: -mattr=+xcvbi \
+# RUN: %s -filetype=obj -o - \
+# RUN: | llvm-objdump -d -M no-aliases - \
+# RUN: --mattr=+xcvbi \
+# RUN: | FileCheck %s
+
+.option exact
+
+# CHECK-LABEL: <label1>:
+label1:
+
+# CHECK-NEXT: cv.beqimm a0, 0x1, 0x0 <label1>
+ cv.beqimm a0, 1, label1
+# CHECK-NEXT: cv.beqimm a0, 0x1, 0x10 <label2>
+ cv.beqimm a0, 1, label2
+
+# CHECK-NEXT: cv.bneimm a0, 0x2, 0x0 <label1>
+ cv.bneimm a0, 2, label1
+# CHECK-NEXT: cv.bneimm a0, 0x2, 0x10 <label2>
+ cv.bneimm a0, 2, label2
+
+
+label2:
+
diff --git a/llvm/test/MC/Disassembler/RISCV/branch-targets-xqci.txt b/llvm/test/MC/Disassembler/RISCV/branch-targets-xqci.txt
new file mode 100644
index 0000000000000..fbbabe8bda832
--- /dev/null
+++ b/llvm/test/MC/Disassembler/RISCV/branch-targets-xqci.txt
@@ -0,0 +1,36 @@
+# RUN: llvm-mc -assemble -triple riscv32 \
+# RUN: -mattr=+experimental-xqcilb,+experimental-xqcibi \
+# RUN: %s -filetype=obj -o - \
+# RUN: | llvm-objdump -d -M no-aliases - \
+# RUN: --mattr=+experimental-xqcilb,+experimental-xqcibi \
+# RUN: | FileCheck %s
+
+.option exact
+
+# CHECK-LABEL: <label1>:
+label1:
+
+# CHECK-NEXT: qc.e.j 0x0 <label1>
+ qc.e.j label1
+# CHECK-NEXT: qc.e.j 0x2c <label2>
+ qc.e.j label2
+
+# CHECK-NEXT: qc.e.jal 0x0 <label1>
+ qc.e.jal label1
+# CHECK-NEXT: qc.e.jal 0x2c <label2>
+ qc.e.jal label2
+
+# CHECK-NEXT: qc.beqi a0, 0x1, 0x0 <label1>
+ qc.beqi a0, 1, label1
+
+# CHECK-NEXT: qc.bnei a0, 0x1, 0x2c <label2>
+ qc.bnei a0, 1, label2
+
+# CHECK-NEXT: qc.e.beqi a0, 0x2, 0x0 <label1>
+ qc.e.beqi a0, 2, label1
+
+# CHECK-NEXT: qc.e.bnei a0, 0x2, 0x2c <label2>
+ qc.e.bnei a0, 2, label2
+
+label2:
+
More information about the llvm-commits
mailing list