diff options
author | Dale Johannesen <dalej@apple.com> | 2005-10-05 17:29:41 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@gcc.gnu.org> | 2005-10-05 17:29:41 +0000 |
commit | 9f85ecfe7faf2e502afc75d9ead39be80ad15f23 (patch) | |
tree | adf749950f317fb0643a322ff56d041135095cf0 /gcc/convert.c | |
parent | 8acdc22e8e9a6a0c0137e4701fac2740cbb6210a (diff) | |
download | gcc-9f85ecfe7faf2e502afc75d9ead39be80ad15f23.zip gcc-9f85ecfe7faf2e502afc75d9ead39be80ad15f23.tar.gz gcc-9f85ecfe7faf2e502afc75d9ead39be80ad15f23.tar.bz2 |
convert.c (convert_to_real): Don't convert (float)floor(double d) to floorf((float)d).
2005-10-05 Dale Johannesen <dalej@apple.com>
* convert.c (convert_to_real): Don't convert
(float)floor(double d) to floorf((float)d).
From-SVN: r105006
Diffstat (limited to 'gcc/convert.c')
-rw-r--r-- | gcc/convert.c | 32 |
1 files changed, 3 insertions, 29 deletions
diff --git a/gcc/convert.c b/gcc/convert.c index 5ddae36..471d93d 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -200,35 +200,9 @@ convert_to_real (tree type, tree expr) break; } } - if (optimize - && (((fcode == BUILT_IN_FLOORL - || fcode == BUILT_IN_CEILL - || fcode == BUILT_IN_ROUNDL - || fcode == BUILT_IN_RINTL - || fcode == BUILT_IN_TRUNCL - || fcode == BUILT_IN_NEARBYINTL) - && (TYPE_MODE (type) == TYPE_MODE (double_type_node) - || TYPE_MODE (type) == TYPE_MODE (float_type_node))) - || ((fcode == BUILT_IN_FLOOR - || fcode == BUILT_IN_CEIL - || fcode == BUILT_IN_ROUND - || fcode == BUILT_IN_RINT - || fcode == BUILT_IN_TRUNC - || fcode == BUILT_IN_NEARBYINT) - && (TYPE_MODE (type) == TYPE_MODE (float_type_node))))) - { - tree fn = mathfn_built_in (type, fcode); - - if (fn) - { - tree arg0 = strip_float_extensions (TREE_VALUE (TREE_OPERAND (expr, - 1))); - tree arglist = build_tree_list (NULL_TREE, - fold (convert_to_real (type, arg0))); - - return build_function_call_expr (fn, arglist); - } - } + /* This code formerly changed (float)floor(double d) to + floorf((float)d). This is incorrect, because (float)d uses + round-to-nearest and can round up to the next integer. */ /* Propagate the cast into the operation. */ if (itype != type && FLOAT_TYPE_P (type)) |