Fix ia64-linux glibc intl/loadmsgcat.c miscompilation.
authorJim Wilson <wilson@cygnus.com>
Tue, 12 Sep 2000 19:06:05 +0000 (19:06 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 12 Sep 2000 19:06:05 +0000 (12:06 -0700)
* ifcvt.c (noce_process_if_block): If A and B are the same, and no
else block, and X has side-effects, then fail.

From-SVN: r36373

gcc/ChangeLog
gcc/ifcvt.c

index 1520949..19e9f54 100644 (file)
@@ -1,3 +1,8 @@
+2000-09-12  Jim Wilson  <wilson@cygnus.com>
+
+       * ifcvt.c (noce_process_if_block): If A and B are the same, and no
+       else block, and X has side-effects, then fail.
+
 2000-09-12  Greg McGary  <greg@mcgary.org>
 
        * config/mips/mips-protos.h
index 901bd42..3ca0e6c 100644 (file)
@@ -1247,6 +1247,11 @@ noce_process_if_block (test_bb, then_bb, else_bb, join_bb)
          reorder_insns (insn_b, insn_b, PREV_INSN (if_info.cond_earliest));
          insn_b = NULL_RTX;
        }
+      /* If we have "x = b; if (...) x = a;", and x has side-effects, then
+        x must be executed twice.  */
+      else if (insn_b && side_effects_p (orig_x))
+       return FALSE;
+       
       x = orig_x;
       goto success;
     }