diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2018-07-16 17:11:57 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2018-07-16 17:11:57 +0200 |
commit | f4eafec9bc30855c45cfe86a0b04b88719516e76 (patch) | |
tree | fb66d8bc9abfcd970df7650dfbc6f6afea97e03b /gcc | |
parent | e2144dde6e6d6c965885121697cbbfd2aa25a9bc (diff) | |
download | gcc-f4eafec9bc30855c45cfe86a0b04b88719516e76.zip gcc-f4eafec9bc30855c45cfe86a0b04b88719516e76.tar.gz gcc-f4eafec9bc30855c45cfe86a0b04b88719516e76.tar.bz2 |
re PR middle-end/86511 (Traps are generated for non-trapping compares)
PR target/86511
* expmed.c (emit_store_flag): Do not emit setcc followed by a
conditional move when trapping comparison was split to a
non-trapping one (and vice versa).
From-SVN: r262736
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/expmed.c | 5 |
2 files changed, 17 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 56e1ec3..b4a8151 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-07-16 Uros Bizjak <ubizjak@gmail.com> + + PR target/86511 + * expmed.c (emit_store_flag): Do not emit setcc followed by a + conditional move when trapping comparison was split to a + non-trapping one (and vice versa). + 2018-07-16 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390.c (s390_function_profiler): Generate nops @@ -126,11 +133,12 @@ when result_eq is false. (expand_builtin_strcmp): Inline the calls first. (expand_builtin_strncmp): Likewise. - (inline_string_cmp): New routine. Expand a string compare + (inline_string_cmp): New routine. Expand a string compare call by using a sequence of char comparison. (inline_expand_builtin_string_cmp): New routine. Inline expansion a call to str(n)cmp/memcmp. - * doc/invoke.texi (--param builtin-string-cmp-inline-length): New option. + * doc/invoke.texi (--param builtin-string-cmp-inline-length): + New option. * params.def (BUILTIN_STRING_CMP_INLINE_LENGTH): New. 2018-07-13 Richard Earnshaw <rearnsha@arm.com> @@ -724,9 +732,9 @@ * config.gcc (riscv*-*-*): When setting xlen, handle riscv-*. -2018-07-05 Indu Bhagat <indu.bhagat@oracle.com> +2018-07-05 Indu Bhagat <indu.bhagat@oracle.com> - * config/aarch64/aarch64-simd.md: correct flags text for + * config/aarch64/aarch64-simd.md: correct flags text for MIN_EXPR replacement. 2018-07-05 James Clarke <jrtc27@jrtc27.com> diff --git a/gcc/expmed.c b/gcc/expmed.c index b01e194..f114eb4 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -6038,6 +6038,11 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, if (!HAVE_conditional_move) return 0; + /* Do not turn a trapping comparison into a non-trapping one. */ + if ((code != EQ && code != NE && code != UNEQ && code != LTGT) + && flag_trapping_math) + return 0; + /* Try using a setcc instruction for ORDERED/UNORDERED, followed by a conditional move. */ tem = emit_store_flag_1 (subtarget, first_code, op0, op1, mode, 0, |