[Bug middle-end/102464] Miss optimization for (_Float16) sqrtf ((float) f16)

crazylht at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Oct 19 03:28:57 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102464

--- Comment #8 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Richard Biener from comment #3)
> There's related optimizations in convert () which should ideally move to
> match.pd

When i try to mov convert stuffs to match.pd, i find some "mismatch", there's 3
cases
1. math functions are transformed under condition "optimize"
2. math functions are transformed under condition "optimize &&
flag_unsafe_math_optimizations"
3. math functions are transformed under condition "optimize &&
flag_unsafe_math_optimizations flag_errno_maths"

And for logb, it's case 1, which means it can be transformed w/o
!flag_errno_maths, but according to DEF_C99_BUILTIN        (BUILT_IN_LOGB,
"logb", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO), !flag_errno_maths
is needed and the transformation will be prevented by
gimple-match-head.c:maybe_push_res_to_seq

          /* We can't and should not emit calls to non-const functions.  */
          if (!(flags_from_decl_or_type (decl) & ECF_CONST))
            return NULL;


/* fabsl (extend(x)) -> extend(fabsf(x)), etc., if x is a float.  */
(for froms (BUILT_IN_FABS BUILT_IN_FABSL
            BUILT_IN_LOGB BUILT_IN_LOGBL)
     tos (BUILT_IN_FABSF BUILT_IN_FABSF
          BUILT_IN_LOGBF BUILT_IN_LOGBF)
(simplify
  (froms (convert float_value_p@0))
    (if (optimize && canonicalize_math_p ()
         && mathfn_built_in (TREE_TYPE (@0), froms))
      (convert (tos @0)))))


More information about the Gcc-bugs mailing list