From 63841daf70b8f5d9ab3014956ea2c0f22488660e Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Fri, 15 Nov 2019 14:18:14 +0000 Subject: [PATCH] [mid-end][__RTL] Account for column numbers in __RTL functions 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 * 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 * gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test. From-SVN: r278294 --- gcc/ChangeLog | 8 +++++++ gcc/read-rtl-function.c | 19 ++++++++++++--- gcc/testsuite/ChangeLog | 4 ++++ .../rtl/aarch64/rtl-handle-column-numbers.c | 23 +++++++++++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22fe571eec6..9784821a88a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2019-11-15 Matthew Malcomson + + * 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 PR tree-optimization/92512 diff --git a/gcc/read-rtl-function.c b/gcc/read-rtl-function.c index b87ea301e8e..47dc66ef289 100644 --- a/gcc/read-rtl-function.c +++ b/gcc/read-rtl-function.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82f559bd04f..b835d671eba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-11-15 Matthew Malcomson + + * gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test. + 2019-11-15 Richard Biener 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 index 00000000000..9290e1e2eaa --- /dev/null +++ b/gcc/testsuite/gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c @@ -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 +} -- 2.30.2