simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from old and new operands...
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 19 Jul 2001 22:42:07 +0000 (22:42 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Thu, 19 Jul 2001 22:42:07 +0000 (22:42 +0000)
2001-07-19  Alexandre Oliva  <aoliva@redhat.com>

* simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from
old and new operands in `<', `3' and `b'.

From-SVN: r44164

gcc/ChangeLog
gcc/simplify-rtx.c

index 9d7ab64223b89cb3701e12a605911e51947ed89e..e427ce579af9317bec85ce26ffe867743610ecd2 100644 (file)
@@ -1,3 +1,8 @@
+2001-07-19  Alexandre Oliva  <aoliva@redhat.com>
+
+       * simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from
+       old and new operands in `<', `3' and `b'.
+
 2001-07-19  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * Makefile.in (emit-rtl.o, c-decl.o): Depend on debug.h.
index 70b7240301f3099115a1345cfd34db1c811b4a11..1d090ba77839bcd42211cfb726127dda7dbd81ca 100644 (file)
@@ -247,21 +247,38 @@ simplify_replace_rtx (x, old, new)
                             simplify_replace_rtx (XEXP (x, 0), old, new),
                             simplify_replace_rtx (XEXP (x, 1), old, new));
     case '<':
-      return
-       simplify_gen_relational (code, mode,
-                                (GET_MODE (XEXP (x, 0)) != VOIDmode
-                                 ? GET_MODE (XEXP (x, 0))
-                                 : GET_MODE (XEXP (x, 1))),
-                                simplify_replace_rtx (XEXP (x, 0), old, new),
-                                simplify_replace_rtx (XEXP (x, 1), old, new));
+      {
+       enum machine_mode op_mode = (GET_MODE (XEXP (x, 0)) != VOIDmode
+                                    ? GET_MODE (XEXP (x, 0))
+                                    : GET_MODE (XEXP (x, 1)));
+       rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new);
+       rtx op1 = simplify_replace_rtx (XEXP (x, 1), old, new);
+
+       return
+         simplify_gen_relational (code, mode,
+                                  (op_mode != VOIDmode
+                                   ? op_mode
+                                   : GET_MODE (op0) != VOIDmode
+                                   ? GET_MODE (op0)
+                                   : GET_MODE (op1)),
+                                  op0, op1);
+      }
 
     case '3':
     case 'b':
-      return
-       simplify_gen_ternary (code, mode, GET_MODE (XEXP (x, 0)),
-                             simplify_replace_rtx (XEXP (x, 0), old, new),
-                             simplify_replace_rtx (XEXP (x, 1), old, new),
-                             simplify_replace_rtx (XEXP (x, 2), old, new));
+      {
+       enum machine_mode op_mode = GET_MODE (XEXP (x, 0));
+       rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new);
+
+       return
+         simplify_gen_ternary (code, mode, 
+                               (op_mode != VOIDmode
+                                ? op_mode
+                                : GET_MODE (op0)),
+                               op0,
+                               simplify_replace_rtx (XEXP (x, 1), old, new),
+                               simplify_replace_rtx (XEXP (x, 2), old, new));
+      }
 
     case 'x':
       /* The only case we try to handle is a SUBREG.  */