]> granicus.if.org Git - llvm/commitdiff
AMDGPU/GlobalISel: Tolerate copies with no type set
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 1 Jul 2019 15:23:04 +0000 (15:23 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 1 Jul 2019 15:23:04 +0000 (15:23 +0000)
isVCC has the same bug, but isn't used in a context where it can cause
a problem.

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

lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
test/CodeGen/AMDGPU/GlobalISel/inst-select-copy.mir

index 3e7cd2de89d7758dde3c388223f1a4a38a820391..7ea1a67efecfdcb7b4e4240f1520d37aae6b35d1 100644 (file)
@@ -65,9 +65,12 @@ static bool isSCC(unsigned Reg, const MachineRegisterInfo &MRI) {
   auto &RegClassOrBank = MRI.getRegClassOrRegBank(Reg);
   const TargetRegisterClass *RC =
       RegClassOrBank.dyn_cast<const TargetRegisterClass*>();
-  if (RC)
-    return RC->getID() == AMDGPU::SReg_32_XM0RegClassID &&
-           MRI.getType(Reg).getSizeInBits() == 1;
+  if (RC) {
+    if (RC->getID() != AMDGPU::SReg_32_XM0RegClassID)
+      return false;
+    const LLT Ty = MRI.getType(Reg);
+    return Ty.isValid() && Ty.getSizeInBits() == 1;
+  }
 
   const RegisterBank *RB = RegClassOrBank.get<const RegisterBank *>();
   return RB->getID() == AMDGPU::SCCRegBankID;
index 2cf975da5f1551cfe04b995033c95afadaead5be..59d083f2e39b66aab5c86271a31228a7fe7c905e 100644 (file)
@@ -138,3 +138,59 @@ body: |
     %5:vgpr(s32) = G_SELECT %3, %1, %2
     G_STORE %5, %0 :: (store 4, addrspace 1)
 ...
+---
+
+name:            copy_sgpr_no_type
+legalized:       true
+regBankSelected: true
+
+
+body: |
+  bb.0:
+    liveins: $sgpr0
+    ; GCN-LABEL: name: copy_sgpr_no_type
+    ; GCN: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0
+    ; GCN: S_ENDPGM 0, implicit [[COPY]]
+    %0:sreg_32_xm0 = COPY $sgpr0
+    %1:sreg_32_xm0 = COPY %0
+    S_ENDPGM 0, implicit %1
+
+...
+
+---
+
+name:            copy_vgpr_no_type
+legalized:       true
+regBankSelected: true
+
+
+body: |
+  bb.0:
+    liveins: $vgpr0
+    ; GCN-LABEL: name: copy_vgpr_no_type
+    ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+    ; GCN: S_ENDPGM 0, implicit [[COPY]]
+    %0:vgpr_32 = COPY $vgpr0
+    %1:vgpr_32 = COPY %0
+    S_ENDPGM 0, implicit %1
+
+...
+
+---
+
+name:            copy_maybe_vcc
+legalized:       true
+regBankSelected: true
+
+
+body: |
+  bb.0:
+    liveins: $sgpr0_sgpr1
+    ; GCN-LABEL: name: copy_maybe_vcc
+    ; GCN: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr0_sgpr1
+    ; GCN: S_ENDPGM 0, implicit [[COPY]]
+    %0:sreg_64_xexec = COPY $sgpr0_sgpr1
+    %1:sreg_64_xexec  = COPY %0
+    S_ENDPGM 0, implicit %1
+
+...