public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Alexandre Oliva <aoliva@redhat.com>
To: Jeff Law <law@redhat.com>
Cc: Alan Modra <amodra@gmail.com>, Jakub Jelinek <jakub@redhat.com>,
	       Jason Merrill <jason@redhat.com>,
	       Richard Biener <richard.guenther@gmail.com>,
	       GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [SFN+LVU+IEPM v4 9/9] [IEPM] Introduce inline entry point markers
Date: Fri, 09 Feb 2018 21:01:00 -0000	[thread overview]
Message-ID: <or1shtlvx6.fsf@lxoliva.fsfla.org> (raw)
In-Reply-To: <6e28e34e-681d-bebb-d815-569eee148de5@redhat.com> (Jeff Law's	message of "Thu, 8 Feb 2018 21:13:46 -0700")

On Feb  9, 2018, Jeff Law <law@redhat.com> wrote:

> On 02/08/2018 08:53 PM, Alan Modra wrote:
>> On Fri, Feb 09, 2018 at 01:21:27AM -0200, Alexandre Oliva wrote:
>>> Here's what I checked in, right after the LVU patch.
>>> 
>>> [IEPM] Introduce inline entry point markers
>> 
>> One of these two patches breaks ppc64le bootstrap with the assembler
>> complaining "Error: view number mismatch" when compiling
>> libdecnumber.
>> 
> I've just passed along a similar failure (.i, .s and command line
> options) to Alex for ppc64 (be) building glibc.

Thanks.  So, I'm told there are more such issues, that non-asm insn
length attrs can't be relied on at this time to be nonzero only when the
actual length is not zero.  When we fail that and regard a zero-length
insn as nonzero and that's all we have between two subsequent views, the
assembler (GNU as 2.30) will catch and report the error.  With other
assemblers, the incorrect view reset will go unnoticed and result in
incorrect debug info.

So, as discussed on IRC, I'm trying to use a target hook to allow
targets to indicate that their length attrs have been assessed for this
purpose, and a param to make that overridable, but I'm having trouble
initializing the param from the target hook.  How does one do that?

Meanwhile, here's the (WIP) patch that introduces the param defaulting
to no locview optimizations (which can only be performed at points in
which the compiler knows there are PC changes); I'd like it to default
to targetm.attr_length_reliable_for_view_count, but I couldn't figure
out how to do so.  Help?


By disabling it altogether, we won't get the assembler checks or
incorrect view numbers in debug info, but we will get plenty of all-zero
locview lists.  Oh well...  I guess at this point that's better than
wrong debug info or assembler failures.




disable locview optimizations for now

---
 gcc/doc/tm.texi    |   13 +++++++++++++
 gcc/doc/tm.texi.in |    2 ++
 gcc/dwarf2out.c    |    4 +++-
 gcc/opts.c         |    6 ++++++
 gcc/params.def     |    5 +++++
 gcc/target.def     |   13 +++++++++++++
 6 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ddf48cb4b4d2..50fa0d387f32 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -9986,6 +9986,19 @@ following it should not be run.  Usually true only for virtual assembler
 targets.
 @end deftypevr
 
+@deftypevr {Target Hook} bool TARGET_ATTR_LENGTH_RELIABLE_FOR_VIEW_COUNT
+TRUE if get_min_attr_length returns
+zero for any non-asm insn that might have length zero, during final.
+It's ok if it's conservative and always returns zero.
+If, in addition to the essential property, when an insn is known to have
+nonzero length, get_min_attr_length returns a positive number, that will
+enable loclist optimizations.  There is little point in making this TRUE
+otherwise.  Enabling this when the essential property is not met while
+using GNU as 2.30 or newer may cause the assembler to detect the errors
+and fail to assemble; other assemblers will silently let the errors
+through, with incorrect view numbers in debug information.
+@end deftypevr
+
 @defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, @var{label2})
 A C statement to issue assembly directives that create a difference
 @var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 0aab45f4992c..26b32db77f74 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -6929,6 +6929,8 @@ tables, and hence is desirable if it works.
 
 @hook TARGET_NO_REGISTER_ALLOCATION
 
+@hook TARGET_ATTR_LENGTH_RELIABLE_FOR_VIEW_COUNT
+
 @defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, @var{label2})
 A C statement to issue assembly directives that create a difference
 @var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 749c7e3b9bbc..6a6520a05e8b 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -96,6 +96,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "stringpool.h"
 #include "attribs.h"
 #include "file-prefix-map.h" /* remap_debug_filename()  */
+#include "params.h"
 
 static void dwarf2out_source_line (unsigned int, unsigned int, const char *,
 				   int, bool);
@@ -26926,7 +26927,8 @@ dwarf2out_var_location (rtx_insn *loc_note)
 	       || GET_CODE (loc_note) == ASM_INPUT
 	       || asm_noperands (loc_note) >= 0)
 	;
