This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH: PR/40416] stop sinking expression if the target bb post dominates from bb


Hi

This patch is to fix the bug

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40416

If the target bb post dominates from bb and we move the expression to target
bb, it can't be executed less frequently. So we can't get any benefit from it.

ChangeLog:
2009-06-16  Carrot Wei  <carrot@google.com>

        PR/40416
        * tree-ssa-sink.c: add code to stop sinking expression if the target
        bb post dominates from bb.

Test:
x86 bootstrap.
Gcc regression tests for x86.
One new ICE testsuite/gcc.dg/pr35065.c. It is occurred in a very late rtl pass
machine_reorg with an invalid x86 address expression. It should be caused by
an unknown bug in rtl passes.

thanks
Carrot


Index: tree-ssa-sink.c
===================================================================
--- tree-ssa-sink.c     (revision 148480)
+++ tree-ssa-sink.c     (working copy)
@@ -384,6 +384,9 @@ statement_sink_location (gimple stmt, ba
          || sinkbb->loop_father != frombb->loop_father)
        return false;

+      if (dominated_by_p (CDI_POST_DOMINATORS, frombb, sinkbb))
+        return false;
+
       *togsi = gsi_for_stmt (use);
       return true;
     }
@@ -411,6 +414,9 @@ statement_sink_location (gimple stmt, ba
       || sinkbb->loop_father != frombb->loop_father)
     return false;

+  if (dominated_by_p (CDI_POST_DOMINATORS, frombb, sinkbb))
+    return false;
+
   *togsi = gsi_after_labels (sinkbb);

   return true;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]