public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "scovich at gmail dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/50346] New: Function call foils VRP/jump-threading of redundant predicate on struct member Date: Sat, 10 Sep 2011 08:23:00 -0000 [thread overview] Message-ID: <bug-50346-4@http.gcc.gnu.org/bugzilla/> (raw) http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50346 Bug #: 50346 Summary: Function call foils VRP/jump-threading of redundant predicate on struct member Classification: Unclassified Product: gcc Version: 4.6.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned@gcc.gnu.org ReportedBy: scovich@gmail.com When compiling the following code with options `-O3 -DBUG' : // === bug.cpp ======= struct foo { bool b; foo() : b(false) { } void baz(); }; bool bar(); void baz(); void test() { foo f; bool b = false; if (bar()) b = f.b = true; #ifndef BUG if (f.b != b) __builtin_unreachable(); #endif if (f.b) f.baz(); } // === end ========== gcc fails to eliminate the second (redundant) if statement: _Z4testv: .LFB3: subq $24, %rsp movb $0, 15(%rsp) <=== assign f.b = 0 call _Z3barv <=== cannot access f.b testb %al, %al je .L2 movb $1, 15(%rsp) .L3: leaq 15(%rsp), %rdi call _ZN3foo3bazEv addq $24, %rsp ret .L2: cmpb $0, 15(%rsp) <=== always compares equal jne .L3 addq $24, %rsp ret Compiling with `-O3 -UBUG' gives the expected results: _Z4testv: .LFB3: subq $24, %rsp movb $0, 15(%rsp) call _Z3barv testb %al, %al je .L1 leaq 15(%rsp), %rdi movb $1, 15(%rsp) call _ZN3foo3bazEv .L1: addq $24, %rsp ret This sort of scenario comes up a lot with RAII-related code, particularly when some code paths clean up the object manually before the destructor runs (obviating the need for the destructor to do it again). While it should be possible to give hints using __builtin_unreachable(), it's not always easy to tell where to put it, and it may need to be placed multiple times to be effective.
next reply other threads:[~2011-09-10 3:30 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-09-10 8:23 scovich at gmail dot com [this message] 2011-09-10 13:53 ` [Bug c++/50346] " steven at gcc dot gnu.org 2011-10-11 23:51 ` paolo.carlini at oracle dot com 2011-10-12 10:10 ` [Bug tree-optimization/50346] " rguenth at gcc dot gnu.org 2011-10-12 12:41 ` scovich at gmail dot com 2011-10-12 12:44 ` rguenther at suse dot de 2012-03-07 13:31 ` scovich at gmail dot com 2012-03-07 13:40 ` rguenther at suse dot de 2012-03-07 14:29 ` scovich at gmail dot com 2012-03-12 8:57 ` rguenther at suse dot de 2021-08-11 4:31 ` 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-50346-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).