-      else if (get_attr_min_length (loc_note) > 0)
+      else if (PARAM_VALUE (PARAM_USE_ATTR_LENGTH_IN_VIEW_COUNTING)
+	       && get_attr_min_length (loc_note) > 0)
 	RESET_NEXT_VIEW (cur_line_info_table->view);
 
       return;
diff --git a/gcc/opts.c b/gcc/opts.c
index f2795f98bf44..d4b3065caad6 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1039,6 +1039,12 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
   if ((opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) && opts->x_flag_tm)
     sorry ("transactional memory is not supported with "
 	   "%<-fsanitize=kernel-address%>");
+
+#if 0
+  maybe_set_param_value (PARAM_USE_ATTR_LENGTH_IN_VIEW_COUNTING,
+			 targetm.attr_length_reliable_for_view_count,
+			 opts->x_param_values, opts_set->x_param_values);
+#endif
 }
 
 #define LEFT_COLUMN	27
diff --git a/gcc/params.def b/gcc/params.def
index 930b31820be9..184e435c786a 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -1331,6 +1331,11 @@ DEFPARAM(PARAM_AVOID_FMA_MAX_BITS,
 	 "Maximum number of bits for which we avoid creating FMAs.",
 	 0, 0, 512)
 
+DEFPARAM(PARAM_USE_ATTR_LENGTH_IN_VIEW_COUNTING,
+	 "use-attr-length-in-view-counting",
+	 "Optimize locview lists based on length attributes.",
+	 0 /* targetm.attr_length_reliable_for_view_count */, 0, 1)
+
 /*
 
 Local variables:
diff --git a/gcc/target.def b/gcc/target.def
index aeb41df19454..6966053157a3 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -6631,6 +6631,19 @@ following it should not be run.  Usually true only for virtual assembler\n\
 targets.",
 bool, false)
 
+DEFHOOKPOD
+(attr_length_reliable_for_view_count, "TRUE if get_min_attr_length returns\n\
+zero for any non-asm insn that might have length zero, during final.\n\
+It's ok if it's conservative and always returns zero.\n\
+If, in addition to the essential property, when an insn is known to have\n\
+nonzero length, get_min_attr_length returns a positive number, that will\n\
+enable loclist optimizations.  There is little point in making this TRUE\n\
+otherwise.  Enabling this when the essential property is not met while\n\
+using GNU as 2.30 or newer may cause the assembler to detect the errors\n\
+and fail to assemble; other assemblers will silently let the errors\n\
+through, with incorrect view numbers in debug information.",
+bool, false)
+
 /* Leave the boolean fields at the end.  */
 
 /* Functions related to mode switching.  */


