[gcc r12-7328] [nvptx] Add -mptx-comment

Tom de Vries vries@gcc.gnu.org
Tue Feb 22 13:53:03 GMT 2022


https://gcc.gnu.org/g:c2b23aaaf4457278403c01cd145cd3936683384e

commit r12-7328-gc2b23aaaf4457278403c01cd145cd3936683384e
Author: Tom de Vries <tdevries@suse.de>
Date:   Fri Feb 18 12:31:02 2022 +0100

    [nvptx] Add -mptx-comment
    
    Add functionality that indicates which insns are added by -minit-regs, such
    that for instance we have for pr53465.s:
    ...
            // #APP
    // 9 "gcc/testsuite/gcc.c-torture/execute/pr53465.c" 1
            // Start: Added by -minit-regs=3:
            // #NO_APP
                    mov.u32 %r26, 0;
            // #APP
    // 9 "gcc/testsuite/gcc.c-torture/execute/pr53465.c" 1
            // End: Added by -minit-regs=3:
            // #NO_APP
    ...
    
    Can be switched off using -mno-ptx-comment.
    
    Tested on nvptx.
    
    gcc/ChangeLog:
    
    2022-02-21  Tom de Vries  <tdevries@suse.de>
    
            * config/nvptx/nvptx.cc (gen_comment): New function.
            (workaround_uninit_method_1, workaround_uninit_method_2)
            (workaround_uninit_method_3): : Use gen_comment.
            * config/nvptx/nvptx.opt (mptx-comment): New option.

Diff:
---
 gcc/config/nvptx/nvptx.cc  | 42 ++++++++++++++++++++++++++++++++++++++++++
 gcc/config/nvptx/nvptx.opt |  3 +++
 2 files changed, 45 insertions(+)

diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index a37a6c78b41..981b91f7095 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -5372,6 +5372,17 @@ workaround_barsyncs (void)
 }
 #endif
 
+static rtx
+gen_comment (const char *s)
+{
+  const char *sep = " ";
+  size_t len = strlen (ASM_COMMENT_START) + strlen (sep) + strlen (s) + 1;
+  char *comment = (char *) alloca (len);
+  snprintf (comment, len, "%s%s%s", ASM_COMMENT_START, sep, s);
+  return gen_rtx_ASM_INPUT_loc (VOIDmode, ggc_strdup (comment),
+				cfun->function_start_locus);
+}
+
 /* Initialize all declared regs at function entry.
    Advantage   : Fool-proof.
    Disadvantage: Potentially creates a lot of long live ranges and adds a lot
@@ -5394,6 +5405,8 @@ workaround_uninit_method_1 (void)
       gcc_assert (CONST0_RTX (GET_MODE (reg)));
 
       start_sequence ();
+      if (nvptx_comment && first != NULL)
+	emit_insn (gen_comment ("Start: Added by -minit-regs=1"));
       emit_move_insn (reg, CONST0_RTX (GET_MODE (reg)));
       rtx_insn *inits = get_insns ();
       end_sequence ();
@@ -5411,6 +5424,9 @@ workaround_uninit_method_1 (void)
       else
 	insert_here = emit_insn_after (inits, insert_here);
     }
+
+  if (nvptx_comment && insert_here != NULL)
+    emit_insn_after (gen_comment ("End: Added by -minit-regs=1"), insert_here);
 }
 
 /* Find uses of regs that are not defined on all incoming paths, and insert a
@@ -5446,6 +5462,8 @@ workaround_uninit_method_2 (void)
       gcc_assert (CONST0_RTX (GET_MODE (reg)));
 
       start_sequence ();
+      if (nvptx_comment && first != NULL)
+	emit_insn (gen_comment ("Start: Added by -minit-regs=2:"));
       emit_move_insn (reg, CONST0_RTX (GET_MODE (reg)));
       rtx_insn *inits = get_insns ();
       end_sequence ();
@@ -5463,6 +5481,9 @@ workaround_uninit_method_2 (void)
       else
 	insert_here = emit_insn_after (inits, insert_here);
     }
+
+  if (nvptx_comment && insert_here != NULL)
+    emit_insn_after (gen_comment ("End: Added by -minit-regs=2"), insert_here);
 }
 
 /* Find uses of regs that are not defined on all incoming paths, and insert a
@@ -5531,6 +5552,27 @@ workaround_uninit_method_3 (void)
 	}
     }
 
+  if (nvptx_comment)
+    FOR_EACH_BB_FN (bb, cfun)
+      {
+	if (single_pred_p (bb))
+	  continue;
+
+	edge e;
+	edge_iterator ei;
+	FOR_EACH_EDGE (e, ei, bb->preds)
+	  {
+	    if (e->insns.r == NULL_RTX)
+	      continue;
+	    start_sequence ();
+	    emit_insn (gen_comment ("Start: Added by -minit-regs=3:"));
+	    emit_insn (e->insns.r);
+	    emit_insn (gen_comment ("End: Added by -minit-regs=3:"));
+	    e->insns.r = get_insns ();
+	    end_sequence ();
+	  }
+      }
+
   commit_edge_insertions ();
 }
 
diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt
index 08580071731..e56ec9288da 100644
--- a/gcc/config/nvptx/nvptx.opt
+++ b/gcc/config/nvptx/nvptx.opt
@@ -95,3 +95,6 @@ Specify the version of the ptx version to use.
 minit-regs=
 Target Var(nvptx_init_regs) IntegerRange(0, 3) Joined UInteger Init(3)
 Initialize ptx registers.
+
+mptx-comment
+Target Var(nvptx_comment) Init(1) Undocumented


More information about the Gcc-cvs mailing list