On 2012-07-01 20:23:37 +0100, Måns Rullgård wrote: > Currently, --enable-small turns av_always_inline into plain inline, > which is more or less ignored by the compiler. While the intent of > this is probably to reduce code size by avoiding some inlining, it > has more far-reaching effects. > > We use av_always_inline in two situations: > > 1. The body of a function is smaller than the call overhead. > Instances of these are abundant in libavutil, the bswap.h > functions being good examples. > > 2. The function is a template relying on constant propagation > through inlined calls for sane code generation. These are > often found in motion compensation code. > > Both of these types of functions should be inlined even if targeting > small code size. > > Although GCC has heuristics for detecting the first of these types, > it is not always reliable, especially when the function uses inline > assembler, which is often the reason for having those functions in > the first place, so making it explicit is generally a good idea. > > The size increase from inlining template-type functions is usually > much smaller than it seems due to different branches being mutually > exclusive between the different invocations. The dead branches can, > however, only be removed after inlining and constant propagation have > been performed, which means the initial cost estimate for inlining > these is much higher than is actually the case, resulting in GCC > often making bad choices if left to its own devices. > > Furthermore, the GCC inliner limits how much it allows a function to > grow due to automatic inlining of calls, and this appears to not take > call overhead into account. When nested inlining is used, the limit > may be hit before the innermost level is reached. In some cases, this > has prevented inlining of type 1 functions as defined above, resulting > in significant performance loss. > > Signed-off-by: Mans Rullgard <[email protected]> > --- > configure | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/configure b/configure > index 5729a4f..f508b56 100755 > --- a/configure > +++ b/configure > @@ -3443,15 +3443,6 @@ EOF > test -n "$malloc_prefix" && > echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH > > -if enabled small || disabled optimizations; then > - echo "#undef av_always_inline" >> $TMPH > - if enabled small; then > - echo "#define av_always_inline inline" >> $TMPH > - else > - echo "#define av_always_inline av_unused" >> $TMPH > - fi > -fi > - > if enabled yasm; then > append config_files $TMPASM > printf '' >$TMPASM
ok for me Janne _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
