public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "hubicka at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/46507] std::get and devirtualization on non-automatic variables Date: Thu, 16 Jan 2014 18:02:00 -0000 [thread overview] Message-ID: <bug-46507-4-lZSO7ENXat@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-46507-4@http.gcc.gnu.org/bugzilla/> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46507 --- Comment #10 from Jan Hubicka <hubicka at gcc dot gnu.org> --- I agree we want to do as much as possible in FE. ODR decisions are basically done in frontend now - we basically use mangling of virtual tables given to us by C++ FE. Eventually we will want to get ODR information on all types, not only polymorphic ones. Then I plan to go with Jason's suggested way of calling decl_assembler name on types to get mangling from C++ FE rather than my initial attempt to actually compare types for equivalence by their high level names that hits interesting issues with templates. It is left in code mostly as backup if the other solution blows up our memory footprint. I do not think we can do type inheritance analysis + devirtualization purely by frotnend, since it is naturally an inter-procuedural problem that needs to be handled by LTO. We already have sane way to represent the type inheritance tree by binfos. What we need to work on is a sane and safe way representing the relevant type information that is given to you by C++ standard but thrown away on way to GIMPLE so the propagation can work. I was thinking of type assert expressions that can be inserted by FE on places where dynamic type is known for non-trivial reasons. Those can be used as starting points for the propagation of type information and removed after IPA. This would allow us to preserve information while inlining and also make it easier to deal with dynamic type changes. For simple operations, like in this testcase, this approach may be however impractical producing too many new gimple statements. I am slowly getting to stage where current devirt infrastructure seems to work as expected and seems to use most of information already there in gimple that seems to be safe to assume. My plan was to basically wait for this release cycle, see how many bugs shows up so I am sure I do not miss something obvious (well, like the virtual inheritance fun). I think only parts we miss now is to - move ipa-cp to new infrastructure - move dynamic type change code to ipa-devirt and make it work with contextes - understand ctors/dtors calls, since we already ave flag marking them specially. I also collected testcases we need to handle. I will try to sit down and prepare some proposal about what we need to preserve in gimple. I think we also want central place (probably in ipa-devirt toplevel comment) documenting all the information we take into account and assumptions we make. So far they are mostly trivial (i.e. static vars/automatic vars/values passed by invisible references are known to have their type and not derived type) except for Martin's dynamic changing code.
prev parent reply other threads:[~2014-01-16 18:02 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-11-16 17:59 [Bug tree-optimization/46507] New: std::tuple missed optimization miles at gnu dot org 2010-11-16 19:06 ` [Bug tree-optimization/46507] " paolo.carlini at oracle dot com 2010-11-16 19:11 ` miles at gnu dot org 2010-11-16 19:53 ` redi at gcc dot gnu.org 2013-09-14 21:35 ` glisse at gcc dot gnu.org 2013-10-12 20:13 ` [Bug tree-optimization/46507] std::get and devirtualization on non-automatic variables glisse at gcc dot gnu.org 2013-11-08 14:41 ` jamborm at gcc dot gnu.org 2014-01-16 6:10 ` hubicka at gcc dot gnu.org 2014-01-16 6:18 ` hubicka at gcc dot gnu.org 2014-01-16 8:51 ` rguenther at suse dot de 2014-01-16 18:02 ` hubicka at gcc dot gnu.org [this message]
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-46507-4-lZSO7ENXat@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).