On Wed, May 17, 2017 at 1:04 PM, Will Hawkins <wh...@virginia.edu> wrote: > On Wed, May 17, 2017 at 1:02 PM, Jeff Law <l...@redhat.com> wrote: >> On 05/17/2017 10:36 AM, Will Hawkins wrote: >>> As I started looking into this, it seems like PLUGIN_FINISH is where >>> my plugin will go. Everything is great so far. However, when plugins >>> at that event are invoked, they get no data. That means I will have to >>> look into global structures for information regarding the compilation. >>> Are there pointers to the documentation that describe the relevant >>> global data structures that are accessible at this point? >>> >>> I am looking through the source code and documentation and can't find >>> what I am looking for. I am happy to continue working, but thought I'd >>> ask just in case I was missing something silly. >>> >>> Thanks again for all your help getting me started on this! >> FOR_EACH_BB (bb) is what you're looking for. That will iterate over the >> basic blocks. > > Thank you so much for your response! > > I just found this as soon as you sent it. Sorry for wasting your time! > > >> >> Assuming you're running late, you'll then want to walk each insn within >> the bb. So something like this >> >> basic_block bb >> FOR_EACH_BB (bb) >> { >> rtx_insn *insn; >> FOR_BB_INSNS (bb, insn) >> { >> /* Do something with INSN. */ >> } >> } >> >> >> Note that if you're running too late the CFG may have been released, in >> which case this code wouldn't do anything.
This macro seems to require that there be a valid cfun. This seems to imply that the macro will work only where the plugin callback is invoked before/after a pass that does some optimization for a particular function. In particular, at PLUGIN_FINISH, cfun is NULL. This makes perfect sense. Since PLUGIN_FINISH is the place where diagnostics are supposed to be printed, I was wondering if there was an equivalent iterator for all translation units (from which I could derive functions, from which I could derive basic blocks) that just "FINISH"ed compiling? The other way to approach the problem, I suppose, is to just accumulate those stats at the end of each pass execution phase and then simply print them when PLUGIN_FINISH is invoked. I'm sorry to make this so difficult. I am just wondering about the way that the community expects the plugins to be written in the most modular fashion. Thanks again for walking me through all this! Will > > I will just have to experiment to see exactly when the right time to > invoke this plugin to get the best data. > > Thanks again! > Will > >> >> jeff