OSDN Git Service

2009-05-26 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 May 2009 14:17:38 +0000 (14:17 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 May 2009 14:17:38 +0000 (14:17 +0000)
PR middle-end/40248
Revert
* expr.c (expand_expr_real_1): Avoid calling do_store_flag
with mismatched comparison modes.

* expr.c (expand_expr_real_1): Expand the operand of a
VIEW_CONVERT_EXPR in its natural mode.

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

gcc/ChangeLog
gcc/expr.c

index 0c0647a..10dd634 100644 (file)
@@ -1,3 +1,13 @@
+2009-05-26  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/40248
+       Revert
+       * expr.c (expand_expr_real_1): Avoid calling do_store_flag
+       with mismatched comparison modes.
+
+       * expr.c (expand_expr_real_1): Expand the operand of a
+       VIEW_CONVERT_EXPR in its natural mode.
+
 2009-05-26  Ian Lance Taylor  <iant@google.com>
 
        * Makefile.in (COMPILER, COMPILER_FLAGS): Define.
index c2524f2..fd27483 100644 (file)
@@ -8248,7 +8248,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
       }
 
       if (!op0)
-       op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier);
+       op0 = expand_expr (TREE_OPERAND (exp, 0),
+                          NULL_RTX, VOIDmode, modifier);
 
       /* If the input and output modes are both the same, we are done.  */
       if (mode == GET_MODE (op0))
@@ -9042,12 +9043,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
     case LTGT_EXPR:
       temp = do_store_flag (exp,
                            modifier != EXPAND_STACK_PARM ? target : NULL_RTX,
-                           (tmode != VOIDmode
-                            /* do_store_flag does not handle target modes
-                               of a different class than the comparison mode.
-                               Avoid ICEing in convert_move.  */
-                            && GET_MODE_CLASS (tmode) == GET_MODE_CLASS (mode))
-                           ? tmode : mode);
+                           tmode != VOIDmode ? tmode : mode);
       if (temp != 0)
        return temp;