Skip to content

Commit 8d71a75

Browse files
author
Evan Cheng
committed
More refactoring. Move getRegClass from TargetOperandInfo to TargetInstrInfo.
llvm-svn: 133944
1 parent d68b2d0 commit 8d71a75

18 files changed

+54
-63
lines changed

llvm/include/llvm/Target/TargetInstrDesc.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ class TargetOperandInfo {
5252
/// if the operand is a register. If isLookupPtrRegClass is set, then this is
5353
/// an index that is passed to TargetRegisterInfo::getPointerRegClass(x) to
5454
/// get a dynamic register class.
55-
///
56-
/// NOTE: This member should be considered to be private, all access should go
57-
/// through "getRegClass(TRI)" below.
5855
short RegClass;
5956

6057
/// Flags - These are flags from the TOI::OperandFlags enum.
@@ -65,12 +62,6 @@ class TargetOperandInfo {
6562
unsigned Constraints;
6663
/// Currently no other information.
6764

68-
/// getRegClass - Get the register class for the operand, handling resolution
69-
/// of "symbolic" pointer register classes etc. If this is not a register
70-
/// operand, this returns null.
71-
const TargetRegisterClass *getRegClass(const TargetRegisterInfo *TRI) const;
72-
73-
7465
/// isLookupPtrRegClass - Set if this operand is a pointer value and it
7566
/// requires a callback to look up its register class.
7667
bool isLookupPtrRegClass() const { return Flags&(1 <<TOI::LookupPtrRegClass);}
@@ -154,12 +145,6 @@ class TargetInstrDesc {
154145
return -1;
155146
}
156147

157-
/// getRegClass - Returns the register class constraint for OpNum, or NULL.
158-
const TargetRegisterClass *getRegClass(unsigned OpNum,
159-
const TargetRegisterInfo *TRI) const {
160-
return OpNum < NumOperands ? OpInfo[OpNum].getRegClass(TRI) : 0;
161-
}
162-
163148
/// getOpcode - Return the opcode number for this descriptor.
164149
unsigned getOpcode() const {
165150
return Opcode;

llvm/include/llvm/Target/TargetInstrInfo.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ class TargetInstrInfo {
6060
return Descriptors[Opcode];
6161
}
6262

63+
/// getRegClass - Givem a machine instruction descriptor, returns the register
64+
/// class constraint for OpNum, or NULL.
65+
const TargetRegisterClass *getRegClass(const TargetInstrDesc &TID,
66+
unsigned OpNum,
67+
const TargetRegisterInfo *TRI) const;
68+
6369
/// isTriviallyReMaterializable - Return true if the instruction is trivially
6470
/// rematerializable, meaning it has no side effects and requires no operands
6571
/// that aren't always available.

llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ void AggressiveAntiDepBreaker::PrescanInstruction(MachineInstr *MI,
404404
// Note register reference...
405405
const TargetRegisterClass *RC = NULL;
406406
if (i < MI->getDesc().getNumOperands())
407-
RC = MI->getDesc().OpInfo[i].getRegClass(TRI);
407+
RC = TII->getRegClass(MI->getDesc(), i, TRI);
408408
AggressiveAntiDepState::RegisterReference RR = { &MO, RC };
409409
RegRefs.insert(std::make_pair(Reg, RR));
410410
}
@@ -479,7 +479,7 @@ void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr *MI,
479479
// Note register reference...
480480
const TargetRegisterClass *RC = NULL;
481481
if (i < MI->getDesc().getNumOperands())
482-
RC = MI->getDesc().OpInfo[i].getRegClass(TRI);
482+
RC = TII->getRegClass(MI->getDesc(), i, TRI);
483483
AggressiveAntiDepState::RegisterReference RR = { &MO, RC };
484484
RegRefs.insert(std::make_pair(Reg, RR));
485485
}

llvm/lib/CodeGen/CalcSpillWeights.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ void VirtRegAuxInfo::CalculateWeightAndHint(LiveInterval &li) {
188188

189189
void VirtRegAuxInfo::CalculateRegClass(unsigned reg) {
190190
MachineRegisterInfo &MRI = MF.getRegInfo();
191+
const TargetInstrInfo *TII = MF.getTarget().getInstrInfo();
191192
const TargetRegisterInfo *TRI = MF.getTarget().getRegisterInfo();
192193
const TargetRegisterClass *OldRC = MRI.getRegClass(reg);
193194
const TargetRegisterClass *NewRC = TRI->getLargestLegalSuperClass(OldRC);
@@ -203,7 +204,7 @@ void VirtRegAuxInfo::CalculateRegClass(unsigned reg) {
203204
if (I.getOperand().getSubReg())
204205
return;
205206
const TargetRegisterClass *OpRC =
206-
I->getDesc().getRegClass(I.getOperandNo(), TRI);
207+
TII->getRegClass(I->getDesc(), I.getOperandNo(), TRI);
207208
if (OpRC)
208209
NewRC = getCommonSubClass(NewRC, OpRC);
209210
if (!NewRC || NewRC == OldRC)

llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ void CriticalAntiDepBreaker::PrescanInstruction(MachineInstr *MI) {
207207
const TargetRegisterClass *NewRC = 0;
208208

209209
if (i < MI->getDesc().getNumOperands())
210-
NewRC = MI->getDesc().OpInfo[i].getRegClass(TRI);
210+
NewRC = TII->getRegClass(MI->getDesc(), i, TRI);
211211

212212
// For now, only allow the register to be changed if its register
213213
// class is consistent across all uses.
@@ -295,7 +295,7 @@ void CriticalAntiDepBreaker::ScanInstruction(MachineInstr *MI,
295295

296296
const TargetRegisterClass *NewRC = 0;
297297
if (i < MI->getDesc().getNumOperands())
298-
NewRC = MI->getDesc().OpInfo[i].getRegClass(TRI);
298+
NewRC = TII->getRegClass(MI->getDesc(), i, TRI);
299299

300300
// For now, only allow the register to be changed if its register
301301
// class is consistent across all uses.

llvm/lib/CodeGen/MachineLICM.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ MachineInstr *MachineLICM::ExtractHoistableLoad(MachineInstr *MI) {
10201020
if (NewOpc == 0) return 0;
10211021
const TargetInstrDesc &TID = TII->get(NewOpc);
10221022
if (TID.getNumDefs() != 1) return 0;
1023-
const TargetRegisterClass *RC = TID.OpInfo[LoadRegIndex].getRegClass(TRI);
1023+
const TargetRegisterClass *RC = TII->getRegClass(TID, LoadRegIndex, TRI);
10241024
// Ok, we're unfolding. Create a temporary register and do the unfold.
10251025
unsigned Reg = MRI->createVirtualRegister(RC);
10261026

llvm/lib/CodeGen/MachineVerifier.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ namespace {
6262
raw_ostream *OS;
6363
const MachineFunction *MF;
6464
const TargetMachine *TM;
65+
const TargetInstrInfo *TII;
6566
const TargetRegisterInfo *TRI;
6667
const MachineRegisterInfo *MRI;
6768

@@ -255,6 +256,7 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
255256

256257
this->MF = &MF;
257258
TM = &MF.getTarget();
259+
TII = TM->getInstrInfo();
258260
TRI = TM->getRegisterInfo();
259261
MRI = &MF.getRegInfo();
260262

@@ -387,8 +389,6 @@ static bool matchPair(MachineBasicBlock::const_succ_iterator i,
387389

388390
void
389391
MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
390-
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
391-
392392
// Count the number of landing pad successors.
393393
SmallPtrSet<MachineBasicBlock*, 4> LandingPadSuccs;
394394
for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(),
@@ -723,7 +723,7 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
723723
}
724724
sr = s;
725725
}
726-
if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) {
726+
if (const TargetRegisterClass *DRC = TII->getRegClass(TI, MONum, TRI)) {
727727
if (!DRC->contains(sr)) {
728728
report("Illegal physical register for instruction", MO, MONum);
729729
*OS << TRI->getName(sr) << " is not a "
@@ -743,7 +743,7 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
743743
}
744744
RC = SRC;
745745
}
746-
if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) {
746+
if (const TargetRegisterClass *DRC = TII->getRegClass(TI, MONum, TRI)) {
747747
if (!RC->hasSuperClassEq(DRC)) {
748748
report("Illegal virtual register for instruction", MO, MONum);
749749
*OS << "Expected a " << DRC->getName() << " register, but got a "

llvm/lib/CodeGen/RegisterCoalescer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ bool RegisterCoalescer::ReMaterializeTrivialDef(LiveInterval &SrcInt,
701701
// Make sure the copy destination register class fits the instruction
702702
// definition register class. The mismatch can happen as a result of earlier
703703
// extract_subreg, insert_subreg, subreg_to_reg coalescing.
704-
const TargetRegisterClass *RC = TID.OpInfo[0].getRegClass(tri_);
704+
const TargetRegisterClass *RC = tii_->getRegClass(TID, 0, tri_);
705705
if (TargetRegisterInfo::isVirtualRegister(DstReg)) {
706706
if (mri_->getRegClass(DstReg) != RC)
707707
return false;
@@ -718,7 +718,7 @@ bool RegisterCoalescer::ReMaterializeTrivialDef(LiveInterval &SrcInt,
718718
const TargetRegisterClass *DstRC = mri_->getRegClass(DstReg);
719719
const TargetRegisterClass *DstSubRC =
720720
DstRC->getSubRegisterRegClass(DstSubIdx);
721-
const TargetRegisterClass *DefRC = TID.OpInfo[0].getRegClass(tri_);
721+
const TargetRegisterClass *DefRC = tii_->getRegClass(TID, 0, tri_);
722722
if (DefRC == DstRC)
723723
DstSubIdx = 0;
724724
else if (DefRC != DstSubRC)

llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone, bool IsCloned,
109109
const TargetInstrDesc &II = TII->get(User->getMachineOpcode());
110110
const TargetRegisterClass *RC = 0;
111111
if (i+II.getNumDefs() < II.getNumOperands())
112-
RC = II.OpInfo[i+II.getNumDefs()].getRegClass(TRI);
112+
RC = TII->getRegClass(II, i+II.getNumDefs(), TRI);
113113
if (!UseRC)
114114
UseRC = RC;
115115
else if (RC) {
@@ -189,7 +189,7 @@ void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
189189
// is a vreg in the same register class, use the CopyToReg'd destination
190190
// register instead of creating a new vreg.
191191
unsigned VRBase = 0;
192-
const TargetRegisterClass *RC = II.OpInfo[i].getRegClass(TRI);
192+
const TargetRegisterClass *RC = TII->getRegClass(II, i, TRI);
193193
if (II.OpInfo[i].isOptionalDef()) {
194194
// Optional def must be a physical register.
195195
unsigned NumResults = CountResults(Node);
@@ -285,7 +285,7 @@ InstrEmitter::AddRegisterOperand(MachineInstr *MI, SDValue Op,
285285
const TargetRegisterClass *SrcRC = MRI->getRegClass(VReg);
286286
const TargetRegisterClass *DstRC = 0;
287287
if (IIOpNum < II->getNumOperands())
288-
DstRC = II->OpInfo[IIOpNum].getRegClass(TRI);
288+
DstRC = TII->getRegClass(*II, IIOpNum, TRI);
289289
assert((DstRC || (TID.isVariadic() && IIOpNum >= TID.getNumOperands())) &&
290290
"Don't have operand info for this instruction!");
291291
if (DstRC && !SrcRC->hasSuperClassEq(DstRC)) {

llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ static void GetCostForDef(const ScheduleDAGSDNodes::RegDefIter &RegDefPos,
303303

304304
unsigned Idx = RegDefPos.GetIdx();
305305
const TargetInstrDesc Desc = TII->get(Opcode);
306-
const TargetRegisterClass *RC = Desc.getRegClass(Idx, TRI);
306+
const TargetRegisterClass *RC = TII->getRegClass(Desc, Idx, TRI);
307307
RegClass = RC->getID();
308308
// FIXME: Cost arbitrarily set to 1 because there doesn't seem to be a
309309
// better way to determine it.

0 commit comments

Comments
 (0)