Mark -free as Optimization option.
authorMartin Liska <mliska@suse.cz>
Tue, 7 Jan 2020 09:12:35 +0000 (10:12 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 7 Jan 2020 09:12:35 +0000 (09:12 +0000)
From-SVN: r279946

gcc/ChangeLog
gcc/common.opt
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr92860.c [new file with mode: 0644]

index 6c39e1e..288c0e2 100644 (file)
@@ -1,8 +1,14 @@
 2020-01-07  Martin Liska  <mliska@suse.cz>
 
-    PR optimization/92860
-    * params.opt: Mark param_min_crossjump_insns with Optimization
-    keyword.
+       PR tree-optimization/92860
+       * common.opt: Make flag_ree as optimization
+       attribute. 
+
+2020-01-07  Martin Liska  <mliska@suse.cz>
+
+       PR optimization/92860
+       * params.opt: Mark param_min_crossjump_insns with Optimization
+       keyword.
 
 2020-01-07  Luo Xiong Hu  <luoxhu@linux.ibm.com>
 
index a22ab00..02c7cdd 100644 (file)
@@ -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
index 517c851..dabc9d2 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-07  Martin Liska  <mliska@suse.cz>
+
+       PR tree-optimization/92860
+       * gcc.dg/pr92860.c: New test. 
+
 2020-01-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/91369
diff --git a/gcc/testsuite/gcc.dg/pr92860.c b/gcc/testsuite/gcc.dg/pr92860.c
new file mode 100644 (file)
index 0000000..74207a9
--- /dev/null
@@ -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" } }  */