forked from OSchip/llvm-project
GlobalISel: Directly expose getDefSrcRegIgnoringCopies utility
It's useful to get both the instruction and register at the same time.
This commit is contained in:
parent
8741a76f5d
commit
c67e1a985f
|
@ -151,6 +151,18 @@ const ConstantFP* getConstantFPVRegVal(Register VReg,
|
||||||
MachineInstr *getOpcodeDef(unsigned Opcode, Register Reg,
|
MachineInstr *getOpcodeDef(unsigned Opcode, Register Reg,
|
||||||
const MachineRegisterInfo &MRI);
|
const MachineRegisterInfo &MRI);
|
||||||
|
|
||||||
|
/// Simple struct used to hold a Register value and the instruction which
|
||||||
|
/// defines it.
|
||||||
|
struct DefinitionAndSourceRegister {
|
||||||
|
MachineInstr *MI;
|
||||||
|
Register Reg;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Find the def instruction for \p Reg, and underlying value Register folding
|
||||||
|
/// away any copies.
|
||||||
|
Optional<DefinitionAndSourceRegister>
|
||||||
|
getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI);
|
||||||
|
|
||||||
/// Find the def instruction for \p Reg, folding away any trivial copies. May
|
/// Find the def instruction for \p Reg, folding away any trivial copies. May
|
||||||
/// return nullptr if \p Reg is not a generic virtual register.
|
/// return nullptr if \p Reg is not a generic virtual register.
|
||||||
MachineInstr *getDefIgnoringCopies(Register Reg,
|
MachineInstr *getDefIgnoringCopies(Register Reg,
|
||||||
|
|
|
@ -351,15 +351,8 @@ llvm::getConstantFPVRegVal(Register VReg, const MachineRegisterInfo &MRI) {
|
||||||
return MI->getOperand(1).getFPImm();
|
return MI->getOperand(1).getFPImm();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
Optional<DefinitionAndSourceRegister>
|
||||||
struct DefinitionAndSourceRegister {
|
llvm::getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) {
|
||||||
MachineInstr *MI;
|
|
||||||
Register Reg;
|
|
||||||
};
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
static Optional<DefinitionAndSourceRegister>
|
|
||||||
getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) {
|
|
||||||
Register DefSrcReg = Reg;
|
Register DefSrcReg = Reg;
|
||||||
auto *DefMI = MRI.getVRegDef(Reg);
|
auto *DefMI = MRI.getVRegDef(Reg);
|
||||||
auto DstTy = MRI.getType(DefMI->getOperand(0).getReg());
|
auto DstTy = MRI.getType(DefMI->getOperand(0).getReg());
|
||||||
|
|
Loading…
Reference in New Issue