[LLVMdev] Optimization of string.h calls

Iritscen iritscen at yahoo.com
Sat Sep 20 12:31:22 PDT 2014


Yes, well that is a good point w.r.t. strings as typically passed to string.h functions.  I guess in this case I had figured that the use of __FILE__ could easily be optimized since it becomes a string constant.  Am I wrong?  Is the issue that __FILE__ might occur multiple times in a source file and thus become a merged constant?  Perhaps there is simply not much use for a string-optimizing feature since reducing program size isn’t a goal for most developers these days?

Then, more to the point, I wonder if there shouldn’t be a macro in clang/llvm for returning only the current source file name, e.g. __FILE_NAME__.  I don’t know what the feeling is on introducing macros that do not exist in gcc, since it seems that up until now the approach has been quite conservative.  Does no one else have a desire to easily suppress the full hard drive paths that will show up in their binaries with the use of __FILE__?  Or perhaps everyone simply has their own existing solutions to this, such as a build system that can pass clang the files by relative path, or placing the source code on its own volume?


On Sep 20, 2014, at 10:41 AM, David Blaikie <dblaikie at gmail.com> wrote:

> I imagine that would be difficult. If you pass the resulting pointer out to unknown code/functions, there's nothing to stop that code from walking backwards from the pointer and having well defined behavior of observing the prefix you tried to hide.
> 
> Essentially the compiler would have to be able to see and analyze all uses of that pointer in one go before it could optimize away the prefix.
> 
> On Sep 19, 2014 8:41 PM, "Iritscen" <iritscen at yahoo.com> wrote:
> Hello all.  Is there a way to get llvm/clang at build-time to optimize a string.h call so that the final form of the string is saved in the binary?  For instance, for a statement like...
> 
> strrchr(__FILE__, '/') + 1
> 
> …and where clang is called on this code’s source file with “clang /some/long/path/file.c”, can I end up with only “file.c” stored in the binary on disk?  I think you can see that I am attempting to avoid full paths from my machine ending up in the program.  My IDE, Xcode, always passes full paths to clang when building.  Thanks.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140920/1793f01e/attachment.html>


More information about the llvm-dev mailing list