OSDN Git Service

R600/SI: Fix SIFixSGPRCopies for copies to physical registers
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 3 Dec 2014 05:22:39 +0000 (05:22 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 3 Dec 2014 05:22:39 +0000 (05:22 +0000)
This shows up when operands required to be passed in VCC are copied
to.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223208 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIFixSGPRCopies.cpp

index 82969f6..c7e008a 100644 (file)
@@ -182,7 +182,12 @@ bool SIFixSGPRCopies::isVGPRToSGPRCopy(const MachineInstr &Copy,
   unsigned DstReg = Copy.getOperand(0).getReg();
   unsigned SrcReg = Copy.getOperand(1).getReg();
   unsigned SrcSubReg = Copy.getOperand(1).getSubReg();
-  const TargetRegisterClass *DstRC = MRI.getRegClass(DstReg);
+
+  const TargetRegisterClass *DstRC
+    = TargetRegisterInfo::isVirtualRegister(DstReg) ?
+    MRI.getRegClass(DstReg) :
+    TRI->getRegClass(DstReg);
+
   const TargetRegisterClass *SrcRC;
 
   if (!TargetRegisterInfo::isVirtualRegister(SrcReg) ||