[llvm-bugs] [Bug 27012] New: Preprocessing and compiling C++ code in separate steps may be noticeably faster than normal compilation.

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Mar 21 05:21:44 PDT 2016


https://llvm.org/bugs/show_bug.cgi?id=27012

            Bug ID: 27012
           Summary: Preprocessing and compiling C++ code in separate steps
                    may be noticeably faster than normal compilation.
           Product: clang
           Version: 3.8
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Frontend
          Assignee: unassignedclangbugs at nondot.org
          Reporter: officesamurai at gmail.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Created attachment 16063
  --> https://llvm.org/bugs/attachment.cgi?id=16063&action=edit
test code

For certain source files preprocessing and compiling them separately is faster
than normal compilation. The attached "clang_speed_test2.cpp" is one of such
files (needs boost to compile).

To reproduce the issue run the following script (assumes that boost 1.60 was
unpacked to ~/Downloads):
#!/bin/bash

COMP=clang++-3.8
OPT=-std=c++14\ -stdlib=libc++\ -isystem\ $HOME/Downloads/boost_1_60_0
FILE_NAME=clang_speed_test2.cpp

time $COMP $OPT -c $FILE_NAME -o out.cpp.1.o
time $COMP $OPT -E $FILE_NAME -o out.cpp.i
time $COMP $OPT -x c++ -c out.cpp.i -o out.cpp.2.o

Sample output on my Linux laptop:
real 0m59.743s
user 0m58.788s
sys  0m0.874s

real 0m0.204s
user 0m0.176s
sys  0m0.027s

real 0m46.988s
user 0m46.124s
sys  0m0.803s

So, it looks like there is an optimization opportunity hiding inside clang. It
would be nice to have the smaller compilation time without the need of
additional workarounds.

Some notes:
1) similar results may be obtained with clang 3.6 and 3.7; as of boost - the
issue is still reproducible with 1.58, but not with 1.57 (at least for the
attached code)
2) the difference on (some of) real production code was even bigger - the
separate steps were roughly 2x faster.
3) using the "-save-temps" option eliminates the difference (but it's not an
ideal workaround since sometimes it just increases compilation time)

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160321/e80aa460/attachment-0001.html>


More information about the llvm-bugs mailing list