Skip to content
Open
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
6 changes: 4 additions & 2 deletions llvm/include/llvm/CodeGen/LiveRangeEdit.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,10 @@ class LiveRangeEdit : private MachineRegisterInfo::Delegate {

ArrayRef<Register> regs() const { return ArrayRef(NewRegs).slice(FirstNew); }

/// createFrom - Create a new virtual register based on OldReg.
Register createFrom(Register OldReg);
/// createFrom - Create a new virtual register based on OldReg. If \p RC is
/// non-null, create the new virtual register from it instead. Subreg spills
/// will feed-in a subregclass derived from the regclass of OldReg.
Register createFrom(Register OldReg, const TargetRegisterClass *RC = nullptr);

/// create - Create a new register with the same class and original slot as
/// parent.
Expand Down
2 changes: 1 addition & 1 deletion llvm/include/llvm/CodeGen/TargetInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,7 @@ class LLVM_ABI TargetInstrInfo : public MCInstrInfo {
virtual void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, Register DestReg,
int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const {
llvm_unreachable("Target didn't implement "
"TargetInstrInfo::loadRegFromStackSlot!");
Expand Down
7 changes: 7 additions & 0 deletions llvm/include/llvm/CodeGen/TargetRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,8 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
LaneBitmask LaneMask,
SmallVectorImpl<unsigned> &Indexes) const;

unsigned getSubRegIdxFromLaneMask(LaneBitmask LaneMask) const;

/// The lane masks returned by getSubRegIndexLaneMask() above can only be
/// used to determine if sub-registers overlap - they can't be used to
/// determine if a set of sub-registers completely cover another
Expand Down Expand Up @@ -1225,6 +1227,11 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
return true;
}

/// To enable the spill-restore of sub registers during RA. This would
/// eventually improve the register allocation for the functions that involve
/// subreg uses of register tuples.
virtual bool shouldEnableSubRegSpillRestore() const { return false; }

/// When prioritizing live ranges in register allocation, if this hook returns
/// true then the AllocationPriority of the register class will be treated as
/// more important than whether the range is local to a basic block or global.
Expand Down
45 changes: 39 additions & 6 deletions llvm/lib/CodeGen/InlineSpiller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ class InlineSpiller : public Spiller {
bool coalesceStackAccess(MachineInstr *MI, Register Reg);
bool foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned>>,
MachineInstr *LoadMI = nullptr);
void insertReload(Register VReg, SlotIndex, MachineBasicBlock::iterator MI);
void insertReload(Register VReg, unsigned SubReg, SlotIndex,
MachineBasicBlock::iterator MI);
void insertSpill(Register VReg, bool isKill, MachineBasicBlock::iterator MI);

void spillAroundUses(Register Reg);
Expand Down Expand Up @@ -1112,14 +1113,14 @@ foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned>> Ops,
return true;
}

