[llvm] [RISCV][GlobalISel] Legalize readcyclecounter/readsteadycounter (PR #217535)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 20 01:11:16 PDT 2026
================
@@ -889,6 +895,38 @@ bool RISCVLegalizerInfo::legalizeVAStart(MachineInstr &MI,
return true;
}
+bool RISCVLegalizerInfo::legalizeReadCounter(
+ MachineInstr &MI, MachineIRBuilder &MIRBuilder) const {
+ assert((MI.getOpcode() == TargetOpcode::G_READCYCLECOUNTER ||
+ MI.getOpcode() == TargetOpcode::G_READSTEADYCOUNTER) &&
+ "Unexpected opcode");
+ assert(!STI.is64Bit() && "READCYCLECOUNTER/READSTEADYCOUNTER only "
+ "has custom type legalization on riscv32");
+
+ // On RV32 a 64-bit counter CSR must be read as two 32-bit halves. Lower to
+ // the ReadCounterWide target pseudo.
+ bool IsCycle = MI.getOpcode() == TargetOpcode::G_READCYCLECOUNTER;
+ int64_t LoCounter = IsCycle ? RISCVSysReg::cycle : RISCVSysReg::time;
+ int64_t HiCounter = IsCycle ? RISCVSysReg::cycleh : RISCVSysReg::timeh;
+
+ MachineRegisterInfo &MRI = *MIRBuilder.getMRI();
+ auto CreateGPR = [&]() {
----------------
arsenm wrote:
Avoid the lambda
https://github.com/llvm/llvm-project/pull/217535
More information about the llvm-commits
mailing list