OSDN Git Service

PR rtl-optimization/45107
authormkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 16:50:14 +0000 (16:50 +0000)
committermkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 16:50:14 +0000 (16:50 +0000)
* gcse.c (hash_scan_set): Use max_distance for gcse-las.

PR rtl-optimization/45107
* gcc.dg/pr45107.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162645 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gcse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr45107.c [new file with mode: 0644]

index 599176d..5e8721d 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-28  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       PR rtl-optimization/45107
+       * gcse.c (hash_scan_set): Use max_distance for gcse-las.
+
 2010-07-28  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-ccp.c: Remove comment regarding STORE-CCP.
index 1124131..6e923f9 100644 (file)
@@ -1471,6 +1471,7 @@ hash_scan_set (rtx pat, rtx insn, struct hash_table_d *table)
   else if (flag_gcse_las && REG_P (src) && MEM_P (dest))
       {
         unsigned int regno = REGNO (src);
+       int max_distance = 0;
 
         /* Do not do this for constant/copy propagation.  */
         if (! table->set_p
@@ -1482,7 +1483,7 @@ hash_scan_set (rtx pat, rtx insn, struct hash_table_d *table)
              do that easily for EH edges so disable GCSE on these for now.  */
           && !can_throw_internal (insn)
           /* Is SET_DEST something we want to gcse?  */
-          && want_to_gcse_p (dest, NULL)
+          && want_to_gcse_p (dest, &max_distance)
           /* Don't CSE a nop.  */
           && ! set_noop_p (pat)
           /* Don't GCSE if it has attached REG_EQUIV note.
@@ -1504,7 +1505,7 @@ hash_scan_set (rtx pat, rtx insn, struct hash_table_d *table)
 
               /* Record the memory expression (DEST) in the hash table.  */
               insert_expr_in_table (dest, GET_MODE (dest), insn,
-                                    antic_p, avail_p, 0, table);
+                                    antic_p, avail_p, max_distance, table);
              }
       }
 }
index 21ca910..3dbe028 100644 (file)
@@ -1,5 +1,10 @@
 2010-07-28  Maxim Kuvyrkov  <maxim@codesourcery.com>
 
+       PR rtl-optimization/45107
+       * gcc.dg/pr45107.c: New test.
+
+2010-07-28  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
        PR rtl-optimization/45101
        * gcc.dg/pr45101.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/pr45107.c b/gcc/testsuite/gcc.dg/pr45107.c
new file mode 100644 (file)
index 0000000..05dbec3
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR rtl-optimization/45107 */
+/* { dg-do compile } */
+/* { dg-options "-Os -fgcse-las" } */
+
+extern void bar(int *);
+
+int foo (int *p)
+{
+    int i = *p;
+    if (i != 1)
+      bar(&i);
+    *p = i;
+}