[llvm] [RISCV] Change the InstFormat for Zicbop prefetch instructions to InstFormatOther. (PR #148934)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 15 12:14:49 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
The lower 5-bits of the immediate are not part of the address unlike other InstFormatS instructions.
We use InstFormatS in RISCVRegisterInfo::needsFrameBaseReg and RISCVRegisterInfo::getFrameIndexInstrOffset which is not aware of this special encoding. Force the format to InstFormatOther so those functions will ignore it.
InstFormatS is also used by relocation emission, but I don't believe we ever emit these instructions with a relocation because of the encoding.
---
Full diff: https://github.com/llvm/llvm-project/pull/148934.diff
2 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCVInstrFormats.td (+3-1)
- (modified) llvm/lib/Target/RISCV/RISCVInstrInfoZicbo.td (+1)
``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
index b6b64b57b1b3e..e23001a3a0bff 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
@@ -193,7 +193,9 @@ class RVInstCommon<dag outs, dag ins, string opcodestr, string argstr,
let AsmString = opcodestr # !if(!empty(argstr), "", "\t" # argstr);
let Pattern = pattern;
- let TSFlags{4-0} = format.Value;
+ InstFormat Format = format;
+
+ let TSFlags{4-0} = Format.Value;
// Defaults
RISCVVConstraint RVVConstraint = NoConstraint;
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZicbo.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZicbo.td
index 878b85b141578..0723b2f568a79 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoZicbo.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZicbo.td
@@ -41,6 +41,7 @@ class Prefetch_ri<bits<5> optype, string opcodestr>
opcodestr, "${imm12}(${rs1})"> {
let Inst{11-7} = 0b00000;
let rs2 = optype;
+ let Format = InstFormatOther; // this does not follow the normal S format.
}
//===----------------------------------------------------------------------===//
``````````
</details>
https://github.com/llvm/llvm-project/pull/148934
More information about the llvm-commits
mailing list