trans-intrinsic.c (conv_intrinsic_ieee_is_negative): Use type generic BUILT_IN_SIGNBIT.
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 16 Aug 2015 16:37:18 +0000 (16:37 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 16 Aug 2015 16:37:18 +0000 (16:37 +0000)
* 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
gcc/fortran/f95-lang.c
gcc/fortran/mathbuiltins.def
gcc/fortran/trans-intrinsic.c

index cede36efbf245fb10f990b738182a4ef9ccdecc4..4a58499de54a2198a27ca5ed69b261029c760bb9 100644 (file)
@@ -1,3 +1,14 @@
+2015-08-16  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       * 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  <fxcoudert@gcc.gnu.org>
 
        PR fortran/41387
index f73bc08aba6c1f584ec7426a34f0f0e3e6e31f24..c42d0ddeba7296ea4f78d62300ad1896f4773f46 100644 (file)
@@ -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) \
index aee04b8a59e14332ec9b0b835ba38fb55fe256f9..5c86f60ee7f91a1fb240df3957d8500d8aab0324 100644 (file)
@@ -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)
index 1aa299be21a6a1b83f41327892c95108684b30ad..60e18b8eaf56e55d910fa72f80efe3be00926187 100644 (file)
@@ -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);