On 3/9/22 13:50, Tom de Vries wrote:
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^2.

Tobias just reported an ICE in PR104968, and this patch fixes it.

I'd like to known whether this patch is acceptable for stage 4 or not.

If not, I need to fix PR104968 in a different way. Say, disable -mcomment by default, or trying harder to propagate source info on outlined functions.

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