re PR tree-optimization/49018 (Inline assembly block executed outside conditional...
authorRichard Guenther <rguenther@suse.de>
Wed, 18 May 2011 13:33:21 +0000 (13:33 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 18 May 2011 13:33:21 +0000 (13:33 +0000)
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.

From-SVN: r173861

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

index a8e1c3c4814ab872996a7c729f657f0e6f43bfe0..f300b16e137d8f018b042a8689c04c625c32426f 100644 (file)
@@ -1,3 +1,10 @@
+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 ...
index cd57d5b47c05d553bc4f0ff035435c9c4023372d..3bf369add074ca5ddee5572b5210a615eaf5e5ff 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 bc551b2231c51ef2a7af28b3742954b8a212a474..e23bb763d19bf98c344554aa0fdfdedd914a714a 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;
     }