[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

Evan Cheng evan.cheng at apple.com
Tue Mar 20 12:02:02 PDT 2007


Thanks. But please factor out the code that looks for the register  
class into a function so it can be shared between CopyToReg and  
CopyFromReg.

Evan
On Mar 20, 2007, at 9:47 AM, Lauro Ramos Venancio wrote:

>
>
> Changes in directory llvm/lib/CodeGen/SelectionDAG:
>
> ScheduleDAG.cpp updated: 1.122 -> 1.123
> ---
> Log message:
>
> CopyToReg source operand can be a physical register.
>
>
> ---
> Diffs of the changes:  (+19 -3)
>
>  ScheduleDAG.cpp |   22 +++++++++++++++++++---
>  1 files changed, 19 insertions(+), 3 deletions(-)
>
>
> Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
> diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.122 llvm/ 
> lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.123
> --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.122	Sat Feb 17  
> 00:38:37 2007
> +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp	Tue Mar 20  
> 11:46:44 2007
> @@ -475,9 +475,25 @@
>        else
>          InReg = getVR(Node->getOperand(2), VRBaseMap);
>        unsigned DestReg = cast<RegisterSDNode>(Node->getOperand(1))- 
> >getReg();
> -      if (InReg != DestReg)   // Coalesced away the copy?
> -        MRI->copyRegToReg(*BB, BB->end(), DestReg, InReg,
> -                          RegMap->getRegClass(InReg));
> +      if (InReg != DestReg)  {// Coalesced away the copy?
> +        const TargetRegisterClass *TRC = 0;
> +        // Get the target register class
> +        if (MRegisterInfo::isVirtualRegister(InReg)) {
> +          TRC = RegMap->getRegClass(InReg);
> +        } else {
> +          // Pick the register class of the right type that  
> contains this
> +          // physreg.
> +          for (MRegisterInfo::regclass_iterator I = MRI- 
> >regclass_begin(),
> +                 E = MRI->regclass_end(); I != E; ++I)
> +            if ((*I)->hasType(Node->getOperand(2).getValueType()) &&
> +                (*I)->contains(InReg)) {
> +              TRC = *I;
> +              break;
> +            }
> +          assert(TRC && "Couldn't find register class for reg  
> copy!");
> +        }
> +        MRI->copyRegToReg(*BB, BB->end(), DestReg, InReg, TRC);
> +      }
>        break;
>      }
>      case ISD::CopyFromReg: {
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list