]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Use GFX9 granulated sgprs count correctly.
authorAndrew Stubbs <ams@codesourcery.com>
Fri, 19 Jul 2019 16:06:50 +0000 (17:06 +0100)
committerThomas Schwinge <thomas@codesourcery.com>
Tue, 3 Mar 2020 11:51:25 +0000 (12:51 +0100)
2019-09-10  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/gcn/gcn.c (gcn_hsa_declare_function_name): Calculate
granulated_sgprs according to architecture.

(cherry picked from openacc-gcc-9-branch commit
68e905b7879641dbae193cec7db71e62b48145c1)

gcc/ChangeLog.omp
gcc/config/gcn/gcn.c

index c44cffb10413508de004e124c873dbc01541d081..7a3cc7f5491e9e257a46218475b90f34a39b496c 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-10  Andrew Stubbs  <ams@codesourcery.com>
+
+       * config/gcn/gcn.c (gcn_hsa_declare_function_name): Calculate
+       granulated_sgprs according to architecture.
+
 2019-09-09  Andrew Stubbs  <ams@codesourcery.com>
 
        * config/gcn/gcn-run.c (heap_region): New global variable.
index 66854b6f9c5d6b6324382c25efcd7cbdcec39337..f8434e4a4f116618510da46ff10f47bae3cc6d77 100644 (file)
@@ -4884,6 +4884,14 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree)
        sgpr = 102 - extra_regs;
     }
 
+  /* GFX8 allocates SGPRs in blocks of 8.
+     GFX9 uses blocks of 16.  */
+  int granulated_sgprs;
+  if (TARGET_GCN3)
+    granulated_sgprs = (sgpr + extra_regs + 7) / 8 - 1;
+  else if (TARGET_GCN5)
+    granulated_sgprs = 2 * ((sgpr + extra_regs + 15) / 16 - 1);
+
   fputs ("\t.align\t256\n", file);
   fputs ("\t.type\t", file);
   assemble_name (file, name);
@@ -4922,7 +4930,7 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, tree)
           "\t\tcompute_pgm_rsrc2_excp_en = 0\n",
           (vgpr - 1) / 4,
           /* Must match wavefront_sgpr_count */
-          (sgpr + extra_regs + 7) / 8 - 1,
+          granulated_sgprs,
           /* The total number of SGPR user data registers requested.  This
              number must match the number of user data registers enabled.  */
           cfun->machine->args.nsgprs);