]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expr.c (expand_expr, [...]): Don't use gen_lowpart on non-integer modes.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Sat, 3 May 2003 14:30:07 +0000 (14:30 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 3 May 2003 14:30:07 +0000 (10:30 -0400)
* expr.c (expand_expr, case VIEW_CONVERT_EXPR): Don't use
gen_lowpart on non-integer modes.

From-SVN: r66430

gcc/ChangeLog
gcc/expr.c

index 58469126a53f673004ef10cd92cc69d72bbb1cff..f307619a02c747afbd03a4ce1e59ff536a262348 100644 (file)
@@ -19,6 +19,9 @@
 
 2003-05-03  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * expr.c (expand_expr, case VIEW_CONVERT_EXPR): Don't use
+       gen_lowpart on non-integer modes.
+
        * stor-layout.c (place_field): When adjusting offset_align, use
        desired_align, not DECL_ALIGN.
 
index b64319a08a70660b3b13840ce0ef0e782a95200f..7fd347be3b1d281da4a8734522caeef0905b0ee0 100644 (file)
@@ -7959,12 +7959,14 @@ expand_expr (exp, target, tmode, modifier)
       op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier);
 
       /* If the input and output modes are both the same, we are done.
-        Otherwise, if neither mode is BLKmode and both are within a word, we
-        can use gen_lowpart.  If neither is true, make sure the operand is
-        in memory and convert the MEM to the new mode.  */
+        Otherwise, if neither mode is BLKmode and both are integral and within
+        a word, we can use gen_lowpart.  If neither is true, make sure the
+        operand is in memory and convert the MEM to the new mode.  */
       if (TYPE_MODE (type) == GET_MODE (op0))
        ;
       else if (TYPE_MODE (type) != BLKmode && GET_MODE (op0) != BLKmode
+              && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
+              && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT
               && GET_MODE_SIZE (TYPE_MODE (type)) <= UNITS_PER_WORD
               && GET_MODE_SIZE (GET_MODE (op0)) <= UNITS_PER_WORD)
        op0 = gen_lowpart (TYPE_MODE (type), op0);