OSDN Git Service

2011-11-10 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Nov 2011 12:22:46 +0000 (12:22 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Nov 2011 12:22:46 +0000 (12:22 +0000)
PR middle-end/51071
* gimple.c (gimple_has_side_effects): Remove checking code
that doesn't belong here.

* gcc.dg/torture/pr51071.c: New testcase.

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

gcc/ChangeLog
gcc/gimple.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr51071.c [new file with mode: 0644]

index 380779b..56505f7 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-10  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/51071
+       * gimple.c (gimple_has_side_effects): Remove checking code
+       that doesn't belong here.
+
 2011-11-10  Ira Rosen  <ira.rosen@linaro.org>
 
        PR tree-optimization/51058
index 57f15af..6168d33 100644 (file)
@@ -2457,8 +2457,6 @@ gimple_set_modified (gimple s, bool modifiedp)
 bool
 gimple_has_side_effects (const_gimple s)
 {
-  unsigned i;
-
   if (is_gimple_debug (s))
     return false;
 
@@ -2474,47 +2472,15 @@ gimple_has_side_effects (const_gimple s)
 
   if (is_gimple_call (s))
     {
-      unsigned nargs = gimple_call_num_args (s);
-      tree fn;
+      int flags = gimple_call_flags (s);
 
-      if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
-        return true;
-      else if (gimple_call_flags (s) & ECF_LOOPING_CONST_OR_PURE)
-       /* An infinite loop is considered a side effect.  */
+      /* An infinite loop is considered a side effect.  */
+      if (!(flags & (ECF_CONST | ECF_PURE))
+         || (flags & ECF_LOOPING_CONST_OR_PURE))
        return true;
 
-      if (gimple_call_lhs (s)
-          && TREE_SIDE_EFFECTS (gimple_call_lhs (s)))
-       {
-         gcc_checking_assert (gimple_has_volatile_ops (s));
-         return true;
-       }
-
-      fn = gimple_call_fn (s);
-      if (fn && TREE_SIDE_EFFECTS (fn))
-        return true;
-
-      for (i = 0; i < nargs; i++)
-        if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i)))
-         {
-           gcc_checking_assert (gimple_has_volatile_ops (s));
-           return true;
-         }
-
       return false;
     }
-  else
-    {
-      for (i = 0; i < gimple_num_ops (s); i++)
-       {
-         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 833db9b..c36aa06 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-10  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/51071
+       * gcc.dg/torture/pr51071.c: New testcase.
+
 2011-11-10  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/loop_optimization9.ad[sb]: New test.
diff --git a/gcc/testsuite/gcc.dg/torture/pr51071.c b/gcc/testsuite/gcc.dg/torture/pr51071.c
new file mode 100644 (file)
index 0000000..99af958
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-do compile } */
+
+void foo (void);
+void bar (void *);
+extern int t;
+
+static void kmalloc_large (int size, int flags)
+{
+  (void) size;
+  (void) flags;
+  foo ();
+  bar (({__here:&&__here;}));
+}
+
+static void kmalloc (int size, int flags)
+{
+  if (size)
+    {
+      if ((unsigned long) size > 0x1000)
+       kmalloc_large (size, flags);
+
+      if (flags)
+       bar (({__here:&&__here;}));
+    }
+}
+
+void compress_file_range (int i, int j, int k)
+{
+  int nr_pages = ({j < k;});
+
+  if (i || t)
+    kmalloc (0x1000UL * nr_pages, 0x40UL);
+}