diff mbox series

GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers (was: [PATCH v3 05/10] GCN back-end code)

Message ID 87jzno9twv.fsf@euler.schwinge.ddns.net
State New
Headers show
Series GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers (was: [PATCH v3 05/10] GCN back-end code) | expand

Commit Message

Thomas Schwinge Feb. 1, 2024, 1:49 p.m. UTC
Hi!

On 2018-12-12T11:52:52+0000, Andrew Stubbs <ams@codesourcery.com> wrote:
> This patch contains the major part of the GCN back-end.  [...]

> --- /dev/null
> +++ b/gcc/config/gcn/gcn.c

> +void
> +gcn_hsa_declare_function_name (FILE *file, const char *name, tree)
> +{

> +  /* Determine count of sgpr/vgpr registers by looking for last
> +     one used.  */
> +  for (sgpr = 101; sgpr >= 0; sgpr--)
> +    if (df_regs_ever_live_p (FIRST_SGPR_REG + sgpr))
> +      break;
> +  sgpr++;
> +  for (vgpr = 255; vgpr >= 0; vgpr--)
> +    if (df_regs_ever_live_p (FIRST_VGPR_REG + vgpr))
> +      break;
> +  vgpr++;

> --- /dev/null
> +++ b/gcc/config/gcn/gcn.h

> +#define FIRST_SGPR_REG	    0
> +#define SGPR_REGNO(N)	    ((N)+FIRST_SGPR_REG)
> +#define LAST_SGPR_REG	    101

> +#define FIRST_VGPR_REG	    160
> +#define VGPR_REGNO(N)	    ((N)+FIRST_VGPR_REG)
> +#define LAST_VGPR_REG	    415

OK to push "GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers",
see attached?


Grüße
 Thomas

Comments

Andrew Stubbs Feb. 1, 2024, 2:45 p.m. UTC | #1
On 01/02/2024 13:49, Thomas Schwinge wrote:
> Hi!
> 
> On 2018-12-12T11:52:52+0000, Andrew Stubbs <ams@codesourcery.com> wrote:
>> This patch contains the major part of the GCN back-end.  [...]
> 
>> --- /dev/null
>> +++ b/gcc/config/gcn/gcn.c
> 
>> +void
>> +gcn_hsa_declare_function_name (FILE *file, const char *name, tree)
>> +{
> 
>> +  /* Determine count of sgpr/vgpr registers by looking for last
>> +     one used.  */
>> +  for (sgpr = 101; sgpr >= 0; sgpr--)
>> +    if (df_regs_ever_live_p (FIRST_SGPR_REG + sgpr))
>> +      break;
>> +  sgpr++;
>> +  for (vgpr = 255; vgpr >= 0; vgpr--)
>> +    if (df_regs_ever_live_p (FIRST_VGPR_REG + vgpr))
>> +      break;
>> +  vgpr++;
> 
>> --- /dev/null
>> +++ b/gcc/config/gcn/gcn.h
> 
>> +#define FIRST_SGPR_REG	    0
>> +#define SGPR_REGNO(N)	    ((N)+FIRST_SGPR_REG)
>> +#define LAST_SGPR_REG	    101
> 
>> +#define FIRST_VGPR_REG	    160
>> +#define VGPR_REGNO(N)	    ((N)+FIRST_VGPR_REG)
>> +#define LAST_VGPR_REG	    415
> 
> OK to push "GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers",
> see attached?

OK.

Andrew
diff mbox series

Patch

From ff812668636bce9d203acbcbdc19260f98857e03 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <tschwinge@baylibre.com>
Date: Wed, 31 Jan 2024 11:56:59 +0100
Subject: [PATCH] GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers

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 |  6 +++---
 gcc/config/gcn/gcn.h  | 15 ++++++++++++---
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
index 9d3ae2ff1110..c56576ffd9a4 100644
--- a/gcc/config/gcn/gcn.cc
+++ b/gcc/config/gcn/gcn.cc
@@ -6584,15 +6584,15 @@  gcn_hsa_declare_function_name (FILE *file, const char *name, tree decl)
 
   /* 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++;
diff --git a/gcc/config/gcn/gcn.h b/gcc/config/gcn/gcn.h
index efe3c91511e5..a17f16aacc40 100644
--- a/gcc/config/gcn/gcn.h
+++ b/gcc/config/gcn/gcn.h
@@ -146,14 +146,23 @@ 
 #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
@@ -180,9 +189,9 @@ 
 #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)))
-- 
2.43.0