This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[sh] Add flag_unsafe_math_optimizations to sincossf3
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: kkojima at gcc dot gnu dot org, olegendo at gcc dot gnu dot org
- Date: Sat, 07 Nov 2015 13:27:00 +0000
- Subject: [sh] Add flag_unsafe_math_optimizations to sincossf3
- Authentication-results: sourceware.org; auth=none
builtins.c uses the following code to guard expansions involving optabs:
CASE_FLT_FN (BUILT_IN_EXP):
CASE_FLT_FN (BUILT_IN_EXP10):
CASE_FLT_FN (BUILT_IN_POW10):
CASE_FLT_FN (BUILT_IN_EXP2):
CASE_FLT_FN (BUILT_IN_EXPM1):
CASE_FLT_FN (BUILT_IN_LOGB):
CASE_FLT_FN (BUILT_IN_LOG):
CASE_FLT_FN (BUILT_IN_LOG10):
CASE_FLT_FN (BUILT_IN_LOG2):
CASE_FLT_FN (BUILT_IN_LOG1P):
CASE_FLT_FN (BUILT_IN_TAN):
CASE_FLT_FN (BUILT_IN_ASIN):
CASE_FLT_FN (BUILT_IN_ACOS):
CASE_FLT_FN (BUILT_IN_ATAN):
CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
/* Treat these like sqrt only if unsafe math optimizations are allowed,
because of possible accuracy problems. */
if (! flag_unsafe_math_optimizations)
break;
[...]
CASE_FLT_FN (BUILT_IN_ILOGB):
if (! flag_unsafe_math_optimizations)
break;
[...]
CASE_FLT_FN (BUILT_IN_ATAN2):
CASE_FLT_FN (BUILT_IN_LDEXP):
CASE_FLT_FN (BUILT_IN_SCALB):
CASE_FLT_FN (BUILT_IN_SCALBN):
CASE_FLT_FN (BUILT_IN_SCALBLN):
if (! flag_unsafe_math_optimizations)
break;
[...]
CASE_FLT_FN (BUILT_IN_SIN):
CASE_FLT_FN (BUILT_IN_COS):
if (! flag_unsafe_math_optimizations)
break;
[...]
CASE_FLT_FN (BUILT_IN_SINCOS):
if (! flag_unsafe_math_optimizations)
break;
I think it's really up to the optab to decide whether it's safe
for !flag_unsafe_math_optimizations or not, and AFAICT, all optabs
but sh.md:sincossf3 already check. This patch makes the sh pattern
check too.
Tested on sh-elf. OK to install?
Thanks,
Richard
gcc/
* config/sh/sh.md (sincossf3): Require flag_unsafe_math_optimizations.
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 557a0f0..0c3b9f2 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -13722,7 +13722,7 @@ label:
(unspec:SF [(match_operand:SF 2 "fp_arith_reg_operand")] UNSPEC_FCOSA))
(set (match_operand:SF 1 "nonimmediate_operand")
(unspec:SF [(match_dup 2)] UNSPEC_FSINA))]
- "TARGET_FPU_ANY && TARGET_FSCA"
+ "TARGET_FPU_ANY && TARGET_FSCA && flag_unsafe_math_optimizations"
{
rtx scaled = gen_reg_rtx (SFmode);
rtx truncated = gen_reg_rtx (SImode);