diff mbox series

Mark -free as Optimization option.

Message ID 163034b8-a59b-e081-827f-943aec2fb548@suse.cz
State New
Headers show
Series Mark -free as Optimization option. | expand

Commit Message

Martin Liška Jan. 2, 2020, 11:04 a.m. UTC
Hi.

The flag is set based on optimization option:
gcc/common/config/i386/i386-common.c:    { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },

and so that it should be also per-function. The only usage of the flag is
in gate of a RTL pass, so that it will use on function selection.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2020-01-02  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/92860
	* common.opt: Make flag_ree as optimization
	attribute.

gcc/testsuite/ChangeLog:

2020-01-02  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/92860
	* gcc.dg/pr92860.c: New test.
---
  gcc/common.opt                 |  2 +-
  gcc/testsuite/gcc.dg/pr92860.c | 53 ++++++++++++++++++++++++++++++++++
  2 files changed, 54 insertions(+), 1 deletion(-)
  create mode 100644 gcc/testsuite/gcc.dg/pr92860.c

Comments

Jeff Law Jan. 6, 2020, 4:18 p.m. UTC | #1
On Thu, 2020-01-02 at 12:04 +0100, Martin Liška wrote:
> Hi.
> 
> The flag is set based on optimization option:
> gcc/common/config/i386/i386-common.c:    { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
> 
> and so that it should be also per-function. The only usage of the flag is
> in gate of a RTL pass, so that it will use on function selection.
> 
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> 
> Ready to be installed?
> Thanks,
> Martin
> 
> gcc/ChangeLog:
> 
> 2020-01-02  Martin Liska  <mliska@suse.cz>
> 
> 	PR tree-optimization/92860
> 	* common.opt: Make flag_ree as optimization
> 	attribute.
> 
> gcc/testsuite/ChangeLog:
> 
> 2020-01-02  Martin Liska  <mliska@suse.cz>
> 
> 	PR tree-optimization/92860
> 	* gcc.dg/pr92860.c: New test.
OK
jeff
diff mbox series

Patch

diff --git a/gcc/common.opt b/gcc/common.opt
index a22ab004d65..02c7cddbb26 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2426,7 +2426,7 @@  Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 free
-Common Report Var(flag_ree) Init(0)
+Common Report Var(flag_ree) Init(0) Optimization
 Turn on Redundant Extensions Elimination pass.
 
 fshow-column
diff --git a/gcc/testsuite/gcc.dg/pr92860.c b/gcc/testsuite/gcc.dg/pr92860.c
new file mode 100644
index 00000000000..74207a9d53c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr92860.c
@@ -0,0 +1,53 @@ 
+/* PR tree-optimization/92860.  */
+/* Testcase derived from 20111227-1.c to ensure that REE is combining
+   redundant zero extends with zero extend to wider mode.  */
+/* { dg-do compile  { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-fdump-rtl-ree" } */
+
+extern void abort (void);
+
+unsigned short s;
+unsigned int i;
+unsigned long l;
+unsigned char v = -1;
+
+void
+__attribute__ ((optimize("-O2")))
+baz()
+{
+}
+
+void __attribute__((noinline,noclone))
+bar (int t)
+{
+  if (t == 2 && s != 0xff)
+    abort ();
+  if (t == 1 && i != 0xff)
+    abort ();
+  if (t == 0 && l != 0xff)
+    abort ();
+}
+
+void __attribute__((noinline,noclone))
+foo (unsigned char *a, int t)
+{
+  unsigned char r = v;
+
+  if (t == 2)
+    s = (unsigned short) r;
+  else if (t == 1)
+    i = (unsigned int) r;
+  else if (t == 0)
+    l = (unsigned long) r;
+  bar (t);
+}
+
+int main(void)
+{
+  foo (&v, 0);
+  foo (&v, 1);
+  foo (&v, 2);
+  return 0;
+}
+
+/* { dg-final { scan-rtl-dump-not "Elimination opportunities" "ree" } }  */