public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "m.zakirov at samsung dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/43725] Poor instructions selection, scheduling and registers allocation for ARM NEON intrinsics Date: Tue, 29 Jul 2014 11:35:00 -0000 [thread overview] Message-ID: <bug-43725-4-xLJEOVrVfT@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-43725-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43725 --- Comment #8 from Marat Zakirov <m.zakirov at samsung dot com> --- UPDATE Using little fix you may got a much better code... transpose_16x16: .fnstart @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. add r2, r0, #128 vld4.16 {d24, d26, d28, d30}, [r0] add r1, r0, #160 vld4.16 {d16, d18, d20, d22}, [r2] add r0, r0, #32 movw r3, #:lower16:m1 vldr d6, .L2 vldr d7, .L2+8(in CSE) movw r2, #:lower16:m0 movt r3, #:upper16:m1 movt r2, #:upper16:m0 vld4.16 {d25, d27, d29, d31}, [r0] vld4.16 {d17, d19, d21, d23}, [r1] vmul.i16 q12, q3, q12 vmul.i16 q8, q3, q8 vmul.i16 q13, q3, q13 vmul.i16 q9, q3, q9 vmul.i16 q14, q3, q14 vmul.i16 q10, q3, q10 vmul.i16 q15, q3, q15 vmul.i16 q11, q3, q11 vstmia r2, {d24-d31} vstmia r3, {d16-d23} bx lr .L3: About fix: I discovered that GCC register allocator has 'weak' support for stream (in my case NEON) registers. RA works with stream resgisters as with unsplitible ranges. So if some register of range becomes free GCC do not reuse them untill whole range becomes free. Is actually OK, but... I found that GCC CSE phase makes partly substitution for register-ranges and this leads to terrible register pressure increse. Example Before CSE a = b a0 = a0 * 3 a1 = a1 * 3 a2 = a2 * 3 a3 = a3 * 3 After a = b a0 = b0 * 3 a1 = a1 * 3 <<< * a2 = a2 * 3 a3 = a3 * 3 CSE do not substitute b1 to a1 because at the moment (*) a0 was define so actually a != b. Yes but a1 = b1, unfortuanatly CSE also do not how to handle register-ranges parts as RA does. And I am not sure that 'unfortuanatly'. Because. a0 = b0 * 3 a1 = b1 * 3 a2 = b2 * 3 a3 = b3 * 3 Also requres x2 more stream registers than its really need to. My solution here is to forbid CSE for XImode registers.
next prev parent reply other threads:[~2014-07-29 11:35 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <bug-43725-4@http.gcc.gnu.org/bugzilla/> 2010-09-29 20:50 ` rearnsha at gcc dot gnu.org 2010-10-04 23:00 ` siarhei.siamashka at gmail dot com 2010-10-04 23:46 ` joseph at codesourcery dot com 2010-10-05 7:16 ` ramana at gcc dot gnu.org 2010-10-08 14:13 ` siarhei.siamashka at gmail dot com 2011-06-29 13:35 ` siarhei.siamashka at gmail dot com 2014-07-09 12:26 ` m.zakirov at samsung dot com 2014-07-29 11:35 ` m.zakirov at samsung dot com [this message] 2014-07-29 11:46 ` m.zakirov at samsung dot com 2014-08-20 16:44 ` mkuvyrkov at gcc dot gnu.org 2021-09-27 7:21 ` pinskia at gcc dot gnu.org 2010-04-12 7:27 [Bug target/43725] New: " siarhei dot siamashka at gmail dot com 2010-05-11 7:35 ` [Bug target/43725] " ramana at gcc dot gnu dot 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-43725-4-xLJEOVrVfT@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).