<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2014-10-03 11:41 GMT+09:00 Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5"><p dir="ltr">On 2 Oct 2014 18:56, "Kazuho Oku" <<a href="mailto:kazuhooku@gmail.com" target="_blank">kazuhooku@gmail.com</a>> wrote:<br>
><br>
><br>
><br>
> 2014-10-03 9:31 GMT+09:00 Richard Smith <<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>>:<br>
>><br>
>> On Thu, Oct 2, 2014 at 5:18 PM, Kazuho Oku <<a href="mailto:kazuhooku@gmail.com" target="_blank">kazuhooku@gmail.com</a>> wrote:<br>
>>><br>
>>> Hi,<br>
>>><br>
>>> 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.<br>
>>> <a href="https://github.com/kazuho/qrintf" target="_blank">https://github.com/kazuho/qrintf</a><br>
>>><br>
>>> 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).<br>
>>><br>
>>> 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?<br>
>>><br>
>>> Thank you in advance.<br>
>>><br>
>>> PS. BTW it would be great if compile-time optimization of sprintf goes into Clang.  Is there any chance of such possibility?<br>
>><br>
>><br>
>> 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.<br>
><br>
><br>
> Thank you for the response.  I am delighted to hear that.<br>
><br>
> I had thought that %d and %u weren't affected by the locale (since the digits 0..9 and non-monetary use of positive/negative signs are IMO not locale-dependent).</p>
</div></div><p dir="ltr">Sorry, yes, I think you're right: they aren't affected by locale by default, only if you use the ' or I flags.</p>
</blockquote></div><br>Thank you for confirmation.</div><div class="gmail_extra"><br></div><div class="gmail_extra">FYI I have polished up the implementation (as a preprocessor wrapper) and have taken a benchmark using a HTTP server that I develop.  It gained 20% performance boost by preprocessing calls to sprintf when using GCC, which might be a proof that such an optimization does have real impact.  The details can be found here: <a href="http://blog.kazuhooku.com/2014/10/announcing-qrintf-and-qrintf-gcc.html">http://blog.kazuhooku.com/2014/10/announcing-qrintf-and-qrintf-gcc.html</a></div><div class="gmail_extra"><div><br></div>-- <br>Kazuho Oku
</div></div>