[cfe-dev] Applying custom filters after preprocessing (and compile-time sprintf optimization)

Richard Smith richard at metafoo.co.uk
Mon Oct 6 08:55:38 PDT 2014


On Mon, Oct 6, 2014 at 7:18 AM, Zach Davis <zdavkeos at gmail.com> wrote:

> >> Hi,
> >>
> >> Recently I have started writing a preprocessor that wraps the C
> >> preprocessor for optimizing calls to sprintf, since it is the one of the
> >> bottlenecks of my application.
> >> https://github.com/kazuho/qrintf
> >>
> >> For GCC, it was easy for me to override the default C preprocessor, by
> >> using its `-no-integrated-cpp` and `-wrapper` options (how I have done
> it
> >> can be found in the `qrinf-gcc` and `qrintf-gcc-wrapper` files included
> in
> >> the above repository).
> >>
> >> However I have so far been unable to find a similar command-line option
> >> for Clang.  Is there any way to post-process the output of the
> preprocessor
> >> in Clang?  Or do I need to modify the source code of Clang itself?
> >>
> >> Thank you in advance.
> >>
> >> PS. BTW it would be great if compile-time optimization of sprintf goes
> >> into Clang.  Is there any chance of such possibility?
> >>
> >
> > In the general case, it's not possible to optimize sprintf fully, because
> > its behavior depends on the current locale (this affects %d and %u, which
> > it looks like you optimize) and it might have libc-specific extensions,
> but
> > LLVM does optimize in some simple cases: for instance, a sprintf
> containing
> > no % is optimized into memcpy. I expect patches would be accepted to
> > implement further cases, such as handling %s and %c.
>
>  ...for instance, a sprintf containing no % is optimized into memcpy...
>
> Could you point out where this happens? I'm not having any luck finding it.
>

lib/Transforms/Utils/SimplifyLibCalls.cpp; search for optimizeSPrintF.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141006/0ebc9a99/attachment.html>


More information about the cfe-dev mailing list