Hi,

For the nvptx port, with -mptx-comment we have in 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
...

The comments where generated using the compiler-generated equivalent of:
...
  asm ("// Comment");
...
but both the printed location and the NO_APP/APP are unnecessary for a
compiler-generated asm insn.

Fix this by handling ASM_INPUT_SOURCE_LOCATION == UNKNOWN_LOCATION in
final_scan_insn_1, such what we simply get:
...
        // Start: Added by -minit-regs=3:
                mov.u32 %r26, 0;
        // End: Added by -minit-regs=3:
...

Tested on nvptx.

OK for trunk?

Thanks,
- Tom

[final] Handle compiler-generated asm insn

gcc/ChangeLog:

2022-02-21  Tom de Vries  <tdevr...@suse.de>

        PR rtl-optimization/104596
        * config/nvptx/nvptx.cc (gen_comment): Use gen_rtx_ASM_INPUT instead
        of gen_rtx_ASM_INPUT_loc.
        * final.cc (final_scan_insn_1): Handle
        ASM_INPUT_SOURCE_LOCATION == UNKNOWN_LOCATION.

---
 gcc/config/nvptx/nvptx.cc |  3 +--
 gcc/final.cc              | 17 +++++++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index 858789e6df7..4124c597f24 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -5381,8 +5381,7 @@ gen_comment (const char *s)
   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);
+  return gen_rtx_ASM_INPUT (VOIDmode, ggc_strdup (comment));
 }
 
 /* Initialize all declared regs at function entry.
diff --git a/gcc/final.cc b/gcc/final.cc
index a9868861bd2..e6443ef7a4f 100644
--- a/gcc/final.cc
+++ b/gcc/final.cc
@@ -2642,15 +2642,20 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int 
optimize_p ATTRIBUTE_UNUSED,
            if (string[0])
              {
                expanded_location loc;
+               bool unknown_loc_p
+                 = ASM_INPUT_SOURCE_LOCATION (body) == UNKNOWN_LOCATION;
 
-               app_enable ();
-               loc = expand_location (ASM_INPUT_SOURCE_LOCATION (body));
-               if (*loc.file && loc.line)
-                 fprintf (asm_out_file, "%s %i \"%s\" 1\n",
-                          ASM_COMMENT_START, loc.line, loc.file);
+               if (!unknown_loc_p)
+                 {
+                   app_enable ();
+                   loc = expand_location (ASM_INPUT_SOURCE_LOCATION (body));
+                   if (*loc.file && loc.line)
+                     fprintf (asm_out_file, "%s %i \"%s\" 1\n",
+                              ASM_COMMENT_START, loc.line, loc.file);
+                 }
                fprintf (asm_out_file, "\t%s\n", string);
 #if HAVE_AS_LINE_ZERO
-               if (*loc.file && loc.line)
+               if (!unknown_loc_p && loc.file && *loc.file && loc.line)
                  fprintf (asm_out_file, "%s 0 \"\" 2\n", ASM_COMMENT_START);
 #endif
              }

Reply via email to