Committed: removal of ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR macros

David Malcolm dmalcolm@redhat.com
Wed Nov 20 01:12:00 GMT 2013


On Tue, 2013-11-19 at 11:52 -0500, David Malcolm wrote:
> On Tue, 2013-11-19 at 09:49 +0100, Richard Biener wrote:
> > On Mon, 18 Nov 2013, David Malcolm wrote:
> > 
> > > On Fri, 2013-11-15 at 20:38 -0500, David Malcolm wrote:
> > > > On Wed, 2013-11-13 at 14:44 +0100, Richard Biener wrote:
> > > > > On Wed, 13 Nov 2013, David Malcolm wrote:
> > > > > 
> > > > > > On Wed, 2013-11-13 at 13:53 +0100, Richard Biener wrote:
> > > > > > > On Wed, 13 Nov 2013, Martin Jambor wrote:
> > > > > > > 
> > > > > > > > Hi,
> > > > > > > > 
> > > > > > > > On Wed, Nov 13, 2013 at 10:49:09AM +0100, Jakub Jelinek wrote:
> > > > > > > > > Hi!
> > > > > > > > > 
> > > > > > > > > void f1 (void) {}
> > > > > > > > > __attribute__((target ("avx"))) void f2 (void) {}
> > > > > > > > > __attribute__((target ("avx2"))) void f3 (void) {}
> > > > > > > > > __attribute__((target ("sse3"))) void f4 (void) {}
> > > > > > > > > __attribute__((target ("ssse3"))) void f5 (void) {}
> > > > > > > > > __attribute__((target ("sse4"))) void f6 (void) {}
> > > > > > > > > takes about 3 seconds to compile at -O2, because set_cfun is terribly
> > > > > > > > > expensive and there are hundreds of such calls.
> > > > > > > > > The following patch is just a quick change to avoid some of them:
> > > > > > > > > execute_function_todo starts with:
> > > > > > > > >   unsigned int flags = (size_t)data;
> > > > > > > > >   flags &= ~cfun->last_verified;
> > > > > > > > >   if (!flags)
> > > > > > > > >     return;
> > > > > > > > > and if flags is initially zero, it does nothing.
> > > > > > > > > Similarly, execute_function_dump has the whole body surrounded by
> > > > > > > > >   if (dump_file && current_function_decl)
> > > > > > > > > and thus if dump_file is NULL, there is nothing to do.
> > > > > > > > > So IMHO in neither case (which happens pretty frequently) we need to
> > > > > > > > > set_cfun to every function during IPA.
> > > > > > > > > 
> > > > > > > > > Also, I wonder if we couldn't defer the expensive ira_init, if the info
> > > > > > > > > computed by it is used only during RTL optimization passes (haven't verified
> > > > > > > > > it yet), then supposedly we could just remember using some target hook
> > > > > > > > > what the last state was when we did ira_init last time, and call ira_init
> > > > > > > > > again at the start of expansion or so if it is different from the
> > > > > > > > > last time.
> > > > > > > > 
> > > > > > > > I was wondering whether the expensive parts of set_cfun could only be
> > > > > > > > run in pass_all_optimizations (and the -Og equivalent) but not when
> > > > > > > > changing functions in early and IPA passes.
> > > > > > > 
> > > > > > > Sounds like a hack ;)
> > > > > > > 
> > > > > > > Better get things working without the cfun/current_function_decl globals.
> > > > > > > Wasn't there someone replacing all implicit uses with explicit ones
> > > > > > > for stuff like n_basic_blocks?
> > > > > > 
> > > > > > I was working on this:
> > > > > > http://gcc.gnu.org/ml/gcc-patches/2013-06/msg00780.html
> > > > > > though I switched to other tasks I felt were higher priority; sorry.
> > > > > > 
> > > > > > Do you still want me to go ahead and commit the series of changes you
> > > > > > pre-approved there?
> > > > > > 
> > > > > > i.e. the "n_basic_blocks" macro goes away in favor of:
> > > > > >    n_basic_blocks_for_fn (cfun)
> > > > > > as a renaming of the existing n_basic_blocks_for_function macro,
> > > > > > followed up by analogous changes to the other macros.
> > > > > > 
> > > > > > Or should I repost before committing?
> > > > > 
> > > > > I'd say create the n_basic_blocks patch and post it, that gives
> > > > > people a chance to object.  If nobody chimes in I approve it
> > > > > and pre-approve the rest ;)
> > > > > 
> > > > > Using n_basic_blocks_for_fn (cfun) might feel backwards if
> > > > > eventually we'd want to C++-ify struct function and make
> > > > > n_basic_blocks a member function which would make it
> > > > > cfun->n_basic_blocks () instead.  Ok, I think that will get
> > > > > us into C++ bikeshedding again ;)
> > > > 
> > > > [I can't face another C vs C++ discussion right now :)]
> > > > 
> > > > Thanks.  Attached is such a patch, eliminating the:
> > > >   n_basic_blocks
> > > > macro in favor of
> > > >   n_basic_blocks_for_fn (cfun)
> > > > 
> > > > Successfully bootstrapped on x86_64-unknown-linux-gnu, and successfully
> > > > compiled stage1 on spu-unknown-elf and s390-linux-gnu (given that those
> > > > config files are affected).
> > > > 
> > > > Given the conditional pre-approval above, I'm posting here to give
> > > > people a change to object - otherwise I'll commit, and followup with the
> > > > other macros that implicitly use cfun as per the thread linked to above.
> > > 
> > > Committed to trunk as r204995; I plan to commit followup patches to
> > > remove the other such macros.
> > 
> > Thanks!
> 
> The following removed the "n_edges" macro.  I committed it to trunk as
> r205044 having successfully bootstrapped on x86_64-unknown-linux-gnu.
> 
> (should I continue to post these patches as I commit them?)

This one removed the ENTRY_BLOCK_PTR and EXIT_BLOCK_PTR macros.

I committed it to trunk as r205055 having bootstrapped&regtested on
x86_64-unknown-linux-gnu, and also verified stage1 compile for the
following targets (the other ones touched by the patch):
  bfin-unknown-none
  nds32le-unknown-elf
  arm-unknown-eabi
  rs6000-ibm-aix6.0
  frv-unknown-linux-gnu
  alpha-linux-gnu
  ia64-unknown-linux-gnu

-------------- next part --------------
A non-text attachment was scrubbed...
Name: remove-ENTRY_BLOCK_PTR-and-EXIT_BLOCK_PTR.patch
Type: text/x-patch
Size: 278934 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20131120/2b7a1617/attachment.bin>


More information about the Gcc-patches mailing list