public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "olegendo at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/67635] New: [SH] ifcvt missed optimization Date: Sat, 19 Sep 2015 04:09:00 -0000 [thread overview] Message-ID: <bug-67635-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67635 Bug ID: 67635 Summary: [SH] ifcvt missed optimization Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: olegendo at gcc dot gnu.org Target Milestone: --- Target: sh*-*-* At least on SH, the following: bool test (int a, int b, int* r) { return __builtin_mul_overflow (a, b, r); } compiled with -m4 -ml -O2 results in: dmuls.l r5,r4 mov #0,r0 sts macl,r1 sts mach,r2 cmp/gt r1,r0 subc r3,r3 cmp/eq r2,r3 << bf .L6 << .L2: rts mov.l r1,@r6 .align 1 .L6: bra .L2 mov #1,r0 The expected code would be: dmuls.l r5,r4 mov #0,r0 sts macl,r1 sts mach,r2 cmp/gt r1,r0 subc r3,r3 cmp/eq r2,r3 // T = r2 == r3 mov #-1,r0 negc r0,r0 // T = r2 != r3 rts mov.l r1,@r6 Alternatively, in cases zero-displacement branches are fast (e.g. SH4): dmuls.l r5,r4 mov #0,r0 sts macl,r1 sts mach,r2 cmp/gt r1,r0 subc r3,r3 cmp/eq r2,r3 bt 0f mov #1,r0 0: rts mov.l r1,@r6 I think I have seen similar cases before, where something tries to preserve the zero constant in a reg. Instead of overwriting it with a cstore value {0,1}, conditional branches are created for the non-zero paths. If conditional move patterns are enabled on SH with -mpretend-cmove the conditional branches go away: dmuls.l r5,r4 mov #-1,r0 sts macl,r2 sts mach,r3 sts macl,r1 shll r2 subc r2,r2 cmp/eq r3,r2 mov.l r1,@r6 rts negc r0,r0 But enabling -mpretend-cmove on SH has some other side effects and currently is not safe (PR 58517).
next reply other threads:[~2015-09-19 4:09 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-09-19 4:09 olegendo at gcc dot gnu.org [this message] 2015-09-30 12:49 ` [Bug rtl-optimization/67635] " olegendo at gcc dot gnu.org 2015-10-19 16:06 ` ktkachov at gcc dot gnu.org 2015-10-21 13:51 ` olegendo at gcc dot gnu.org 2023-08-08 7:02 ` 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-67635-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).