From a91a7d594ff1e1503731ca92f72e627bdfd18f3f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 1 Jan 2008 03:07:29 +0000 Subject: [PATCH] Add a trivial but handy function to efficiently return the machine instruction that defines the specified vreg. Crazy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45480 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/MachineRegisterInfo.h | 6 ++++++ lib/CodeGen/MachineRegisterInfo.cpp | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/llvm/CodeGen/MachineRegisterInfo.h b/include/llvm/CodeGen/MachineRegisterInfo.h index 14d601f0bd4..45069a2653d 100644 --- a/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/include/llvm/CodeGen/MachineRegisterInfo.h @@ -120,6 +120,12 @@ public: return VRegInfo.size()+MRegisterInfo::FirstVirtualRegister-1; } + /// getVRegDef - Return the machine instr that defines the specified virtual + /// register or null if none is found. This assumes that the code is in SSA + /// form, so there should only be one definition. + MachineInstr *getVRegDef(unsigned Reg) const; + + //===--------------------------------------------------------------------===// // Physical Register Use Info //===--------------------------------------------------------------------===// diff --git a/lib/CodeGen/MachineRegisterInfo.cpp b/lib/CodeGen/MachineRegisterInfo.cpp index f217c042be2..b41a1e748cc 100644 --- a/lib/CodeGen/MachineRegisterInfo.cpp +++ b/lib/CodeGen/MachineRegisterInfo.cpp @@ -44,3 +44,18 @@ void MachineRegisterInfo::HandleVRegListReallocation() { List->Contents.Reg.Prev = &VRegInfo[i].second; } } + + +/// getVRegDef - Return the machine instr that defines the specified virtual +/// register or null if none is found. This assumes that the code is in SSA +/// form, so there should only be one definition. +MachineInstr *MachineRegisterInfo::getVRegDef(unsigned Reg) const { + assert(Reg-MRegisterInfo::FirstVirtualRegister < VRegInfo.size() && + "Invalid vreg!"); + for (reg_iterator I = reg_begin(Reg), E = reg_end(); I != E; ++I) { + // Since we are in SSA form, we can stop at the first definition. + if (I->isDef()) + return I->getParent(); + } + return 0; +} -- 2.34.1