- Notifications
You must be signed in to change notification settings - Fork14.5k
[RISCV] Change the InstFormat for Zicbop prefetch instructions to InstFormatOther.#148934
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation
…tFormatOther.The lower 5-bits of the immediate are not part of the address unlikeother InstFormatS instructions.We use InstFormatS in RISCVRegisterInfo::needsFrameBaseRegand RISCVRegisterInfo::getFrameIndexInstrOffset which is not aware ofthis special encoding. Force the format to InstFormatOther so thosefunctions will ignore it.InstFormatS is also used by relocation emission, but I don't believewe ever emit these instructions with a relocation because of the encoding.
@llvm/pr-subscribers-backend-risc-v Author: Craig Topper (topperc) ChangesThe 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:
diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.tdindex 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.tdindex 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. } //===----------------------------------------------------------------------===// |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
LGTM. Thanks.
b64d7ba
intollvm:mainUh oh!
There was an error while loading.Please reload this page.
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.