public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "tkoenig at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/108826] New: Inefficient address generation on POWER and RISC-V Date: Thu, 16 Feb 2023 17:53:31 +0000 [thread overview] Message-ID: <bug-108826-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108826 Bug ID: 108826 Summary: Inefficient address generation on POWER and RISC-V Product: gcc Version: unknown Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: tkoenig at gcc dot gnu.org Target Milestone: --- For the code (reduced from embench) struct { unsigned int table[4][100]; } * _nettle_aes_decrypt_T; unsigned int _nettle_aes_decrypt_w1; void _nettle_aes_decrypt() { _nettle_aes_decrypt_T->table[2][0] = _nettle_aes_decrypt_T->table[2][_nettle_aes_decrypt_w1 >> 6 & 5]; } current trunk generates 0: addis 2,12,.TOC.-.LCF0@ha addi 2,2,.TOC.-.LCF0@l .localentry _nettle_aes_decrypt,.-_nettle_aes_decrypt addis 9,2,.LANCHOR0+8@toc@ha lwz 9,.LANCHOR0+8@toc@l(9) addis 10,2,.LANCHOR0@toc@ha ld 10,.LANCHOR0@toc@l(10) srwi 9,9,6 andi. 9,9,0x5 addi 9,9,200 sldi 9,9,2 lwzx 9,10,9 stw 9,800(10) blr After the TOC loading, this shifts the value once, does the and, adds 200 and then shifts back the value. These two shifts are not necessary. A better alternative would be something like (please excuse any errors) srwi 9,9,4 andi 9,9,20 add 9,9,2 lwz 9,800(9) stw 9,800(9) saving an instruction. RISC-V does something similar. According to godbolt: lui a5,%hi(_nettle_aes_decrypt_w1) lw a5,%lo(_nettle_aes_decrypt_w1)(a5) lui a4,%hi(_nettle_aes_decrypt_T) ld a4,%lo(_nettle_aes_decrypt_T)(a4) srliw a5,a5,6 andi a5,a5,5 addi a5,a5,200 slli a5,a5,2 add a5,a4,a5 lw a5,0(a5) sw a5,800(a4) ret (which is why I think this is a general RTL optimization issue). x86 is much better: movl _nettle_aes_decrypt_w1(%rip), %eax movq _nettle_aes_decrypt_T(%rip), %rdx shrl $6, %eax andl $5, %eax movl 800(%rdx,%rax,4), %eax movl %eax, 800(%rdx) ret but it can use the complex addressing modes on x86.
next reply other threads:[~2023-02-16 17:53 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-16 17:53 tkoenig at gcc dot gnu.org [this message] 2023-02-16 17:56 ` [Bug rtl-optimization/108826] " pinskia at gcc dot gnu.org 2023-02-16 18:00 ` pinskia at gcc dot gnu.org 2023-02-16 18:00 ` pinskia at gcc dot gnu.org 2023-02-16 18:09 ` pinskia at gcc dot gnu.org 2023-02-16 18:21 ` palmer at gcc dot gnu.org 2023-02-16 18:25 ` pinskia at gcc dot gnu.org 2023-09-28 19:55 ` pinskia 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-108826-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).