[RISCV] Fix type inference ambiguity in SwapSysReg pattern (#184305)
Issue:
Building RISCVInstrInfo.td fails with the following TableGen error
during the generation of RISCVGenInstrInfo.inc:
` error: In test: Could not infer all types in pattern!`
Root Cause:
The riscv_swap_csr node has a polymorphic result type (i32 or i64
depending on the target architecture). When used inside the SwapSysReg
class pattern, TableGen's type inference engine cannot automatically
deduce the exact return type solely from the GPR:$rd output, leading to
the ambiguity error.
Fix:
This patch resolves the type ambiguity by explicitly wrapping the
riscv_swap_csr node with XLenVT, allowing TableGen to infer the types
correctly.
This commit is contained in:
parent
8272546f69
commit
b4dfa43cb8
@ -2057,7 +2057,7 @@ class WriteSysRegImm<SysReg SR, list<Register> Regs>
|
||||
|
||||
class SwapSysReg<SysReg SR, list<Register> Regs>
|
||||
: Pseudo<(outs GPR:$rd), (ins GPR:$val),
|
||||
[(set GPR:$rd, (riscv_swap_csr (XLenVT SR.Encoding), (XLenVT GPR:$val)))]>,
|
||||
[(set GPR:$rd, (XLenVT (riscv_swap_csr (XLenVT SR.Encoding), (XLenVT GPR:$val))))]>,
|
||||
PseudoInstExpansion<(CSRRW GPR:$rd, SR.Encoding, GPR:$val)> {
|
||||
let hasSideEffects = 0;
|
||||
let Uses = Regs;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user