[mid-end][__RTL] Account for column numbers in __RTL functions
authorMatthew Malcomson <matthew.malcomson@arm.com>
Fri, 15 Nov 2019 14:18:14 +0000 (14:18 +0000)
committerMatthew Malcomson <matmal01@gcc.gnu.org>
Fri, 15 Nov 2019 14:18:14 +0000 (14:18 +0000)
The documentation for __RTL tests (see "(gccint) RTL Tests" info node) has the
following snippet.

```
 The parser expects the RTL body to be in the format emitted by this
dumping function:

     DEBUG_FUNCTION void
     print_rtx_function (FILE *outfile, function *fn, bool compact);

 when "compact" is true.  So you can capture RTL in the correct format
from the debugger using:

     (gdb) print_rtx_function (stderr, cfun, true);

 and copy and paste the output into the body of the C function.
```

Since r264944 print_rtx_function prints column number information, which the
__RTL function parsing does not handle.

This patch handles column number information optionally, so pre-existing __RTL
functions still work, and the above documentation quote still holds.

Note: If people would prefer to require column information I could make a
slightly neater code and update existing tests.
I guess this would be OK since the intended use for __RTL functions is in these
testcases so there is no worry about other existing code.

bootstrapped and regtested on aarch64
bootstrapped and regtested on x86_64

Ok for trunk?

Cheers,
Matthew

gcc/ChangeLog:

2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>

* read-rtl-function.c
(function_reader::add_fixup_source_location): Take additional
parameter of a column.
(function_reader::maybe_read_location): Optionally parse column
information and pass to add_fixup_source_location.

gcc/testsuite/ChangeLog:

2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>

* gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test.

From-SVN: r278294

gcc/ChangeLog
gcc/read-rtl-function.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c [new file with mode: 0644]

index 22fe571eec62220963402d8fd083deb7a110c804..9784821a88a43953bda2bb94839117798ff129ef 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * read-rtl-function.c
+       (function_reader::add_fixup_source_location): Take additional
+       parameter of a column.
+       (function_reader::maybe_read_location): Optionally parse column
+       information and pass to add_fixup_source_location.
+
 2019-11-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/92512
index b87ea301e8ef53db410af784af74b6fc8a62917e..47dc66ef2890e2db8775266f09240ec60847edba 100644 (file)
@@ -115,7 +115,7 @@ class function_reader : public rtx_reader
                                        int operand_idx, int bb_idx);
 
   void add_fixup_source_location (file_location loc, rtx_insn *insn,
-                                 const char *filename, int lineno);
+                                 const char *filename, int lineno, int colno);
 
   void add_fixup_expr (file_location loc, rtx x,
                       const char *desc);
@@ -1371,7 +1371,7 @@ function_reader::add_fixup_note_insn_basic_block (file_location loc, rtx insn,
 
 void
 function_reader::add_fixup_source_location (file_location, rtx_insn *,
-                                           const char *, int)
+                                           const char *, int, int)
 {
 }
 
@@ -1557,7 +1557,20 @@ function_reader::maybe_read_location (rtx_insn *insn)
       require_char (':');
       struct md_name line_num;
       read_name (&line_num);
-      add_fixup_source_location (loc, insn, filename, atoi (line_num.string));
+
+      int column = 0;
+      int ch = read_char ();
+      if (ch == ':')
+       {
+         struct md_name column_num;
+         read_name (&column_num);
+         column = atoi (column_num.string);
+       }
+      else
+       unread_char (ch);
+      add_fixup_source_location (loc, insn, filename,
+                                atoi (line_num.string),
+                                column);
     }
   else
     unread_char (ch);
index 82f559bd04f7d10277d62586f9f5571aa7099b7e..b835d671eba56fd0c19cf59ce8be939966f6bc46 100644 (file)
@@ -1,3 +1,7 @@
+2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test.
+
 2019-11-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/92512
diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c b/gcc/testsuite/gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c
new file mode 100644 (file)
index 0000000..9290e1e
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do compile { target aarch64-*-* } } */
+
+/* Should compile and not complain.  */
+int __RTL (startwith ("cprop_hardreg"))
+foo ()
+{
+(function "f"
+  (insn-chain
+    (block 2
+      (edge-from entry (flags "FALLTHRU"))
+      (cnote 6 [bb 2] NOTE_INSN_BASIC_BLOCK)
+      (cinsn 100 (set (reg:DI x0)
+                 (plus:DI
+                  (reg:DI x1)
+                  (const_int 16777213)))
+       "/home/user/somefile.c":10:3)
+      ;; Extra insn, to avoid all of the above from being deleted by DCE
+      (cinsn 10 (use (reg/i:DI x0)))
+      (edge-to exit (flags "FALLTHRU"))
+    ) ;; block 2
+  ) ;; insn-chain
+) ;; function
+}