public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/109154] [13/14 regression] jump threading de-optimizes nested floating point comparisons Date: Fri, 14 Jul 2023 10:22:50 +0000 [thread overview] Message-ID: <bug-109154-4-M6iPBvkWdc@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-109154-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109154 --- Comment #66 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Tamar Christina <tnfchris@gcc.gnu.org>: https://gcc.gnu.org/g:d8f5e349772b6652bddb0620bb178290905998b9 commit r14-2516-gd8f5e349772b6652bddb0620bb178290905998b9 Author: Tamar Christina <tamar.christina@arm.com> Date: Fri Jul 14 11:21:12 2023 +0100 ifcvt: Reduce comparisons on conditionals by tracking truths [PR109154] Following on from Jakub's patch in g:de0ee9d14165eebb3d31c84e98260c05c3b33acb these two patches finishes the work fixing the regression and improves codegen. As explained in that commit, ifconvert sorts PHI args in increasing number of occurrences in order to reduce the number of comparisons done while traversing the tree. The remaining task that this patch fixes is dealing with the long chain of comparisons that can be created from phi nodes, particularly when they share any common successor (classical example is a diamond node). on a PHI-node the true and else branches carry a condition, true will carry `a` and false `~a`. The issue is that at the moment GCC tests both `a` and `~a` when the phi node has more than 2 arguments. Clearly this isn't needed. The deeper the nesting of phi nodes the larger the repetition. As an example, for foo (int *f, int d, int e) { for (int i = 0; i < 1024; i++) { int a = f[i]; int t; if (a < 0) t = 1; else if (a < e) t = 1 - a * d; else t = 0; f[i] = t; } } after Jakub's patch we generate: _7 = a_10 < 0; _21 = a_10 >= 0; _22 = a_10 < e_11(D); _23 = _21 & _22; _ifc__42 = _23 ? t_13 : 0; t_6 = _7 ? 1 : _ifc__42 but while better than before it is still inefficient, since in the false branch, where we know ~_7 is true, we still test _21. This leads to superfluous tests for every diamond node. After this patch we generate _7 = a_10 < 0; _22 = a_10 < e_11(D); _ifc__42 = _22 ? t_13 : 0; t_6 = _7 ? 1 : _ifc__42; Which correctly elides the test of _21. This is done by borrowing the vectorizer's helper functions to limit predicate mask usages. Ifcvt will chain conditionals on the false edge (unless specifically inverted) so this patch on creating cond a ? b : c, will register ~a when traversing c. If c is a conditional then c will be simplified to the smaller possible predicate given the assumptions we already know to be true. gcc/ChangeLog: PR tree-optimization/109154 * tree-if-conv.cc (gen_simplified_condition, gen_phi_nest_statement): New. (gen_phi_arg_condition, predicate_scalar_phi): Use it. gcc/testsuite/ChangeLog: PR tree-optimization/109154 * gcc.dg/vect/vect-ifcvt-19.c: New test.
next prev parent reply other threads:[~2023-07-14 10:22 UTC|newest] Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-03-16 11:57 [Bug tree-optimization/109154] New: [13 regression] aarch64 -mcpu=neoverse-v1 microbude performance regression pgodbole at nvidia dot com 2023-03-16 13:11 ` [Bug tree-optimization/109154] " tnfchris at gcc dot gnu.org 2023-03-16 14:58 ` [Bug target/109154] " rguenth at gcc dot gnu.org 2023-03-16 17:03 ` tnfchris at gcc dot gnu.org 2023-03-16 17:03 ` [Bug target/109154] [13 regression] jump threading with de-optimizes nested floating point comparisons tnfchris at gcc dot gnu.org 2023-03-22 10:20 ` [Bug tree-optimization/109154] [13 regression] jump threading " aldyh at gcc dot gnu.org 2023-03-22 10:29 ` avieira at gcc dot gnu.org 2023-03-22 12:22 ` rguenth at gcc dot gnu.org 2023-03-22 12:42 ` rguenth at gcc dot gnu.org 2023-03-22 13:11 ` aldyh at gcc dot gnu.org 2023-03-22 14:00 ` amacleod at redhat dot com 2023-03-22 14:39 ` aldyh at gcc dot gnu.org 2023-03-27 8:09 ` rguenth at gcc dot gnu.org 2023-03-27 9:30 ` jakub at gcc dot gnu.org 2023-03-27 9:42 ` aldyh at gcc dot gnu.org 2023-03-27 9:44 ` jakub at gcc dot gnu.org 2023-03-27 10:18 ` rguenther at suse dot de 2023-03-27 10:40 ` jakub at gcc dot gnu.org 2023-03-27 10:44 ` jakub at gcc dot gnu.org 2023-03-27 10:54 ` rguenth at gcc dot gnu.org 2023-03-27 10:56 ` jakub at gcc dot gnu.org 2023-03-27 10:59 ` jakub at gcc dot gnu.org 2023-03-27 17:07 ` jakub at gcc dot gnu.org 2023-03-28 8:33 ` rguenth at gcc dot gnu.org 2023-03-28 9:01 ` cvs-commit at gcc dot gnu.org 2023-03-28 10:07 ` tnfchris at gcc dot gnu.org 2023-03-28 10:08 ` tnfchris at gcc dot gnu.org 2023-03-28 12:18 ` jakub at gcc dot gnu.org 2023-03-28 12:25 ` rguenth at gcc dot gnu.org 2023-03-28 12:42 ` rguenth at gcc dot gnu.org 2023-03-28 13:19 ` rguenth at gcc dot gnu.org 2023-03-28 13:44 ` jakub at gcc dot gnu.org 2023-03-28 13:52 ` jakub at gcc dot gnu.org 2023-03-28 15:31 ` amacleod at redhat dot com 2023-03-28 15:40 ` jakub at gcc dot gnu.org 2023-03-28 15:53 ` amacleod at redhat dot com 2023-03-28 15:58 ` jakub at gcc dot gnu.org 2023-03-28 16:42 ` amacleod at redhat dot com 2023-03-28 21:12 ` amacleod at redhat dot com 2023-03-29 6:33 ` cvs-commit at gcc dot gnu.org 2023-03-29 6:38 ` rguenth at gcc dot gnu.org 2023-03-29 22:41 ` amacleod at redhat dot com 2023-03-30 18:17 ` cvs-commit at gcc dot gnu.org 2023-04-05 9:28 ` tnfchris at gcc dot gnu.org 2023-04-05 9:34 ` ktkachov at gcc dot gnu.org 2023-04-11 9:36 ` rguenth at gcc dot gnu.org 2023-04-13 16:54 ` jakub at gcc dot gnu.org 2023-04-13 17:25 ` rguenther at suse dot de 2023-04-13 17:29 ` jakub at gcc dot gnu.org 2023-04-14 18:10 ` jakub at gcc dot gnu.org 2023-04-14 18:14 ` jakub at gcc dot gnu.org 2023-04-14 18:22 ` jakub at gcc dot gnu.org 2023-04-14 19:09 ` jakub at gcc dot gnu.org 2023-04-15 10:10 ` cvs-commit at gcc dot gnu.org 2023-04-17 11:07 ` jakub at gcc dot gnu.org 2023-04-25 18:32 ` [Bug tree-optimization/109154] [13/14 " tnfchris at gcc dot gnu.org 2023-04-25 18:34 ` jakub at gcc dot gnu.org 2023-04-26 6:58 ` rguenth at gcc dot gnu.org 2023-04-26 9:43 ` tnfchris at gcc dot gnu.org 2023-04-26 10:07 ` jakub at gcc dot gnu.org 2023-07-07 18:10 ` tnfchris at gcc dot gnu.org 2023-07-10 7:15 ` rguenth at gcc dot gnu.org 2023-07-10 10:33 ` tnfchris at gcc dot gnu.org 2023-07-10 10:46 ` rguenth at gcc dot gnu.org 2023-07-10 11:02 ` tnfchris at gcc dot gnu.org 2023-07-10 11:27 ` rguenth at gcc dot gnu.org 2023-07-10 11:49 ` tnfchris at gcc dot gnu.org 2023-07-14 10:22 ` cvs-commit at gcc dot gnu.org [this message] 2023-07-14 10:22 ` cvs-commit at gcc dot gnu.org 2023-07-27 9:25 ` rguenth at gcc dot gnu.org 2023-10-02 10:53 ` cvs-commit at gcc dot gnu.org 2023-10-18 8:54 ` cvs-commit at gcc dot gnu.org 2023-10-18 8:54 ` cvs-commit at gcc dot gnu.org 2023-10-18 8:54 ` cvs-commit at gcc dot gnu.org 2023-10-18 8:55 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:20 ` cvs-commit at gcc dot gnu.org 2023-11-09 14:25 ` [Bug tree-optimization/109154] [13 " tnfchris at gcc dot gnu.org
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=bug-109154-4-M6iPBvkWdc@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@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).