From c541d5217e6571a0a5d8bf56db831c1ad63756ff Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sun, 16 Aug 2015 16:37:18 +0000 Subject: [PATCH] trans-intrinsic.c (conv_intrinsic_ieee_is_negative): Use type generic BUILT_IN_SIGNBIT. * trans-intrinsic.c (conv_intrinsic_ieee_is_negative): Use type generic BUILT_IN_SIGNBIT. (conv_intrinsic_ieee_copy_sign): Likewise. * f95-lang.c (gfc_init_builtin_functions): Add BUILT_IN_ISINF, BUILT_IN_ISINF_SIGN, BUILT_IN_SIGNBIT, BUILT_IN_ISLESS, BUILT_IN_ISLESSGREATER, BUILT_IN_ISGREATER. Remove non-type generic variants of BUILT_IN_SIGNBIT. * mathbuiltins.def: Remove SIGNBIT. From-SVN: r226924 --- gcc/fortran/ChangeLog | 11 +++++++++++ gcc/fortran/f95-lang.c | 35 ++++++++++++++++++----------------- gcc/fortran/mathbuiltins.def | 1 - gcc/fortran/trans-intrinsic.c | 15 +++++++-------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index cede36efbf2..4a58499de54 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,14 @@ +2015-08-16 Francois-Xavier Coudert + + * trans-intrinsic.c (conv_intrinsic_ieee_is_negative): Use type + generic BUILT_IN_SIGNBIT. + (conv_intrinsic_ieee_copy_sign): Likewise. + * f95-lang.c (gfc_init_builtin_functions): Add BUILT_IN_ISINF, + BUILT_IN_ISINF_SIGN, BUILT_IN_SIGNBIT, BUILT_IN_ISLESS, + BUILT_IN_ISLESSGREATER, BUILT_IN_ISGREATER. Remove non-type generic + variants of BUILT_IN_SIGNBIT. + * mathbuiltins.def: Remove SIGNBIT. + 2015-08-16 Francois-Xavier Coudert PR fortran/41387 diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index f73bc08aba6..c42d0ddeba7 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -975,37 +975,38 @@ gfc_init_builtin_functions (void) gfc_define_builtin ("__builtin_realloc", ftype, BUILT_IN_REALLOC, "realloc", ATTR_NOTHROW_LEAF_LIST); + /* Type-generic floating-point classification built-ins. */ + ftype = build_function_type_list (integer_type_node, void_type_node, NULL_TREE); - gfc_define_builtin ("__builtin_isnan", ftype, BUILT_IN_ISNAN, - "__builtin_isnan", ATTR_CONST_NOTHROW_LEAF_LIST); gfc_define_builtin ("__builtin_isfinite", ftype, BUILT_IN_ISFINITE, "__builtin_isfinite", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isinf", ftype, BUILT_IN_ISINF, + "__builtin_isinf", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isinf_sign", ftype, BUILT_IN_ISINF_SIGN, + "__builtin_isinf_sign", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isnan", ftype, BUILT_IN_ISNAN, + "__builtin_isnan", ATTR_CONST_NOTHROW_LEAF_LIST); gfc_define_builtin ("__builtin_isnormal", ftype, BUILT_IN_ISNORMAL, "__builtin_isnormal", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_signbit", ftype, BUILT_IN_SIGNBIT, + "__builtin_signbit", ATTR_CONST_NOTHROW_LEAF_LIST); ftype = build_function_type_list (integer_type_node, void_type_node, void_type_node, NULL_TREE); - gfc_define_builtin ("__builtin_isunordered", ftype, BUILT_IN_ISUNORDERED, - "__builtin_isunordered", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isless", ftype, BUILT_IN_ISLESS, + "__builtin_isless", ATTR_CONST_NOTHROW_LEAF_LIST); gfc_define_builtin ("__builtin_islessequal", ftype, BUILT_IN_ISLESSEQUAL, "__builtin_islessequal", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_islessgreater", ftype, BUILT_IN_ISLESSGREATER, + "__builtin_islessgreater", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isgreater", ftype, BUILT_IN_ISGREATER, + "__builtin_isgreater", ATTR_CONST_NOTHROW_LEAF_LIST); gfc_define_builtin ("__builtin_isgreaterequal", ftype, BUILT_IN_ISGREATEREQUAL, "__builtin_isgreaterequal", ATTR_CONST_NOTHROW_LEAF_LIST); - - ftype = build_function_type_list (integer_type_node, - float_type_node, NULL_TREE); - gfc_define_builtin("__builtin_signbitf", ftype, BUILT_IN_SIGNBITF, - "signbitf", ATTR_CONST_NOTHROW_LEAF_LIST); - ftype = build_function_type_list (integer_type_node, - double_type_node, NULL_TREE); - gfc_define_builtin("__builtin_signbit", ftype, BUILT_IN_SIGNBIT, - "signbit", ATTR_CONST_NOTHROW_LEAF_LIST); - ftype = build_function_type_list (integer_type_node, - long_double_type_node, NULL_TREE); - gfc_define_builtin("__builtin_signbitl", ftype, BUILT_IN_SIGNBITL, - "signbitl", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_isunordered", ftype, BUILT_IN_ISUNORDERED, + "__builtin_isunordered", ATTR_CONST_NOTHROW_LEAF_LIST); #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \ diff --git a/gcc/fortran/mathbuiltins.def b/gcc/fortran/mathbuiltins.def index aee04b8a59e..5c86f60ee7f 100644 --- a/gcc/fortran/mathbuiltins.def +++ b/gcc/fortran/mathbuiltins.def @@ -72,5 +72,4 @@ OTHER_BUILTIN (REMAINDER, "remainder", 2, true) OTHER_BUILTIN (RINT, "rint", 1, true) OTHER_BUILTIN (ROUND, "round", 1, true) OTHER_BUILTIN (SCALBN, "scalbn", scalbn, true) -OTHER_BUILTIN (SIGNBIT, "signbit", iround, true) OTHER_BUILTIN (TRUNC, "trunc", 1, true) diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 1aa299be21a..60e18b8eaf5 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -7417,8 +7417,7 @@ conv_intrinsic_ieee_is_normal (gfc_se * se, gfc_expr * expr) static void conv_intrinsic_ieee_is_negative (gfc_se * se, gfc_expr * expr) { - tree arg, signbit, isnan, decl; - int argprec; + tree arg, signbit, isnan; /* Convert arg, evaluate it only once. */ conv_ieee_function_args (se, expr, &arg, 1); @@ -7429,9 +7428,9 @@ conv_intrinsic_ieee_is_negative (gfc_se * se, gfc_expr * expr) 1, arg); STRIP_TYPE_NOPS (isnan); - argprec = TYPE_PRECISION (TREE_TYPE (arg)); - decl = builtin_decl_for_precision (BUILT_IN_SIGNBIT, argprec); - signbit = build_call_expr_loc (input_location, decl, 1, arg); + signbit = build_call_expr_loc (input_location, + builtin_decl_explicit (BUILT_IN_SIGNBIT), + 1, arg); signbit = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, signbit, integer_zero_node); @@ -7579,9 +7578,9 @@ conv_intrinsic_ieee_copy_sign (gfc_se * se, gfc_expr * expr) conv_ieee_function_args (se, expr, args, 2); /* Get the sign of the second argument. */ - argprec = TYPE_PRECISION (TREE_TYPE (args[1])); - decl = builtin_decl_for_precision (BUILT_IN_SIGNBIT, argprec); - sign = build_call_expr_loc (input_location, decl, 1, args[1]); + sign = build_call_expr_loc (input_location, + builtin_decl_explicit (BUILT_IN_SIGNBIT), + 1, args[1]); sign = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, sign, integer_zero_node); -- 2.30.2