-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

  parent reply	other threads:[~2018-02-09 21:01 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-05 23:21 Introduce Statement Frontier Notes and Location Views Alexandre Oliva
2017-07-13 13:17 ` Alexandre Oliva
2017-08-18 22:49   ` Statement Frontier Notes, Location Views, and Inlined Entry Point Markers (was: Re: Introduce Statement Frontier Notes and Location Views) Alexandre Oliva
2017-08-21 12:35     ` Richard Biener
2017-08-22 22:44       ` Statement Frontier Notes, Location Views, and Inlined Entry Point Markers Alexandre Oliva
2017-08-23 12:33         ` Richard Biener
2017-08-25 16:41           ` Alexandre Oliva
2017-09-07 21:44             ` Joseph Myers
2017-09-21  2:24               ` Alexandre Oliva
2017-08-22 22:44       ` Alexandre Oliva
2017-08-23 12:12         ` Richard Biener
2017-08-25 15:26           ` Alexandre Oliva
2017-08-28 12:41             ` Richard Biener
2017-08-25 19:22           ` Alexandre Oliva
2017-09-01  1:07           ` Alexandre Oliva
2017-09-01  1:15             ` [PATCH 2/9] [SFN] boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-09-01  1:15             ` [PATCH 1/9] [SFN] adjust RTL insn-walking API Alexandre Oliva
2017-09-01  1:15             ` [PATCH 5/9] [SFN] Introduce -gstatement-frontiers option, enable debug markers Alexandre Oliva
2017-09-01  1:16             ` [PATCH 9/9] [IEPM] Introduce inline entry point markers Alexandre Oliva
2017-09-01  1:16             ` [PATCH 3/9] [SFN] not-quite-boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-09-01  1:16             ` [PATCH 4/9] [SFN] introduce statement frontier notes, still disabled Alexandre Oliva
2017-09-01  1:16             ` [PATCH 8/9] [IEPM] Introduce debug hook for inline entry point markers Alexandre Oliva
2017-09-01  1:16             ` [PATCH 7/9] [LVU] Introduce location views Alexandre Oliva
2017-09-01  1:16             ` [PATCH 6/9] [LVU] Allow final_start_function to skip initial insns Alexandre Oliva
2017-09-30  9:04             ` Statement Frontier Notes, Location Views, and Inlined Entry Point Markers Alexandre Oliva
2017-09-30  9:09               ` [PATCH 6/9] [LVU] Allow final_start_function to skip initial insns Alexandre Oliva
2017-10-19 11:07                 ` Richard Biener
2017-10-31  5:10                   ` Jeff Law
2017-10-31  5:23                 ` Jeff Law
2017-11-01 18:20                   ` Alexandre Oliva
2017-11-02 13:00                     ` Richard Biener
2017-09-30  9:09               ` [PATCH 4/9] [SFN] introduce statement frontier notes, still disabled Alexandre Oliva
2017-10-09 13:11                 ` Richard Biener
2017-10-13  7:25                   ` Alexandre Oliva
2017-10-13  9:41                     ` Richard Biener
2017-10-17 22:06                       ` Alexandre Oliva
2017-10-24 18:11                 ` Jason Merrill
2017-11-01 19:14                   ` Alexandre Oliva
2017-11-01 19:49                     ` Jason Merrill
2017-09-30  9:09               ` [PATCH 1/9] [SFN] adjust RTL insn-walking API Alexandre Oliva
2017-10-09 13:24                 ` Richard Biener
2017-09-30  9:09               ` [PATCH 2/9] [SFN] boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-10-09 13:02                 ` Richard Biener
2017-09-30  9:09               ` [PATCH 5/9] [SFN] Introduce -gstatement-frontiers option, enable debug markers Alexandre Oliva
2017-10-09 13:12                 ` Richard Biener
2017-09-30  9:10               ` [PATCH 7/9] [LVU] Introduce location views Alexandre Oliva
2017-09-30  9:10               ` [PATCH 9/9] [IEPM] Introduce inline entry point markers Alexandre Oliva
2017-10-31  6:22                 ` Jeff Law
2017-11-01 18:36                   ` Alexandre Oliva
2017-11-09 16:30                     ` Jeff Law
2017-11-10  2:31                       ` Alexandre Oliva
2017-09-30  9:10               ` [PATCH 8/9] [IEPM] Introduce debug hook for " Alexandre Oliva
2017-10-31  5:58                 ` Jeff Law
2017-09-30  9:10               ` [PATCH 3/9] [SFN] not-quite-boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-10-09 13:07                 ` Richard Biener
2017-11-10  2:36               ` SFN+LVU+IEPM v4 (was: Re: Statement Frontier Notes, Location Views, and Inlined Entry Point Markers) Alexandre Oliva
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 2/9] [SFN] boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-12-07 22:27                   ` Jeff Law
2017-12-12  2:55                     ` Alexandre Oliva
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 6/9] [SFN] Introduce -gstatement-frontiers option, enable debug markers Alexandre Oliva
2017-12-07 22:49                   ` Jeff Law
2017-12-12  2:42                     ` Alexandre Oliva
2017-12-12  9:16                       ` Christophe Lyon
2017-12-13  4:22                         ` Alexandre Oliva
2018-01-07 17:48                       ` H.J. Lu
2017-12-27  8:00                   ` [nvptx, committed] Disable -gstatement-frontiers for nvptx Tom de Vries
2017-12-29  4:12                     ` Alexandre Oliva
2017-12-29 11:42                       ` Tom de Vries
2017-12-31 20:05                         ` Alexandre Oliva
2018-01-11 10:12                           ` Tom de Vries
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 3/9] [SFN] not-quite-boilerplate changes in preparation to introduce nonbind markers Alexandre Oliva
2017-12-07 22:44                   ` Jeff Law
2017-12-12  2:31                     ` Alexandre Oliva
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 1/9] [SFN] adjust RTL insn-walking API Alexandre Oliva
2017-12-07 22:25                   ` Jeff Law
2017-12-12  3:10                     ` Alexandre Oliva
2017-12-14 11:55                       ` Alexandre Oliva
2017-12-14 12:07                         ` Jakub Jelinek
2017-12-14 18:25                           ` Alexandre Oliva
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 5/9] [SFN] introduce statement frontier notes, still disabled Alexandre Oliva
2017-12-07 23:59                   ` Jeff Law
2017-12-12  2:41                     ` Alexandre Oliva
2017-11-10  2:36                 ` [SFN+LVU+IEPM v4 4/9] [SFN] stabilize find_bb_boundaries Alexandre Oliva
2017-12-07 22:46                   ` Jeff Law
2017-12-12  2:38                     ` Alexandre Oliva
2017-11-10  2:37                 ` [SFN+LVU+IEPM v4 8/9] [IEPM] Introduce debug hook for inline entry point markers Alexandre Oliva
2017-12-07 22:51                   ` Jeff Law
2017-12-12  2:44                     ` Alexandre Oliva
2017-11-10  5:05                 ` [SFN+LVU+IEPM v4 7/9] [LVU] Introduce location views Alexandre Oliva
2017-11-13 10:18                   ` Richard Biener
2017-11-15  3:59                     ` Alexandre Oliva
2017-12-11 23:12                   ` Jeff Law
2017-12-12  2:52                     ` Alexandre Oliva
2018-01-24 17:36                       ` Jakub Jelinek
2018-01-25 20:19                         ` Alexandre Oliva
2018-01-26 14:58                           ` Jakub Jelinek
2018-01-30 18:40                             ` Alexandre Oliva
2018-01-30 22:11                               ` Richard Sandiford
2018-02-07  4:14                                 ` Alexandre Oliva
2018-02-07  7:43                           ` Alexandre Oliva
2018-02-06 21:13                       ` Jason Merrill
2018-02-07  4:02                         ` Alexandre Oliva
2018-02-07 19:23                           ` Jason Merrill
2018-02-08 12:56                             ` Alexandre Oliva
2018-02-08 16:05                               ` Jason Merrill
2018-02-09  3:49                                 ` Alexandre Oliva
2018-02-07  7:35                         ` Alexandre Oliva
2018-02-07  7:36                         ` Alexandre Oliva
2018-02-08 19:58                           ` Jason Merrill
2018-02-09  3:20                             ` Alexandre Oliva
2018-02-11 19:04                               ` Andreas Schwab
2018-02-11 20:47                               ` Andreas Schwab
2018-02-12  7:46                                 ` Alexandre Oliva
2018-02-12  7:49                                 ` Alexandre Oliva
2018-02-12 10:11                                   ` Andreas Schwab
2018-02-13  5:47                                     ` Alexandre Oliva
2018-02-14  9:23                                       ` Andreas Schwab
2017-11-10  5:29                 ` [SFN+LVU+IEPM v4 9/9] [IEPM] Introduce inline entry point markers Alexandre Oliva
2017-12-12  2:54                   ` Alexandre Oliva
2017-12-21  5:18                     ` Jeff Law
2018-01-24  7:11                       ` Alexandre Oliva
2018-01-24 17:40                     ` Jakub Jelinek
2018-01-25 20:14                       ` Alexandre Oliva
2018-02-09  3:21                         ` Alexandre Oliva
2018-02-09  3:53                           ` Alan Modra
2018-02-09  4:13                             ` Jeff Law
2018-02-09 10:35                               ` Alexandre Oliva
2018-02-09 12:10                                 ` Alan Modra
2018-02-09 15:09                                 ` Jeff Law
2018-02-09 22:52                                   ` Joseph Myers
2018-02-10  1:36                                     ` Joseph Myers
2018-02-10 12:35                                       ` Alexandre Oliva
2018-02-10 18:19                                         ` Jeff Law
2018-02-11 15:29                                           ` Alexandre Oliva
2018-02-09 21:01                               ` Alexandre Oliva [this message]
2018-02-09 23:49                                 ` Jakub Jelinek
2018-02-10  0:56                                   ` Alexandre Oliva
2018-02-12  8:08                                     ` Alexandre Oliva
2018-02-13 13:52                                       ` Alexandre Oliva
2018-02-13 16:15                                         ` Jeff Law
2018-02-15 15:23                                         ` Szabolcs Nagy
2018-02-21 10:12                                           ` Alexandre Oliva
2018-02-21 12:08                                             ` Uros Bizjak
2018-02-22 15:22                                             ` Szabolcs Nagy
2018-02-28  6:17                                             ` Alexandre Oliva
2018-03-09  9:49                                               ` Bin.Cheng
2018-03-09  9:55                                                 ` Ramana Radhakrishnan
2018-03-09 11:35                                                 ` Jakub Jelinek
2018-03-07 19:43                                             ` Jeff Law
2018-02-10  4:39                                 ` Alexandre Oliva
2018-02-10  6:35                                   ` Jeff Law
2018-02-10 13:05                                     ` Alexandre Oliva
2018-02-10 16:36                                       ` Jeff Law
2018-02-21 10:33                       ` Alexandre Oliva
2018-02-26 12:47                         ` Richard Biener
2017-11-10 21:31                 ` SFN+LVU+IEPM v4 Alexandre Oliva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=or1shtlvx6.fsf@lxoliva.fsfla.org \
    --to=aoliva@redhat.com \
    --cc=amodra@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jason@redhat.com \
    --cc=law@redhat.com \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).