diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -2339,10 +2339,10 @@ // // TmpLabel: AUIPC tmp, %pcrel_hi(symbol) // [S|L]X rd, %pcrel_lo(TmpLabel)(tmp) - MCOperand DestReg = Inst.getOperand(0); + unsigned DestRegOpIdx = HasTmpReg ? 1 : 0; + MCOperand DestReg = Inst.getOperand(DestRegOpIdx); unsigned SymbolOpIdx = HasTmpReg ? 2 : 1; - unsigned TmpRegOpIdx = HasTmpReg ? 1 : 0; - MCOperand TmpReg = Inst.getOperand(TmpRegOpIdx); + MCOperand TmpReg = Inst.getOperand(0); const MCExpr *Symbol = Inst.getOperand(SymbolOpIdx).getExpr(); emitAuipcInstPair(DestReg, TmpReg, Symbol, RISCVMCExpr::VK_RISCV_PCREL_HI, Opcode, IDLoc, Out); diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td @@ -202,7 +202,7 @@ } class PseudoFloatLoad - : Pseudo<(outs rdty:$rd, GPR:$tmp), (ins bare_symbol:$addr), [], opcodestr, "$rd, $addr, $tmp"> { + : Pseudo<(outs GPR:$tmp, rdty:$rd), (ins bare_symbol:$addr), [], opcodestr, "$rd, $addr, $tmp"> { let hasSideEffects = 0; let mayLoad = 1; let mayStore = 0; @@ -212,7 +212,7 @@ // Pseudo store instructions. class PseudoStore - : Pseudo<(outs rsty:$rs, GPR:$tmp), (ins bare_symbol:$addr), [], opcodestr, "$rs, $addr, $tmp"> { + : Pseudo<(outs GPR:$tmp), (ins rsty:$rs, bare_symbol:$addr), [], opcodestr, "$rs, $addr, $tmp"> { let hasSideEffects = 0; let mayLoad = 0; let mayStore = 1;