From 73ddd02d12feb31ba6d99d02d8707cb51cd88ab1 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 7 Mar 2012 14:30:01 +0000 Subject: convert.c (strip_float_extensions): Move ... 2012-03-07 Richard Guenther * convert.c (strip_float_extensions): Move ... * tree.c (strip_float_extensions): ... here. From-SVN: r185046 --- gcc/convert.c | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) (limited to 'gcc/convert.c') diff --git a/gcc/convert.c b/gcc/convert.c index dbe2c7e..dc9b7f2 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -90,52 +90,6 @@ convert_to_pointer (tree type, tree expr) } } -/* Avoid any floating point extensions from EXP. */ -tree -strip_float_extensions (tree exp) -{ - tree sub, expt, subt; - - /* For floating point constant look up the narrowest type that can hold - it properly and handle it like (type)(narrowest_type)constant. - This way we can optimize for instance a=a*2.0 where "a" is float - but 2.0 is double constant. */ - if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp))) - { - REAL_VALUE_TYPE orig; - tree type = NULL; - - orig = TREE_REAL_CST (exp); - if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node) - && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) - type = float_type_node; - else if (TYPE_PRECISION (TREE_TYPE (exp)) - > TYPE_PRECISION (double_type_node) - && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) - type = double_type_node; - if (type) - return build_real (type, real_value_truncate (TYPE_MODE (type), orig)); - } - - if (!CONVERT_EXPR_P (exp)) - return exp; - - sub = TREE_OPERAND (exp, 0); - subt = TREE_TYPE (sub); - expt = TREE_TYPE (exp); - - if (!FLOAT_TYPE_P (subt)) - return exp; - - if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt)) - return exp; - - if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt)) - return exp; - - return strip_float_extensions (sub); -} - /* Convert EXPR to some floating-point type TYPE. -- cgit v1.1