public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] opts: Disable -gstatement-frontiers by default [PR103788]
@ 2022-04-20 17:14 Jakub Jelinek
  2022-04-20 18:53 ` Richard Biener
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2022-04-20 17:14 UTC (permalink / raw)
  To: Richard Biener, Jeff Law, Alexandre Oliva; +Cc: gcc-patches

Hi!

As mentioned in those PRs and I think in others too, there are some long
time unresolved -fcompare-debug issues with DEBUG_BEGIN_STMTs in the FEs and
during gimplification, especially with statement expressions, where we end
up with different code generation depending on whether there are
DEBUG_BEGIN_STMTs (which force STATEMENT_LISTs) or not (in that case
we often have just the single expression from the list).
I've tried to fix that several times, but nothing worked.
Furthermore, Alex mentioned in bugzilla that there are no consumers of the
statement frontiers right now.

This patch turns -gstatement-frontiers off by default because of those
2 reasons, consumers for those can still be added (one can test with
explicit -gstatement-frontiers) and if/once that happens, perhaps somebody
will have some great idea how to resolve those -fcompare-debug issues.

Until then, can we go with this?

Bootstrapped/regtested on powerpc64le-linux, ok for trunk if it also passes
bootstrap/regtest on x86_64-linux/i686-linux?

2022-04-20  Jakub Jelinek  <jakub@redhat.com>

	PR debug/103788
	PR middle-end/100733
	PR debug/104180
	* opts.cc (finish_options): Disable -gstatement-frontiers by default.

	* gcc.dg/pr103788.c: New test.
	* c-c++-common/ubsan/pr100733.c: New test.
	* g++.dg/debug/pr104180.C: New test.

--- gcc/opts.cc.jj	2022-04-06 17:42:03.084190238 +0200
+++ gcc/opts.cc	2022-04-20 13:12:22.282322920 +0200
@@ -1317,12 +1317,16 @@ finish_options (struct gcc_options *opts
 	debug_info_level = DINFO_LEVEL_NONE;
     }
 
+  /* Don't enable -gstatement-frontiers by default until some consumers
+     actually consume it and until the issues with DEBUG_BEGIN_STMTs
+     affecting code generation e.g. for statement expressions are resolved.
+     See PR103788, PR104180, PR100733.
   if (!OPTION_SET_P (debug_nonbind_markers_p))
     debug_nonbind_markers_p
       = (optimize
 	 && debug_info_level >= DINFO_LEVEL_NORMAL
 	 && dwarf_debuginfo_p ()
-	 && !(flag_selective_scheduling || flag_selective_scheduling2));
+	 && !(flag_selective_scheduling || flag_selective_scheduling2));  */
 
   /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and
      so we need to drop it if we are called from optimize attribute.  */
--- gcc/testsuite/gcc.dg/pr103788.c.jj	2022-04-20 13:13:47.253141338 +0200
+++ gcc/testsuite/gcc.dg/pr103788.c	2022-04-20 13:13:29.301390970 +0200
@@ -0,0 +1,28 @@
+/* PR debug/103788 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fcompare-debug" } */
+
+int
+bar (void);
+
+int
+foo (int x)
+{
+  int i;
+
+  for (i = 0; i <= __INT_MAX__; ++i)
+    x += bar () < (x ? 2 : 1);
+
+  return x;
+}
+
+int
+baz (int x)
+{
+  int i;
+
+  for (i = 0; i <= __INT_MAX__; ++i)
+    x += bar () < (
+    x ? 2 : 1 );
+  return x;
+}
--- gcc/testsuite/c-c++-common/ubsan/pr100733.c.jj	2022-04-20 13:18:09.135499667 +0200
+++ gcc/testsuite/c-c++-common/ubsan/pr100733.c	2022-04-20 13:18:43.031028328 +0200
@@ -0,0 +1,9 @@
+/* PR middle-end/100733 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fsanitize=undefined -fcompare-debug -fdisable-tree-phiopt2" } */
+
+int
+foo (int x)
+{
+  return (__builtin_expect (({ x != 0; }) ? 0 : 1, 3) == 0) * -1 << 0;
+}
--- gcc/testsuite/g++.dg/debug/pr104180.C.jj	2022-04-20 13:14:51.468248383 +0200
+++ gcc/testsuite/g++.dg/debug/pr104180.C	2022-04-20 13:15:17.856881425 +0200
@@ -0,0 +1,14 @@
+/* PR debug/104180 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fcompare-debug" } */
+
+int a[5];
+
+void
+foo (void)
+{
+  unsigned int b;
+
+  for (b = 3; ; b--)
+    a[b] = ({ a[b + 1]; });
+}

	Jakub


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] opts: Disable -gstatement-frontiers by default [PR103788]
  2022-04-20 17:14 [PATCH] opts: Disable -gstatement-frontiers by default [PR103788] Jakub Jelinek
@ 2022-04-20 18:53 ` Richard Biener
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2022-04-20 18:53 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Jeff Law, Alexandre Oliva, gcc-patches



