From f4eafec9bc30855c45cfe86a0b04b88719516e76 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 16 Jul 2018 17:11:57 +0200 Subject: 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 --- gcc/expmed.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'gcc/expmed.c') 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, -- cgit v1.1