[llvm] 944e60f - Sparc: Merge SparcMCInstLower.cpp into SparcAsmPrinter.cpp
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun May 4 15:20:54 PDT 2025
Author: Fangrui Song
Date: 2025-05-04T15:20:50-07:00
New Revision: 944e60f08e3571db12f8ee15e7793e6a6e157c3b
URL: https://github.com/llvm/llvm-project/commit/944e60f08e3571db12f8ee15e7793e6a6e157c3b
DIFF: https://github.com/llvm/llvm-project/commit/944e60f08e3571db12f8ee15e7793e6a6e157c3b.diff
LOG: Sparc: Merge SparcMCInstLower.cpp into SparcAsmPrinter.cpp
Similar to https://reviews.llvm.org/D152311 for RISCV.
Added:
Modified:
llvm/lib/Target/Sparc/CMakeLists.txt
llvm/lib/Target/Sparc/Sparc.h
llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
llvm/utils/gn/secondary/llvm/lib/Target/Sparc/BUILD.gn
Removed:
llvm/lib/Target/Sparc/SparcMCInstLower.cpp
################################################################################
diff --git a/llvm/lib/Target/Sparc/CMakeLists.txt b/llvm/lib/Target/Sparc/CMakeLists.txt
index bf76ed9d671b9..d41d205625af0 100644
--- a/llvm/lib/Target/Sparc/CMakeLists.txt
+++ b/llvm/lib/Target/Sparc/CMakeLists.txt
@@ -27,7 +27,6 @@ add_llvm_target(SparcCodeGen
SparcRegisterInfo.cpp
SparcSubtarget.cpp
SparcTargetMachine.cpp
- SparcMCInstLower.cpp
SparcTargetObjectFile.cpp
LINK_COMPONENTS
diff --git a/llvm/lib/Target/Sparc/Sparc.h b/llvm/lib/Target/Sparc/Sparc.h
index afcbc47329541..60f20e6ab232f 100644
--- a/llvm/lib/Target/Sparc/Sparc.h
+++ b/llvm/lib/Target/Sparc/Sparc.h
@@ -29,8 +29,6 @@ class SparcTargetMachine;
FunctionPass *createSparcISelDag(SparcTargetMachine &TM);
FunctionPass *createSparcDelaySlotFillerPass();
-void LowerSparcMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
- AsmPrinter &AP);
void initializeSparcDAGToDAGISelLegacyPass(PassRegistry &);
void initializeErrataWorkaroundPass(PassRegistry &);
} // namespace llvm
diff --git a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
index 18fdac0b52c1a..06c938e1cc215 100644
--- a/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
+++ b/llvm/lib/Target/Sparc/SparcAsmPrinter.cpp
@@ -67,6 +67,11 @@ class SparcAsmPrinter : public AsmPrinter {
void LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
const MCSubtargetInfo &STI);
+
+ MCOperand lowerOperand(const MachineOperand &MO) const;
+
+private:
+ void lowerToMCInst(const MachineInstr *MI, MCInst &OutMI);
};
} // end of anonymous namespace
@@ -255,6 +260,68 @@ void SparcAsmPrinter::LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
EmitADD(*OutStreamer, MCRegOP, RegO7, MCRegOP, STI);
}
+MCOperand SparcAsmPrinter::lowerOperand(const MachineOperand &MO) const {
+ switch (MO.getType()) {
+ default:
+ llvm_unreachable("unknown operand type");
+ break;
+ case MachineOperand::MO_Register:
+ if (MO.isImplicit())
+ break;
+ return MCOperand::createReg(MO.getReg());
+
+ case MachineOperand::MO_Immediate:
+ return MCOperand::createImm(MO.getImm());
+
+ case MachineOperand::MO_MachineBasicBlock:
+ case MachineOperand::MO_GlobalAddress:
+ case MachineOperand::MO_BlockAddress:
+ case MachineOperand::MO_ExternalSymbol:
+ case MachineOperand::MO_ConstantPoolIndex: {
+ SparcMCExpr::Specifier Kind = (SparcMCExpr::Specifier)MO.getTargetFlags();
+ const MCSymbol *Symbol = nullptr;
+ switch (MO.getType()) {
+ default:
+ llvm_unreachable("");
+ case MachineOperand::MO_MachineBasicBlock:
+ Symbol = MO.getMBB()->getSymbol();
+ break;
+ case MachineOperand::MO_GlobalAddress:
+ Symbol = getSymbol(MO.getGlobal());
+ break;
+ case MachineOperand::MO_BlockAddress:
+ Symbol = GetBlockAddressSymbol(MO.getBlockAddress());
+ break;
+ case MachineOperand::MO_ExternalSymbol:
+ Symbol = GetExternalSymbolSymbol(MO.getSymbolName());
+ break;
+ case MachineOperand::MO_ConstantPoolIndex:
+ Symbol = GetCPISymbol(MO.getIndex());
+ break;
+ }
+
+ const MCExpr *expr = MCSymbolRefExpr::create(Symbol, OutContext);
+ if (Kind)
+ expr = SparcMCExpr::create(Kind, expr, OutContext);
+ return MCOperand::createExpr(expr);
+ }
+
+ case MachineOperand::MO_RegisterMask:
+ break;
+ }
+ return MCOperand();
+}
+
+void SparcAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
+ OutMI.setOpcode(MI->getOpcode());
+
+ for (const MachineOperand &MO : MI->operands()) {
+ MCOperand MCOp = lowerOperand(MO);
+ if (MCOp.isValid())
+ OutMI.addOperand(MCOp);
+ }
+}
+
void SparcAsmPrinter::emitInstruction(const MachineInstr *MI) {
Sparc_MC::verifyInstructionPredicates(MI->getOpcode(),
getSubtargetInfo().getFeatureBits());
@@ -278,7 +345,7 @@ void SparcAsmPrinter::emitInstruction(const MachineInstr *MI) {
MachineBasicBlock::const_instr_iterator E = MI->getParent()->instr_end();
do {
MCInst TmpInst;
- LowerSparcMachineInstrToMCInst(&*I, TmpInst, *this);
+ lowerToMCInst(&*I, TmpInst);
EmitToStreamer(*OutStreamer, TmpInst);
} while ((++I != E) && I->isInsideBundle()); // Delay slot check.
}
diff --git a/llvm/lib/Target/Sparc/SparcMCInstLower.cpp b/llvm/lib/Target/Sparc/SparcMCInstLower.cpp
deleted file mode 100644
index cfcb29d6a4d9f..0000000000000
--- a/llvm/lib/Target/Sparc/SparcMCInstLower.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-//===-- SparcMCInstLower.cpp - Convert Sparc MachineInstr to MCInst -------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file contains code to lower Sparc MachineInstrs to their corresponding
-// MCInst records.
-//
-//===----------------------------------------------------------------------===//
-
-#include "MCTargetDesc/SparcMCExpr.h"
-#include "Sparc.h"
-#include "llvm/CodeGen/AsmPrinter.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/CodeGen/MachineOperand.h"
-#include "llvm/IR/Mangler.h"
-#include "llvm/MC/MCAsmInfo.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCInst.h"
-
-using namespace llvm;
-
-
-static MCOperand LowerSymbolOperand(const MachineInstr *MI,
- const MachineOperand &MO,
- AsmPrinter &AP) {
-
- SparcMCExpr::Specifier Kind = (SparcMCExpr::Specifier)MO.getTargetFlags();
- const MCSymbol *Symbol = nullptr;
-
- switch(MO.getType()) {
- default: llvm_unreachable("Unknown type in LowerSymbolOperand");
- case MachineOperand::MO_MachineBasicBlock:
- Symbol = MO.getMBB()->getSymbol();
- break;
-
- case MachineOperand::MO_GlobalAddress:
- Symbol = AP.getSymbol(MO.getGlobal());
- break;
-
- case MachineOperand::MO_BlockAddress:
- Symbol = AP.GetBlockAddressSymbol(MO.getBlockAddress());
- break;
-
- case MachineOperand::MO_ExternalSymbol:
- Symbol = AP.GetExternalSymbolSymbol(MO.getSymbolName());
- break;
-
- case MachineOperand::MO_ConstantPoolIndex:
- Symbol = AP.GetCPISymbol(MO.getIndex());
- break;
- }
-
- const MCExpr *expr = MCSymbolRefExpr::create(Symbol, AP.OutContext);
- if (Kind)
- expr = SparcMCExpr::create(Kind, expr, AP.OutContext);
- return MCOperand::createExpr(expr);
-}
-
-static MCOperand LowerOperand(const MachineInstr *MI,
- const MachineOperand &MO,
- AsmPrinter &AP) {
- switch(MO.getType()) {
- default: llvm_unreachable("unknown operand type"); break;
- case MachineOperand::MO_Register:
- if (MO.isImplicit())
- break;
- return MCOperand::createReg(MO.getReg());
-
- case MachineOperand::MO_Immediate:
- return MCOperand::createImm(MO.getImm());
-
- case MachineOperand::MO_MachineBasicBlock:
- case MachineOperand::MO_GlobalAddress:
- case MachineOperand::MO_BlockAddress:
- case MachineOperand::MO_ExternalSymbol:
- case MachineOperand::MO_ConstantPoolIndex:
- return LowerSymbolOperand(MI, MO, AP);
-
- case MachineOperand::MO_RegisterMask: break;
-
- }
- return MCOperand();
-}
-
-void llvm::LowerSparcMachineInstrToMCInst(const MachineInstr *MI,
- MCInst &OutMI,
- AsmPrinter &AP)
-{
-
- OutMI.setOpcode(MI->getOpcode());
-
- for (const MachineOperand &MO : MI->operands()) {
- MCOperand MCOp = LowerOperand(MI, MO, AP);
-
- if (MCOp.isValid())
- OutMI.addOperand(MCOp);
- }
-}
diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/Sparc/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/Sparc/BUILD.gn
index 904066e8df36b..c521a4c265d35 100644
--- a/llvm/utils/gn/secondary/llvm/lib/Target/Sparc/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/lib/Target/Sparc/BUILD.gn
@@ -37,7 +37,6 @@ static_library("LLVMSparcCodeGen") {
"SparcISelDAGToDAG.cpp",
"SparcISelLowering.cpp",
"SparcInstrInfo.cpp",
- "SparcMCInstLower.cpp",
"SparcMachineFunctionInfo.cpp",
"SparcRegisterInfo.cpp",
"SparcSubtarget.cpp",
More information about the llvm-commits
mailing list