[llvm] [RISCV] Use cached SubtargetInfo in AsmPrinter (PR #147269)
Petr Vesely via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 7 03:20:28 PDT 2025
https://github.com/veselypeta created https://github.com/llvm/llvm-project/pull/147269
Avoids having to keep fetching to SubtargetInfo from machine function, if it's already cached in AsmPrinter.
>From 4c43762b5f9b42215807df3bab2c718fbda9a205 Mon Sep 17 00:00:00 2001
From: Petr Vesely <veselypeta at gmail.com>
Date: Mon, 7 Jul 2025 11:18:09 +0100
Subject: [PATCH] [RISCV] Use cached SubtargetInfo in AsmPrinter
Avoids having to keep fetching to SubtargetInfo from machine
function, if it's already cached in AsmPrinter.
---
llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp | 25 ++++++++---------------
1 file changed, 8 insertions(+), 17 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp b/llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp
index b078b9268c984..d4f5d8fcad6bc 100644
--- a/llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp
+++ b/llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp
@@ -305,8 +305,7 @@ void RISCVAsmPrinter::emitNTLHint(const MachineInstr *MI) {
}
void RISCVAsmPrinter::emitInstruction(const MachineInstr *MI) {
- RISCV_MC::verifyInstructionPredicates(MI->getOpcode(),
- getSubtargetInfo().getFeatureBits());
+ RISCV_MC::verifyInstructionPredicates(MI->getOpcode(), STI->getFeatureBits());
emitNTLHint(MI);
@@ -517,12 +516,9 @@ void RISCVAsmPrinter::emitSled(const MachineInstr *MI, SledKind Kind) {
// Assuming we're using JAL to jump to .tmpN, then we only need
// (68 - 4)/2 = 32 NOPs for RV64 and (44 - 4)/2 = 20 for RV32. However, there
// is a chance that we'll use C.JAL instead, so an additional NOP is needed.
- const uint8_t NoopsInSledCount =
- MI->getParent()->getParent()->getSubtarget<RISCVSubtarget>().is64Bit()
- ? 33
- : 21;
+ const uint8_t NoopsInSledCount = STI->is64Bit() ? 33 : 21;
- OutStreamer->emitCodeAlignment(Align(4), &getSubtargetInfo());
+ OutStreamer->emitCodeAlignment(Align(4), STI);
auto CurSled = OutContext.createTempSymbol("xray_sled_", true);
OutStreamer->emitLabel(CurSled);
auto Target = OutContext.createTempSymbol();
@@ -1070,7 +1066,8 @@ bool RISCVAsmPrinter::lowerOperand(const MachineOperand &MO,
}
static bool lowerRISCVVMachineInstrToMCInst(const MachineInstr *MI,
- MCInst &OutMI) {
+ MCInst &OutMI,
+ const RISCVSubtarget *STI) {
const RISCVVPseudosTable::PseudoInfo *RVV =
RISCVVPseudosTable::getPseudoInfo(MI->getOpcode());
if (!RVV)
@@ -1078,14 +1075,8 @@ static bool lowerRISCVVMachineInstrToMCInst(const MachineInstr *MI,
OutMI.setOpcode(RVV->BaseInstr);
- const MachineBasicBlock *MBB = MI->getParent();
- assert(MBB && "MI expected to be in a basic block");
- const MachineFunction *MF = MBB->getParent();
- assert(MF && "MBB expected to be in a machine function");
-
- const RISCVSubtarget &Subtarget = MF->getSubtarget<RISCVSubtarget>();
- const TargetInstrInfo *TII = Subtarget.getInstrInfo();
- const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
+ const TargetInstrInfo *TII = STI->getInstrInfo();
+ const TargetRegisterInfo *TRI = STI->getRegisterInfo();
assert(TRI && "TargetRegisterInfo expected");
const MCInstrDesc &MCID = MI->getDesc();
@@ -1182,7 +1173,7 @@ static bool lowerRISCVVMachineInstrToMCInst(const MachineInstr *MI,
}
bool RISCVAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
- if (lowerRISCVVMachineInstrToMCInst(MI, OutMI))
+ if (lowerRISCVVMachineInstrToMCInst(MI, OutMI, STI))
return false;
OutMI.setOpcode(MI->getOpcode());
More information about the llvm-commits
mailing list