public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "wilson at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug other/97417] RISC-V Unnecessary andi instruction when loading volatile bool Date: Fri, 06 Nov 2020 02:40:00 +0000 [thread overview] Message-ID: <bug-97417-4-TGPA2NE9uB@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-97417-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97417 --- Comment #15 from Jim Wilson <wilson at gcc dot gnu.org> --- I tried testing your first patch. I just built unpatched/patch rv32-elf/rv64-linux toolchains and used nm/objdump to look at libraries like libc, libstdc++, libm. I managed to find a testcase from glibc that gives worse code with the patch. struct { unsigned int a : 1; unsigned int b : 1; unsigned int c : 1; unsigned int d : 1; unsigned int pad1 : 28; } s; void sub (void) { s.a = 1; s.c = 1; } Without the patch we get sub: lui a5,%hi(s) addi a5,a5,%lo(s) lbu a4,1(a5) ori a4,a4,5 sb a4,1(a5) ret and with the patch we get sub: lui a4,%hi(s) lbu a5,%lo(s)(a4) andi a5,a5,-6 ori a5,a5,5 sb a5,%lo(s)(a4) ret Note the extra and instruction. This seems to be a combine problem. With the patched compiler, I see in the -fdump-rtl-combine-all dump file Trying 9 -> 11: 9: r79:DI=r78:DI&0xfffffffffffffffa REG_DEAD r78:DI 11: r81:DI=r79:DI|0x5 REG_DEAD r79:DI Failed to match this instruction: (set (reg:DI 81) (ior:DI (and:DI (reg:DI 78 [ MEM <unsigned char> [(struct *)&sD.1491] ]) (const_int 250 [0xfa])) (const_int 5 [0x5]))) Combine knows that reg 78 only has 8 nonzero bits, so it simplified the AND -6 to AND 250. If combine had left that constant alone, or if maybe combine propagated that info about nonzero bits through to r81, then it should have been able to optimize out the AND operation. This does work when the load does not zero extend by default. The ARM port shows the exact same problem. I see sub: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. movw r2, #:lower16:.LANCHOR0 movt r2, #:upper16:.LANCHOR0 ldrb r3, [r2] @ zero_extendqisi2 bic r3, r3, #5 orr r3, r3, #5 strb r3, [r2] bx lr and the bic (bit clear) is obviously unnecessary. This probably should be submitted as a separate bug if we don't want to fix it here.
next prev parent reply other threads:[~2020-11-06 2:40 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-14 11:56 [Bug other/97417] New: " kjetilos at gmail dot com 2020-10-15 20:34 ` [Bug other/97417] " wilson at gcc dot gnu.org 2020-10-21 3:36 ` jiawei at iscas dot ac.cn 2020-10-21 5:58 ` wilson at gcc dot gnu.org 2020-10-27 11:18 ` jiawei at iscas dot ac.cn 2020-10-27 15:25 ` wilson at gcc dot gnu.org 2020-10-29 5:27 ` admin at levyhsu dot com 2020-10-29 22:49 ` wilson at gcc dot gnu.org 2020-10-30 8:35 ` admin at levyhsu dot com 2020-10-30 12:46 ` admin at levyhsu dot com 2020-11-04 6:10 ` admin at levyhsu dot com 2020-11-04 6:35 ` kito at gcc dot gnu.org 2020-11-04 7:03 ` admin at levyhsu dot com 2020-11-05 22:57 ` wilson at gcc dot gnu.org 2020-11-06 1:20 ` wilson at gcc dot gnu.org 2020-11-06 2:40 ` wilson at gcc dot gnu.org [this message] 2020-11-06 2:44 ` kito at gcc dot gnu.org 2020-11-06 3:35 ` wilson at gcc dot gnu.org 2020-11-06 9:46 ` admin at levyhsu dot com 2020-11-06 11:38 ` admin at levyhsu dot com 2020-11-06 20:44 ` wilson at gcc dot gnu.org 2020-11-06 21:08 ` wilson at gcc dot gnu.org 2020-11-09 8:35 ` admin at levyhsu dot com 2020-11-09 9:22 ` admin at levyhsu dot com 2020-11-10 5:20 ` admin at levyhsu dot com 2020-11-10 5:29 ` kito at gcc dot gnu.org 2020-11-10 5:34 ` admin at levyhsu dot com 2020-11-10 5:36 ` admin at levyhsu dot com 2020-11-10 6:01 ` admin at levyhsu dot com 2020-11-10 10:47 ` admin at levyhsu dot com 2020-11-11 1:21 ` wilson at gcc dot gnu.org 2020-11-11 5:43 ` admin at levyhsu dot com 2020-11-11 6:43 ` admin at levyhsu dot com 2020-11-11 19:35 ` wilson at gcc dot gnu.org 2020-11-12 1:26 ` admin at levyhsu dot com 2020-11-13 0:00 ` wilson at gcc dot gnu.org 2020-11-16 1:17 ` admin at levyhsu dot com 2020-11-16 3:24 ` kito at gcc dot gnu.org 2020-11-17 10:19 ` admin at levyhsu dot com 2020-11-18 6:09 ` admin at levyhsu dot com 2020-11-18 18:31 ` [Bug target/97417] " wilson at gcc dot gnu.org 2020-11-20 2:41 ` admin at levyhsu dot com 2020-11-20 3:32 ` wilson at gcc dot gnu.org 2020-11-23 6:17 ` admin at levyhsu dot com 2020-11-23 6:38 ` admin at levyhsu dot com 2020-11-23 7:43 ` admin at levyhsu dot com 2020-12-01 3:03 ` admin at levyhsu dot com 2020-12-08 9:22 ` admin at levyhsu dot com 2020-12-14 10:43 ` admin at levyhsu dot com 2020-12-15 9:55 ` admin at levyhsu dot com 2020-12-16 2:40 ` wilson at gcc dot gnu.org 2020-12-16 2:42 ` wilson at gcc dot gnu.org 2020-12-17 18:13 ` wilson at gcc dot gnu.org 2020-12-17 18:26 ` jiawei at iscas dot ac.cn 2020-12-21 15:08 ` jiawei at iscas dot ac.cn 2020-12-21 15:38 ` kito at gcc dot gnu.org 2020-12-21 16:09 ` jiawei at iscas dot ac.cn 2020-12-22 6:35 ` admin at levyhsu dot com 2020-12-25 3:31 ` kito at gcc dot gnu.org 2020-12-25 9:09 ` jiawei at iscas dot ac.cn 2021-02-13 20:24 ` cvs-commit at gcc dot gnu.org 2021-02-13 20:37 ` cvs-commit at gcc dot gnu.org 2021-02-13 20:48 ` wilson 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-97417-4-TGPA2NE9uB@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).