Skip to content

Commit c0d81bf

Browse files
authored
[ARM] Remove Subtarget from ARMAsmPrinter (#168264)
Remove Subtarget uses from ARMAsmPrinter, making use of TargetMachine where applicable and getting the Subtarget from the MF where not. Some of the `if() llvm_unreachable` have been replaced by `asserts`.
1 parent e3044cd commit c0d81bf

File tree

4 files changed

+29
-33
lines changed

4 files changed

+29
-33
lines changed

llvm/lib/Target/ARM/ARMAsmPrinter.cpp

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ using namespace llvm;
5151

5252
ARMAsmPrinter::ARMAsmPrinter(TargetMachine &TM,
5353
std::unique_ptr<MCStreamer> Streamer)
54-
: AsmPrinter(TM, std::move(Streamer), ID), Subtarget(nullptr), AFI(nullptr),
55-
MCP(nullptr), InConstantPool(false), OptimizationGoals(-1) {}
54+
: AsmPrinter(TM, std::move(Streamer), ID), AFI(nullptr), MCP(nullptr),
55+
InConstantPool(false), OptimizationGoals(-1) {}
5656

5757
const ARMBaseTargetMachine &ARMAsmPrinter::getTM() const {
5858
return static_cast<const ARMBaseTargetMachine &>(TM);
@@ -116,7 +116,6 @@ void ARMAsmPrinter::emitGlobalVariable(const GlobalVariable *GV) {
116116
bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
117117
AFI = MF.getInfo<ARMFunctionInfo>();
118118
MCP = MF.getConstantPool();
119-
Subtarget = &MF.getSubtarget<ARMSubtarget>();
120119

121120
SetupMachineFunction(MF);
122121
const Function &F = MF.getFunction();
@@ -154,7 +153,7 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
154153
else if (OptimizationGoals != (int)OptimizationGoal) // conflicting goals
155154
OptimizationGoals = 0;
156155

157-
if (Subtarget->isTargetCOFF()) {
156+
if (TM.getTargetTriple().isOSBinFormatCOFF()) {
158157
bool Local = F.hasLocalLinkage();
159158
COFF::SymbolStorageClass Scl =
160159
Local ? COFF::IMAGE_SYM_CLASS_STATIC : COFF::IMAGE_SYM_CLASS_EXTERNAL;
@@ -260,8 +259,8 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
260259
break;
261260
}
262261
case MachineOperand::MO_ConstantPoolIndex:
263-
if (Subtarget->genExecuteOnly())
264-
llvm_unreachable("execute-only should not generate constant pools");
262+
assert(!MF->getSubtarget<ARMSubtarget>().genExecuteOnly() &&
263+
"execute-only should not generate constant pools");
265264
GetCPISymbol(MO.getIndex())->print(O, MAI);
266265
break;
267266
}
@@ -1048,7 +1047,8 @@ void ARMAsmPrinter::emitJumpTableAddrs(const MachineInstr *MI) {
10481047
// .word (LBB1 - LJTI_0_0)
10491048
const MCExpr *Expr = MCSymbolRefExpr::create(MBB->getSymbol(), OutContext);
10501049

1051-
if (isPositionIndependent() || Subtarget->isROPI())
1050+
const ARMSubtarget &STI = MF->getSubtarget<ARMSubtarget>();
1051+
if (isPositionIndependent() || STI.isROPI())
10521052
Expr = MCBinaryExpr::createSub(Expr, MCSymbolRefExpr::create(JTISymbol,
10531053
OutContext),
10541054
OutContext);
@@ -1097,7 +1097,8 @@ void ARMAsmPrinter::emitJumpTableTBInst(const MachineInstr *MI,
10971097
const MachineOperand &MO1 = MI->getOperand(1);
10981098
unsigned JTI = MO1.getIndex();
10991099

1100-
if (Subtarget->isThumb1Only())
1100+
const ARMSubtarget &STI = MF->getSubtarget<ARMSubtarget>();
1101+
if (STI.isThumb1Only())
11011102
emitAlignment(Align(4));
11021103

11031104
MCSymbol *JTISymbol = GetARMJTIPICJumpTableLabel(JTI);
@@ -1905,6 +1906,7 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
19051906
ARM_MC::verifyInstructionPredicates(MI->getOpcode(),
19061907
getSubtargetInfo().getFeatureBits());
19071908

1909+
const ARMSubtarget &STI = MF->getSubtarget<ARMSubtarget>();
19081910
const DataLayout &DL = getDataLayout();
19091911
MCTargetStreamer &TS = *OutStreamer->getTargetStreamer();
19101912
ARMTargetStreamer &ATS = static_cast<ARMTargetStreamer &>(TS);
@@ -1916,8 +1918,8 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
19161918
}
19171919

19181920
// Emit unwinding stuff for frame-related instructions
1919-
if (Subtarget->isTargetEHABICompatible() &&
1920-
MI->getFlag(MachineInstr::FrameSetup))
1921+
if (TM.getTargetTriple().isTargetEHABICompatible() &&
1922+
MI->getFlag(MachineInstr::FrameSetup))
19211923
EmitUnwindingInstruction(MI);
19221924

19231925
// Do any auto-generated pseudo lowerings.
@@ -1983,14 +1985,13 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
19831985
// Add 's' bit operand (always reg0 for this)
19841986
.addReg(0));
19851987

1986-
assert(Subtarget->hasV4TOps());
1987-
EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::BX)
1988-
.addReg(MI->getOperand(0).getReg()));
1988+
assert(STI.hasV4TOps() && "Expected V4TOps for BX call");
1989+
EmitToStreamer(*OutStreamer,
1990+
MCInstBuilder(ARM::BX).addReg(MI->getOperand(0).getReg()));
19891991
return;
19901992
}
19911993
case ARM::tBX_CALL: {
1992-
if (Subtarget->hasV5TOps())
1993-
llvm_unreachable("Expected BLX to be selected for v5t+");
1994+
assert(!STI.hasV5TOps() && "Expected BLX to be selected for v5t+");
19941995

19951996
// On ARM v4t, when doing a call from thumb mode, we need to ensure
19961997
// that the saved lr has its LSB set correctly (the arch doesn't
@@ -2279,8 +2280,8 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
22792280
return;
22802281
}
22812282
case ARM::CONSTPOOL_ENTRY: {
2282-
if (Subtarget->genExecuteOnly())
2283-
llvm_unreachable("execute-only should not generate constant pools");
2283+
assert(!STI.genExecuteOnly() &&
2284+
"execute-only should not generate constant pools");
22842285

22852286
/// CONSTPOOL_ENTRY - This instruction represents a floating constant pool
22862287
/// in the function. The first operand is the ID# for this instruction, the
@@ -2486,7 +2487,7 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
24862487
case ARM::TRAP: {
24872488
// Non-Darwin binutils don't yet support the "trap" mnemonic.
24882489
// FIXME: Remove this special case when they do.
2489-
if (!Subtarget->isTargetMachO()) {
2490+
if (!TM.getTargetTriple().isOSBinFormatMachO()) {
24902491
uint32_t Val = 0xe7ffdefeUL;
24912492
OutStreamer->AddComment("trap");
24922493
ATS.emitInst(Val);
@@ -2497,7 +2498,7 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
24972498
case ARM::tTRAP: {
24982499
// Non-Darwin binutils don't yet support the "trap" mnemonic.
24992500
// FIXME: Remove this special case when they do.
2500-
if (!Subtarget->isTargetMachO()) {
2501+
if (!TM.getTargetTriple().isOSBinFormatMachO()) {
25012502
uint16_t Val = 0xdefe;
25022503
OutStreamer->AddComment("trap");
25032504
ATS.emitInst(Val, 'n');
@@ -2657,9 +2658,6 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
26572658
.addImm(ARMCC::AL)
26582659
.addReg(0));
26592660

2660-
const MachineFunction &MF = *MI->getParent()->getParent();
2661-
const ARMSubtarget &STI = MF.getSubtarget<ARMSubtarget>();
2662-
26632661
if (STI.isTargetDarwin() || STI.isTargetWindows()) {
26642662
// These platforms always use the same frame register
26652663
EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::LDRi12)
@@ -2688,7 +2686,7 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
26882686
.addReg(0));
26892687
}
26902688

2691-
assert(Subtarget->hasV4TOps());
2689+
assert(STI.hasV4TOps());
26922690
EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::BX)
26932691
.addReg(ScratchReg)
26942692
// Predicate.
@@ -2705,9 +2703,6 @@ void ARMAsmPrinter::emitInstruction(const MachineInstr *MI) {
27052703
Register SrcReg = MI->getOperand(0).getReg();
27062704
Register ScratchReg = MI->getOperand(1).getReg();
27072705

2708-
const MachineFunction &MF = *MI->getParent()->getParent();
2709-
const ARMSubtarget &STI = MF.getSubtarget<ARMSubtarget>();
2710-
27112706
EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tLDRi)
27122707
.addReg(ScratchReg)
27132708
.addReg(SrcReg)

llvm/lib/Target/ARM/ARMAsmPrinter.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
#ifndef LLVM_LIB_TARGET_ARM_ARMASMPRINTER_H
1010
#define LLVM_LIB_TARGET_ARM_ARMASMPRINTER_H
1111

12-
#include "ARMSubtarget.h"
1312
#include "llvm/CodeGen/AsmPrinter.h"
1413
#include "llvm/Target/TargetMachine.h"
1514

1615
namespace llvm {
1716

1817
class ARMFunctionInfo;
18+
class ARMBaseTargetMachine;
1919
class MCOperand;
2020
class MachineConstantPool;
2121
class MachineOperand;
@@ -33,10 +33,6 @@ class LLVM_LIBRARY_VISIBILITY ARMAsmPrinter : public AsmPrinter {
3333
static char ID;
3434

3535
private:
36-
/// Subtarget - Keep a pointer to the ARMSubtarget around so that we can
37-
/// make the right decision when printing asm code for different targets.
38-
const ARMSubtarget *Subtarget;
39-
4036
/// AFI - Keep a pointer to ARMFunctionInfo for the current
4137
/// MachineFunction.
4238
ARMFunctionInfo *AFI;

llvm/lib/Target/ARM/ARMMCInstLower.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ bool ARMAsmPrinter::lowerOperand(const MachineOperand &MO,
112112
MCOp = GetSymbolRef(MO, GetJTISymbol(MO.getIndex()));
113113
break;
114114
case MachineOperand::MO_ConstantPoolIndex:
115-
if (Subtarget->genExecuteOnly())
116-
llvm_unreachable("execute-only should not generate constant pools");
115+
assert(!MF->getSubtarget<ARMSubtarget>().genExecuteOnly() &&
116+
"execute-only should not generate constant pools");
117117
MCOp = GetSymbolRef(MO, GetCPISymbol(MO.getIndex()));
118118
break;
119119
case MachineOperand::MO_BlockAddress:

llvm/lib/Target/ARM/ARMSubtarget.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,15 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
379379
}
380380

381381
bool ARMSubtarget::isROPI() const {
382+
// FIXME: This should ideally come from a function attribute, to work
383+
// correctly with LTO.
382384
return TM.getRelocationModel() == Reloc::ROPI ||
383385
TM.getRelocationModel() == Reloc::ROPI_RWPI;
384386
}
387+
385388
bool ARMSubtarget::isRWPI() const {
389+
// FIXME: This should ideally come from a function attribute, to work
390+
// correctly with LTO.
386391
return TM.getRelocationModel() == Reloc::RWPI ||
387392
TM.getRelocationModel() == Reloc::ROPI_RWPI;
388393
}

0 commit comments

Comments
 (0)