[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.
This commit is contained in:
Tom de Vries 2022-02-18 12:31:02 +01:00
parent d669237f7d
commit c2b23aaaf4
2 changed files with 45 additions and 0 deletions

View file

@ -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 ();
}

View file

@ -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