Skip to content

Commit b5d4fb9

Browse files
committed
implement feedback
1 parent 5a80054 commit b5d4fb9

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
@@ -482,10 +482,10 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
482482
return (LA & LB).any();
483483
}
484484
if (RegA.isPhysical() && RegB.isPhysical()) {
485-
RegA = getSubReg(RegA.asMCReg(), SubA);
486-
RegB = getSubReg(RegB.asMCReg(), SubB);
487-
assert(RegB.isValid() && RegA.isValid() && "invalid subregister");
488-
return MCRegisterInfo::regsOverlap(RegA.asMCReg(), RegB.asMCReg());
485+
MCRegister MCRegA = SubA ? getSubReg(RegA, SubA) : RegA.asMCReg();
486+
MCRegister MCRegB = SubB ? getSubReg(RegB, SubB) : RegB.asMCReg();
487+
assert(MCRegB.isValid() && MCRegA.isValid() && "invalid subregister");
488+
return MCRegisterInfo::regsOverlap(MCRegA, MCRegB);
489489
}
490490
return false;
491491
}

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
@@ -657,7 +657,7 @@ getVOP3PSourceModifierFromOpIdx(const MachineInstr *UseI, int UseOpIdx,
657657
// Get the subreg idx of the subreg that is used by the given instruction
658658
// operand, considering the given op_sel modifier.
659659
// Return 0 if the whole register is used or as a conservative fallback.
660-
static unsigned getEffectiveSubRegIdx(const SIRegisterInfo *TRI,
660+
static unsigned getEffectiveSubRegIdx(const SIRegisterInfo &TRI,
661661
const SIInstrInfo &InstrInfo,
662662
const MachineOperand &Op) {
663663
const MachineInstr *I = Op.getParent();
@@ -691,14 +691,14 @@ static unsigned getEffectiveSubRegIdx(const SIRegisterInfo *TRI,
691691
(InstrInfo.isVOP3PMix(*I) && !OpSelHi))
692692
return 0;
693693

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

697697
if (unsigned SubRegIdx = OpSel ? AMDGPU::sub1 : AMDGPU::sub0;
698-
TRI->getSubRegisterClass(RC, SubRegIdx))
698+
TRI.getSubClassWithSubReg(RC, SubRegIdx) == RC)
699699
return SubRegIdx;
700700
if (unsigned SubRegIdx = OpSel ? AMDGPU::hi16 : AMDGPU::lo16;
701-
TRI->getSubRegisterClass(RC, SubRegIdx))
701+
TRI.getSubClassWithSubReg(RC, SubRegIdx) == RC)
702702
return SubRegIdx;
703703

704704
return 0;
@@ -722,7 +722,7 @@ Register GCNSubtarget::getRealSchedDependency(const MachineInstr *DefI,
722722
unsigned DefSubRegIdx = DefOp.getSubReg();
723723
if (DefReg.isVirtual() && !DefSubRegIdx)
724724
return DefReg;
725-
unsigned UseSubRegIdx = getEffectiveSubRegIdx(TRI, InstrInfo, UseOp);
725+
unsigned UseSubRegIdx = getEffectiveSubRegIdx(*TRI, InstrInfo, UseOp);
726726
if (UseReg.isVirtual() && !UseSubRegIdx)
727727
return DefReg;
728728

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

0 commit comments

Comments
 (0)