Skip to content

Commit b9666cf

Browse files
authored
[RISCV] Reverse the order of Base and Offset in Core-V RegReg operand. (#133209)
This puts the base before the offset to match the order we use for base ISA where the offset is an immediate. I'm investigating using sub-operands for the base ISA loads and stores too so having a consistent operand order will allow more sharing.
1 parent 27a4371 commit b9666cf

File tree

4 files changed

+18
-18
lines changed

4 files changed

+18
-18
lines changed

llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2768,9 +2768,9 @@ ParseStatus RISCVAsmParser::parseRegReg(OperandVector &Operands) {
27682768
if (getLexer().getKind() != AsmToken::Identifier)
27692769
return ParseStatus::NoMatch;
27702770

2771-
StringRef RegName = getLexer().getTok().getIdentifier();
2772-
MCRegister Reg = matchRegisterNameHelper(RegName);
2773-
if (!Reg)
2771+
StringRef OffsetRegName = getLexer().getTok().getIdentifier();
2772+
MCRegister OffsetReg = matchRegisterNameHelper(OffsetRegName);
2773+
if (!OffsetReg)
27742774
return Error(getLoc(), "invalid register");
27752775
getLexer().Lex();
27762776

@@ -2780,16 +2780,16 @@ ParseStatus RISCVAsmParser::parseRegReg(OperandVector &Operands) {
27802780
if (getLexer().getKind() != AsmToken::Identifier)
27812781
return Error(getLoc(), "expected register");
27822782

2783-
StringRef Reg2Name = getLexer().getTok().getIdentifier();
2784-
MCRegister Reg2 = matchRegisterNameHelper(Reg2Name);
2785-
if (!Reg2)
2783+
StringRef BaseRegName = getLexer().getTok().getIdentifier();
2784+
MCRegister BaseReg = matchRegisterNameHelper(BaseRegName);
2785+
if (!BaseReg)
27862786
return Error(getLoc(), "invalid register");
27872787
getLexer().Lex();
27882788

27892789
if (parseToken(AsmToken::RParen, "expected ')'"))
27902790
return ParseStatus::Failure;
27912791

2792-
Operands.push_back(RISCVOperand::createRegReg(Reg, Reg2, getLoc()));
2792+
Operands.push_back(RISCVOperand::createRegReg(BaseReg, OffsetReg, getLoc()));
27932793

27942794
return ParseStatus::Success;
27952795
}

llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,15 @@ void RISCVInstPrinter::printRlist(const MCInst *MI, unsigned OpNo,
262262

263263
void RISCVInstPrinter::printRegReg(const MCInst *MI, unsigned OpNo,
264264
const MCSubtargetInfo &STI, raw_ostream &O) {
265-
const MCOperand &MO = MI->getOperand(OpNo);
265+
const MCOperand &OffsetMO = MI->getOperand(OpNo + 1);
266266

267-
assert(MO.isReg() && "printRegReg can only print register operands");
268-
printRegName(O, MO.getReg());
267+
assert(OffsetMO.isReg() && "printRegReg can only print register operands");
268+
printRegName(O, OffsetMO.getReg());
269269

270270
O << "(";
271-
const MCOperand &MO1 = MI->getOperand(OpNo + 1);
272-
assert(MO1.isReg() && "printRegReg can only print register operands");
273-
printRegName(O, MO1.getReg());
271+
const MCOperand &BaseMO = MI->getOperand(OpNo);
272+
assert(BaseMO.isReg() && "printRegReg can only print register operands");
273+
printRegName(O, BaseMO.getReg());
274274
O << ")";
275275
}
276276

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2853,8 +2853,8 @@ bool RISCVDAGToDAGISel::SelectAddrRegReg(SDValue Addr, SDValue &Base,
28532853
if (isa<ConstantSDNode>(Addr.getOperand(1)))
28542854
return false;
28552855

2856-
Base = Addr.getOperand(1);
2857-
Offset = Addr.getOperand(0);
2856+
Base = Addr.getOperand(0);
2857+
Offset = Addr.getOperand(1);
28582858
return true;
28592859
}
28602860

llvm/lib/Target/RISCV/RISCVInstrInfoXCV.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def CVrr : Operand<i32>,
2525
ComplexPattern<i32, 2, "SelectAddrRegReg",[]> {
2626
let ParserMatchClass = CVrrAsmOperand;
2727
let PrintMethod = "printRegReg";
28-
let MIOperandInfo = (ops GPR:$offset, GPR:$base);
28+
let MIOperandInfo = (ops GPR:$base, GPR:$offset);
2929
}
3030

3131
def cv_tuimm2 : TImmLeaf<XLenVT, [{return isUInt<2>(Imm);}]>;
@@ -287,7 +287,7 @@ class CVLoad_rr_inc<bits<7> funct7, bits<3> funct3, string opcodestr>
287287

288288
class CVLoad_rr<bits<7> funct7, bits<3> funct3, string opcodestr>
289289
: RVInstR<funct7, funct3, OPC_CUSTOM_1, (outs GPR:$rd),
290-
(ins (CVrr $rs2, $rs1):$addr),
290+
(ins (CVrr $rs1, $rs2):$addr),
291291
opcodestr, "$rd, $addr">;
292292
} // hasSideEffects = 0, mayLoad = 1, mayStore = 0
293293

@@ -317,7 +317,7 @@ class CVStore_rr_inc<bits<3> funct3, bits<7> funct7, string opcodestr>
317317

318318

319319
class CVStore_rr<bits<3> funct3, bits<7> funct7, string opcodestr>
320-
: RVInst<(outs), (ins GPR:$rs2, (CVrr $rs3, $rs1):$addr), opcodestr,
320+
: RVInst<(outs), (ins GPR:$rs2, (CVrr $rs1, $rs3):$addr), opcodestr,
321321
"$rs2, $addr", [], InstFormatOther> {
322322
bits<5> rs1;
323323
bits<5> rs2;

0 commit comments

Comments
 (0)