From ff812668636bce9d203acbcbdc19260f98857e03 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge 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