|
@@ -692,8 +692,8 @@ void MachineInstr::eraseFromParentAndMarkDBGValuesForRemoval() {
|
|
|
for (const MachineOperand &MO : MI->operands()) {
|
|
|
if (!MO.isReg() || !MO.isDef())
|
|
|
continue;
|
|
|
- unsigned Reg = MO.getReg();
|
|
|
- if (!Register::isVirtualRegister(Reg))
|
|
|
+ Register Reg = MO.getReg();
|
|
|
+ if (!Reg.isVirtual())
|
|
|
continue;
|
|
|
MRI.markUsesInDebugValueAsUndef(Reg);
|
|
|
}
|
|
@@ -873,7 +873,7 @@ MachineInstr::getRegClassConstraint(unsigned OpIdx,
|
|
|
}
|
|
|
|
|
|
const TargetRegisterClass *MachineInstr::getRegClassConstraintEffectForVReg(
|
|
|
- unsigned Reg, const TargetRegisterClass *CurRC, const TargetInstrInfo *TII,
|
|
|
+ Register Reg, const TargetRegisterClass *CurRC, const TargetInstrInfo *TII,
|
|
|
const TargetRegisterInfo *TRI, bool ExploreBundle) const {
|
|
|
// Check every operands inside the bundle if we have
|
|
|
// been asked to.
|
|
@@ -890,7 +890,7 @@ const TargetRegisterClass *MachineInstr::getRegClassConstraintEffectForVReg(
|
|
|
}
|
|
|
|
|
|
const TargetRegisterClass *MachineInstr::getRegClassConstraintEffectForVRegImpl(
|
|
|
- unsigned OpIdx, unsigned Reg, const TargetRegisterClass *CurRC,
|
|
|
+ unsigned OpIdx, Register Reg, const TargetRegisterClass *CurRC,
|
|
|
const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) const {
|
|
|
assert(CurRC && "Invalid initial register class");
|
|
|
// Check if Reg is constrained by some of its use/def from MI.
|
|
@@ -933,7 +933,7 @@ unsigned MachineInstr::getBundleSize() const {
|
|
|
|
|
|
/// Returns true if the MachineInstr has an implicit-use operand of exactly
|
|
|
/// the given register (not considering sub/super-registers).
|
|
|
-bool MachineInstr::hasRegisterImplicitUseOperand(unsigned Reg) const {
|
|
|
+bool MachineInstr::hasRegisterImplicitUseOperand(Register Reg) const {
|
|
|
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
|
|
const MachineOperand &MO = getOperand(i);
|
|
|
if (MO.isReg() && MO.isUse() && MO.isImplicit() && MO.getReg() == Reg)
|
|
@@ -946,12 +946,12 @@ bool MachineInstr::hasRegisterImplicitUseOperand(unsigned Reg) const {
|
|
|
/// the specific register or -1 if it is not found. It further tightens
|
|
|
/// the search criteria to a use that kills the register if isKill is true.
|
|
|
int MachineInstr::findRegisterUseOperandIdx(
|
|
|
- unsigned Reg, bool isKill, const TargetRegisterInfo *TRI) const {
|
|
|
+ Register Reg, bool isKill, const TargetRegisterInfo *TRI) const {
|
|
|
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
|
|
const MachineOperand &MO = getOperand(i);
|
|
|
if (!MO.isReg() || !MO.isUse())
|
|
|
continue;
|
|
|
- unsigned MOReg = MO.getReg();
|
|
|
+ Register MOReg = MO.getReg();
|
|
|
if (!MOReg)
|
|
|
continue;
|
|
|
if (MOReg == Reg || (TRI && Reg && MOReg && TRI->regsOverlap(MOReg, Reg)))
|
|
@@ -965,7 +965,7 @@ int MachineInstr::findRegisterUseOperandIdx(
|
|
|
/// indicating if this instruction reads or writes Reg. This also considers
|
|
|
/// partial defines.
|
|
|
std::pair<bool,bool>
|
|
|
-MachineInstr::readsWritesVirtualRegister(unsigned Reg,
|
|
|
+MachineInstr::readsWritesVirtualRegister(Register Reg,
|
|
|
SmallVectorImpl<unsigned> *Ops) const {
|
|
|
bool PartDef = false; // Partial redefine.
|
|
|
bool FullDef = false; // Full define.
|
|
@@ -994,7 +994,7 @@ MachineInstr::readsWritesVirtualRegister(unsigned Reg,
|
|
|
/// that are not dead are skipped. If TargetRegisterInfo is non-null, then it
|
|
|
/// also checks if there is a def of a super-register.
|
|
|
int
|
|
|
-MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead, bool Overlap,
|
|
|
+MachineInstr::findRegisterDefOperandIdx(Register Reg, bool isDead, bool Overlap,
|
|
|
const TargetRegisterInfo *TRI) const {
|
|
|
bool isPhys = Register::isPhysicalRegister(Reg);
|
|
|
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
|
@@ -1005,7 +1005,7 @@ MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead, bool Overlap,
|
|
|
return i;
|
|
|
if (!MO.isReg() || !MO.isDef())
|
|
|
continue;
|
|
|
- unsigned MOReg = MO.getReg();
|
|
|
+ Register MOReg = MO.getReg();
|
|
|
bool Found = (MOReg == Reg);
|
|
|
if (!Found && TRI && isPhys && Register::isPhysicalRegister(MOReg)) {
|
|
|
if (Overlap)
|
|
@@ -1141,7 +1141,7 @@ void MachineInstr::clearKillInfo() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::substituteRegister(unsigned FromReg, unsigned ToReg,
|
|
|
+void MachineInstr::substituteRegister(Register FromReg, Register ToReg,
|
|
|
unsigned SubIdx,
|
|
|
const TargetRegisterInfo &RegInfo) {
|
|
|
if (Register::isPhysicalRegister(ToReg)) {
|
|
@@ -1363,7 +1363,7 @@ unsigned MachineInstr::isConstantValuePHI() const {
|
|
|
assert(getNumOperands() >= 3 &&
|
|
|
"It's illegal to have a PHI without source operands");
|
|
|
|
|
|
- unsigned Reg = getOperand(1).getReg();
|
|
|
+ Register Reg = getOperand(1).getReg();
|
|
|
for (unsigned i = 3, e = getNumOperands(); i < e; i += 2)
|
|
|
if (getOperand(i).getReg() != Reg)
|
|
|
return 0;
|
|
@@ -1779,7 +1779,7 @@ void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST,
|
|
|
OS << '\n';
|
|
|
}
|
|
|
|
|
|
-bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
|
|
|
+bool MachineInstr::addRegisterKilled(Register IncomingReg,
|
|
|
const TargetRegisterInfo *RegInfo,
|
|
|
bool AddIfNotFound) {
|
|
|
bool isPhysReg = Register::isPhysicalRegister(IncomingReg);
|
|
@@ -1798,7 +1798,7 @@ bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
|
|
|
if (MO.isDebug())
|
|
|
continue;
|
|
|
|
|
|
- unsigned Reg = MO.getReg();
|
|
|
+ Register Reg = MO.getReg();
|
|
|
if (!Reg)
|
|
|
continue;
|
|
|
|
|
@@ -1845,20 +1845,20 @@ bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
|
|
|
return Found;
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::clearRegisterKills(unsigned Reg,
|
|
|
+void MachineInstr::clearRegisterKills(Register Reg,
|
|
|
const TargetRegisterInfo *RegInfo) {
|
|
|
if (!Register::isPhysicalRegister(Reg))
|
|
|
RegInfo = nullptr;
|
|
|
for (MachineOperand &MO : operands()) {
|
|
|
if (!MO.isReg() || !MO.isUse() || !MO.isKill())
|
|
|
continue;
|
|
|
- unsigned OpReg = MO.getReg();
|
|
|
+ Register OpReg = MO.getReg();
|
|
|
if ((RegInfo && RegInfo->regsOverlap(Reg, OpReg)) || Reg == OpReg)
|
|
|
MO.setIsKill(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool MachineInstr::addRegisterDead(unsigned Reg,
|
|
|
+bool MachineInstr::addRegisterDead(Register Reg,
|
|
|
const TargetRegisterInfo *RegInfo,
|
|
|
bool AddIfNotFound) {
|
|
|
bool isPhysReg = Register::isPhysicalRegister(Reg);
|
|
@@ -1870,7 +1870,7 @@ bool MachineInstr::addRegisterDead(unsigned Reg,
|
|
|
MachineOperand &MO = getOperand(i);
|
|
|
if (!MO.isReg() || !MO.isDef())
|
|
|
continue;
|
|
|
- unsigned MOReg = MO.getReg();
|
|
|
+ Register MOReg = MO.getReg();
|
|
|
if (!MOReg)
|
|
|
continue;
|
|
|
|
|
@@ -1911,7 +1911,7 @@ bool MachineInstr::addRegisterDead(unsigned Reg,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::clearRegisterDeads(unsigned Reg) {
|
|
|
+void MachineInstr::clearRegisterDeads(Register Reg) {
|
|
|
for (MachineOperand &MO : operands()) {
|
|
|
if (!MO.isReg() || !MO.isDef() || MO.getReg() != Reg)
|
|
|
continue;
|
|
@@ -1919,7 +1919,7 @@ void MachineInstr::clearRegisterDeads(unsigned Reg) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::setRegisterDefReadUndef(unsigned Reg, bool IsUndef) {
|
|
|
+void MachineInstr::setRegisterDefReadUndef(Register Reg, bool IsUndef) {
|
|
|
for (MachineOperand &MO : operands()) {
|
|
|
if (!MO.isReg() || !MO.isDef() || MO.getReg() != Reg || MO.getSubReg() == 0)
|
|
|
continue;
|
|
@@ -1927,7 +1927,7 @@ void MachineInstr::setRegisterDefReadUndef(unsigned Reg, bool IsUndef) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::addRegisterDefined(unsigned Reg,
|
|
|
+void MachineInstr::addRegisterDefined(Register Reg,
|
|
|
const TargetRegisterInfo *RegInfo) {
|
|
|
if (Register::isPhysicalRegister(Reg)) {
|
|
|
MachineOperand *MO = findRegisterDefOperand(Reg, false, false, RegInfo);
|
|
@@ -1945,7 +1945,7 @@ void MachineInstr::addRegisterDefined(unsigned Reg,
|
|
|
true /*IsImp*/));
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::setPhysRegsDeadExcept(ArrayRef<unsigned> UsedRegs,
|
|
|
+void MachineInstr::setPhysRegsDeadExcept(ArrayRef<Register> UsedRegs,
|
|
|
const TargetRegisterInfo &TRI) {
|
|
|
bool HasRegMask = false;
|
|
|
for (MachineOperand &MO : operands()) {
|
|
@@ -1954,19 +1954,19 @@ void MachineInstr::setPhysRegsDeadExcept(ArrayRef<unsigned> UsedRegs,
|
|
|
continue;
|
|
|
}
|
|
|
if (!MO.isReg() || !MO.isDef()) continue;
|
|
|
- unsigned Reg = MO.getReg();
|
|
|
- if (!Register::isPhysicalRegister(Reg))
|
|
|
+ Register Reg = MO.getReg();
|
|
|
+ if (!Reg.isPhysical())
|
|
|
continue;
|
|
|
// If there are no uses, including partial uses, the def is dead.
|
|
|
if (llvm::none_of(UsedRegs,
|
|
|
- [&](unsigned Use) { return TRI.regsOverlap(Use, Reg); }))
|
|
|
+ [&](MCRegister Use) { return TRI.regsOverlap(Use, Reg); }))
|
|
|
MO.setIsDead();
|
|
|
}
|
|
|
|
|
|
// This is a call with a register mask operand.
|
|
|
// Mask clobbers are always dead, so add defs for the non-dead defines.
|
|
|
if (HasRegMask)
|
|
|
- for (ArrayRef<unsigned>::iterator I = UsedRegs.begin(), E = UsedRegs.end();
|
|
|
+ for (ArrayRef<Register>::iterator I = UsedRegs.begin(), E = UsedRegs.end();
|
|
|
I != E; ++I)
|
|
|
addRegisterDefined(*I, &TRI);
|
|
|
}
|
|
@@ -2010,7 +2010,7 @@ void MachineInstr::emitError(StringRef Msg) const {
|
|
|
|
|
|
MachineInstrBuilder llvm::BuildMI(MachineFunction &MF, const DebugLoc &DL,
|
|
|
const MCInstrDesc &MCID, bool IsIndirect,
|
|
|
- unsigned Reg, const MDNode *Variable,
|
|
|
+ Register Reg, const MDNode *Variable,
|
|
|
const MDNode *Expr) {
|
|
|
assert(isa<DILocalVariable>(Variable) && "not a variable");
|
|
|
assert(cast<DIExpression>(Expr)->isValid() && "not an expression");
|
|
@@ -2046,7 +2046,7 @@ MachineInstrBuilder llvm::BuildMI(MachineFunction &MF, const DebugLoc &DL,
|
|
|
MachineInstrBuilder llvm::BuildMI(MachineBasicBlock &BB,
|
|
|
MachineBasicBlock::iterator I,
|
|
|
const DebugLoc &DL, const MCInstrDesc &MCID,
|
|
|
- bool IsIndirect, unsigned Reg,
|
|
|
+ bool IsIndirect, Register Reg,
|
|
|
const MDNode *Variable, const MDNode *Expr) {
|
|
|
MachineFunction &MF = *BB.getParent();
|
|
|
MachineInstr *MI = BuildMI(MF, DL, MCID, IsIndirect, Reg, Variable, Expr);
|
|
@@ -2116,7 +2116,7 @@ void MachineInstr::collectDebugValues(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void MachineInstr::changeDebugValuesDefReg(unsigned Reg) {
|
|
|
+void MachineInstr::changeDebugValuesDefReg(Register Reg) {
|
|
|
// Collect matching debug values.
|
|
|
SmallVector<MachineInstr *, 2> DbgValues;
|
|
|
collectDebugValues(DbgValues);
|