https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104879

            Bug ID: 104879
           Summary: [nvptx] Use .common directive (available starting ptx
                    isa version 5.0)
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

We currently have in the nvptx port in nvptx_option_override:
...
  /* Set flag_no_common, unless explicitly disabled.  We fake common            
     using .weak, and that's not entirely accurate, so avoid it                 
     unless forced.  */
  if (!OPTION_SET_P (flag_no_common))
    flag_no_common = 1;
...
and in nvptx_output_aligned_decl:
...
  /* If this is public, it is common.  The nearest thing we have to             
     common is weak.  */
  fprintf (file, "\t%s", TREE_PUBLIC (decl) ? ".weak " : "");
...

[ There's also some optimisation note related to .common:
...
/* Buffer needed to broadcast across workers and vectors.  This is              
   used for both worker-neutering and worker broadcasting, and                  
   vector-neutering and boardcasting when vector_length > 32.  It is            
   shared by all functions emitted.  The buffer is placed in shared             
   memory.  It'd be nice if PTX supported common blocks, because then           
   this could be shared across TUs (taking the largest size).  */
...
but I'm not sure whether this is safe, perhaps this would require a mutex to
make it safe. ]

Starting with ptx isa 5.0, we have the .common directive available in ptx.

However, it "can be used only on variables with .global storage", so it's
somewhat limited.

Reply via email to