gcc/
authorkyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Nov 2011 08:41:55 +0000 (08:41 +0000)
committerkyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Nov 2011 08:41:55 +0000 (08:41 +0000)
PR rtl-optimization/47698
* ifconv.c (noce_operand_ok): prevent CMOV generation
for volatile mem.

gcc/testsuite/
PR rtl-optimization/47698
* gcc.target/i386/47698.c: New test.

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

gcc/ChangeLog
gcc/ifcvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/47698.c [new file with mode: 0644]

index f8f33d9..95809a3 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-07  Sergey Ostanevich  <sergos.gnu@gmail.com>
+
+       PR rtl-optimization/47698
+       * ifconv.c (noce_operand_ok): prevent CMOV generation
+       for volatile mem.
+
 2011-11-07  Tristan Gingold  <gingold@adacore.com>
 
        * common/config/alpha/alpha-common.c (alpha_option_init_struct):
index 784e2e8..3b05c2a 100644 (file)
@@ -2329,12 +2329,12 @@ noce_operand_ok (const_rtx op)
 {
   /* We special-case memories, so handle any of them with
      no address side effects.  */
-  if (MEM_P (op))
-    return ! side_effects_p (XEXP (op, 0));
-
   if (side_effects_p (op))
     return FALSE;
 
+  if (MEM_P (op))
+    return ! side_effects_p (XEXP (op, 0));
+
   return ! may_trap_p (op);
 }
 
index 1f9aa81..7e7209c 100644 (file)
@@ -1,3 +1,9 @@
+
+2011-11-07  Sergey Ostanevich  <sergos.gnu@gmail.com>
+
+       PR rtl-optimization/47698
+       * gcc.target/i386/47698.c: New test.
+
 2011-11-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/35688
diff --git a/gcc/testsuite/gcc.target/i386/47698.c b/gcc/testsuite/gcc.target/i386/47698.c
new file mode 100644 (file)
index 0000000..2c75109
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-options "-Os" } */
+/* { dg-final { scan-assembler-not "cmov" } } */
+
+extern volatile unsigned long mmio;
+unsigned long foo(int cond)
+{
+      if (cond)
+              return mmio;
+        return 0;
+}