Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion llvm/include/llvm/CodeGen/TargetRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
/// If a target supports multiple different pointer register classes,
/// kind specifies which one is indicated.
virtual const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF, unsigned Kind=0) const {
getPointerRegClass(unsigned Kind = 0) const {
llvm_unreachable("Target didn't implement getPointerRegClass!");
}

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1863,7 +1863,7 @@ bool IRTranslator::translateVectorDeinterleave2Intrinsic(
void IRTranslator::getStackGuard(Register DstReg,
MachineIRBuilder &MIRBuilder) {
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
MRI->setRegClass(DstReg, TRI->getPointerRegClass(*MF));
MRI->setRegClass(DstReg, TRI->getPointerRegClass());
auto MIB =
MIRBuilder.buildInstr(TargetOpcode::LOAD_STACK_GUARD, {DstReg}, {});

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/MachineInstr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1003,7 +1003,7 @@ MachineInstr::getRegClassConstraint(unsigned OpIdx,

// Assume that all registers in a memory operand are pointers.
if (F.isMemKind())
return TRI->getPointerRegClass(MF);
return TRI->getPointerRegClass();

return nullptr;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/TargetInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ TargetInstrInfo::getRegClass(const MCInstrDesc &MCID, unsigned OpNum,

short RegClass = MCID.operands()[OpNum].RegClass;
if (MCID.operands()[OpNum].isLookupPtrRegClass())
return TRI->getPointerRegClass(MF, RegClass);
return TRI->getPointerRegClass(RegClass);

// Instructions like INSERT_SUBREG do not have fixed register classes.
if (RegClass < 0)
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,7 @@ bool AArch64DAGToDAGISel::SelectInlineAsmMemoryOperand(
// We need to make sure that this one operand does not end up in XZR, thus
// require the address to be in a PointerRegClass register.
const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo();
const TargetRegisterClass *TRC = TRI->getPointerRegClass(*MF);
const TargetRegisterClass *TRC = TRI->getPointerRegClass();
SDLoc dl(Op);
SDValue RC = CurDAG->getTargetConstant(TRC->getID(), dl, MVT::i64);
SDValue NewOp =
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -610,8 +610,7 @@ bool AArch64RegisterInfo::isAsmClobberable(const MachineFunction &MF,
}

const TargetRegisterClass *
AArch64RegisterInfo::getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const {
AArch64RegisterInfo::getPointerRegClass(unsigned Kind) const {
return &AArch64::GPR64spRegClass;
}

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AArch64/AArch64RegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,7 @@ class AArch64RegisterInfo final : public AArch64GenRegisterInfo {
bool isAsmClobberable(const MachineFunction &MF,
MCRegister PhysReg) const override;
const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
getPointerRegClass(unsigned Kind = 0) const override;
const TargetRegisterClass *
getCrossCopyRegClass(const TargetRegisterClass *RC) const override;

Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1108,8 +1108,8 @@ bool SIRegisterInfo::isFrameOffsetLegal(const MachineInstr *MI,
SIInstrFlags::FlatScratch);
}

const TargetRegisterClass *SIRegisterInfo::getPointerRegClass(
const MachineFunction &MF, unsigned Kind) const {
const TargetRegisterClass *
SIRegisterInfo::getPointerRegClass(unsigned Kind) const {
// This is inaccurate. It depends on the instruction and address space. The
// only place where we should hit this is for dealing with frame indexes /
// private accesses, so this is correct in that case.
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo {
bool isFrameOffsetLegal(const MachineInstr *MI, Register BaseReg,
int64_t Offset) const override;

const TargetRegisterClass *getPointerRegClass(
const MachineFunction &MF, unsigned Kind = 0) const override;
const TargetRegisterClass *
getPointerRegClass(unsigned Kind = 0) const override;

/// Returns a legal register class to copy a register in the specified class
/// to or from. If it is possible to copy the register directly without using
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,7 @@ ARMBaseRegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC,
}

const TargetRegisterClass *
ARMBaseRegisterInfo::getPointerRegClass(const MachineFunction &MF, unsigned Kind)
const {
ARMBaseRegisterInfo::getPointerRegClass(unsigned Kind) const {
return &ARM::GPRRegClass;
}

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/ARM/ARMBaseRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,7 @@ class ARMBaseRegisterInfo : public ARMGenRegisterInfo {
MCRegister PhysReg) const override;

const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
getPointerRegClass(unsigned Kind = 0) const override;
const TargetRegisterClass *
getCrossCopyRegClass(const TargetRegisterClass *RC) const override;

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/Thumb1InstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
using namespace llvm;

Thumb1InstrInfo::Thumb1InstrInfo(const ARMSubtarget &STI)
: ARMBaseInstrInfo(STI) {}
: ARMBaseInstrInfo(STI), RI(STI) {}

/// Return the noop instruction to use for a noop.
MCInst Thumb1InstrInfo::getNop() const {
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/Thumb2InstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ PreferNoCSEL("prefer-no-csel", cl::Hidden,
cl::init(false));

Thumb2InstrInfo::Thumb2InstrInfo(const ARMSubtarget &STI)
: ARMBaseInstrInfo(STI) {}
: ARMBaseInstrInfo(STI), RI(STI) {}

/// Return the noop instruction to use for a noop.
MCInst Thumb2InstrInfo::getNop() const {
Expand Down
12 changes: 6 additions & 6 deletions llvm/lib/Target/ARM/ThumbRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,13 @@ extern cl::opt<bool> ReuseFrameIndexVals;

using namespace llvm;

ThumbRegisterInfo::ThumbRegisterInfo() = default;
ThumbRegisterInfo::ThumbRegisterInfo(const ARMSubtarget &STI)
: IsThumb1Only(STI.isThumb1Only()) {}

const TargetRegisterClass *
ThumbRegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC,
const MachineFunction &MF) const {
if (!MF.getSubtarget<ARMSubtarget>().isThumb1Only())
if (!IsThumb1Only)
return ARMBaseRegisterInfo::getLargestLegalSuperClass(RC, MF);

if (ARM::tGPRRegClass.hasSubClassEq(RC))
Expand All @@ -49,10 +50,9 @@ ThumbRegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC,
}

const TargetRegisterClass *
ThumbRegisterInfo::getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const {
if (!MF.getSubtarget<ARMSubtarget>().isThumb1Only())
return ARMBaseRegisterInfo::getPointerRegClass(MF, Kind);
ThumbRegisterInfo::getPointerRegClass(unsigned Kind) const {
if (!IsThumb1Only)
return ARMBaseRegisterInfo::getPointerRegClass(Kind);
return &ARM::tGPRRegClass;
}

Expand Down
8 changes: 5 additions & 3 deletions llvm/lib/Target/ARM/ThumbRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,18 @@ namespace llvm {
class ARMBaseInstrInfo;

struct ThumbRegisterInfo : public ARMBaseRegisterInfo {
private:
const bool IsThumb1Only;

public:
ThumbRegisterInfo();
explicit ThumbRegisterInfo(const ARMSubtarget &STI);

const TargetRegisterClass *
getLargestLegalSuperClass(const TargetRegisterClass *RC,
const MachineFunction &MF) const override;

const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
getPointerRegClass(unsigned Kind = 0) const override;

/// emitLoadConstPool - Emits a load from constpool to materialize the
/// specified immediate.
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AVR/AVRRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,7 @@ Register AVRRegisterInfo::getFrameRegister(const MachineFunction &MF) const {
}

const TargetRegisterClass *
AVRRegisterInfo::getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const {
AVRRegisterInfo::getPointerRegClass(unsigned Kind) const {
// FIXME: Currently we're using avr-gcc as reference, so we restrict
// ptrs to Y and Z regs. Though avr-gcc has buggy implementation
// of memory constraint, so we can fix it and bit avr-gcc here ;-)
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/AVR/AVRRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@ class AVRRegisterInfo : public AVRGenRegisterInfo {
Register getFrameRegister(const MachineFunction &MF) const override;

const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
getPointerRegClass(unsigned Kind = 0) const override;

/// Splits a 16-bit `DREGS` register into the lo/hi register pair.
/// \param Reg A 16-bit register to split.
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,6 @@ bool HexagonRegisterInfo::useFPForScavengingIndex(const MachineFunction &MF)
}

const TargetRegisterClass *
HexagonRegisterInfo::getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const {
HexagonRegisterInfo::getPointerRegClass(unsigned Kind) const {
return &Hexagon::IntRegsRegClass;
}
3 changes: 1 addition & 2 deletions llvm/lib/Target/Hexagon/HexagonRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ class HexagonRegisterInfo : public HexagonGenRegisterInfo {
const TargetRegisterClass *RC) const;

const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
getPointerRegClass(unsigned Kind = 0) const override;

bool isEHReturnCalleeSaveReg(Register Reg) const;
};
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/LoongArch/LoongArchRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ struct LoongArchRegisterInfo : public LoongArchGenRegisterInfo {
BitVector getReservedRegs(const MachineFunction &MF) const override;

const TargetRegisterClass *
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override {
getPointerRegClass(unsigned Kind = 0) const override {
return &LoongArch::GPRRegClass;
}

Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/MSP430/MSP430RegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,7 @@ BitVector MSP430RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
}

const TargetRegisterClass *
MSP430RegisterInfo::getPointerRegClass(const MachineFunction &MF, unsigned Kind)
const {
MSP430RegisterInfo::getPointerRegClass(unsigned Kind) const {
return &MSP430::GR16RegClass;
}

Expand Down
5 changes: 2 additions & 3 deletions llvm/lib/Target/MSP430/MSP430RegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@ class MSP430RegisterInfo : public MSP430GenRegisterInfo {
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;

BitVector getReservedRegs(const MachineFunction &MF) const override;
const TargetRegisterClass*
getPointerRegClass(const MachineFunction &MF,
unsigned Kind = 0) const override;
const TargetRegisterClass *
getPointerRegClass(unsigned Kind = 0) const override;

bool eliminateFrameIndex(MachineBasicBlock::iterator II,
int SPAdj, unsigned FIOperandNum,
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/Mips/Mips16InstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ using namespace llvm;
#define DEBUG_TYPE "mips16-instrinfo"

Mips16InstrInfo::Mips16InstrInfo(const MipsSubtarget &STI)
: MipsInstrInfo(STI, Mips::Bimm16) {}
: MipsInstrInfo(STI, Mips::Bimm16), RI(STI) {}

const MipsRegisterInfo &Mips16InstrInfo::getRegisterInfo() const {
return RI;
Expand Down
3 changes: 2 additions & 1 deletion llvm/lib/Target/Mips/Mips16RegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ using namespace llvm;

#define DEBUG_TYPE "mips16-registerinfo"

Mips16RegisterInfo::Mips16RegisterInfo() = default;
Mips16RegisterInfo::Mips16RegisterInfo(const MipsSubtarget &STI)
: MipsRegisterInfo(STI) {}

bool Mips16RegisterInfo::requiresRegisterScavenging
(const MachineFunction &MF) const {
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/Target/Mips/Mips16RegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,9 @@
#include "MipsRegisterInfo.h"

namespace llvm {

class Mips16RegisterInfo : public MipsRegisterInfo {
public:
Mips16RegisterInfo();
explicit Mips16RegisterInfo(const MipsSubtarget &STI);

bool requiresRegisterScavenging(const MachineFunction &MF) const override;

Expand Down
13 changes: 6 additions & 7 deletions llvm/lib/Target/Mips/MipsRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,27 +37,26 @@ using namespace llvm;
#define GET_REGINFO_TARGET_DESC
#include "MipsGenRegisterInfo.inc"

MipsRegisterInfo::MipsRegisterInfo() : MipsGenRegisterInfo(Mips::RA) {
MipsRegisterInfo::MipsRegisterInfo(const MipsSubtarget &STI)
: MipsGenRegisterInfo(Mips::RA), ArePtrs64bit(STI.getABI().ArePtrs64bit()) {
MIPS_MC::initLLVMToCVRegMapping(this);
}

unsigned MipsRegisterInfo::getPICCallReg() { return Mips::T9; }

const TargetRegisterClass *
MipsRegisterInfo::getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const {
MipsABIInfo ABI = MF.getSubtarget<MipsSubtarget>().getABI();
MipsRegisterInfo::getPointerRegClass(unsigned Kind) const {
MipsPtrClass PtrClassKind = static_cast<MipsPtrClass>(Kind);

switch (PtrClassKind) {
case MipsPtrClass::Default:
return ABI.ArePtrs64bit() ? &Mips::GPR64RegClass : &Mips::GPR32RegClass;
return ArePtrs64bit ? &Mips::GPR64RegClass : &Mips::GPR32RegClass;
case MipsPtrClass::GPR16MM:
return &Mips::GPRMM16RegClass;
case MipsPtrClass::StackPointer:
return ABI.ArePtrs64bit() ? &Mips::SP64RegClass : &Mips::SP32RegClass;
return ArePtrs64bit ? &Mips::SP64RegClass : &Mips::SP32RegClass;
case MipsPtrClass::GlobalPointer:
return ABI.ArePtrs64bit() ? &Mips::GP64RegClass : &Mips::GP32RegClass;
return ArePtrs64bit ? &Mips::GP64RegClass : &Mips::GP32RegClass;
}

llvm_unreachable("Unknown pointer kind");
Expand Down
8 changes: 5 additions & 3 deletions llvm/lib/Target/Mips/MipsRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ namespace llvm {
class TargetRegisterClass;

class MipsRegisterInfo : public MipsGenRegisterInfo {
private:
const bool ArePtrs64bit;

public:
enum class MipsPtrClass {
/// The default register class for integer values.
Expand All @@ -38,14 +41,13 @@ class MipsRegisterInfo : public MipsGenRegisterInfo {
GlobalPointer = 3,
};

MipsRegisterInfo();
explicit MipsRegisterInfo(const MipsSubtarget &STI);

/// Get PIC indirect call register
static unsigned getPICCallReg();

/// Code Generation virtual methods...
const TargetRegisterClass *getPointerRegClass(const MachineFunction &MF,
unsigned Kind) const override;
const TargetRegisterClass *getPointerRegClass(unsigned Kind) const override;

unsigned getRegPressureLimit(const TargetRegisterClass *RC,
MachineFunction &MF) const override;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/Mips/MipsSEInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ static unsigned getUnconditionalBranch(const MipsSubtarget &STI) {
}

MipsSEInstrInfo::MipsSEInstrInfo(const MipsSubtarget &STI)
: MipsInstrInfo(STI, getUnconditionalBranch(STI)), RI() {}
: MipsInstrInfo(STI, getUnconditionalBranch(STI)), RI(STI) {}

const MipsRegisterInfo &MipsSEInstrInfo::getRegisterInfo() const {
return RI;
Expand Down
3 changes: 2 additions & 1 deletion llvm/lib/Target/Mips/MipsSERegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ using namespace llvm;

#define DEBUG_TYPE "mips-reg-info"

MipsSERegisterInfo::MipsSERegisterInfo() = default;
MipsSERegisterInfo::MipsSERegisterInfo(const MipsSubtarget &STI)
: MipsRegisterInfo(STI) {}

bool MipsSERegisterInfo::
requiresRegisterScavenging(const MachineFunction &MF) const {
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/Mips/MipsSERegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace llvm {

class MipsSERegisterInfo : public MipsRegisterInfo {
public:
MipsSERegisterInfo();
explicit MipsSERegisterInfo(const MipsSubtarget &STI);

bool requiresRegisterScavenging(const MachineFunction &MF) const override;

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ namespace {
// We need to make sure that this one operand does not end up in r0
// (because we might end up lowering this as 0(%op)).
const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo();
const TargetRegisterClass *TRC = TRI->getPointerRegClass(*MF, /*Kind=*/1);
const TargetRegisterClass *TRC = TRI->getPointerRegClass(/*Kind=*/1);
SDLoc dl(Op);
SDValue RC = CurDAG->getTargetConstant(TRC->getID(), dl, MVT::i32);
SDValue NewOp =
Expand Down
5 changes: 2 additions & 3 deletions llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,7 @@ PPCRegisterInfo::PPCRegisterInfo(const PPCTargetMachine &TM)
/// getPointerRegClass - Return the register class to use to hold pointers.
/// This is used for addressing modes.
const TargetRegisterClass *
PPCRegisterInfo::getPointerRegClass(const MachineFunction &MF, unsigned Kind)
const {
PPCRegisterInfo::getPointerRegClass(unsigned Kind) const {
// Note that PPCInstrInfo::foldImmediate also directly uses this Kind value
// when it checks for ZERO folding.
if (Kind == 1) {
Expand Down Expand Up @@ -2022,7 +2021,7 @@ Register PPCRegisterInfo::materializeFrameBaseRegister(MachineBasicBlock *MBB,
const TargetInstrInfo &TII = *Subtarget.getInstrInfo();
const MCInstrDesc &MCID = TII.get(ADDriOpc);
MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo();
const TargetRegisterClass *RC = getPointerRegClass(MF);
const TargetRegisterClass *RC = getPointerRegClass();
Register BaseReg = MRI.createVirtualRegister(RC);
MRI.constrainRegClass(BaseReg, TII.getRegClass(MCID, 0, this, MF));

Expand Down
Loading