(simplify_rtx, case FLOAT_TRUNCATE): Simplify
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 23 Mar 1994 22:28:26 +0000 (17:28 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 23 Mar 1994 22:28:26 +0000 (17:28 -0500)
case of (float_truncate (abs (float_extend X))).

From-SVN: r6857

gcc/combine.c

index e64add4b43e914642bab63d5719e9b88c561b907..077483f42aa035f903daef7e059c2d3c6717c1f5 100644 (file)
@@ -3456,6 +3456,15 @@ simplify_rtx (x, op0_mode, last, in_dest)
       if (GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND
          && GET_MODE (XEXP (XEXP (x, 0), 0)) == mode)
        return XEXP (XEXP (x, 0), 0);
+
+      /* (float_truncate:SF (OP:DF (float_extend:DF foo:sf))) is
+        (OP:SF foo:SF) if OP is NEG or ABS.  */
+      if ((GET_CODE (XEXP (x, 0)) == ABS
+          || GET_CODE (XEXP (x, 0)) == NEG)
+         && GET_CODE (XEXP (XEXP (x, 0), 0)) == FLOAT_EXTEND
+         && GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == mode)
+       return gen_unary (GET_CODE (XEXP (x, 0)),
+                         mode, XEXP (XEXP (XEXP (x, 0), 0), 0));
       break;  
 
 #ifdef HAVE_cc0