public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Aldy Hernandez <aldyh@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2265] A == 0 ? A : -A same as -A (when A is 0.0) Date: Tue, 30 Aug 2022 09:27:42 +0000 (GMT) [thread overview] Message-ID: <20220830092742.C2F14385C335@sourceware.org> (raw) https://gcc.gnu.org/g:df8fe4adb0721ab0e4486bc58482b501fe06287d commit r13-2265-gdf8fe4adb0721ab0e4486bc58482b501fe06287d Author: Aldy Hernandez <aldyh@redhat.com> Date: Mon Aug 29 17:52:20 2022 +0200 A == 0 ? A : -A same as -A (when A is 0.0) The upcoming work for frange triggers a regression in gcc.dg/tree-ssa/phi-opt-24.c. For -O2 -fno-signed-zeros, we fail to transform the following into -A: float f0(float A) { // A == 0? A : -A same as -A if (A == 0) return A; return -A; } This is because the abs/negative match.pd pattern here: /* abs/negative simplifications moved from fold_cond_expr_with_comparison, Need to handle (A - B) case as fold_cond_expr_with_comparison does. Need to handle UN* comparisons. ... ... Sees IL that has the 0.0 propagated. Instead of: <bb 2> [local count: 1073741824]: if (A_2(D) == 0.0) goto <bb 4>; [34.00%] else goto <bb 3>; [66.00%] <bb 3> [local count: 708669601]: _3 = -A_2(D); <bb 4> [local count: 1073741824]: # _1 = PHI <A_2(D)(2), _3(3)> It now sees: <bb 4> [local count: 1073741824]: # _1 = PHI <0.0(2), _3(3)> which it leaves untouched, causing the if conditional to survive. Changing integger_zerop to zerop fixes the problem. I did not include a testcase, as it's just phi-opt-24.c which will get triggered when I commit the frange with endpoints work. gcc/ChangeLog: * match.pd ((cmp @0 zerop) real_zerop (negate@1 @0)): Add variant for real zero. Diff: --- gcc/match.pd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/match.pd b/gcc/match.pd index 1bb936fc401..f5fec634279 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4804,7 +4804,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (!HONOR_SIGNED_ZEROS (type)) @1)) (simplify - (cnd (cmp @0 zerop) integer_zerop (negate@1 @0)) + (cnd (cmp @0 zerop) zerop (negate@1 @0)) (if (!HONOR_SIGNED_ZEROS (type)) @1)) )
reply other threads:[~2022-08-30 9:27 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220830092742.C2F14385C335@sourceware.org \ --to=aldyh@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).