* expr.c (force_operand): Use convert_to_mode for conversions.
authorJ"orn Rennecke <joern.rennecke@st.com>
Wed, 7 Dec 2005 23:49:43 +0000 (23:49 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Wed, 7 Dec 2005 23:49:43 +0000 (23:49 +0000)
From-SVN: r108196

gcc/ChangeLog
gcc/expr.c

index d743f29c8132b16401f8e3f3d0fed2a062a515c3..189de9bd16accde2d873ccdd4fe646c924e45485 100644 (file)
@@ -1,3 +1,7 @@
+2005-12-07  J"orn Rennecke <joern.rennecke@st.com>
+
+       * expr.c (force_operand): Use convert_to_mode for conversions.
+
 2005-12-07  J"orn Rennecke <joern.rennecke@st.com>
 
        * reload.h (reg_equiv_invariant): Declare.
index aaca86309e769dc6160a3dd84b5940a7fc1f4613..de66a0d3173a33e8ad094645654ae2250a89ff65 100644 (file)
@@ -5867,8 +5867,20 @@ force_operand (rtx value, rtx target)
     }
   if (UNARY_P (value))
     {
+      int unsignedp = 0;
+
       op1 = force_operand (XEXP (value, 0), NULL_RTX);
-      return expand_simple_unop (GET_MODE (value), code, op1, target, 0);
+      switch (code)
+       {
+       case ZERO_EXTEND: case UNSIGNED_FIX: case UNSIGNED_FLOAT:
+         unsignedp = 1;
+         /* fall through.  */
+       case TRUNCATE:
+       case SIGN_EXTEND: case FIX: case FLOAT:
+         return convert_to_mode (GET_MODE (value), op1, unsignedp);
+       default:
+         return expand_simple_unop (GET_MODE (value), code, op1, target, 0);
+       }
     }
 
 #ifdef INSN_SCHEDULING