Skip to content

Commit b2e69f5

Browse files
authored
[LoongArch] Add machine function pass to merge base + offset (#101139)
This commit references RISC-V to add a machine function pass to merge the base address and offset.
1 parent b24737d commit b2e69f5

27 files changed

+1974
-2575
lines changed

llvm/lib/Target/LoongArch/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ add_llvm_target(LoongArchCodeGen
2424
LoongArchISelDAGToDAG.cpp
2525
LoongArchISelLowering.cpp
2626
LoongArchMCInstLower.cpp
27+
LoongArchMergeBaseOffset.cpp
2728
LoongArchOptWInstrs.cpp
2829
LoongArchRegisterInfo.cpp
2930
LoongArchSubtarget.cpp

llvm/lib/Target/LoongArch/LoongArch.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ bool lowerLoongArchMachineOperandToMCOperand(const MachineOperand &MO,
3636
FunctionPass *createLoongArchDeadRegisterDefinitionsPass();
3737
FunctionPass *createLoongArchExpandAtomicPseudoPass();
3838
FunctionPass *createLoongArchISelDag(LoongArchTargetMachine &TM);
39+
FunctionPass *createLoongArchMergeBaseOffsetOptPass();
3940
FunctionPass *createLoongArchOptWInstrsPass();
4041
FunctionPass *createLoongArchPreRAExpandPseudoPass();
4142
FunctionPass *createLoongArchExpandPseudoPass();
4243
void initializeLoongArchDAGToDAGISelLegacyPass(PassRegistry &);
4344
void initializeLoongArchDeadRegisterDefinitionsPass(PassRegistry &);
4445
void initializeLoongArchExpandAtomicPseudoPass(PassRegistry &);
46+
void initializeLoongArchMergeBaseOffsetOptPass(PassRegistry &);
4547
void initializeLoongArchOptWInstrsPass(PassRegistry &);
4648
void initializeLoongArchPreRAExpandPseudoPass(PassRegistry &);
4749
void initializeLoongArchExpandPseudoPass(PassRegistry &);

llvm/lib/Target/LoongArch/LoongArchAsmPrinter.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,16 @@ bool LoongArchAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
130130
OS << "$" << LoongArchInstPrinter::getRegisterName(BaseMO.getReg());
131131
// Print the offset operand.
132132
const MachineOperand &OffsetMO = MI->getOperand(OpNo + 1);
133+
MCOperand MCO;
134+
if (!lowerOperand(OffsetMO, MCO))
135+
return true;
133136
if (OffsetMO.isReg())
134137
OS << ", $" << LoongArchInstPrinter::getRegisterName(OffsetMO.getReg());
135138
else if (OffsetMO.isImm())
136139
OS << ", " << OffsetMO.getImm();
140+
else if (OffsetMO.isGlobal() || OffsetMO.isBlockAddress() ||
141+
OffsetMO.isMCSymbol())
142+
OS << ", " << *MCO.getExpr();
137143
else
138144
return true;
139145

0 commit comments

Comments
 (0)