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,
|
||||
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
|
||||
/// return nullptr if \p Reg is not a generic virtual register.
|
||||
MachineInstr *getDefIgnoringCopies(Register Reg,
|
||||
|
|
|
@ -351,15 +351,8 @@ llvm::getConstantFPVRegVal(Register VReg, const MachineRegisterInfo &MRI) {
|
|||
return MI->getOperand(1).getFPImm();
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct DefinitionAndSourceRegister {
|
||||
MachineInstr *MI;
|
||||
Register Reg;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static Optional<DefinitionAndSourceRegister>
|
||||
getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) {
|
||||
Optional<DefinitionAndSourceRegister>
|
||||
llvm::getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) {
|
||||
Register DefSrcReg = Reg;
|
||||
auto *DefMI = MRI.getVRegDef(Reg);
|
||||
auto DstTy = MRI.getType(DefMI->getOperand(0).getReg());
|
||||
|
|
Loading…
Reference in New Issue