aboutsummaryrefslogtreecommitdiff
path: root/gcc/convert.c
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2005-10-05 17:29:41 +0000
committerDale Johannesen <dalej@gcc.gnu.org>2005-10-05 17:29:41 +0000
commit9f85ecfe7faf2e502afc75d9ead39be80ad15f23 (patch)
treeadf749950f317fb0643a322ff56d041135095cf0 /gcc/convert.c
parent8acdc22e8e9a6a0c0137e4701fac2740cbb6210a (diff)
downloadgcc-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.c32
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))