summaryrefslogtreecommitdiff
path: root/gcc/convert.c
diff options
context:
space:
mode:
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-19 03:20:04 +0000
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-19 03:20:04 +0000
commit0405708bc2e073b1dcabef5f6cb77cfbcc9a2333 (patch)
tree1789c618755f2ba2580988dfc66c1b24db0fd9d2 /gcc/convert.c
parent3180c04a1b60af1aa4b90946f57a3bcb5d0ddfc3 (diff)
downloadgcc-0405708bc2e073b1dcabef5f6cb77cfbcc9a2333.tar.gz
* convert.c (convert_to_real): Reformat using switch stmt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79667 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/convert.c')
-rw-r--r--gcc/convert.c70
1 files changed, 37 insertions, 33 deletions
diff --git a/gcc/convert.c b/gcc/convert.c
index 554cd48ea23..7224277206b 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -131,44 +131,48 @@ convert_to_real (tree type, tree expr)
present in runtime. */
/* Convert (float)sqrt((double)x) where x is float into sqrtf(x) */
if (optimize
- && (fcode == BUILT_IN_SQRT
- || fcode == BUILT_IN_SQRTL
- || fcode == BUILT_IN_SIN
- || fcode == BUILT_IN_SINL
- || fcode == BUILT_IN_COS
- || fcode == BUILT_IN_COSL
- || fcode == BUILT_IN_EXP
- || fcode == BUILT_IN_EXPL
- || fcode == BUILT_IN_LOG
- || fcode == BUILT_IN_LOGL)
&& (TYPE_MODE (type) == TYPE_MODE (double_type_node)
|| TYPE_MODE (type) == TYPE_MODE (float_type_node)))
{
- tree arg0 = strip_float_extensions (TREE_VALUE (TREE_OPERAND (expr, 1)));
- tree newtype = type;
-
- /* We have (outertype)sqrt((innertype)x). Choose the wider mode from
- the both as the safe type for operation. */
- if (TYPE_PRECISION (TREE_TYPE (arg0)) > TYPE_PRECISION (type))
- newtype = TREE_TYPE (arg0);
-
- /* Be careful about integer to fp conversions.
- These may overflow still. */
- if (FLOAT_TYPE_P (TREE_TYPE (arg0))
- && TYPE_PRECISION (newtype) < TYPE_PRECISION (itype)
- && (TYPE_MODE (newtype) == TYPE_MODE (double_type_node)
- || TYPE_MODE (newtype) == TYPE_MODE (float_type_node)))
- {
- tree arglist;
- tree fn = mathfn_built_in (newtype, fcode);
-
- if (fn)
+ switch (fcode)
+ {
+#define CASE_MATHFN(FN) case BUILT_IN_##FN: case BUILT_IN_##FN##L:
+ CASE_MATHFN (SQRT)
+ CASE_MATHFN (SIN)
+ CASE_MATHFN (COS)
+ CASE_MATHFN (EXP)
+ CASE_MATHFN (LOG)
+#undef CASE_MATHFN
{
- arglist = build_tree_list (NULL_TREE, fold (convert_to_real (newtype, arg0)));
- expr = build_function_call_expr (fn, arglist);
- if (newtype == type)
- return expr;
+ tree arg0 = strip_float_extensions (TREE_VALUE (TREE_OPERAND (expr, 1)));
+ tree newtype = type;
+
+ /* We have (outertype)sqrt((innertype)x). Choose the wider mode from
+ the both as the safe type for operation. */
+ if (TYPE_PRECISION (TREE_TYPE (arg0)) > TYPE_PRECISION (type))
+ newtype = TREE_TYPE (arg0);
+
+ /* Be careful about integer to fp conversions.
+ These may overflow still. */
+ if (FLOAT_TYPE_P (TREE_TYPE (arg0))
+ && TYPE_PRECISION (newtype) < TYPE_PRECISION (itype)
+ && (TYPE_MODE (newtype) == TYPE_MODE (double_type_node)
+ || TYPE_MODE (newtype) == TYPE_MODE (float_type_node)))
+ {
+ tree arglist;
+ tree fn = mathfn_built_in (newtype, fcode);
+
+ if (fn)
+ {
+ arglist = build_tree_list (NULL_TREE, fold (convert_to_real (newtype, arg0)));
+ expr = build_function_call_expr (fn, arglist);
+ if (newtype == type)
+ return expr;
+ }
+ }
}
+ default:
+ break;
}
}
if (optimize