]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
amdgcn: Fix VGPR max count
authorAndrew Stubbs <ams@baylibre.com>
Wed, 7 Aug 2024 15:35:18 +0000 (15:35 +0000)
committerAndrew Stubbs <ams@baylibre.com>
Thu, 8 Aug 2024 16:28:13 +0000 (16:28 +0000)
The metadata for RDNA3 kernels allocates VGPRs in blocks of 12, which means the
maximum usable number of registers is 252.  This patch prevents the compiler
from exceeding this artifical limit.

gcc/ChangeLog:

* config/gcn/gcn.cc (gcn_conditional_register_usage): Fix registers
remaining after maximum allocation using TARGET_VGPR_GRANULARITY.

gcc/config/gcn/gcn.cc

index b22132de6ab79837ecffecf48b34f3848610a2a7..0725d15c8ed0d671a45ff239c4b66fc886ee7281 100644 (file)
@@ -2493,6 +2493,13 @@ gcn_secondary_reload (bool in_p, rtx x, reg_class_t rclass,
 static void
 gcn_conditional_register_usage (void)
 {
+  /* Some architectures have a register allocation granularity that does not
+     permit use of the full register count.  */
+  for (int i = 256 - (256 % TARGET_VGPR_GRANULARITY);
+       i < 256;
+       i++)
+    fixed_regs[VGPR_REGNO (i)] = call_used_regs[VGPR_REGNO (i)] = 1;
+
   if (!cfun || !cfun->machine)
     return;