public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "vincenzo.innocente at cern dot ch" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/55645] New: skipping unlike branch in vectorized loops using movmsk or equivalent Date: Tue, 11 Dec 2012 06:43:00 -0000 [thread overview] Message-ID: <bug-55645-4@http.gcc.gnu.org/bugzilla/> (raw) http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55645 Bug #: 55645 Summary: skipping unlike branch in vectorized loops using movmsk or equivalent Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: tree-optimization AssignedTo: unassigned@gcc.gnu.org ReportedBy: vincenzo.innocente@cern.ch I'm wondering if the vectorization engine could accommodate some mechanism to skip unlike branches using a global test based on movmsk or similar below a trivial example including a possible SLP implementation that happens to compile with 4.8 as c++ -std=c++11 -Ofast -mavx2 -S divergent.cc; less divergent.s float a[1024]; float b[1024]; float c[1024]; #define likely(x) (__builtin_expect(x, true)) // possible syntax void compute() { for (int i=0;i!=1024;++i) { if likely(a[i]<b[i]) // very often c[i]=a[i]+b[i]; else // rare c[i]=a[i]-b[i]; } } // hand-made implementation that compile with 4.8 today #include <x86intrin.h> typedef float __attribute__( ( vector_size( 32 ) ) ) float32x8_t; typedef int __attribute__( ( vector_size( 32 ) ) ) int32x8_t; float32x8_t va[1024]; float32x8_t vb[1024]; float32x8_t vc[1024]; void computeV() { for (int i=0;i!=1024;++i) { float32x8_t mask = va[i]<vb[i]; if likely(_mm256_movemask_ps(mask) == 255) { vc[i]=va[i]+vb[i]; } else { vc[i]= va[i]<vb[i] ? va[i]+vb[i] : va[i]-vb[i]; } } }
next reply other threads:[~2012-12-11 6:43 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-12-11 6:43 vincenzo.innocente at cern dot ch [this message] 2012-12-11 10:02 ` [Bug tree-optimization/55645] " rguenth at gcc dot gnu.org 2012-12-11 10:03 ` glisse at gcc dot gnu.org 2012-12-11 10:41 ` jakub at gcc dot gnu.org 2012-12-11 10:44 ` vincenzo.innocente at cern dot ch 2012-12-11 14:35 ` vincenzo.innocente at cern dot ch
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-55645-4@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).