diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2019-02-20 22:58:45 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2019-02-20 22:58:45 +0100 |
commit | c5a32f1ae9300e3fa4c4d8d59bc178aec6600c19 (patch) | |
tree | 75d457b4e1b306cb6d17192e21db47195672d6be /gcc | |
parent | 1ed28eda9f29927b4c08f50cecb8a43e5fbe1d81 (diff) | |
download | gcc-c5a32f1ae9300e3fa4c4d8d59bc178aec6600c19.zip gcc-c5a32f1ae9300e3fa4c4d8d59bc178aec6600c19.tar.gz gcc-c5a32f1ae9300e3fa4c4d8d59bc178aec6600c19.tar.bz2 |
re PR target/89397 (ICE in build_call_expr_loc_array at gcc/tree.c:11563 since r229082)
PR target/89397
* config/i386/i386.c (ix86_atomic_assign_expand_fenv): Check
TARGET_SSE in addition to TARGET_SSE_MATH.
(ix86_excess_precision): Ditto.
(ix86_float_exceptions_rounding_supported_p): Ditto.
(use_rsqrt_p): Ditto.
* config/i386/sse.md (rsqrt<mode>2): Ditto.
From-SVN: r269054
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 10 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 75ff134..f164119 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2019-02-20 Uroš Bizjak <ubizjak@gmail.com> + + PR target/89397 + * config/i386/i386.c (ix86_atomic_assign_expand_fenv): Check + TARGET_SSE in addition to TARGET_SSE_MATH. + + (ix86_excess_precision): Ditto. + (ix86_float_exceptions_rounding_supported_p): Ditto. + (use_rsqrt_p): Ditto. + * config/i386/sse.md (rsqrt<mode>2): Ditto. + 2019-02-20 David Malcolm <dmalcolm@redhat.com> PR c/89410 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 591a7cd..a58ddca 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -39215,7 +39215,7 @@ ix86_vectorize_builtin_scatter (const_tree vectype, static bool use_rsqrt_p () { - return (TARGET_SSE_MATH + return (TARGET_SSE && TARGET_SSE_MATH && flag_finite_math_only && !flag_trapping_math && flag_unsafe_math_optimizations); @@ -50681,7 +50681,7 @@ ix86_float_exceptions_rounding_supported_p (void) there is no adddf3 pattern (since x87 floating point only has XFmode operations) so the default hook implementation gets this wrong. */ - return TARGET_80387 || TARGET_SSE_MATH; + return TARGET_80387 || (TARGET_SSE && TARGET_SSE_MATH); } /* Implement TARGET_ATOMIC_ASSIGN_EXPAND_FENV. */ @@ -50689,7 +50689,7 @@ ix86_float_exceptions_rounding_supported_p (void) static void ix86_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update) { - if (!TARGET_80387 && !TARGET_SSE_MATH) + if (!TARGET_80387 && !(TARGET_SSE && TARGET_SSE_MATH)) return; tree exceptions_var = create_tmp_var_raw (integer_type_node); if (TARGET_80387) @@ -50724,7 +50724,7 @@ ix86_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update) tree update_fldenv = build_call_expr (fldenv, 1, fenv_addr); *update = build2 (COMPOUND_EXPR, void_type_node, *update, update_fldenv); } - if (TARGET_SSE_MATH) + if (TARGET_SSE && TARGET_SSE_MATH) { tree mxcsr_orig_var = create_tmp_var_raw (unsigned_type_node); tree mxcsr_mod_var = create_tmp_var_raw (unsigned_type_node); @@ -51014,7 +51014,7 @@ ix86_excess_precision (enum excess_precision_type type) return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; else if (!TARGET_MIX_SSE_I387) { - if (!TARGET_SSE_MATH) + if (!(TARGET_SSE && TARGET_SSE_MATH)) return FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE; else if (TARGET_SSE2) return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 8036136..ac29949 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -1972,7 +1972,7 @@ [(set (match_operand:VF1_128_256 0 "register_operand") (unspec:VF1_128_256 [(match_operand:VF1_128_256 1 "vector_operand")] UNSPEC_RSQRT))] - "TARGET_SSE_MATH" + "TARGET_SSE && TARGET_SSE_MATH" { ix86_emit_swsqrtsf (operands[0], operands[1], <MODE>mode, true); DONE; @@ -1983,7 +1983,7 @@ (unspec:V16SF [(match_operand:V16SF 1 "vector_operand")] UNSPEC_RSQRT28))] - "TARGET_SSE_MATH && TARGET_AVX512ER" + "TARGET_AVX512ER && TARGET_SSE_MATH" { ix86_emit_swsqrtsf (operands[0], operands[1], V16SFmode, true); DONE; |