[amdgcn] Fix handling of VCC_CONDITIONAL_REG
authorKwok Cheung Yeung <kcy@codesourcery.com>
Fri, 15 Nov 2019 12:54:40 +0000 (12:54 +0000)
committerKwok Cheung Yeung <kcy@gcc.gnu.org>
Fri, 15 Nov 2019 12:54:40 +0000 (12:54 +0000)
Classify vcc_lo and vcc_hi into the VCC_CONDITIONAL_REG class,
and spill them into SGPRs if necessary.

2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/
* config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG
register class for VCC_LO and VCC_HI.
(gcn_spill_class): Use SGPR_REGS to spill registers in
VCC_CONDITIONAL_REG.

From-SVN: r278290

gcc/ChangeLog
gcc/config/gcn/gcn.c

index 5eb21e7e4a8fd4750557c16ada2b8f0471163ccc..d44f5a3fce0d1aeef2eb28821af2635c638275d5 100644 (file)
@@ -1,3 +1,10 @@
+2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+       * config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG
+       register class for VCC_LO and VCC_HI.
+       (gcn_spill_class): Use SGPR_REGS to spill registers in
+       VCC_CONDITIONAL_REG.
+
 2019-11-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/92324
index 20534a2fbe67898df8e1b4e0b4fbddbc99354f37..f12d06d5e8764cf7df8233570a14891eec0cf7dd 100644 (file)
@@ -462,6 +462,9 @@ gcn_regno_reg_class (int regno)
     {
     case SCC_REG:
       return SCC_CONDITIONAL_REG;
+    case VCC_LO_REG:
+    case VCC_HI_REG:
+      return VCC_CONDITIONAL_REG;
     case VCCZ_REG:
       return VCCZ_CONDITIONAL_REG;
     case EXECZ_REG:
@@ -629,7 +632,8 @@ gcn_can_split_p (machine_mode, rtx op)
 static reg_class_t
 gcn_spill_class (reg_class_t c, machine_mode /*mode */ )
 {
-  if (reg_classes_intersect_p (ALL_CONDITIONAL_REGS, c))
+  if (reg_classes_intersect_p (ALL_CONDITIONAL_REGS, c)
+      || c == VCC_CONDITIONAL_REG)
     return SGPR_REGS;
   else
     return NO_REGS;