[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