On 2/22/22 14:55, Tom de Vries wrote:
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?


Ping.

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