> Am 20.04.2022 um 19:15 schrieb Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org>:
> 
> Hi!
> 
> As mentioned in those PRs and I think in others too, there are some long
> time unresolved -fcompare-debug issues with DEBUG_BEGIN_STMTs in the FEs and
> during gimplification, especially with statement expressions, where we end
> up with different code generation depending on whether there are
> DEBUG_BEGIN_STMTs (which force STATEMENT_LISTs) or not (in that case
> we often have just the single expression from the list).
> I've tried to fix that several times, but nothing worked.
> Furthermore, Alex mentioned in bugzilla that there are no consumers of the
> statement frontiers right now.
> 
> This patch turns -gstatement-frontiers off by default because of those
> 2 reasons, consumers for those can still be added (one can test with
> explicit -gstatement-frontiers) and if/once that happens, perhaps somebody
> will have some great idea how to resolve those -fcompare-debug issues.
> 
> Until then, can we go with this?
> 
> Bootstrapped/regtested on powerpc64le-linux, ok for trunk if it also passes
> bootstrap/regtest on x86_64-linux/i686-linux?

OK.

Richard.

> 2022-04-20  Jakub Jelinek  <jakub@redhat.com>
> 
>    PR debug/103788
>    PR middle-end/100733
>    PR debug/104180
>    * opts.cc (finish_options): Disable -gstatement-frontiers by default.
> 
>    * gcc.dg/pr103788.c: New test.
>    * c-c++-common/ubsan/pr100733.c: New test.
>    * g++.dg/debug/pr104180.C: New test.
> 
> --- gcc/opts.cc.jj    2022-04-06 17:42:03.084190238 +0200
> +++ gcc/opts.cc    2022-04-20 13:12:22.282322920 +0200
> @@ -1317,12 +1317,16 @@ finish_options (struct gcc_options *opts
>    debug_info_level = DINFO_LEVEL_NONE;
>     }
> 
> +  /* Don't enable -gstatement-frontiers by default until some consumers
> +     actually consume it and until the issues with DEBUG_BEGIN_STMTs
> +     affecting code generation e.g. for statement expressions are resolved.
> +     See PR103788, PR104180, PR100733.
>   if (!OPTION_SET_P (debug_nonbind_markers_p))
>     debug_nonbind_markers_p
>       = (optimize
>     && debug_info_level >= DINFO_LEVEL_NORMAL
>     && dwarf_debuginfo_p ()
> -     && !(flag_selective_scheduling || flag_selective_scheduling2));
> +     && !(flag_selective_scheduling || flag_selective_scheduling2));  */
> 
>   /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and
>      so we need to drop it if we are called from optimize attribute.  */
> --- gcc/testsuite/gcc.dg/pr103788.c.jj    2022-04-20 13:13:47.253141338 +0200
> +++ gcc/testsuite/gcc.dg/pr103788.c    2022-04-20 13:13:29.301390970 +0200
> @@ -0,0 +1,28 @@
> +/* PR debug/103788 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fcompare-debug" } */
> +
> +int
> +bar (void);
> +
> +int
> +foo (int x)
> +{
> +  int i;
> +
> +  for (i = 0; i <= __INT_MAX__; ++i)
> +    x += bar () < (x ? 2 : 1);
> +
> +  return x;
> +}
> +
> +int
> +baz (int x)
> +{
> +  int i;
> +
> +  for (i = 0; i <= __INT_MAX__; ++i)
> +    x += bar () < (
> +    x ? 2 : 1 );
> +  return x;
> +}
> --- gcc/testsuite/c-c++-common/ubsan/pr100733.c.jj    2022-04-20 13:18:09.135499667 +0200
> +++ gcc/testsuite/c-c++-common/ubsan/pr100733.c    2022-04-20 13:18:43.031028328 +0200
> @@ -0,0 +1,9 @@
> +/* PR middle-end/100733 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fsanitize=undefined -fcompare-debug -fdisable-tree-phiopt2" } */
> +
> +int
> +foo (int x)
> +{
> +  return (__builtin_expect (({ x != 0; }) ? 0 : 1, 3) == 0) * -1 << 0;
> +}
> --- gcc/testsuite/g++.dg/debug/pr104180.C.jj    2022-04-20 13:14:51.468248383 +0200
> +++ gcc/testsuite/g++.dg/debug/pr104180.C    2022-04-20 13:15:17.856881425 +0200
> @@ -0,0 +1,14 @@
> +/* PR debug/104180 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fcompare-debug" } */
> +
> +int a[5];
> +
> +void
> +foo (void)
> +{
> +  unsigned int b;
> +
> +  for (b = 3; ; b--)
> +    a[b] = ({ a[b + 1]; });
> +}
> 
>    Jakub
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-04-20 18:54 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-20 17:14 [PATCH] opts: Disable -gstatement-frontiers by default [PR103788] Jakub Jelinek
2022-04-20 18:53 ` Richard Biener

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).