2011-05-18 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 May 2011 13:33:21 +0000 (13:33 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 May 2011 13:33:21 +0000 (13:33 +0000)
PR tree-optimization/49018
* gimple.c (gimple_has_side_effects): Volatile asms have side-effects.
* tree-ssa-ifcombine.c (bb_no_side_effects_p): Use
gimple_has_side_effects.

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

gcc/ChangeLog
gcc/gimple.c
gcc/tree-ssa-ifcombine.c

index a8e1c3c..f300b16 100644 (file)
@@ -1,5 +1,12 @@
 2011-05-18  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/49018
+       * gimple.c (gimple_has_side_effects): Volatile asms have side-effects.
+       * tree-ssa-ifcombine.c (bb_no_side_effects_p): Use
+       gimple_has_side_effects.
+
+2011-05-18  Richard Guenther  <rguenther@suse.de>
+
        * gimple.c (gimple_register_type_1): New function, split out from ...
        (gimple_register_type): ... here.  Avoid infinite recursion.
 
index cd57d5b..3bf369a 100644 (file)
@@ -2354,6 +2354,10 @@ gimple_has_side_effects (const_gimple s)
   if (gimple_has_volatile_ops (s))
     return true;
 
+  if (gimple_code (s) == GIMPLE_ASM
+      && gimple_asm_volatile_p (s))
+    return true;
+
   if (is_gimple_call (s))
     {
       unsigned nargs = gimple_call_num_args (s);
@@ -2368,7 +2372,7 @@ gimple_has_side_effects (const_gimple s)
       if (gimple_call_lhs (s)
           && TREE_SIDE_EFFECTS (gimple_call_lhs (s)))
        {
-         gcc_assert (gimple_has_volatile_ops (s));
+         gcc_checking_assert (gimple_has_volatile_ops (s));
          return true;
        }
 
@@ -2379,7 +2383,7 @@ gimple_has_side_effects (const_gimple s)
       for (i = 0; i < nargs; i++)
         if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i)))
          {
-           gcc_assert (gimple_has_volatile_ops (s));
+           gcc_checking_assert (gimple_has_volatile_ops (s));
            return true;
          }
 
@@ -2388,11 +2392,14 @@ gimple_has_side_effects (const_gimple s)
   else
     {
       for (i = 0; i < gimple_num_ops (s); i++)
-       if (TREE_SIDE_EFFECTS (gimple_op (s, i)))
-         {
-           gcc_assert (gimple_has_volatile_ops (s));
-           return true;
-         }
+       {
+         tree op = gimple_op (s, i);
+         if (op && TREE_SIDE_EFFECTS (op))
+           {
+             gcc_checking_assert (gimple_has_volatile_ops (s));
+             return true;
+           }
+       }
     }
 
   return false;
index bc551b2..e23bb76 100644 (file)
@@ -107,7 +107,7 @@ bb_no_side_effects_p (basic_block bb)
     {
       gimple stmt = gsi_stmt (gsi);
 
-      if (gimple_has_volatile_ops (stmt)
+      if (gimple_has_side_effects (stmt)
          || gimple_vuse (stmt))
        return false;
     }