AMDGPU/GlobalISel: Fix selecting vcc->vcc bank copies

The extra test change is correct, although how it arrives there is a
bug that needs work. With wave32, the test for isVCC ambiguously
reports true for an SCC or VCC source. A new allocatable pseudo
register class for SCC may be necesssary.

llvm-svn: 366119
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
index f916154..f5a742b 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
@@ -116,18 +116,20 @@
       return RBI.constrainGenericRegister(DstReg, *RC, MRI);
     }
 
-    // TODO: Should probably leave the copy and let copyPhysReg expand it.
-    if (!RBI.constrainGenericRegister(DstReg, *TRI.getBoolRC(), MRI))
-      return false;
+    if (!isVCC(SrcReg, MRI)) {
+      // TODO: Should probably leave the copy and let copyPhysReg expand it.
+      if (!RBI.constrainGenericRegister(DstReg, *TRI.getBoolRC(), MRI))
+        return false;
 
-    BuildMI(*BB, &I, DL, TII.get(AMDGPU::V_CMP_NE_U32_e64), DstReg)
-      .addImm(0)
-      .addReg(SrcReg);
+      BuildMI(*BB, &I, DL, TII.get(AMDGPU::V_CMP_NE_U32_e64), DstReg)
+        .addImm(0)
+        .addReg(SrcReg);
 
-    if (!MRI.getRegClassOrNull(SrcReg))
-      MRI.setRegClass(SrcReg, TRI.getConstrainedRegClassForOperand(Src, MRI));
-    I.eraseFromParent();
-    return true;
+      if (!MRI.getRegClassOrNull(SrcReg))
+        MRI.setRegClass(SrcReg, TRI.getConstrainedRegClassForOperand(Src, MRI));
+      I.eraseFromParent();
+      return true;
+    }
   }
 
   for (const MachineOperand &MO : I.operands()) {