aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-03-23 17:28:26 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-03-23 17:28:26 -0500
commit4635f7488070db8d8262cec5f962bbef3bf06575 (patch)
treea3c9eae29e44d80eeaab2279e9b9a5254f5de678 /gcc
parenta20dcf46c04b7bc8533b3e6c6a040c9f7083e6e6 (diff)
downloadgcc-4635f7488070db8d8262cec5f962bbef3bf06575.zip
gcc-4635f7488070db8d8262cec5f962bbef3bf06575.tar.gz
gcc-4635f7488070db8d8262cec5f962bbef3bf06575.tar.bz2
(simplify_rtx, case FLOAT_TRUNCATE): Simplify
case of (float_truncate (abs (float_extend X))). From-SVN: r6857
Diffstat (limited to 'gcc')
-rw-r--r--gcc/combine.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index e64add4..077483f 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -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