public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] predict: Adjust optimize_function_for_size_p [PR105818]
@ 2022-06-14  7:57 Kewen.Lin
  2022-06-14 11:37 ` Jan Hubicka
  2022-06-14 12:53 ` Segher Boessenkool
  0 siblings, 2 replies; 9+ messages in thread
From: Kewen.Lin @ 2022-06-14  7:57 UTC (permalink / raw)
  To: GCC Patches
  Cc: Jan Hubicka, Richard Biener, Richard Sandiford, Segher Boessenkool

Hi,

Function optimize_function_for_size_p returns OPTIMIZE_SIZE_NO
if func->decl is not null but no cgraph node is available for it.
As PR105818 shows, this could give unexpected result.  For the
case in PR105818, when parsing bar decl in function foo, the cfun
is a function structure for foo, for which there is none cgraph
node, so it returns OPTIMIZE_SIZE_NO.  But it's incorrect since
the context is to optimize for size, the flag optimize_size is
true.

The patch is to make optimize_function_for_size_p to check
optimize_size as what it does when func->decl is unavailable.

One regression failure got exposed on aarch64-linux-gnu:

PASS->FAIL: gcc.dg/guality/pr54693-2.c   -Os \
	    -DPREVENT_OPTIMIZATION  line 21 x == 10 - i

The difference comes from the macro LOGICAL_OP_NON_SHORT_CIRCUIT
used in function fold_range_test during c parsing, it uses
optimize_function_for_speed_p which is equal to the invertion
of optimize_function_for_size_p.  At that time cfun->decl is valid
but no cgraph node for it, w/o this patch function
optimize_function_for_speed_p returns true eventually, while it
returns false with this patch.  Since the command line option -Os
is specified, there is no reason to interpret it as "for speed".
I think this failure is expected and adjust the test case
accordingly.

Is it ok for trunk?

BR,
Kewen
-----

	PR target/105818

gcc/ChangeLog:

	* predict.cc (optimize_function_for_size_p): Check optimize_size when
	func->decl is valid but its cgraph node is unavailable.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/pr105818.c: New test.
	* gcc.dg/guality/pr54693-2.c: Adjust for aarch64.
---
 gcc/predict.cc                              | 2 +-
 gcc/testsuite/gcc.dg/guality/pr54693-2.c    | 2 +-
 gcc/testsuite/gcc.target/powerpc/pr105818.c | 9 +++++++++
 3 files changed, 11 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/powerpc/pr105818.c

diff --git a/gcc/predict.cc b/gcc/predict.cc
index 5734e4c8516..6c60a973236 100644
--- a/gcc/predict.cc
+++ b/gcc/predict.cc
@@ -268,7 +268,7 @@ optimize_function_for_size_p (struct function *fun)
   cgraph_node *n = cgraph_node::get (fun->decl);
   if (n)
     return n->optimize_for_size_p ();
-  return OPTIMIZE_SIZE_NO;
+  return optimize_size ? OPTIMIZE_SIZE_MAX : OPTIMIZE_SIZE_NO;
 }

 /* Return true if function FUN should always be optimized for speed.  */
diff --git a/gcc/testsuite/gcc.dg/guality/pr54693-2.c b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
index 68aa6c63d71..14ca94ad37d 100644
--- a/gcc/testsuite/gcc.dg/guality/pr54693-2.c
+++ b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
@@ -17,7 +17,7 @@ foo (int x, int y, int z)
   int i = 0;
   while (x > 3 && y > 3 && z > 3)
     {		/* { dg-final { gdb-test .+2 "i" "v + 1" } } */
-		/* { dg-final { gdb-test .+1 "x" "10 - i" } } */
+		/* { dg-final { gdb-test .+1 "x" "10 - i" { xfail { aarch64*-*-* && { any-opts "-Os" } } } } } */
       bar (i);	/* { dg-final { gdb-test . "y" "20 - 2 * i" } } */
 		/* { dg-final { gdb-test .-1 "z" "30 - 3 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" "-Os" } } } } } */
       i++, x--, y -= 2, z -= 3;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr105818.c b/gcc/testsuite/gcc.target/powerpc/pr105818.c
new file mode 100644
index 00000000000..18781edbf9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr105818.c
@@ -0,0 +1,9 @@
+/* { dg-options "-Os -fno-tree-vectorize" } */
+
+#pragma GCC optimize "-fno-tree-vectorize"
+
+void
+foo (void)
+{
+  void bar (void);
+}
--
2.27.0

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

end of thread, other threads:[~2022-09-28  5:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-14  7:57 [PATCH] predict: Adjust optimize_function_for_size_p [PR105818] Kewen.Lin
2022-06-14 11:37 ` Jan Hubicka
2022-06-15  6:20   ` Kewen.Lin
2022-07-11  3:42     ` Kewen.Lin
2022-08-15  8:33       ` Kewen.Lin
2022-08-29  6:35         ` Kewen.Lin
2022-09-28  5:46           ` Kewen.Lin
2022-06-14 12:53 ` Segher Boessenkool
2022-06-15  6:21   ` Kewen.Lin

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