]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers
authorThomas Schwinge <tschwinge@baylibre.com>
Wed, 31 Jan 2024 10:56:59 +0000 (11:56 +0100)
committerThomas Schwinge <tschwinge@baylibre.com>
Thu, 1 Feb 2024 15:13:28 +0000 (16:13 +0100)
Also add 'STATIC_ASSERT's for number of SGPR/VGPR/AVGPR registers (in
'#ifndef USED_FOR_TARGET', as otherwise 'STATIC_ASSERT' isn't available).

gcc/
* config/gcn/gcn.cc (gcn_hsa_declare_function_name): Don't
hard-code number of SGPR/VGPR/AVGPR registers.
* config/gcn/gcn.h: Add a 'STATIC_ASSERT's for number of
SGPR/VGPR/AVGPR registers.

gcc/config/gcn/gcn.cc
gcc/config/gcn/gcn.h

index e80de2ce056b66f86a9d6cc33f3786ca1c2b9121..20be45565462b6d399de8e9444682dd7a74c8790 100644 (file)
@@ -6585,15 +6585,15 @@ gcn_hsa_declare_function_name (FILE *file, const char *name,
 
   /* Determine count of sgpr/vgpr registers by looking for last
      one used.  */
-  for (sgpr = 101; sgpr >= 0; sgpr--)
+  for (sgpr = LAST_SGPR_REG - FIRST_SGPR_REG; sgpr >= 0; sgpr--)
     if (df_regs_ever_live_p (FIRST_SGPR_REG + sgpr))
       break;
   sgpr++;
-  for (vgpr = 255; vgpr >= 0; vgpr--)
+  for (vgpr = LAST_VGPR_REG - FIRST_VGPR_REG; vgpr >= 0; vgpr--)
     if (df_regs_ever_live_p (FIRST_VGPR_REG + vgpr))
       break;
   vgpr++;
-  for (avgpr = 255; avgpr >= 0; avgpr--)
+  for (avgpr = LAST_AVGPR_REG - FIRST_AVGPR_REG; avgpr >= 0; avgpr--)
     if (df_regs_ever_live_p (FIRST_AVGPR_REG + avgpr))
       break;
   avgpr++;
index efe3c91511e5e9aa7364b734cff9101450fb2a08..a17f16aacc404d58bc6df513f0073e9ed0a135ac 100644 (file)
 #define EXEC_HI_REG        127
 #define EXECZ_REG          128
 #define SCC_REG                    129
+
 /* 132-159 are reserved to simplify masks.  */
+
 #define FIRST_VGPR_REG     160
 #define VGPR_REGNO(N)      ((N)+FIRST_VGPR_REG)
 #define LAST_VGPR_REG      415
+
 #define FIRST_AVGPR_REG     416
 #define AVGPR_REGNO(N)      ((N)+FIRST_AVGPR_REG)
 #define LAST_AVGPR_REG      671
 
+#ifndef USED_FOR_TARGET
+STATIC_ASSERT (LAST_SGPR_REG + 1 - FIRST_SGPR_REG == 102);
+STATIC_ASSERT (LAST_VGPR_REG + 1 - FIRST_VGPR_REG == 256);
+STATIC_ASSERT (LAST_AVGPR_REG + 1 - FIRST_AVGPR_REG == 256);
+#endif /* USED_FOR_TARGET */
+
 /* Frame Registers, and other registers */
 
 #define HARD_FRAME_POINTER_REGNUM 14
 #define HARD_FRAME_POINTER_IS_ARG_POINTER   0
 #define HARD_FRAME_POINTER_IS_FRAME_POINTER 0
 
-#define SGPR_REGNO_P(N)                ((N) <= LAST_SGPR_REG)
-#define VGPR_REGNO_P(N)                ((N)>=FIRST_VGPR_REG && (N) <= LAST_VGPR_REG)
-#define AVGPR_REGNO_P(N)        ((N)>=FIRST_AVGPR_REG && (N) <= LAST_AVGPR_REG)
+#define SGPR_REGNO_P(N)                ((N) >= FIRST_SGPR_REG && (N) <= LAST_SGPR_REG)
+#define VGPR_REGNO_P(N)                ((N) >= FIRST_VGPR_REG && (N) <= LAST_VGPR_REG)
+#define AVGPR_REGNO_P(N)        ((N) >= FIRST_AVGPR_REG && (N) <= LAST_AVGPR_REG)
 #define SSRC_REGNO_P(N)                ((N) <= SCC_REG && (N) != VCCZ_REG)
 #define SDST_REGNO_P(N)                ((N) <= EXEC_HI_REG && (N) != VCCZ_REG)
 #define CC_REG_P(X)            (REG_P (X) && CC_REGNO_P (REGNO (X)))