void InlineSpiller::insertReload(Register NewVReg,
void InlineSpiller::insertReload(Register NewVReg, unsigned SubReg,
SlotIndex Idx,
MachineBasicBlock::iterator MI) {
MachineBasicBlock &MBB = *MI->getParent();

MachineInstrSpan MIS(MI, &MBB);
TII.loadRegFromStackSlot(MBB, MI, NewVReg, StackSlot,
MRI.getRegClass(NewVReg), &TRI, Register());
MRI.getRegClass(NewVReg), &TRI, Register(), SubReg);

LIS.InsertMachineInstrRangeInMaps(MIS.begin(), MI);

Expand Down Expand Up @@ -1248,18 +1249,50 @@ void InlineSpiller::spillAroundUses(Register Reg) {

// Create a new virtual register for spill/fill.
// FIXME: Infer regclass from instruction alone.
Register NewVReg = Edit->createFrom(Reg);

unsigned SubReg = 0;
LaneBitmask CoveringLanes = LaneBitmask::getNone();
// Identify the subreg use(s). Skip if the instruction defines the register.
// For copy bundles, get the covering lane masks.
if (TRI.shouldEnableSubRegSpillRestore() && !RI.Writes) {
for (auto [MI, OpIdx] : Ops) {
const MachineOperand &MO = MI->getOperand(OpIdx);
assert(MO.isReg() && MO.getReg() == Reg);
if (MO.isUse()) {
SubReg = MO.getSubReg();
CoveringLanes |= TRI.getSubRegIndexLaneMask(SubReg);
}
}
}

const TargetRegisterClass *OrigRC = MRI.getRegClass(Reg);
if (MI.isBundled() && CoveringLanes.any()) {
CoveringLanes = LaneBitmask(bit_ceil(CoveringLanes.getAsInteger()) - 1);
// Get the covering subreg index including the missing indices in the
// identified small range. Even if this is suboptimal, it is advantageous
// when the higher subreg components are not really involved in the bundle
// copy as we emit the subreg reload rather than the one for the entire
// tuple.
SubReg = TRI.getSubRegIdxFromLaneMask(CoveringLanes);
}

const TargetRegisterClass *NewRC =
SubReg ? TRI.getSubRegisterClass(OrigRC, SubReg) : nullptr;
Register NewVReg = Edit->createFrom(Reg, NewRC);

if (RI.Reads)
insertReload(NewVReg, Idx, &MI);
insertReload(NewVReg, SubReg, Idx, &MI);

// Rewrite instruction operands.
bool hasLiveDef = false;
for (const auto &OpPair : Ops) {
MachineOperand &MO = OpPair.first->getOperand(OpPair.second);
MO.setReg(NewVReg);
if (MO.isUse()) {
if (!OpPair.first->isRegTiedToDefOperand(OpPair.second))
if (SubReg && !MI.isBundled())
MO.setSubReg(0);
if (!OpPair.first->isRegTiedToDefOperand(OpPair.second) ||
(SubReg && !MI.isBundled()))
MO.setIsKill();
} else {
if (!MO.isDead())
Expand Down
6 changes: 4 additions & 2 deletions llvm/lib/CodeGen/LiveRangeEdit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(Register OldReg,
return LI;
}

Register LiveRangeEdit::createFrom(Register OldReg) {
Register VReg = MRI.cloneVirtualRegister(OldReg);
Register LiveRangeEdit::createFrom(Register OldReg,
const TargetRegisterClass *RC) {
Register VReg =
RC ? MRI.createVirtualRegister(RC) : MRI.cloneVirtualRegister(OldReg);
if (VRM) {
VRM->setIsSplitFromReg(VReg, VRM->getOriginal(OldReg));
}
Expand Down
10 changes: 10 additions & 0 deletions llvm/lib/CodeGen/TargetRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,16 @@ TargetRegisterInfo::getRegSizeInBits(Register Reg,
return getRegSizeInBits(*RC);
}

unsigned
TargetRegisterInfo::getSubRegIdxFromLaneMask(LaneBitmask LaneMask) const {
for (unsigned Idx = 1, E = getNumSubRegIndices(); Idx < E; ++Idx) {
if (getSubRegIndexLaneMask(Idx) == LaneMask)
return Idx;
}

return 0 /*NoSubRegister*/;
}

bool TargetRegisterInfo::getCoveringSubRegIndexes(
const TargetRegisterClass *RC, LaneBitmask LaneMask,
SmallVectorImpl<unsigned> &NeededIndexes) const {
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5798,7 +5798,7 @@ static void loadRegPairFromStackSlot(const TargetRegisterInfo &TRI,
void AArch64InstrInfo::loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register DestReg,
int FI, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI,
Register VReg, MachineInstr::MIFlag Flags) const {
Register VReg, unsigned SubReg, MachineInstr::MIFlag Flags) const {
MachineFunction &MF = *MBB.getParent();
MachineFrameInfo &MFI = MF.getFrameInfo();
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FI);
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AArch64/AArch64InstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
Register DestReg, int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

// This tells target independent code that it is okay to pass instructions
Expand Down
22 changes: 17 additions & 5 deletions llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1907,14 +1907,22 @@ void SIInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
Register DestReg, int FrameIndex,
const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI,
Register VReg,
Register VReg, unsigned SubReg,
MachineInstr::MIFlag Flags) const {
MachineFunction *MF = MBB.getParent();
SIMachineFunctionInfo *MFI = MF->getInfo<SIMachineFunctionInfo>();
MachineFrameInfo &FrameInfo = MF->getFrameInfo();
const DebugLoc &DL = MBB.findDebugLoc(MI);
unsigned SpillSize = TRI->getSpillSize(*RC);

assert(SubReg != AMDGPU::lo16 && SubReg != AMDGPU::hi16 &&
"unhandled 16-bit subregister spilling");
// For subreg reload, identify the start offset.
unsigned Offset =
SubReg ? llvm::countr_zero(
RI.getSubRegIndexLaneMask(SubReg).getAsInteger()) /
2
: 0;
MachinePointerInfo PtrInfo
= MachinePointerInfo::getFixedStack(*MF, FrameIndex);

Expand All @@ -1939,19 +1947,23 @@ void SIInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
if (RI.spillSGPRToVGPR())
FrameInfo.setStackID(FrameIndex, TargetStackID::SGPRSpill);
BuildMI(MBB, MI, DL, OpDesc, DestReg)
.addFrameIndex(FrameIndex) // addr
.addMemOperand(MMO)
.addReg(MFI->getStackPtrOffsetReg(), RegState::Implicit);
.addFrameIndex(FrameIndex) // addr
.addImm(Offset) // offset
.addMemOperand(MMO)
.addReg(MFI->getStackPtrOffsetReg(), RegState::Implicit);

return;
}

// Convert from Word-offset to byte-ffset.
Offset *= 4;

unsigned Opcode = getVectorRegSpillRestoreOpcode(VReg ? VReg : DestReg, RC,
SpillSize, *MFI);
BuildMI(MBB, MI, DL, get(Opcode), DestReg)
.addFrameIndex(FrameIndex) // vaddr
.addReg(MFI->getStackPtrOffsetReg()) // scratch_offset
.addImm(0) // offset
.addImm(Offset) // offset
.addMemOperand(MMO);
}

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/SIInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, Register DestReg,
int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

bool expandPostRAPseudo(MachineInstr &MI) const override;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/SIInstructions.td
Original file line number Diff line number Diff line change
Expand Up @@ -1095,7 +1095,7 @@ multiclass SI_SPILL_SGPR <RegisterClass sgpr_class> {

def _RESTORE : PseudoInstSI <
(outs sgpr_class:$data),
(ins i32imm:$addr)> {
(ins i32imm:$addr, i32imm:$offset)> {
let mayStore = 0;
let mayLoad = 1;
}
Expand Down
7 changes: 5 additions & 2 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2272,6 +2272,7 @@ bool SIRegisterInfo::restoreSGPR(MachineBasicBlock::iterator MI, int Index,
if (OnlyToVGPR && !SpillToVGPR)
return false;

int SubRegIdx = MI->getOperand(2).getImm();
if (SpillToVGPR) {
for (unsigned i = 0, e = SB.NumSubRegs; i < e; ++i) {
Register SubReg =
Expand All @@ -2283,7 +2284,7 @@ bool SIRegisterInfo::restoreSGPR(MachineBasicBlock::iterator MI, int Index,
auto MIB = BuildMI(*SB.MBB, MI, SB.DL,
SB.TII.get(AMDGPU::SI_RESTORE_S32_FROM_VGPR), SubReg)
.addReg(Spill.VGPR)
.addImm(Spill.Lane);
.addImm(Spill.Lane + SubRegIdx);
if (SB.NumSubRegs > 1 && i == 0)
MIB.addReg(SB.SuperReg, RegState::ImplicitDefine);
if (Indexes) {
Expand Down Expand Up @@ -2316,7 +2317,7 @@ bool SIRegisterInfo::restoreSGPR(MachineBasicBlock::iterator MI, int Index,
auto MIB = BuildMI(*SB.MBB, MI, SB.DL,
SB.TII.get(AMDGPU::SI_RESTORE_S32_FROM_VGPR), SubReg)
.addReg(SB.TmpVGPR, getKillRegState(LastSubReg))
.addImm(i);
.addImm(i + SubRegIdx);
if (SB.NumSubRegs > 1 && i == 0)
MIB.addReg(SB.SuperReg, RegState::ImplicitDefine);
if (Indexes) {
Expand Down Expand Up @@ -3957,6 +3958,8 @@ bool SIRegisterInfo::shouldCoalesce(MachineInstr *MI,
return NewSize <= DstSize || NewSize <= SrcSize;
}

bool SIRegisterInfo::shouldEnableSubRegSpillRestore() const { return true; }

unsigned SIRegisterInfo::getRegPressureLimit(const TargetRegisterClass *RC,
MachineFunction &MF) const {
unsigned MinOcc = ST.getOccupancyWithWorkGroupSizes(MF).first;
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/AMDGPU/SIRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,8 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo {
const TargetRegisterClass *NewRC,
LiveIntervals &LIS) const override;

bool shouldEnableSubRegSpillRestore() const override;

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

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARC/ARCInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ void ARCInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
Register DestReg, int FrameIndex,
const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI,
Register VReg,
Register VReg, unsigned SubReg,
MachineInstr::MIFlag Flags) const {
DebugLoc DL = MBB.findDebugLoc(I);
MachineFunction &MF = *MBB.getParent();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARC/ARCInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class ARCInstrInfo : public ARCGenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, Register DestReg,
int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned subReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

bool
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,7 @@ Register ARMBaseInstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
void ARMBaseInstrInfo::loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator I, Register DestReg,
int FI, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI,
Register VReg, MachineInstr::MIFlag Flags) const {
Register VReg, unsigned SubReg, MachineInstr::MIFlag Flags) const {
DebugLoc DL;
if (I != MBB.end()) DL = I->getDebugLoc();
MachineFunction &MF = *MBB.getParent();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/ARMBaseInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ class ARMBaseInstrInfo : public ARMGenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
Register DestReg, int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

bool expandPostRAPseudo(MachineInstr &MI) 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 @@ -145,7 +145,7 @@ void Thumb1InstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
void Thumb1InstrInfo::loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator I, Register DestReg,
int FI, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI,
Register VReg, MachineInstr::MIFlag Flags) const {
Register VReg, unsigned SubReg, MachineInstr::MIFlag Flags) const {
assert((RC->hasSuperClassEq(&ARM::tGPRRegClass) ||
(DestReg.isPhysical() && isARMLowRegister(DestReg))) &&
"Unknown regclass!");
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/Thumb1InstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class Thumb1InstrInfo : public ARMBaseInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
Register DestReg, int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

bool canCopyGluedNodeDuringSchedule(SDNode *N) const override;
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 @@ -210,7 +210,7 @@ void Thumb2InstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
void Thumb2InstrInfo::loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator I, Register DestReg,
int FI, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI,
Register VReg, MachineInstr::MIFlag Flags) const {
Register VReg, unsigned SubReg, MachineInstr::MIFlag Flags) const {
MachineFunction &MF = *MBB.getParent();
MachineFrameInfo &MFI = MF.getFrameInfo();
MachineMemOperand *MMO = MF.getMachineMemOperand(
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/ARM/Thumb2InstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class Thumb2InstrInfo : public ARMBaseInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
Register DestReg, int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;

/// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AVR/AVRInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ void AVRInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
Register DestReg, int FrameIndex,
const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI,
Register VReg,
Register VReg, unsigned SubReg,
MachineInstr::MIFlag Flags) const {
MachineFunction &MF = *MBB.getParent();
const MachineFrameInfo &MFI = MF.getFrameInfo();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AVR/AVRInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ class AVRInstrInfo : public AVRGenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, Register DestReg,
int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;
Register isLoadFromStackSlot(const MachineInstr &MI,
int &FrameIndex) const override;
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/BPF/BPFInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ void BPFInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
void BPFInstrInfo::loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator I, Register DestReg,
int FI, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI,
Register VReg, MachineInstr::MIFlag Flags) const {
Register VReg, unsigned SubReg, MachineInstr::MIFlag Flags) const {
DebugLoc DL;
if (I != MBB.end())
DL = I->getDebugLoc();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/BPF/BPFInstrInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class BPFInstrInfo : public BPFGenInstrInfo {
void loadRegFromStackSlot(
MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
Register DestReg, int FrameIndex, const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI, Register VReg,
const TargetRegisterInfo *TRI, Register VReg, unsigned SubReg = 0,
MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;
bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
MachineBasicBlock *&FBB,
Expand Down
Loading