[llvm] r260474 - [GlobalISel][MachineRegisterInfo] Add a method to create generic vregs.
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 10 16:26:32 PST 2016
> On Feb 10, 2016, at 4:19 PM, Quentin Colombet via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: qcolombet
> Date: Wed Feb 10 18:19:17 2016
> New Revision: 260474
>
> URL: http://llvm.org/viewvc/llvm-project?rev=260474&view=rev
> Log:
> [GlobalISel][MachineRegisterInfo] Add a method to create generic vregs.
> For now, generic virtual registers will not have a register class. We may want
> to change that. For instance, if we want to use all the methods from
> TargetRegisterInfo with generic virtual registers, we need to either have some
> sort of generic register classes that do what we want, or teach those methods
> how to deal with nullptr register class.
>
> Although the latter seems easy enough to do, we may still want to differenciate
> generic register classes from nullptr to catch cases where nullptr gets
> introduced by a bug of some sort.
>
> Anyway, I will file a PR to keep track of that.
This is https://llvm.org/bugs/show_bug.cgi?id=26572
>
> Modified:
> llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
> llvm/trunk/lib/CodeGen/MachineInstr.cpp
> llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h?rev=260474&r1=260473&r2=260474&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Wed Feb 10 18:19:17 2016
> @@ -596,6 +596,10 @@ public:
> /// Get the size of \p VReg or 0 if VReg is not a generic
> /// (target independent) virtual register.
> unsigned getSize(unsigned VReg) const;
> +
> + /// Create and return a new generic virtual register with a size of \p Size.
> + /// \pre Size > 0.
> + unsigned createGenericVirtualRegister(unsigned Size);
> #endif
>
> /// getNumVirtRegs - Return the number of virtual registers created.
>
> Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=260474&r1=260473&r2=260474&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Wed Feb 10 18:19:17 2016
> @@ -1838,6 +1838,11 @@ void MachineInstr::print(raw_ostream &OS
> }
> for (unsigned i = 0; i != VirtRegs.size(); ++i) {
> const TargetRegisterClass *RC = MRI->getRegClass(VirtRegs[i]);
> +#ifdef LLVM_BUILD_GLOBAL_ISEL
> + // Generic virtual registers do not have register classes.
> + if (!RC)
> + continue;
> +#endif
> OS << " " << TRI->getRegClassName(RC)
> << ':' << PrintReg(VirtRegs[i]);
> for (unsigned j = i+1; j != VirtRegs.size();) {
>
> Modified: llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp?rev=260474&r1=260473&r2=260474&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp Wed Feb 10 18:19:17 2016
> @@ -110,6 +110,22 @@ MachineRegisterInfo::getSize(unsigned VR
> VRegToSize.find(VReg);
> return SizeIt != VRegToSize.end()? SizeIt->second: 0;
> }
> +
> +unsigned
> +MachineRegisterInfo::createGenericVirtualRegister(unsigned Size) {
> + assert(Size && "Cannot create empty virtual register");
> +
> + // New virtual register number.
> + unsigned Reg = TargetRegisterInfo::index2VirtReg(getNumVirtRegs());
> + VRegInfo.grow(Reg);
> + // FIXME: Should we use a dummy register class?
> + VRegInfo[Reg].first = nullptr;
> + VRegToSize[Reg] = Size;
> + RegAllocHints.grow(Reg);
> + if (TheDelegate)
> + TheDelegate->MRI_NoteNewVirtualRegister(Reg);
> + return Reg;
> +}
> #endif // LLVM_BUILD_GLOBAL_ISEL
>
> /// clearVirtRegs - Remove all virtual registers (after physreg assignment).
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list