public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "rguenther at suse dot de" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/115629] Inefficient if-convert of masked conditionals Date: Mon, 01 Jul 2024 12:27:49 +0000 [thread overview] Message-ID: <bug-115629-4-RCwlZhoh6b@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-115629-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115629 --- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- > Am 01.07.2024 um 12:10 schrieb tnfchris at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115629 > > --- Comment #4 from Tamar Christina <tnfchris at gcc dot gnu.org> --- > (In reply to Richard Biener from comment #3) >> So we now tail-merge the two b[i] loading blocks. Can you check SVE >> code-gen with this? If that fixes the PR consider adding a SVE testcase. > > Thanks, the codegen is much better now, but shows some other missing mask > tracking in the vectorizer. > > Atm we generate: > > .L3: > ld1w z31.s, p6/z, [x0, x6, lsl 2] <-- load a > cmpeq p7.s, p6/z, z31.s, #0 <-- a == 0, !a > ld1w z0.s, p7/z, [x2, x6, lsl 2] <-- load c conditionally on !a > cmpeq p7.s, p7/z, z0.s, #0 <-- !a && !c > orr z0.d, z31.d, z0.d <-- a || c > ld1w z29.s, p7/z, [x3, x6, lsl 2] <--- load d where !a && !c > cmpne p5.s, p6/z, z0.s, #0 <--- (a || c) & loop_mask > and p7.b, p6/z, p7.b, p7.b <--- ((!a && !c) && (!a && !c)) & > loop_mask > ld1w z30.s, p5/z, [x1, x6, lsl 2] <-- load b conditionally on (a || > c) > sel z30.s, p7, z29.s, z30.s <-- select (!a && !c, d, b) > st1w z30.s, p6, [x4, x6, lsl 2] > add x6, x6, x7 > whilelo p6.s, w6, w5 > b.any .L3 > > which corresponds to: > > # loop_mask_63 = PHI <next_mask_95(10), max_mask_94(20)> > vect__4.10_64 = .MASK_LOAD (vectp_a.8_53, 32B, loop_mask_63); > mask__31.11_66 = vect__4.10_64 != { 0, ... }; > mask__56.12_67 = ~mask__31.11_66; > vec_mask_and_70 = mask__56.12_67 & loop_mask_63; > vect__7.15_71 = .MASK_LOAD (vectp_c.13_68, 32B, vec_mask_and_70); > mask__22.16_73 = vect__7.15_71 == { 0, ... }; > mask__34.17_75 = vec_mask_and_70 & mask__22.16_73; > vect_iftmp.20_78 = .MASK_LOAD (vectp_d.18_76, 32B, mask__34.17_75); > vect__61.21_79 = vect__4.10_64 | vect__7.15_71; > mask__35.22_81 = vect__61.21_79 != { 0, ... }; > vec_mask_and_84 = mask__35.22_81 & loop_mask_63; > vect_iftmp.25_85 = .MASK_LOAD (vectp_b.23_82, 32B, vec_mask_and_84); > _86 = mask__34.17_75 & loop_mask_63; > vect_iftmp.26_87 = VEC_COND_EXPR <_86, vect_iftmp.20_78, vect_iftmp.25_85>; > .MASK_STORE (vectp_res.27_88, 32B, loop_mask_63, vect_iftmp.26_87); > > it looks like what's missing is that the mask tracking doesn't know that other > masked operations naturally perform an AND when combined. We do some of this > in the backend but I feel like it may be better to do it in the vectorizer. > > In this case, the second load is conditional on the first load mask, which > means it's already done an AND. > And crucially inverting it means you also inverted both conditions. > > So there are some superflous masking operations happening. But I guess that's > a separate bug. Shall I just add some tests here and close it and open a new > PR? Not sure if that helps - do we fully understand this is a separate issue and not related to how we if-convert? Adding a testcase is nevertheless OK of course. > -- > You are receiving this mail because: > You are on the CC list for the bug.
next prev parent reply other threads:[~2024-07-01 12:27 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-06-25 5:44 [Bug tree-optimization/115629] New: " tnfchris at gcc dot gnu.org 2024-06-25 5:47 ` [Bug tree-optimization/115629] " pinskia at gcc dot gnu.org 2024-06-25 9:41 ` rguenth at gcc dot gnu.org 2024-06-26 16:53 ` cvs-commit at gcc dot gnu.org 2024-06-26 16:55 ` rguenth at gcc dot gnu.org 2024-07-01 10:10 ` tnfchris at gcc dot gnu.org 2024-07-01 12:27 ` rguenther at suse dot de [this message] 2024-07-01 19:33 ` tnfchris at gcc dot gnu.org 2024-07-02 7:03 ` rguenth at gcc dot gnu.org 2024-07-02 19:33 ` rsandifo at gcc dot gnu.org 2024-07-03 7:27 ` rguenth 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-115629-4-RCwlZhoh6b@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).