Skip to content

Commit 517da79

Browse files
committed
implement feedback
1 parent 9b4b70e commit 517da79

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

llvm/include/llvm/CodeGen/TargetRegisterInfo.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -487,10 +487,10 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
487487
return (LA & LB).any();
488488
}
489489
if (RegA.isPhysical() && RegB.isPhysical()) {
490-
RegA = getSubReg(RegA.asMCReg(), SubA);
491-
RegB = getSubReg(RegB.asMCReg(), SubB);
492-
assert(RegB.isValid() && RegA.isValid() && "invalid subregister");
493-
return MCRegisterInfo::regsOverlap(RegA.asMCReg(), RegB.asMCReg());
490+
MCRegister MCRegA = SubA ? getSubReg(RegA, SubA) : RegA.asMCReg();
491+
MCRegister MCRegB = SubB ? getSubReg(RegB, SubB) : RegB.asMCReg();
492+
assert(MCRegB.isValid() && MCRegA.isValid() && "invalid subregister");
493+
return MCRegisterInfo::regsOverlap(MCRegA, MCRegB);
494494
}
495495
return false;
496496
}

llvm/lib/MC/MCRegisterInfo.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,8 @@ MCRegisterInfo::getMatchingSuperReg(MCRegister Reg, unsigned SubIdx,
114114
}
115115

116116
MCRegister MCRegisterInfo::getSubReg(MCRegister Reg, unsigned Idx) const {
117-
if (!Idx)
118-
return Reg;
119-
assert(Idx < getNumSubRegIndices() && "This is not a subregister index");
117+
assert(Idx && Idx < getNumSubRegIndices() &&
118+
"This is not a subregister index");
120119
// Get a pointer to the corresponding SubRegIndices list. This list has the
121120
// name of each sub-register in the same order as MCSubRegIterator.
122121
const uint16_t *SRI = SubRegIndices + get(Reg).SubRegIndices;

llvm/lib/Target/AMDGPU/GCNSubtarget.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ getVOP3PSourceModifierFromOpIdx(const MachineInstr *UseI, int UseOpIdx,
656656
// Get the subreg idx of the subreg that is used by the given instruction
657657
// operand, considering the given op_sel modifier.
658658
// Return 0 if the whole register is used or as a conservative fallback.
659-
static unsigned getEffectiveSubRegIdx(const SIRegisterInfo *TRI,
659+
static unsigned getEffectiveSubRegIdx(const SIRegisterInfo &TRI,
660660
const SIInstrInfo &InstrInfo,
661661
const MachineOperand &Op) {
662662
const MachineInstr *I = Op.getParent();
@@ -690,14 +690,14 @@ static unsigned getEffectiveSubRegIdx(const SIRegisterInfo *TRI,
690690
(InstrInfo.isVOP3PMix(*I) && !OpSelHi))
691691
return 0;
692692

693-
const TargetRegisterClass *RC =
694-
InstrInfo.getOpRegClass(*I, Op.getOperandNo());
693+
const MachineRegisterInfo &MRI = I->getParent()->getParent()->getRegInfo();
694+
const TargetRegisterClass *RC = TRI.getRegClassForOperandReg(MRI, Op);
695695

696696
if (unsigned SubRegIdx = OpSel ? AMDGPU::sub1 : AMDGPU::sub0;
697-
TRI->getSubRegisterClass(RC, SubRegIdx))
697+
TRI.getSubClassWithSubReg(RC, SubRegIdx) == RC)
698698
return SubRegIdx;
699699
if (unsigned SubRegIdx = OpSel ? AMDGPU::hi16 : AMDGPU::lo16;
700-
TRI->getSubRegisterClass(RC, SubRegIdx))
700+
TRI.getSubClassWithSubReg(RC, SubRegIdx) == RC)
701701
return SubRegIdx;
702702

703703
return 0;
@@ -721,7 +721,7 @@ Register GCNSubtarget::getRealSchedDependency(const MachineInstr *DefI,
721721
unsigned DefSubRegIdx = DefOp.getSubReg();
722722
if (DefReg.isVirtual() && !DefSubRegIdx)
723723
return DefReg;
724-
unsigned UseSubRegIdx = getEffectiveSubRegIdx(TRI, InstrInfo, UseOp);
724+
unsigned UseSubRegIdx = getEffectiveSubRegIdx(*TRI, InstrInfo, UseOp);
725725
if (UseReg.isVirtual() && !UseSubRegIdx)
726726
return DefReg;
727727

@@ -733,8 +733,10 @@ Register GCNSubtarget::getRealSchedDependency(const MachineInstr *DefI,
733733
// apply to virtual registers because we cannot construct a subreg for them.
734734
if (DefReg.isVirtual())
735735
return DefReg;
736-
MCRegister DefMCReg = TRI->getSubReg(DefReg.asMCReg(), DefSubRegIdx);
737-
MCRegister UseMCReg = TRI->getSubReg(UseReg.asMCReg(), UseSubRegIdx);
736+
MCRegister DefMCReg =
737+
DefSubRegIdx ? TRI->getSubReg(DefReg, DefSubRegIdx) : DefReg.asMCReg();
738+
MCRegister UseMCReg =
739+
UseSubRegIdx ? TRI->getSubReg(UseReg, UseSubRegIdx) : UseReg.asMCReg();
738740
const TargetRegisterClass *DefRC = TRI->getPhysRegBaseClass(DefMCReg);
739741
const TargetRegisterClass *UseRC = TRI->getPhysRegBaseClass(UseMCReg);
740742
// Some registers, such as SGPR[0-9]+_HI16, do not have a register class.

0 commit comments

Comments
 (0)