GCN: Don't hard-code number of SGPR/VGPR/AVGPR registers (was: [PATCH v3 05/10] GCN back-end code)
Checks
Commit Message
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
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
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(-)
@@ -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++;
@@ -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