diff options
Diffstat (limited to 'www')
42 files changed, 9411 insertions, 0 deletions
diff --git a/www/CheckerNotes.html b/www/CheckerNotes.html new file mode 100644 index 000000000000..523048de7690 --- /dev/null +++ b/www/CheckerNotes.html @@ -0,0 +1,9 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> +<title>Static Analysis</title> +<meta http-equiv="REFRESH" content="0;url=http://clang.llvm.org/StaticAnalysis.html"></HEAD> +<BODY> +This page has relocated: <a href="http://clang.llvm.org/StaticAnalysis.html">http://clang.llvm.org/StaticAnalysis.html</a>. +</BODY> +</HTML> diff --git a/www/OpenProjects.html b/www/OpenProjects.html new file mode 100644 index 000000000000..69b398457fb1 --- /dev/null +++ b/www/OpenProjects.html @@ -0,0 +1,112 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Get Involved</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<h1>Open Clang Projects</h1> + +<p>Here are a few tasks that are available for newcomers to work on, depending +on what your interests are. This list is provided to generate ideas, it is not +intended to be comprehensive. Please ask on cfe-dev for more specifics or to +verify that one of these isn't already completed. :)</p> + +<ul> +<li><b>Compile your favorite C/ObjC project with Clang</b>: +Clang's type-checking and code generation is very close to complete (but not bug free!) for C and Objective-C. We appreciate all reports of code that is +rejected or miscompiled by the front-end. If you notice invalid code that is not rejected, or poor diagnostics when code is rejected, that is also very important to us. For make-based projects, +the <a href="get_started.html#ccc"><code>ccc</code></a> driver works as a drop-in replacement for GCC.</li> + +<li><b>Overflow detection</b>: an interesting project would be to add a -ftrapv +compilation mode that causes -emit-llvm to generate overflow tests for all +signed integer arithmetic operators, and call abort if they overflow. Overflow +is undefined in C and hard for people to reason about. LLVM IR also has +intrinsics for generating arithmetic with overflow checks directly.</li> + +<li><b>Undefined behavior checking</b>: similar to adding -ftrapv, codegen could +insert runtime checks for all sorts of different undefined behaviors, from +reading uninitialized variables, buffer overflows, and many other things. This +checking would be expensive, but the optimizers could eliminate many of the +checks in some cases, and it would be very interesting to test code in this mode +for certain crowds of people. Because the inserted code is coming from clang, +the "abort" message could be very detailed about exactly what went wrong.</li> + +<li><b>Improve target support</b>: The current target interfaces are heavily +stubbed out and need to be implemented fully. See the FIXME's in TargetInfo. +Additionally, the actual target implementations (instances of TargetInfoImpl) +also need to be completed.</li> + +<li><b>Implement an tool to generate code documentation</b>: Clang's +library-based design allows it to be used by a variety of tools that reason +about source code. One great application of Clang would be to build an +auto-documentation system like doxygen that generates code documentation from +source code. The advantage of using Clang for such a tool is that the tool would +use the same preprocessor/parser/ASTs as the compiler itself, giving it a very +rich understanding of the code.</li> + +<li><b>Use clang libraries to implement better versions of existing tools</b>: +Clang is built as a set of libraries, which means that it is possible to +implement capabilities similar to other source language tools, improving them +in various ways. Two examples are <a href="http://distcc.samba.org/">distcc</a> +and the <a href="http://delta.tigris.org/">delta testcase reduction tool</a>. +The former can be improved to scale better and be more efficient. The later +could also be faster and more efficient at reducing C-family programs if built +on the clang preprocessor.</li> + +<li><b>Use clang libraries to extend Ragel with a JIT</b>: <a +href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state +machine compiler that lets you embed C code into state machines and generate +C code. It would be relatively easy to turn this into a JIT compiler using +LLVM.</li> + +<li><b>Self-testing using clang</b>: There are several neat ways to +improve the quality of clang by self-testing. Some examples: +<ul> + <li>Improve the reliability of AST printing and serialization by + ensuring that the AST produced by clang on an input doesn't change + when it is reparsed or unserialized. + + <li>Improve parser reliability and error generation by automatically + or randomly changing the input checking that clang doesn't crash and + that it doesn't generate excessive errors for small input + changes. Manipulating the input at both the text and token levels is + likely to produce interesting test cases. +</ul> +</li> + +<li><b>Continue work on C++ support</b>: Implementing all of C++ is a very big +job, but there are lots of little pieces that can be picked off and implemented. Here are some small- to mid-sized C++ implementation projects: +<ul> + <li>Using declarations: These are completely unsupported at the moment.</li> + <li>Type-checking for the conditional operator (? :): this currently follows C semantics, not C++ semantics.</li> + <li>Type-checking for explicit conversions: currently follows C semantics, not C++ semantics.</li> + <li>Type-checking for copy assignment: Clang parses overloaded copy-assignment operators, but they aren't used as part of assignment syntax ("a = b").</li> + <li>Qualified member references: C++ supports qualified member references such as <code>x->Base::foo</code>, but Clang has no parsing or semantic analysis for them.</li> + <li>Virtual functions: Clang parses <code>virtual</code> and attaches it to the AST. However, it does not determine whether a given function overrides a virtual function in a base class.</li> + <li>Implicit definitions of special member functions: Clang implicitly declares the various special member functions (default constructor, copy constructor, copy assignment operator, destructor) when necessary, but is not yet able to provide definitions for these functions.</li> + <li>Parsing and AST representations of friend classes and functions</li> + <li>AST representation for implicit C++ conversions: implicit conversions that involve non-trivial operations (e.g., invoking a user-defined conversion function, performing a base-to-derived or derived-to-base conversion) need explicit representation in Clang's AST.</li> + <li>Improved diagnostics for overload resolution failures: after an overload resolution failure, we currently print out the overload resolution candidates. We should also print out the reason that each candidate failed, e.g., "too few arguments", "too many arguments", "cannot initialize parameter with an lvalue of type 'foo'", etc.</li> +</ul> + +Also, see the <a href="cxx_status.html">C++ status report page</a> to +find out what is missing and what is already at least partially +supported.</li> +</ul> + +<p>If you hit a bug with clang, it is very useful for us if you reduce the code +that demonstrates the problem down to something small. There are many ways to +do this; ask on cfe-dev for advice.</p> + +</div> +</body> +</html> diff --git a/www/StaticAnalysis.html b/www/StaticAnalysis.html new file mode 100644 index 000000000000..81176a96acf4 --- /dev/null +++ b/www/StaticAnalysis.html @@ -0,0 +1,156 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>LLVM/Clang Static Analyzer</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<h1>LLVM/Clang Static Analyzer</h1> + +<p>The LLVM/Clang static analyzer is a standalone tool that finds bugs in C and +Objective-C programs. Currently the analyzer is invoked as a command-line tool. +It is intended to run in tandem with a build of a project or code base.</p> + +<p>Here are some important points we ask you to consider when using the static +analyzer:</p> + +<ul> + +<li><b>This tool is <b>very early</b> in development.</b> There are many planned +enhancements to improve both the precision and scope of its analysis algorithms +as well as the kinds bugs it will find.</li> + +<li><b>Static analysis can be much slower than compilation.</b> While the +analyzer is being designed to be as fast and light-weight as possible, please do +not expect it to be as fast as compiling a program (even with optimizations +enabled). Some of the algorithms needed to find bugs require in the worst case +exponential time. The analyzer runs in a reasonable amount of time by both +bounding the amount of checking work it will do as well as using clever +algorithms to reduce the amount of work it must do to find bugs.</li> + +<li><b>False positives.</b> Static analysis is not perfect. It can falsely flag +bugs in a program where the code behaves correctly. Because some code checks +require more analysis precision than others, the frequency of false positives +can vary widely between different checks. Our eventual goal is to have the +analyzer have a low false positive rate for most code on all checks.</li> +</ul> + +<h3>Please tell us about False Positives</h3> + +<p>If you encounter a false positive, <b>please let us know</b> by <a +href="StaticAnalysisUsage.html#filingbugs">filing a bug report</a>. False +positives cannot be addressed unless we know about them.</p> + +<h3>Want more bugs?</h3> + +<p>If there are specific kinds of bugs you would like the tool to find, +please feel free to file <a href="StaticAnalysisUsage.html#filingbugs">feature +requests</a>.</p> + +<!-- Generated from: http://www.spiffycorners.com/index.php --> + +<style type="text/css"> +.spiffy{display:block} +.spiffy *{ + display:block; + height:1px; + overflow:hidden; + font-size:.01em; + background:#EBF0FA} +.spiffy1{ + margin-left:3px; + margin-right:3px; + padding-left:1px; + padding-right:1px; + border-left:1px solid #f6f8fc; + border-right:1px solid #f6f8fc; + background:#f0f3fb} +.spiffy2{ + margin-left:1px; + margin-right:1px; + padding-right:1px; + padding-left:1px; + border-left:1px solid #fdfdfe; + border-right:1px solid #fdfdfe; + background:#eef2fa} +.spiffy3{ + margin-left:1px; + margin-right:1px; + border-left:1px solid #eef2fa; + border-right:1px solid #eef2fa;} +.spiffy4{ + border-left:1px solid #f6f8fc; + border-right:1px solid #f6f8fc} +.spiffy5{ + border-left:1px solid #f0f3fb; + border-right:1px solid #f0f3fb} +.spiffyfg{ + background:#EBF0FA} + +.spiffyfg h2 { + margin:0px; padding:10px; +} +</style> + +<style type="text/css"> + #left { float:left; } + #left h2 { margin:1px; padding-top:0px; } + #right { float:left; margin-left:50px; padding:0px ;} + #right h2 { padding:0px; margin:0px; } + #wrappedcontent { padding:15px;} +</style> + +<div id="left"> + <h2>Using the Analyzer</h2> + <ul> + <li><a href="StaticAnalysisUsage.html#Obtaining">Obtaining the Analyzer</a></li> + <li><a href="StaticAnalysisUsage.html#BasicUsage">Basic Usage</a></li> + <li><a href="StaticAnalysisUsage.html#Output">Output of the Analyzer</a></li> + <li><a href="StaticAnalysisUsage.html#RecommendedUsageGuidelines">Recommended Usage Guidelines</a></li> + <li><a href="StaticAnalysisUsage.html#Debugging">Debugging the Analyzer</a></li> + <li><a href="StaticAnalysisUsage.html#filingbugs">Filing Bugs and Feature Requests</a></li> + </ul> +</div> + +<div id="right"> + <b class="spiffy"> + <b class="spiffy1"><b></b></b> + <b class="spiffy2"><b></b></b> + <b class="spiffy3"></b> + <b class="spiffy4"></b> + <b class="spiffy5"></b></b> + + <div class="spiffyfg"> + <div id="wrappedcontent"> + <h2>Download</h2> + <ul> + <li>Mac OS X (Universal, 10.5+): + <p> + <!--#include virtual="latest_checker.html.incl"--> + </p> + </li> + <li><a href="StaticAnalysisUsage.html#OtherUsage">Other Platforms</a> (Building from Source)</li> + </div> + + </div> + + <b class="spiffy"> + <b class="spiffy5"></b> + <b class="spiffy4"></b> + <b class="spiffy3"></b> + <b class="spiffy2"><b></b></b> + <b class="spiffy1"><b></b></b></b> +</div> + + +</div> +</body> +</html> + diff --git a/www/StaticAnalysisUsage.html b/www/StaticAnalysisUsage.html new file mode 100644 index 000000000000..daab89f724aa --- /dev/null +++ b/www/StaticAnalysisUsage.html @@ -0,0 +1,274 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Information on using the Static Analyzer ("Clang Checker")</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style> + thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + border-top: 2px solid #000000; + border-bottom: 2px solid #000000; + font-weight: bold; font-family: Verdana + } + table { border: 1px #000000 solid } + table { border-collapse: collapse; border-spacing: 0px } + table { margin-left:20px; margin-top:20px; margin-bottom:20px } + td { border-bottom: 1px #000000 dotted } + td { padding:5px; padding-left:8px; padding-right:8px } + td { text-align:left; font-size:9pt } + td.View { padding-left: 10px } + </style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<h1>Information on using the Static Analyzer</h1> + +<h2 id="Obtaining">Obtaining the Analyzer</h2> + +<p> Using the analyzer involves executing <tt>scan-build</tt> (see <a +href="#BasicUsage">Basic Usage</a>). <tt>scan-build</tt> will first look for a +<tt>clang</tt> executable in the same directory as <tt>scan-build</tt>, and then +search your path.</p> + +<p>If one is using the analyzer directly from the Clang sources, it suffices to +just directly execute <tt>scan-build</tt> in the <tt>utils</tt> directory. No +other special installation is needed.</p> + +<h3>Packaged Builds (Mac OS X)</h3> + +<p>Semi-regular pre-built binaries of the analyzer are available on Mac OS X +(10.5).</p> + +<p>The latest build is: + <!--#include virtual="latest_checker.html.incl"--> +</p> + +Packaged builds for other platforms may eventually be provided, but as the tool +is in its early stages we are not actively promoting releases yet. If you wish +to help contribute regular builds of the analyzer on other platforms, please +email the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">Clang +Developers' mailing list</a>.</p> + +<p>Packaged builds of the analyzer expand to the following files:</p> + +<table id="package"> +<thead><tr><td>File</td><td>Purpose</td></tr></thead> +<tr><td><tt><b>scan-build</b></tt></td><td>Script for running the analyzer over a project build. <b>This is the only file you care about.</b></td></tr> +<tr><td><tt>ccc-analyzer</tt></td><td>GCC interceptor (called by scan-build)</td></tr> +<tr><td><tt>clang</tt></td><td>Static Analyzer (called by ccc-analyzer)</td><tr> +<tr><td><tt>sorttable.js</tt></td><td>JavaScript used for displaying error reports</td></tr> +</table> + +<h3 id="OtherPlatforms">Other Platforms (Building the Analyzer from Source)</h3> + +<p>Packaged builds simply consist of a few files from the Clang source tree, +meaning that <b>anyone</b> who can build Clang can use the static analyzer. +Please see the <a href="get_started.html">Getting Started</a> page for more +details on downloading and compiling Clang.</p> + +<p>All files used by the analyzer (and included in packaged builds; <a +href="#package">see above</a>) other than a compiled <tt>clang</tt> executable +are found in the <tt>utils</tt> subdirectory in the Clang tree.</p> + +<h2 id="BasicUsage">Basic Usage</h2> + +<p>The analyzer is executed from the command-line. To run the analyzer, you will +use <tt>scan-build</tt> to analyze the source files compiled by <tt>gcc</tt> +during a project build.</p> + +<p>For example, to analyze the files compiled under a build:</p> + +<pre> + $ <b>scan-build</b> make + $ <b>scan-build</b> xcodebuild +</pre> + +<p> In the first case <tt>scan-build</tt> analyzes the code of a project built +with <tt>make</tt>, and in the second case <tt>scan-build</tt> analyzes a project +built using <tt>xcodebuild</tt>. In general, the format is: </p> + +<pre> + $ <b>scan-build</b> <i>[scan-build options]</i> <b><command></b> <i>[command options]</i> +</pre> + +<p> Operationally, <tt>scan-build</tt> literally runs <command> with all of the +subsequent options passed to it. For example:</p> + +<pre> + $ scan-build make <b>-j4</b> +</pre> + +<p>In this example, <tt>scan-build</tt> makes no effort to interpret the options +after the build command (in this case, <tt>make</tt>); it just passes them +through. In general, <tt>scan-build</tt> should support parallel builds, but +<b>not distributed builds</b>. Similarly, you can use <tt>scan-build</tt> to +analyze specific files: + +<pre> + $ scan-build gcc -c <b>t1.c t2.c</b> +</pre> + +<p> +This example causes the files <tt>t1.c</tt> and <tt>t2.c</tt> to be analyzed. +</p> + +<h3>Other Options</h3> + +<p> +As mentioned above, extra options can be passed to <tt>scan-build</tt>. These +options prefix the build command. For example:</p> + +<pre> + $ scan-build <b>-k -V</b> make + $ scan-build <b>-k -V</b> xcodebuild +</pre> + +<p>Here is a subset of useful options:</p> + +<table> + <thead><tr><td>Option</td><td>Description</td></tr></thead> + + <tr><td><b>-o</b></td><td>Target directory for HTML report files. Subdirectories will be + created as needed to represent separate "runs" of the analyzer. If this option +is not specified, a directory is created in <tt>/tmp</tt> to store the +reports.</td><tr> + + <tr><td><b>-h</b><br><i><nobr>(or no arguments)</nobr></i></td><td>Display all <tt>scan-build</tt> options.</td></tr> + + <tr><td><b>-k</b><br><nobr><b>--keep-going</b></nobr></td><td>Add a "keep on going" option to the + specified build command. <p>This option currently supports <tt>make</tt> and + <tt>xcodebuild</tt>.</p> <p>This is a convenience option; one can specify this + behavior directly using build options.</p></td></tr> + + <tr><td><b>-v<b></td><td>Verbose output from scan-build and the analyzer. <b>A second and third + "-v" increases verbosity</b>, and is useful for filing bug reports against the analyzer.</td></tr> + + <tr><td><b>-V</b></td><td>View analysis results in a web browser when the build command completes.</td></tr> +</table> + +<h2 id="Output">Output of the Analyzer</h2> + +<p> +The output of the analyzer is a set of HTML files, each one which represents a +separate bug report. A single <tt>index.html</tt> file is generated for +surveying all of the bugs. You can then just open <tt>index.html</tt> in a web +browser to view the bug reports. +</p> + +<p> +Where the HTML files are generated is specified with a <b>-o</b> option to +<tt>scan-build</tt>. If <b>-o</b> isn't specified, a directory in <tt>/tmp</tt> +is created to store the files (<tt>scan-build</tt> will print a message telling +you where they are). If you want to view the reports immediately after the build +completes, pass <b>-V</b> to <tt>scan-build</tt>. +</p> + + +<h2 id="RecommendedUsageGuidelines">Recommended Usage Guidelines</h2> + +Here are a few recommendations with running the analyzer: + +<h3>Always Analyze a Project in its "Debug" Configuration</h3> + +<p>Most projects can be built in a "debug" mode that enables assertions. +Assertions are picked up by the static analyzer to prune infeasible paths, which +in some cases can greatly reduce the number of false positives (bogus error +reports) emitted by the tool.</p> + +<h3>Pass -k to scan-build</h3> + +<p>While <tt>ccc-analyzer</tt> invokes <tt>gcc</tt> to compile code, any +problems in correctly forwarding arguments to <tt>gcc</tt> may result in a build +failure. Passing <b>-k</b> to <tt>scan-build</tt> potentially allows you to +analyze other code in a project for which this problem doesn't occur.</p> + +<p> Also, it is useful to analyze a project even if not all of the source files +are compilable. This is great when using <tt>scan-build</tt> as part of your +compile-debug cycle.</p> + +<h3>Use Verbose Output when Debugging scan-build</h3> + +<p><tt>scan-build</tt> takes a <b>-v</b> option to emit verbose output about +what it's doing; two <b>-v</b> options emit more information. Redirecting the +output of <tt>scan-build</tt> to a text file (make sure to redirect standard +error) is useful for filing bug reports against <tt>scan-build</tt> or the +analyzer, as we can see the exact options (and files) passed to the analyzer. +For more comprehensible logs, don't perform a parallel build.</p> + +<h2 id="Debugging">Debugging the Analyzer</h2> + +<p>This section provides information on debugging the analyzer, and troubleshooting +it when you have problems analyzing a particular project.</p> + +<h3>How it Works</h3> + +<p>To analyze a project, <tt>scan-build</tt> simply sets the environment variable +<tt>CC</tt> to the full path to <tt>ccc-analyzer</tt>. It also sets a few other +environment variables to communicate to <tt>ccc-analyzer</tt> where to dump HTML +report files.</p> + +<p>Some Makefiles (or equivalent project files) hardcode the compiler; for such +projects simply overriding <tt>CC</tt> won't cause <tt>ccc-analyzer</tt> to be +called. This will cause the compiled code <b>to not be analyzed.</b></p> If you +find that your code isn't being analyzed, check to see if <tt>CC</tt> is +hardcoded. If this is the case, you can hardcode it instead to the <b>full +path</b> to <tt>ccc-analyzer</tt>.</p> + +<p>When applicable, you can also run <tt>./configure</tt> for a project through +<tt>scan-build</tt> so that configure sets up the location of <tt>CC</tt> based +on the environment passed in from <tt>scan-build</tt>: + +<pre> + $ scan-build <b>./configure</b> +</pre> + +<p><tt>scan-build</tt> has special knowledge about <tt>configure</tt>, so it in +most cases will not actually analyze the configure tests run by +<tt>configure</tt>.</p> + +<p>Under the hood, <tt>ccc-analyzer</tt> directly invokes <tt>gcc</tt> to +compile the actual code in addition to running the analyzer (which occurs by it +calling <tt>clang</tt>). <tt>ccc-analyzer</tt> tries to correctly forward all +the arguments over to <tt>gcc</tt>, but this may not work perfectly (please +report bugs of this kind). + +<h2 id="filingbugs">Filing Bugs and Feature Requests</h2> + +<p>We encourage users to file bug reports for any problems that they encounter. +We also welcome feature requests. When filing a bug report, please do the +following:</p> + +<ul> + +<li>Include the checker build (for prebuilt Mac OS X binaries) or the SVN +revision number.</li> + +<li>Provide a self-encapsulated, reduced test case that exhibits the issue + you are experiencing.</li> + +<li>Test cases don't tell us everything. Please briefly describe the problem you are seeing.</li> + +</ul> + +<h3>Outside Apple</h3> + +<p>Please <a href="http://llvm.org/bugs/enter_bug.cgi?product=clang">file +bugs</a> in LLVM's Bugzilla database against the Clang <b>Static Analyzer</b> +component.</p> + +<h3>Apple-internal Users</h3> + +<p>Please file bugs in Radar against the <b>llvm - checker</b> component.</p> + +</div> +</body> +</html> + diff --git a/www/carbon-compile.png b/www/carbon-compile.png Binary files differnew file mode 100644 index 000000000000..e8516c7055bb --- /dev/null +++ b/www/carbon-compile.png diff --git a/www/clang_video-05-25-2007.html b/www/clang_video-05-25-2007.html new file mode 100644 index 000000000000..ade0269f4688 --- /dev/null +++ b/www/clang_video-05-25-2007.html @@ -0,0 +1,27 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>2007 LLVM Developer's Meeting</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + <!--#include virtual="menu.html.incl"--> + <div id="content"> + <h1>2007 LLVM Developer's Meeting</h1> + Discussion about Clang at the <a href="http://llvm.org/devmtg/2007-05/">2007 LLVM Developer's Meeting</a>. + <h2>About:</h2> + <p>In this video, Steve Naroff introduces the Clang project and talks about some of the goals and motivations for starting the project. + <br><br> + <p><b>Details:</b> New LLVM C Front-end - This talk describes a new from-scratch C frontend (which is aiming to support Objective C and C++ someday) for LLVM, built as a native part of the LLVM system and in the LLVM design style. + <h2>The Presentation:</h2> + <p>You can download a copy of the presentation in mov format. However, due to the picture quality, it is recommended that you also download the lecture slides for viewing while you watch the video. + <ul> + <li><a href="http://llvm.org/devmtg/2007-05/09-Naroff-CFE.mov">Video (mov file)</a> + <li><a href="http://llvm.org/devmtg/2007-05/09-Naroff-CFE.pdf">Lecture slides (PDF)</a> + </ul> + </div> +</body> +</html>
\ No newline at end of file diff --git a/www/clang_video-07-25-2007.html b/www/clang_video-07-25-2007.html new file mode 100644 index 000000000000..d2225896c50b --- /dev/null +++ b/www/clang_video-07-25-2007.html @@ -0,0 +1,30 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>LLVM 2.0 and Beyond!</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + <!--#include virtual="menu.html.incl"--> + <div id="content"> + <h1>LLVM 2.0 and Beyond!</h1> + A Google Techtalk by <a href="http://www.nondot.org/sabre/">Chris Lattner</a> + <h2>About:</h2> + <p>In this video, Chris Lattner talks about some of the features of Clang, especially in regards to performance. + <br><br> + <p><b>Details:</b> The LLVM 2.0 release brings a number of new features and capabilities to the LLVM toolset. This talk briefly describes those features, then moves on to talk about what is next: llvm 2.1, llvm-gcc 4.2, and puts a special emphasis on the 'clang' C front-end. This describes how the 'clang' preprocessor can be used to improve the scalability of distcc by up to 4.4x. + <h2>The Presentation:</h2> + <p>You can view the presentation through google video. In addition, the slides from the presentation are also available, if you wish to retain a copy. + <ul> + <li><a href="http://video.google.com/videoplay?docid=1921156852099786640">Google Tech Talk Video (19:00-)</a> (Note: the Clang lecture starts at 19 minutes into the video.) + <li><a href="http://llvm.org/pubs/2007-07-25-LLVM-2.0-and-Beyond.pdf">LLVM 2.0 and Beyond! slides (PDF)</a> + </ul> + <h2>Publishing Information:</h2> + "LLVM 2.0 and Beyond!", Chris Lattner,<br> + <i>Google Tech Talk</i>, Mountain View, CA, July 2007. + </div> +</body> +</html>
\ No newline at end of file diff --git a/www/comparison.html b/www/comparison.html new file mode 100644 index 000000000000..0bfff127201b --- /dev/null +++ b/www/comparison.html @@ -0,0 +1,195 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Comparing clang to other open source compilers</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + <!--#include virtual="menu.html.incl"--> + <div id="content"> + <h1>Clang vs Other Open Source Compilers</h1> + + <p>Building an entirely new compiler front-end is a big task, and it isn't + always clear to people why we decided to do this. Here we compare clang + and its goals to other open source compiler front-ends that are + available. We restrict the discussion to very specific objective points + to avoid controversy where possible. Also, software is infinitely + mutable, so we don't talk about little details that can be fixed with + a reasonable amount of effort: we'll talk about issues that are + difficult to fix for architectural or political reasons.</p> + + <p>The goal of this list is to describe how differences in goals lead to + different strengths and weaknesses, not to make some compiler look bad. + This will hopefully help you to evaluate whether using clang is a good + idea for your personal goals. Because we don't know specifically what + <em>you</em> want to do, we describe the features of these compilers in + terms of <em>our</em> goals: if you are only interested in static + analysis, you may not care that something lacks codegen support, for + example.</p> + + <p>Please email cfe-dev if you think we should add another compiler to this + list or if you think some characterization is unfair here.</p> + + <ul> + <li><a href="#gcc">Clang vs GCC</a> (GNU Compiler Collection)</li> + <li><a href="#elsa">Clang vs Elsa</a> (Elkhound-based C++ Parser)</li> + <li><a href="#pcc">Clang vs PCC</a> (Portable C Compiler)</li> + </ul> + + + <!--=====================================================================--> + <h2><a name="gcc">Clang vs GCC (GNU Compiler Collection)</a></h2> + <!--=====================================================================--> + + <p>Pro's of GCC vs clang:</p> + + <ul> + <li>GCC supports languages that clang does not aim to, such as Java, Ada, + FORTRAN, etc.</li> + <li>GCC front-ends are very mature and already support C++. + <a href="cxx_status.html">clang's support for C++</a> is nowhere near + what GCC supports.</li> + <li>GCC supports more targets than LLVM.</li> + <li>GCC is popular and widely adopted.</li> + <li>GCC does not require a C++ compiler to build it.</li> + </ul> + + <p>Pro's of clang vs GCC:</p> + + <ul> + <li>The Clang ASTs and design are intended to be <a + href="features.html#simplecode">easily understandable</a> by + anyone who is familiar with the languages involved and who has a basic + understanding of how a compiler works. GCC has a very old codebase + which presents a steep learning curve to new developers.</li> + <li>Clang is designed as an API from its inception, allowing it to be reused + by source analysis tools, refactoring, IDEs (etc) as well as for code + generation. GCC is built as a monolithic static compiler, which makes + it extremely difficult to use as an API and integrate into other tools. + Further, its historic design and <a + href="http://gcc.gnu.org/ml/gcc/2007-11/msg00460.html">current</a> + <a href="http://gcc.gnu.org/ml/gcc/2004-12/msg00888.html">policy</a> + makes it difficult to decouple the front-end from the rest of the + compiler. </li> + <li>Various GCC design decisions make it very difficult to reuse: its build + system is difficult to modify, you can't link multiple targets into one + binary, you can't link multiple front-ends into one binary, it uses a + custom garbage collector, uses global variables extensively, is not + reentrant or multi-threadable, etc. Clang has none of these problems. + </li> + <li>For every token, clang tracks information about where it was written and + where it was ultimately expanded into if it was involved in a macro. + GCC does not track information about macro instantiations when parsing + source code. This makes it very difficult for source rewriting tools + (e.g. for refactoring) to work in the presence of (even simple) + macros.</li> + <li>Clang does not implicitly simplify code as it parses it like GCC does. + Doing so causes many problems for source analysis tools: as one simple + example, if you write "x-x" in your source code, the GCC AST will + contain "0", with no mention of 'x'. This is extremely bad for a + refactoring tool that wants to rename 'x'.</li> + <li>Clang can serialize its AST out to disk and read it back into another + program, which is useful for whole program analysis. GCC does not have + this. GCC's PCH mechanism (which is just a dump of the compiler + memory image) is related, but is architecturally only + able to read the dump back into the exact same executable as the one + that produced it (it is not a structured format).</li> + <li>Clang is <a href="features.html#performance">much faster and uses far + less memory</a> than GCC.</li> + <li>Clang aims to provide extremely clear and concise diagnostics (error and + warning messages), and includes support for <a + href="diagnostics.html">expressive diagnostics</a>. GCC's warnings are + sometimes acceptable, but are often confusing and it does not support + expressive diagnostics. Clang also preserves typedefs in diagnostics + consistently, showing macro expansions and many other features.</li> + <li>GCC is licensed under the GPL license. clang uses a BSD license, which + allows it to be used by projects that do not themselves want to be + GPL.</li> + <li>Clang inherits a number of features from its use of LLVM as a backend, + including support for a bytecode representation for intermediate code, + pluggable optimizers, link-time optimization support, Just-In-Time + compilation, ability to link in multiple code generators, etc.</li> + </ul> + + <!--=====================================================================--> + <h2><a name="elsa">Clang vs Elsa (Elkhound-based C++ Parser)</a></h2> + <!--=====================================================================--> + + <p>Pro's of Elsa vs clang:</p> + + <ul> + <li>Elsa's support for C++ is far beyond what clang provides. If you need + C++ support in the next year, Elsa is a great way to get it. That said, + Elsa is missing important support for templates and other pieces: for + example, it is not capable of compiling the GCC STL headers from any + version newer than GCC 3.4.</li> + <li>Elsa's parser and AST is designed to be easily extensible by adding + grammar rules. Clang has a very simple and easily hackable parser, + but requires you to write C++ code to do it.</li> + </ul> + + <p>Pro's of clang vs Elsa:</p> + + <ul> + <li>The Elsa community is extremely small and major development work seems + to have ceased in 2005, though it continues to be used by other small + projects + (e.g. Oink). Clang has a vibrant community including developers that + are paid to work on it full time. In practice this means that you can + file bugs against Clang and they will often be fixed for you. If you + use Elsa, you are (mostly) on your own for bug fixes and feature + enhancements.</li> + <li>Elsa is not built as a stack of reusable libraries like clang is. It is + very difficult to use part of Elsa without the whole front-end. For + example, you cannot use Elsa to parse C/ObjC code without building an + AST. You can do this in Clang and it is much faster than building an + AST.</li> + <li>Elsa does not have an integrated preprocessor, which makes it extremely + difficult to accurately map from a source location in the AST back to + its original position before preprocessing. Like GCC, it does not keep + track of macro expansions.</li> + <li>Elsa is even slower and uses more memory than GCC, which itself requires + far more space and time than clang.</li> + <li>Elsa only does partial semantic analysis. It is intended to work on + code that is already validated by GCC, so it does not do many semantic + checks required by the languages it implements.</li> + <li>Elsa does not support Objective-C.</li> + <li>Elsa does not support native code generation.</li> + </ul> + + <p>Note that there is a fork of Elsa known as "Pork". It addresses some of + these shortcomings by loosely integrating a preprocessor. This allows it + to map from a source location in the AST to the original position before + preprocessing, providing it better support for static analysis and + refactoring. Note that Pork is in stasis now too.</p> + + + <!--=====================================================================--> + <h2><a name="pcc">Clang vs PCC (Portable C Compiler)</a></h2> + <!--=====================================================================--> + + <p>Pro's of PCC vs clang:</p> + + <ul> + <li>The PCC source base is very small and builds quickly with just a C + compiler.</li> + </ul> + + <p>Pro's of clang vs PCC:</p> + + <ul> + <li>PCC dates from the 1970's and has been dormant for most of that time. + The clang + llvm communities are very active.</li> + <li>PCC doesn't support C99, Objective-C, and doesn't aim to support + C++.</li> + <li>PCC's code generation is very limited compared to LLVM. It produces very + inefficient code and does not support many important targets.</li> + <li>Like Elsa, PCC's does not have an integrated preprocessor, making it + extremely difficult to use it for source analysis tools.</li> + </div> +</body> +</html> diff --git a/www/content.css b/www/content.css new file mode 100644 index 000000000000..ab6983b48491 --- /dev/null +++ b/www/content.css @@ -0,0 +1,25 @@ +html, body { + padding:0px; + font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222; + line-height:1.5; +} + +h1, h2, h3, tt { color: #000 } + +h1 { padding-top:0px; margin-top:0px;} +h2 { color:#333333; padding-top:0.5em; } +h3 { padding-top: 0.5em; margin-bottom: -0.25em; color:#2d58b7} +li { padding-bottom: 0.5em; } +ul { padding-left:1.5em; } + +/* Slides */ +IMG.img_slide { + display: block; + margin-left: auto; + margin-right: auto +} + +.itemTitle { color:#2d58b7 } + +/* Tables */ +tr { vertical-align:top } diff --git a/www/cxx_status.html b/www/cxx_status.html new file mode 100644 index 000000000000..d85d451f559e --- /dev/null +++ b/www/cxx_status.html @@ -0,0 +1,2320 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>Clang - C++ Support</title> + <link type="text/css" rel="stylesheet" href="menu.css"> + <link type="text/css" rel="stylesheet" href="content.css"> + <style type="text/css"> + .na { background-color: #C0C0C0; text-align: center; } + .broken { background-color: #C11B17 } + .basic { background-color: #F88017 } + .medium { background-color: #FDD017 } + .advanced { background-color: #347C17 } + .complete { background-color: #00FF00 } + </style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<!--*************************************************************************--> +<h1>C++ Support in Clang</h1> +<!--*************************************************************************--> + +<p> +This page tracks the status of C++ support in Clang.<br> +Currently most of the C++ features are missing; here you can find features that are at least partially supported in Clang. If you are looking to <a href="get_involved.html">get involved with Clang development</a> to help work on support for C++, please also look at our <a href="OpenProjects.html">Open Projects</a> page for some specific ideas.</p> + + +<!-- Within this table: The colors we're using to color-code our level +of support for a given section: + + White (no background): not considered/tested. + #C11B17: Broken. + #F88017: Some useful examples work + #FDD017: Many examples work + #347C17: Nearly everything works + #00FF00 + check mark: Implementation complete! + --> + +<p>The following table is used to help track our implementation + progress toward implementing the complete C++03 standard. We use a + simple, somewhat arbitrary color-coding scheme to describe the + relative completeness of features by section:</p> + +<table width="689" border="1" cellspacing="0"> + <tr> + <th>Not started/not evaluated</th> + <th>Not Applicable</th> + <th>Broken</th> + <th>Some examples work</th> + <th>Many examples work</th> + <th>Nearly everything works</th> + <th>Complete</th> + <th>Complete (with tests for each paragraph)</th> + </tr> + <tr> + <td></td> + <td class="na">N/A</td> + <td class="broken"></td> + <td class="basic"></td> + <td class="medium"></td> + <td class="advanced"></td> + <td class="complete"></td> + <td class="complete" align="center">✓</td> + </tr> +</table> + +<p>A feature is "complete" when the appropriate Clang component (Parse, AST, +Sema, CodeGen) implements the behavior described in all of the +paragraphs in the relevant C++ standard. Note that many C++ features are +actually described in several different sections within the standard. The major components are:</p> + +<dl> + <dt>Parse</dt> + <dd>Clang is able to parse the grammar of this feature (or the grammar described by this section), but does not necessarily do anything with the parsed result. Use Clang's <code>-fsyntax-only</code> option to parse C++ programs.</dd> + + <dt>AST</dt> + <dd>Clang builds an abstract syntax tree (AST) for the feature, but does not necessarily perform any type-checking. Use Clang's <code>-ast-print</code> option to print the resulting ASTs.</dd> + + <dt>Sema</dt> + <dd>Clang parses and type-checks this feature and provides a well-formed AST annotated with types. Use Clang's <code>-fsyntax-only</code> to type-check code.</dd> + + <dt>CodeGen</dt> + <dd>Clang parses, type-checks, and generates code for this feature, allowing one to compile and execute programs.</dd> +</dl> + +<p>Updates to this table are welcome! Since Clang already supports +much of C, and therefore much C++, many of the currently-white cells +could be filled in. If you wish to do so, please compare Clang's +implementation against the C++ standard and provide a patch that +updates the table accordingly. Tests for the various features are also +welcome!</p> + +<table width="689" border="1" cellspacing="0"> + <tr> + <th>Section</th> + <th>Parse</th> + <th>AST</th> + <th>Sema</th> + <th>CodeGen</th> + <th>Notes</th> + </tr> +<tr> + <td>2 [lex]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.1 [lex.phases]</td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>Extended characters aren't handled.</td> +</tr> +<tr> + <td> 2.2 [lex.charset]</td> + <td class="basic"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>No support for extended characters.</td> +</tr> +<tr> + <td> 2.3 [lex.trigraph]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.4 [lex.pptoken]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.5 [lex.digraph]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.6 [lex.token]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.7 [lex.comment]</td> + <td class="advanced" align="center"></td> + <td></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>NDR "form feed or vtab in comment" is not diagnosed. No AST representation of comments.</td> +</tr> +<tr> + <td> 2.8 [lex.header]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.9 [lex.ppnumber]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.10 [lex.name]</td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>No support for extended characters</td> +</tr> +<tr> + <td> 2.11 [lex.key]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.12 [lex.operators]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.13 [lex.literal]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.13.1 [lex.icon]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.13.2 [lex.ccon]</td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>Poor support for extended characters</td> +</tr> +<tr> + <td> 2.13.3 [lex.fcon]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 2.13.4 [lex.string]</td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td>Poor support for extended characters</td> +</tr> +<tr> + <td> 2.13.5 [lex.bool]</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> +<td>3 [basic]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.1 [basic.def]</td> + <td></td> + <td></td> + <td></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.2 [basic.def.odr]</td> + <td></td> + <td></td> + <td></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 3.3 [basic.scope]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.3.1 [basic.scope.pdecl]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.3.2 [basic.scope.local]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.3.3 [basic.scope.proto]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.3.4 [basic.funscope]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr><td> 3.3.5 [basic.scope.namespace]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.3.6 [basic.scope.class]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 3.3.7 [basic.scope.hiding]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.4 [basic.lookup]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.4.1 [basic.lookup.unqual]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="medium"></td> + <td class="na">N/A</td> + <td>Many cases beyond simple global and function-local lookup don't work</td> +</tr> +<tr> + <td> 3.4.2 [basic.lookup.argdep]</td> + <td class="na">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td>Missing support for templates, friend functions.</td> +</tr> +<tr> + <td> 3.4.3 [basic.lookup.qual]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="advanced"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.4.3.1 [class.qual]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="advanced"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 3.4.3.2 [namespace.qual]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="advanced"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr><td> 3.4.4 [basic.lookup.elab]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.4.5 [basic.lookup.classref]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.4.6 [basic.lookup.udir]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.5 [basic.link]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.6 [basic.start]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.6.1 [basic.start.main]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.6.2 [basic.start.init]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.6.3 [basic.start.term]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7 [basic.stc]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.1 [basic.stc.static]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.2 [basic.stc.auto]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.3 [basic.stc.dynamic]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.3.1 [basic.stc.dynamic.allocation]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.3.2 [basic.stc.dynamic.deallocation]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.7.4 [basic.stc.inherit]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.8 [basic.life]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.9 [basic.types]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.9.1 [basic.fundamental]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.9.2 [basic.compound]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.9.3 [basic.type.qualifier]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 3.10 [basic.lval]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td>4 [conv]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.1 [conv.lval]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> <!-- p2: sizeof --> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.2 [conv.array]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.3 [conv.func]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.4 [conv.qual]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.5 [conv.prom]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.6 [conv.fpprom]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.7 [conv.integral]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.8 [conv.double]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.9 [conv.fpint]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.10 [conv.ptr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.11 [conv.mem]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 4.12 [conv.bool]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td>5 [expr]</td> + <td class="na">N/A</td> + <td class="na">N/A</td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.1 [expr.prim]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td></td> + <td>template-ids are not supported, name lookup is not complete</td> +</tr> +<tr><td> 5.2 [expr.post]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 5.2.1 [expr.sub]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.2 [expr.call]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.3 [expr.type.conv]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="basic"></td> + <td></td> + <td>Only between non-class types</td> +</tr> +<tr> + <td> 5.2.4 [expr.pseudo]</td> + <td class="broken"></td> + <td class="broken"></td> + <td class="broken"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.5 [expr.ref]</td> + <td class="complete" align="center"></td> + <td class="medium"></td> + <td class="medium"></td> + <td></td> + <td>Cannot look up operator names, qualified-ids, or names in base classes</td> +</tr> +<tr> + <td> 5.2.6 [expr.post.incr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.7 [expr.dynamic.cast]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.8 [expr.typeid]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.9 [expr.static.cast]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>Some custom conversions don't work.</td> +</tr> +<tr> + <td> 5.2.10 [expr.reinterpret.cast]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.2.11 [expr.const.cast]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr><td> 5.3 [expr.unary]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 5.3.1 [expr.unary.op]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 5.3.1p1 Unary *</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.1p2-5 Unary &</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.1p6 Unary +</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.1p7 Unary -</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.1p8 Unary !</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.1p9 Unary ~</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.2 [expr.pre.incr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.3 [expr.sizeof]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.3.4 [expr.new]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>operator delete is not looked up, initialization not quite correct</td> +</tr> +<tr> + <td> 5.3.5 [expr.delete]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.4 [expr.cast]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium"></td> + <td></td> + <td>Too lenient, and may not always have correct semantics</td> +</tr> +<tr> + <td> 5.5 [expr.mptr.oper]</td> + <td class="complete" align="center"></td> + <td class="advanced"></td> + <td class="advanced"></td> + <td></td> + <td>Dereferenced member function pointers have the wrong type.</td> +</tr> +<tr> + <td> 5.6 [expr.mul]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.7 [expr.add]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.8 [expr.shift]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.9 [expr.rel]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.10 [expr.eq]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.11 [expr.bit.and]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.12 [expr.xor]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.13 [expr.or]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.14 [expr.log.and]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.15 [expr.log.or]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.16 [expr.cond]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td>some invalid hierarchy casts still accepted, but that's a general problem</td> +</tr> +<tr> + <td> 5.17 [expr.ass]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.18 [expr.comma]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 5.19 [expr.const]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="basic"></td> + <td></td> + <td>Uses C semantics</td> +</tr> +<tr> + <td>6 [stmt.stmt]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.1 [stmt.label]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.2 [stmt.expr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.3 [stmt.block]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.4 [stmt.select]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>Conversion of declarations to required types not really supported.</td> +</tr> +<tr> + <td> 6.4.1 [stmt.if]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.4.2 [stmt.switch]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.5 [stmt.iter]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>Conversion of declarations to required types not really supported.</td> +</tr> +<tr> + <td> 6.5.1 [stmt.while]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.5.2 [stmt.do]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.5.3 [stmt.for]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.6 [stmt.jump]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.6.1 [stmt.break]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.6.2 [stmt.cont]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.6.3 [stmt.return]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.6.4 [stmt.goto]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 6.7 [stmt.dcl]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>Skipping of initialization is not flagged. Existence and accessibility of destructors is not tested for.</td> +</tr> +<tr> + <td> 6.8 [stmt.ambig]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr><td>7 [dcl.dcl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> + 7.1 [dcl.spec]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>No support for friend declarations.</td> +</tr> +<tr> + <td> 7.1.1 [dcl.stc]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td></td> + <td>Linkage merging has some errors.</td> +</tr> +<tr> + <td> 7.1.2 [dcl.fct.spec]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.1.3 [dcl.typedef]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> +</tr> +<tr> + <td> 7.1.4 [dcl.friend]</td> + <td class="broken"></td> + <td class="broken"></td> + <td class="broken"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.1.5 [dcl.type]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.1.5.1 [dcl.type.cv]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.1.5.2 [dcl.type.simple]</td> + <td class="medium"></td> + <td class="advanced"></td> + <td class="advanced"></td> + <td></td> + <td>Cannot parse template IDs.</td> +</tr> +<tr> + <td> 7.1.5.3 [dcl.type.elab]</td> + <td class="medium"></td> + <td class="advanced"></td> + <td class="advanced"></td> + <td></td> + <td>Cannot parse template IDs.</td> +</tr> +<tr> + <td> 7.2 [dcl.enum]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.3 [basic.namespace]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.3.1 [namespace.def]</td> + <td class="medium"></td> + <td class="medium"></td> + <td class="medium"></td> + <td></td> + <td>Cannot parse namespace aliases.</td> +</tr> +<tr> + <td> 7.3.1.1 [namespace.unnamed]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="broken"></td> + <td></td> + <td>Unnamed namespace members cannot be looked up.</td> +</tr> +<tr> + <td> 7.3.1.2 [namespace.memdef]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced"></td> + <td></td> + <td>The friend stuff is not supported.</td> +</tr> +<tr> + <td> 7.3.2 [namespace.alias]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 7.3.3 [namespace.udecl]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.3.4[namespace.udir]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced"></td> + <td class="broken" align="center"></td> + <td>Example in p4 fails.</td> +</tr> +<tr><td> + 7.4 [dcl.asm]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 7.5 [dcl.link]</td> + <td class="complete" align="center"></td> + <td class="basic"></td> + <td class="basic"></td> + <td></td> + <td></td> +</tr> +<tr> + <td>8 [dcl.decl]</td><td></td><td></td><td></td><td></td><td></td> +</tr> +<tr> + <td> 8.1 [dcl.name]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 8.2 [dcl.ambig.res]</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 8.3 [dcl.meaning]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td>Qualified declarator-ids are not fully implemented.</td> +</tr> + <tr> + <td> 8.3.1 [dcl.ptr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.2 [dcl.ref]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.3 [dcl.mptr]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.4 [dcl.array]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.5 [dcl.fct]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.6 [dcl.fct.default]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td>Missing default arguments for templates.</td> +</tr> +<tr> + <td> 8.4 [dcl.fct.def]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td>ctor-initializers are not fully type-checked.</td> +</tr> +<tr> + <td> 8.5 [dcl.init]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td></td> +</tr> +<tr> + <td> 8.5.1[dcl.init.aggr]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td>No CodeGen for initializing non-aggregates or dynamic initialization.</td> +</tr> +<tr> + <td> 8.5.2[dcl.init.string]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td></td> +</tr> +<tr> + <td> 8.5.3 [dcl.init.ref]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td></td> +</tr> +<tr> + <td>9 [class]</td> + <td class="advanced" align="center"></td> + <td></td> + <td></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 9.1 [class.name]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 9.2 [class.mem]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td>No parser support for using declarations or member templates.</td> +</tr> +<tr> + <td> 9.3 [class.mfct]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="basic" align="center"></td> + <td></td> +</tr> +<tr> + <td> 9.3.1 [class.mfct.non-static]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td></td> +</tr> +<tr> + <td> 9.3.2 [class.this]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic"></td> + <td></td> +</tr> +<tr> + <td> 9.4 [class.static]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic"></td> + <td></td> +</tr> +<tr> + <td> 9.4.1 [class.static.mfct]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic"></td> + <td></td> +</tr> +<tr> + <td> 9.4.2 [class.static.data]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic"></td> + <td></td> +</tr> +<tr> + <td> 9.5 [class.union]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="medium"></td> + <td class="medium"></td> + <td>Semantic analysis does not yet check all of the requirements placed on the members of unions.</td> +</tr> +<tr> + <td> 9.6 [class.bit]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> +</tr> +<tr> + <td> 9.7 [class.nest]</td> + <td class="complete" align="center"></td> + <td class="advanced"></td> + <td class="advanced"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 9.8 [class.local]</td> + <td class="complete" align="center"></td> + <td class="medium"></td> + <td class="broken"></td> + <td class="broken"></td> + <td></td> +</tr> +<tr> + <td> 9.9 [class.nested.type]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td>10 [class.derived]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 10.1 [class.mi]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>No layout of base classes</td> +</tr> +<tr> + <td> 10.2 [class.member.lookup]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 10.3 [class.virtual]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No semantic analysis for overriding virtual functions or inheriting a virtual function. No layout of classes with virtual functions.</td> +</tr> +<tr> + <td> 10.4 [class.abstract]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> + </tr> +<tr> + <td>11 [class.access]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.1 [class.access.spec]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.2 [class.access.base]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.3 [class.access.dcl]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.4 [class.friend]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.5 [class.protected]</td> + <td class="na" align="center"></td> + <td class="complete" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.6 [class.access.virt]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.7 [class.paths]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.8 [class.access.nest]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr><td>12 [special]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 12.1 [class.ctor]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td>Implicitly-declared constructors are never defined.</td> +</tr> +<tr> + <td> 12.2 [class.temporary]</td> + <td class="na" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td>Implementation of temporary objects is in its initial stages.</td> +</tr> +<tr> + <td> 12.3 [class.conv]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 12.3.1 [class.conv.ctor]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 12.3.2 [class.conv.fct]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td>No support for inheritance of conversion functions.</td> +</tr> +<tr> + <td> 12.4 [class.dtor]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Most of the semantics of destructors are unimplemented.</td> +</tr> +<tr><td> 12.5 [class.free]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 12.6 [class.init]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 12.6.1 [class.expl.init]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 12.6.2 [class.base.init]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No actual direct initialization; implicit initialization not checked.</td> +</tr> +<tr><td> 12.7 [class.cdtor]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 12.8 [class.copy]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>Copy assignment operators are mostly ignored by semantic analysis.</td> +</tr> + +<tr><td>13 [over]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 13.1 [over.load]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Missing name mangling.</td> +</tr> +<tr> + <td> 13.2 [over.dcl]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3 [over.match]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1 [over.match.funcs]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.1 [over.match.call]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.1.1 [over.call.func]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.1.2 [over.call.object]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td>Missing AST representation for the implicit conversion to a function reference/pointer</td> +</tr> +<tr> + <td> 13.3.1.2 [over.match.oper]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.3 [over.match.ctor]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.4 [over.match.copy]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.5 [over.match.conv]</td> + <td class="complete" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.1.6 [over.match.ref]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.2 [over.match.viable]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3 [over.match.best]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.1 [over.best.ics]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.1.1 [over.ics.scs]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.1.2 [over.ics.user]</td> + <td class="complete" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.1.3 [over.ics.ellipsis]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.1.4 [over.ics.ref]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.3.3.2 [over.ics.rank]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.4 [over.over]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Error messages need some work. Without templates or using + declarations, we don't have any ambiguities, so the semantic + analysis is incomplete.</td> +</tr> +<tr> + <td> 13.5 [over.oper]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>Some overloaded operators can only be called with function syntax, e.g., <code>operator[](x)</code>.</td> +</tr> +<tr> + <td> 13.5.1 [over.unary]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.2 [over.binary]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.3 [over.ass]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.4 [over.call]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.5 [over.sub]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.6 [over.ref]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.5.7 [over.inc]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 13.6 [over.built]</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>Missing pointer-to-member versions (p11, p16) and support for + the ternary operator (p24, p25).</td> +</tr> +<tr> + <td>14 [temp]</td> + <td class="basic" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.1 [temp.param]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="medium" align="center"></td> + <td class="na" align="center">N/A</td> + <td>Template template parameters cannot actually be used in templates</td> +</tr> +<tr> + <td> 14.2 [temp.names]</td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center">N/A</td> + <td>Cannot name function template specializations</td> +</tr> +<tr> + <td> 14.3 [temp.arg]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center">N/A</td> + <td>Cannot name function template specializations</td> +</tr> +<tr> + <td> 14.3.1 [temp.arg.type]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td>Paragraph 3 will be tested elsewhere</td> +</tr> +<tr> + <td> 14.3.2 [temp.arg.nontype]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.3.3 [temp.arg.template]</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.4 [temp.type]</td> + <td class="na" align="center">N/A</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5 [temp.decls]</td><td></td><td></td><td></td><td></td><td></td> +</tr> +<tr> + <td> 14.5.1 [temp.class]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No out-of-line definitions of the members of a template.</td> +</tr> +<tr> + <td> 14.5.1.1 [temp.mem.func]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No out-of-line definitions of the member functions of a class template.</td> +</tr> +<tr> + <td> 14.5.1.2 [temp.mem.class]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No out-of-line definitions of the member classes of a class template.</td> +</tr> +<tr> + <td> 14.5.1.3 [temp.static]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No out-of-line definitions of the static data members of a class template.</td> +</tr> +<tr> + <td> 14.5.2 [temp.mem]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.5.3 [temp.friend]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5.4 [temp.class.spec]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.5.5.1 [temp.class.spec.match]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5.5.2 [temp.class.order]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5.5.3 [temp.class.spec.mfunc]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5.5 [temp.fct]</td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.5.5.1 [temp.over.link]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.5.5.2 [temp.func.order]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 14.6 [temp.res]</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.1 [temp.local]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.2 [temp.dep]</td> + <td class="na" align="center">N/A</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.2.1 [temp.dep.type]</td> + <td class="na" align="center">N/A</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.2.2 [temp.dep.expr]</td> + <td class="na" align="center">N/A</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.2.3 [temp.dep.constexpr]</td> + <td class="na" align="center">N/A</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.2.4 [temp.dep.temp]</td> + <td class="na" align="center">N/A</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.3 [temp.nondep]</td> + <td class="na" align="center">N/A</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.4 [temp.dep.res]</td> + <td class="na" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.6.4.1 [temp.point]</td> + <td class="na" align="center">N/A</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center"></td> + <td>Only class templates are instantiated</td> +</tr> +<tr> + <td> 14.6.4.2 [temp.dep.candidate]</td> + <td class="na" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="na" align="center"></td> + <td>Not restricted to functions with external linkage</td> +</tr> +<tr> + <td> 14.6.5 [temp.inject]</td> + <td class="na" align="center">N/A</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.7 [temp.spec]</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Function templates cannot be instantiated</td> +</tr> +<tr> + <td> 14.7.1 [temp.inst]</td> + <td class="na" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Function templates cannot be instantiated</td> +</tr> +<tr> + <td> 14.7.2 [temp.explicit]</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Function templates cannot be instantiated</td> +</tr> +<tr> + <td> 14.7.3 [temp.expl.spec]</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>Only class template specialization is available</td> +</tr> +<tr> + <td> 14.8 [temp.fct.spec]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.1 [temp.arg.explicit]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.2 [temp.deduct]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.2.1 [temp.deduct.call]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.2.2 [temp.deduct.funcaddr]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.2.3 [temp.deduct.conv]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.2.4 [temp.deduct.type]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td> 14.8.3 [temp.over]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td></td> +</tr> +<tr> + <td>15 [except]</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 15.1 [except.throw]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td></td> + <td>Does not check for existence of copy constructor and destructor, and some other details</td> +</tr> +<tr> + <td> 15.2 [except.ctor]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td></td> + <td></td> +</tr> +<tr> + <td> 15.3 [except.handle]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="advanced" align="center"></td> + <td></td> + <td>Not all constraints are checked</td> +</tr> +<tr> + <td> 15.4 [except.spec]</td> + <td class="complete" align="center"></td> + <td></td> + <td></td> + <td></td> + <td></td> +</tr> +<tr> + <td> 15.5 [except.special]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 15.5.1 [except.terminate]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 15.5.2 [except.unexpected]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 15.5.3 [except.uncaught]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 15.6 [except.access]</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td class="na" align="center">N/A</td> + <td>Redundant - struck from C++0x</td> +</tr> +<tr><td>16 [cpp]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.1 [cpp.cond]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.2 [cpp.include]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3 [cpp.replace]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3.1 [cpp.subst]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3.2 [cpp.stringize]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3.3 [cpp.concat]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3.4 [cpp.rescan]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.3.5 [cpp.scope]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.4 [cpp.line]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.5 [cpp.error]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.6 [cpp.pragma]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.7 [cpp.null]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> 16.8 [cpp.predefined]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td>A [gram]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.1 [gram.key]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.2 [gram.lex]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.3 [gram.basic]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.4 [gram.expr]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.5 [gram.stmt]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.6 [gram.dcl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.7 [gram.decl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.8 [gram.class]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.9 [gram.derived]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.10 [gram.special]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.11 [gram.over]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.12 [gram.temp]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.13 [gram.except]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> A.14 [gram.cpp]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td>B [implimits]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td>C [diff]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1 [diff.iso]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.1 [diff.lex]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.2 [diff.basic]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.3 [diff.expr]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.4 [diff.stat]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.5 [diff.dcl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.6 [diff.decl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.7 [diff.class]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.8 [diff.special]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.1.9 [diff.cpp]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2 [diff.library]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.1 [diff.mods.to.headers]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.2 [diff.mods.to.definitions]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.2.2 [diff.wchar.t]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.2.3 [diff.header.iso646.h]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.2.4 [diff.null]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.3 [diff.mods.to.declarations]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.4 [diff.mods.to.behavior]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.4.1 [diff.offsetof]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> C.2.4.2 [diff.malloc]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td>D [depr]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> D.1 [depr.incr.bool]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> D.2 [depr.static]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> D.3 [depr.access.dcl]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> D.4 [depr.string]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td> D.5 [depr.c.headers]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr><td>E [extendid]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td colspan="6" align="center" bgcolor="#ffffcc">C++0x Features</td> +</tr> +<tr> + <td>Explicit conversion operators (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a>)</td> + <td class="complete" align="center"></td> + <td class="medium" align="center"></td> + <td class="advanced" align="center"></td> + <td class="broken"></td> + <td>No name mangling; ASTs don't contain calls to conversion operators</td> +</tr> +<tr> + <td>Static assertions (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.pdf">N1720</a>)</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td>Deleted functions (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a>)</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td>Rvalue references (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a> + <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2831.html">N2831</a>)</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="broken"></td> + <td></td> +</tr> +<tr> + <td>nullptr (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a>)</td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="complete" align="center"></td> + <td class="broken"></td> + <td></td> +</tr> + +</table> +<br /> +</div> +</body> +</html> diff --git a/www/demo/DemoInfo.html b/www/demo/DemoInfo.html new file mode 100644 index 000000000000..54a5afa1d799 --- /dev/null +++ b/www/demo/DemoInfo.html @@ -0,0 +1,83 @@ + +<html> +<head> +<title> +Demo page information +</title> +</head> + +<body> + +<h1>Demo page information</h1> + +<p>Press "back" or <a href=".">click here</a> to return to the demo +page.</p> + +<h2><a name="hints">Hints and Advice</a></h2> + +<ul> +<li>The generated LLVM code will be easier to read if +you use stdio (e.g., printf) than iostreams (e.g., std::cout).</li> + +<li>Unused inline functions and methods are not generated. Instead +of '<tt>class foo { void bar() {}};</tt>', +try writing '<tt>class foo { void bar(); }; void foo::bar() {}</tt>'.</li> + +<li>If you want to try out a file that uses non-standard header files, you should + preprocess it (e.g., with the <tt>-save-temps</tt> or <tt>-E</tt> options to + <tt>gcc</tt>) then upload the result.</li> + +</ul> + + +<h2><a name="demangle">Demangle C++ names with C++ filt</a></h2> + +<p> +Select this option if you want to run the output LLVM IR through "c++filt", +which converts 'mangled' C++ names to their unmangled version. +Note that LLVM code produced will not be lexically valid, but it will +be easier to understand. +</p> + +<h2><a name="lto">Run link-time optimizer</a></h2> + +<p> +Select this option to run the LLVM link-time optimizer, which is designed to +optimize across files in your application. Since the demo page doesn't allow +you to upload multiple files at once, and does not link in any libraries, we +configured the demo page optimizer to assume there are no calls +coming in from outside the source file, allowing it to optimize more +aggressively.</p> + +<p>Note that you have to define 'main' in your program for this +to make much of a difference. +</p> + +<h2><a name="stats">Show detailed pass statistics</a></h2> + +<p> +Select this option to enable compilation timings and statistics from various +optimizers.</p> + + +<h2><a name="bcanalyzer">Analyze generated bytecode</a></h2> + +<p> +Select this option to run the <a +href="http://llvm.org/cmds/llvm-bcanalyzer.html">llvm-bcanalyzer</a> tool +on the generated bytecode, which introspects into the format of the .bc file +itself. </p> + + +<h2><a name="llvm2cpp">Show C++ API code</a></h2> + +<p> +Select this option to run the <a +href="http://llvm.org/cmds/llvm2cpp.html">llvm2cpp</a> tool +on the generated bytecode, which auto generates the C++ API calls that could +be used to create the .bc file. +</p> + +</body> +</html> + diff --git a/www/demo/cathead.png b/www/demo/cathead.png Binary files differnew file mode 100644 index 000000000000..3bf1a45ec6f3 --- /dev/null +++ b/www/demo/cathead.png diff --git a/www/demo/index.cgi b/www/demo/index.cgi new file mode 100644 index 000000000000..b29efb60e9cc --- /dev/null +++ b/www/demo/index.cgi @@ -0,0 +1,461 @@ +#!/usr/dcs/software/supported/bin/perl -w +# LLVM Web Demo script +# + +use strict; +use CGI; +use POSIX; +use Mail::Send; + +$| = 1; + +my $ROOT = "/tmp/webcompile"; +#my $ROOT = "/home/vadve/lattner/webcompile"; + +open( STDERR, ">&STDOUT" ) or die "can't redirect stderr to stdout"; + +if ( !-d $ROOT ) { mkdir( $ROOT, 0777 ); } + +my $LOGFILE = "$ROOT/log.txt"; +my $FORM_URL = 'index.cgi'; +my $MAILADDR = 'sabre@nondot.org'; +my $CONTACT_ADDRESS = 'Questions or comments? Email the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev mailing list</a>.'; +my $LOGO_IMAGE_URL = 'cathead.png'; +my $TIMEOUTAMOUNT = 20; +$ENV{'LD_LIBRARY_PATH'} = '/home/vadve/shared/localtools/fc1/lib/'; + +my @PREPENDPATHDIRS = + ( + '/home/vadve/shared/llvm-gcc4.0-2.1/bin/', + '/home/vadve/shared/llvm-2.1/Release/bin'); + +my $defaultsrc = "#include <stdio.h>\n#include <stdlib.h>\n\n" . + "int power(int X) {\n if (X == 0) return 1;\n" . + " return X*power(X-1);\n}\n\n" . + "int main(int argc, char **argv) {\n" . + " printf(\"%d\\n\", power(atoi(argv[0])));\n}\n"; + +sub getname { + my ($extension) = @_; + for ( my $count = 0 ; ; $count++ ) { + my $name = + sprintf( "$ROOT/_%d_%d%s", $$, $count, $extension ); + if ( !-f $name ) { return $name; } + } +} + +my $c; + +sub barf { + print "<b>", @_, "</b>\n"; + print $c->end_html; + system("rm -f $ROOT/locked"); + exit 1; +} + +sub writeIntoFile { + my $extension = shift @_; + my $contents = join "", @_; + my $name = getname($extension); + local (*FILE); + open( FILE, ">$name" ) or barf("Can't write to $name: $!"); + print FILE $contents; + close FILE; + return $name; +} + +sub addlog { + my ( $source, $pid, $result ) = @_; + open( LOG, ">>$LOGFILE" ); + my $time = scalar localtime; + my $remotehost = $ENV{'REMOTE_ADDR'}; + print LOG "[$time] [$remotehost]: $pid\n"; + print LOG "<<<\n$source\n>>>\nResult is: <<<\n$result\n>>>\n"; + close LOG; +} + +sub dumpFile { + my ( $header, $file ) = @_; + my $result; + open( FILE, "$file" ) or barf("Can't read $file: $!"); + while (<FILE>) { + $result .= $_; + } + close FILE; + my $UnhilightedResult = $result; + my $HtmlResult = + "<h3>$header</h3>\n<pre>\n" . $c->escapeHTML($result) . "\n</pre>\n"; + if (wantarray) { + return ( $UnhilightedResult, $HtmlResult ); + } + else { + return $HtmlResult; + } +} + +sub syntaxHighlightLLVM { + my ($input) = @_; + $input =~ s@\b(void|i8|i1|i16|i32|i64|float|double|type|label|opaque)\b@<span class="llvm_type">$1</span>@g; + $input =~ s@\b(add|sub|mul|div|rem|and|or|xor|setne|seteq|setlt|setgt|setle|setge|phi|tail|call|cast|to|shl|shr|vaarg|vanext|ret|br|switch|invoke|unwind|malloc|alloca|free|load|store|getelementptr|begin|end|true|false|declare|global|constant|const|internal|uninitialized|external|implementation|linkonce|weak|appending|null|to|except|not|target|endian|pointersize|big|little|volatile)\b@<span class="llvm_keyword">$1</span>@g; + + # Add links to the FAQ. + $input =~ s@(_ZNSt8ios_base4Init[DC]1Ev)@<a href="../docs/FAQ.html#iosinit">$1</a>@g; + $input =~ s@\bundef\b@<a href="../docs/FAQ.html#undef">undef</a>@g; + return $input; +} + +sub mailto { + my ( $recipient, $body ) = @_; + my $msg = + new Mail::Send( Subject => "LLVM Demo Page Run", To => $recipient ); + my $fh = $msg->open(); + print $fh $body; + $fh->close(); +} + +$c = new CGI; +print $c->header; + +print <<EOF; +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title>Try out LLVM in your browser!</title> + <style> + \@import url("syntax.css"); + \@import url("http://llvm.org/llvm.css"); + </style> +</head> +<body leftmargin="10" marginwidth="10"> + +<div class="www_sectiontitle"> + Try out LLVM in your browser! +</div> + +<table border=0><tr><td> +<img align=right width=100 height=111 src="$LOGO_IMAGE_URL"> +</td><td> +EOF + +if ( -f "$ROOT/locked" ) { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$locktime) = + stat("$ROOT/locked"); + my $currtime = time(); + if ($locktime + 60 > $currtime) { + print "This page is already in use by someone else at this "; + print "time, try reloading in a second or two. Meow!</td></tr></table>'\n"; + exit 0; + } +} + +system("touch $ROOT/locked"); + +print <<END; +Bitter Melon the cat says, paste a C/C++ program in the text box or upload +one from your computer, and you can see LLVM compile it, meow!! +</td></tr></table><p> +END + +print $c->start_multipart_form( 'POST', $FORM_URL ); + +my $source = $c->param('source'); + + +# Start the user out with something valid if no code. +$source = $defaultsrc if (!defined($source)); + +print '<table border="0"><tr><td>'; + +print "Type your source code in below: (<a href='DemoInfo.html#hints'>hints and +advice</a>)<br>\n"; + +print $c->textarea( + -name => "source", + -rows => 16, + -columns => 60, + -default => $source +), "<br>"; + +print "Or upload a file: "; +print $c->filefield( -name => 'uploaded_file', -default => '' ); + +print "<p />\n"; + + +print '<p></td><td valign=top>'; + +print "<center><h3>General Options</h3></center>"; + +print "Source language: ", + $c->radio_group( + -name => 'language', + -values => [ 'C', 'C++' ], + -default => 'C' + ), "<p>"; + +print $c->checkbox( + -name => 'linkopt', + -label => 'Run link-time optimizer', + -checked => 'checked' + ),' <a href="DemoInfo.html#lto">?</a><br>'; + +print $c->checkbox( + -name => 'showstats', + -label => 'Show detailed pass statistics' + ), ' <a href="DemoInfo.html#stats">?</a><br>'; + +print $c->checkbox( + -name => 'cxxdemangle', + -label => 'Demangle C++ names' + ),' <a href="DemoInfo.html#demangle">?</a><p>'; + + +print "<center><h3>Output Options</h3></center>"; + +print $c->checkbox( + -name => 'showbcanalysis', + -label => 'Show detailed bytecode analysis' + ),' <a href="DemoInfo.html#bcanalyzer">?</a><br>'; + +print $c->checkbox( + -name => 'showllvm2cpp', + -label => 'Show LLVM C++ API code' + ), ' <a href="DemoInfo.html#llvm2cpp">?</a>'; + +print "</td></tr></table>"; + +print "<center>", $c->submit(-value=> 'Compile Source Code'), + "</center>\n", $c->endform; + +print "\n<p>If you have questions about the LLVM code generated by the +front-end, please check the <a href='/docs/FAQ.html#cfe_code'>FAQ</a> and +the demo page <a href='DemoInfo.html#hints'>hints section</a>. +</p>\n"; + +$ENV{'PATH'} = ( join ( ':', @PREPENDPATHDIRS ) ) . ":" . $ENV{'PATH'}; + +sub sanitychecktools { + my $sanitycheckfail = ''; + + # insert tool-specific sanity checks here + $sanitycheckfail .= ' llvm-dis' + if `llvm-dis --help 2>&1` !~ /ll disassembler/; + + $sanitycheckfail .= ' llvm-gcc' + if ( `llvm-gcc --version 2>&1` !~ /Free Software Foundation/ ); + + $sanitycheckfail .= ' llvm-ld' + if `llvm-ld --help 2>&1` !~ /llvm linker/; + + $sanitycheckfail .= ' llvm-bcanalyzer' + if `llvm-bcanalyzer --help 2>&1` !~ /bcanalyzer/; + + barf( +"<br/>The demo page is currently unavailable. [tools: ($sanitycheckfail ) failed sanity check]" + ) + if $sanitycheckfail; +} + +sanitychecktools(); + +sub try_run { + my ( $program, $commandline, $outputFile ) = @_; + my $retcode = 0; + + eval { + local $SIG{ALRM} = sub { die "timeout"; }; + alarm $TIMEOUTAMOUNT; + $retcode = system($commandline); + alarm 0; + }; + if ( $@ and $@ =~ /timeout/ ) { + barf("Program $program took too long, compile time limited for the web script, sorry!.\n"); + } + if ( -s $outputFile ) { + print scalar dumpFile( "Output from $program", $outputFile ); + } + #print "<p>Finished dumping command output.</p>\n"; + if ( WIFEXITED($retcode) && WEXITSTATUS($retcode) != 0 ) { + barf( +"$program exited with an error. Please correct source and resubmit.<p>\n" . +"Please note that this form only allows fully formed and correct source" . +" files. It will not compile fragments of code.<p>" + ); + } + if ( WIFSIGNALED($retcode) != 0 ) { + my $sig = WTERMSIG($retcode); + barf( + "Ouch, $program caught signal $sig. Sorry, better luck next time!\n" + ); + } +} + +my %suffixes = ( + 'Java' => '.java', + 'JO99' => '.jo9', + 'C' => '.c', + 'C++' => '.cc', + 'Stacker' => '.st', + 'preprocessed C' => '.i', + 'preprocessed C++' => '.ii' +); +my %languages = ( + '.jo9' => 'JO99', + '.java' => 'Java', + '.c' => 'C', + '.i' => 'preprocessed C', + '.ii' => 'preprocessed C++', + '.cc' => 'C++', + '.cpp' => 'C++', + '.st' => 'Stacker' +); + +my $uploaded_file_name = $c->param('uploaded_file'); +if ($uploaded_file_name) { + if ($source) { + barf( +"You must choose between uploading a file and typing code in. You can't do both at the same time." + ); + } + $uploaded_file_name =~ s/^.*(\.[A-Za-z]+)$/$1/; + my $language = $languages{$uploaded_file_name}; + $c->param( 'language', $language ); + + print "<p>Processing uploaded file. It looks like $language.</p>\n"; + my $fh = $c->upload('uploaded_file'); + if ( !$fh ) { + barf( "Error uploading file: " . $c->cgi_error ); + } + while (<$fh>) { + $source .= $_; + } + close $fh; +} + +if ($c->param('source')) { + print $c->hr; + my $extension = $suffixes{ $c->param('language') }; + barf "Unknown language; can't compile\n" unless $extension; + + # Add a newline to the source here to avoid a warning from gcc. + $source .= "\n"; + + # Avoid security hole due to #including bad stuff. + $source =~ +s@(\n)?#include.*[<"](.*\.\..*)[">].*\n@$1#error "invalid #include file $2 detected"\n@g; + + my $inputFile = writeIntoFile( $extension, $source ); + my $pid = $$; + + my $bytecodeFile = getname(".bc"); + my $outputFile = getname(".llvm-gcc.out"); + my $timerFile = getname(".llvm-gcc.time"); + + my $stats = ''; + if ( $extension eq ".st" ) { + $stats = "-stats -time-passes " + if ( $c->param('showstats') ); + try_run( "llvm Stacker front-end (stkrc)", + "stkrc $stats -o $bytecodeFile $inputFile > $outputFile 2>&1", + $outputFile ); + } else { + #$stats = "-Wa,--stats,--time-passes,--info-output-file=$timerFile" + $stats = "-ftime-report" + if ( $c->param('showstats') ); + try_run( "llvm C/C++ front-end (llvm-gcc)", + "llvm-gcc -emit-llvm -W -Wall -O2 $stats -o $bytecodeFile -c $inputFile > $outputFile 2>&1", + $outputFile ); + } + + if ( $c->param('showstats') && -s $timerFile ) { + my ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Statistics for front-end compilation", $timerFile ); + print "$HtmlResult\n"; + } + + if ( $c->param('linkopt') ) { + my $stats = ''; + my $outputFile = getname(".gccld.out"); + my $timerFile = getname(".gccld.time"); + $stats = "--stats --time-passes --info-output-file=$timerFile" + if ( $c->param('showstats') ); + my $tmpFile = getname(".bc"); + try_run( + "optimizing linker (llvm-ld)", +"llvm-ld $stats -o=$tmpFile $bytecodeFile > $outputFile 2>&1", + $outputFile + ); + system("mv $tmpFile.bc $bytecodeFile"); + system("rm $tmpFile"); + + if ( $c->param('showstats') && -s $timerFile ) { + my ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Statistics for optimizing linker", $timerFile ); + print "$HtmlResult\n"; + } + } + + print " Bytecode size is ", -s $bytecodeFile, " bytes.\n"; + + my $disassemblyFile = getname(".ll"); + try_run( "llvm-dis", + "llvm-dis -o=$disassemblyFile $bytecodeFile > $outputFile 2>&1", + $outputFile ); + + if ( $c->param('cxxdemangle') ) { + print " Demangling disassembler output.\n"; + my $tmpFile = getname(".ll"); + system("c++filt < $disassemblyFile > $tmpFile 2>&1"); + system("mv $tmpFile $disassemblyFile"); + } + + my ( $UnhilightedResult, $HtmlResult ); + if ( -s $disassemblyFile ) { + ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Output from LLVM disassembler", $disassemblyFile ); + print syntaxHighlightLLVM($HtmlResult); + } + else { + print "<p>Hmm, that's weird, llvm-dis didn't produce any output.</p>\n"; + } + + if ( $c->param('showbcanalysis') ) { + my $analFile = getname(".bca"); + try_run( "llvm-bcanalyzer", "llvm-bcanalyzer $bytecodeFile > $analFile 2>&1", + $analFile); + } + if ($c->param('showllvm2cpp') ) { + my $l2cppFile = getname(".l2cpp"); + try_run("llvm2cpp","llvm2cpp $bytecodeFile -o $l2cppFile 2>&1", + $l2cppFile); + } + + # Get the source presented by the user to CGI, convert newline sequences to simple \n. + my $actualsrc = $c->param('source'); + $actualsrc =~ s/\015\012/\n/go; + # Don't log this or mail it if it is the default code. + if ($actualsrc ne $defaultsrc) { + addlog( $source, $pid, $UnhilightedResult ); + + my ( $ip, $host, $lg, $lines ); + chomp( $lines = `wc -l < $inputFile` ); + $lg = $c->param('language'); + $ip = $c->remote_addr(); + chomp( $host = `host $ip` ) if $ip; + mailto( $MAILADDR, + "--- Query: ---\nFrom: ($ip) $host\nInput: $lines lines of $lg\n" + . "C++ demangle = " + . ( $c->param('cxxdemangle') ? 1 : 0 ) + . ", Link opt = " + . ( $c->param('linkopt') ? 1 : 0 ) . "\n\n" + . ", Show stats = " + . ( $c->param('showstats') ? 1 : 0 ) . "\n\n" + . "--- Source: ---\n$source\n" + . "--- Result: ---\n$UnhilightedResult\n" ); + } + unlink( $inputFile, $bytecodeFile, $outputFile, $disassemblyFile ); +} + +print $c->hr, "<address>$CONTACT_ADDRESS</address>", $c->end_html; +system("rm $ROOT/locked"); +exit 0; diff --git a/www/demo/syntax.css b/www/demo/syntax.css new file mode 100644 index 000000000000..90daf5fcbd1f --- /dev/null +++ b/www/demo/syntax.css @@ -0,0 +1,4 @@ +/* LLVM syntax highlighting for the Web */ + +.llvm_type { font-style: oblique; color: green } +.llvm_keyword { font-weight: bold; color: blue } diff --git a/www/demo/what is this directory.txt b/www/demo/what is this directory.txt new file mode 100644 index 000000000000..a1306ac0dc5b --- /dev/null +++ b/www/demo/what is this directory.txt @@ -0,0 +1,15 @@ +This is for the LLVM+Clang browser based demo. +It is supposed to work like the LLVM+GCC demo here: http://llvm.org/demo/ but for the BSD licensed Clang instead. + +Perhaps it could also be used for getting crash information and details on errors.... I'm not sure if this would require some major changes or not to report this info. Maybe also adding ways that people can use it to test for errors and a way to report such errors would also be good. + +Status: +Anyways, right now, these file a basically just a copy of the LLVM+GCC demo (no changes have been made). The files don't even work right in this location on the server. As such, someone will need to edit the file or rewrite it. + +If nobody in the LLVM community has the skills, one suggestion would be to post a request on a friendly Perl forum and see if anybody might be interested in taking on the challenge. + +Alternatively, you could try a PHP, Python, Ruby, or Lisp mailing list and see if there are any takers who would be interested (and willing to do a rewrite to their language of choice). + +-- +BTW, once this feature was working, my intention was to link to it from the index.html page in the section entitled: +Try Clang
\ No newline at end of file diff --git a/www/diagnostics.html b/www/diagnostics.html new file mode 100644 index 000000000000..5be4db207409 --- /dev/null +++ b/www/diagnostics.html @@ -0,0 +1,279 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Expressive Diagnostics</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style type="text/css"> +</style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + + +<!--=======================================================================--> +<h1>Expressive Diagnostics</h1> +<!--=======================================================================--> + +<p>In addition to being fast and functional, we aim to make Clang extremely user +friendly. As far as a command-line compiler goes, this basically boils down to +making the diagnostics (error and warning messages) generated by the compiler +be as useful as possible. There are several ways that we do this. This section +talks about the experience provided by the command line compiler, contrasting +Clang output to GCC 4.2's output in several examples. +<!-- +Other clients +that embed Clang and extract equivalent information through internal APIs.--> +</p> + +<h2>Column Numbers and Caret Diagnostics</h2> + +<p>First, all diagnostics produced by clang include full column number +information, and use this to print "caret diagnostics". This is a feature +provided by many commercial compilers, but is generally missing from open source +compilers. This is nice because it makes it very easy to understand exactly +what is wrong in a particular piece of code, an example is:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only -Wformat format-strings.c</b> + format-strings.c:91: warning: too few arguments for format + $ <b>clang -fsyntax-only format-strings.c</b> + format-strings.c:91:13: warning: '.*' specified field precision is missing a matching 'int' argument + <font color="darkgreen"> printf("%.*d");</font> + <font color="blue"> ^</font> +</pre> + +<p>The caret (the blue "^" character) exactly shows where the problem is, even +inside of the string. This makes it really easy to jump to the problem and +helps when multiple instances of the same character occur on a line. We'll +revisit this more in following examples.</p> + +<h2>Range Highlighting for Related Text</h2> + +<p>Clang captures and accurately tracks range information for expressions, +statements, and other constructs in your program and uses this to make +diagnostics highlight related information. For example, here's a somewhat +nonsensical example to illustrate this:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c:7: error: invalid operands to binary + (have 'int' and 'struct A') + $ <b>clang -fsyntax-only t.c</b> + t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A') + <font color="darkgreen"> return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);</font> + <font color="blue"> ~~~~~~~~~~~~~~ ^ ~~~~~</font> +</pre> + +<p>Here you can see that you don't even need to see the original source code to +understand what is wrong based on the Clang error: Because clang prints a +caret, you know exactly <em>which</em> plus it is complaining about. The range +information highlights the left and right side of the plus which makes it +immediately obvious what the compiler is talking about, which is very useful for +cases involving precedence issues and many other cases.</p> + +<h2>Precision in Wording</h2> + +<p>A detail is that we have tried really hard to make the diagnostics that come +out of clang contain exactly the pertinent information about what is wrong and +why. In the example above, we tell you what the inferred types are for +the left and right hand sides, and we don't repeat what is obvious from the +caret (that this is a "binary +"). Many other examples abound, here is a simple +one:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c:5: error: invalid type argument of 'unary *' + $ <b>clang -fsyntax-only t.c</b> + t.c:5:11: error: indirection requires pointer operand ('int' invalid) + <font color="darkgreen"> int y = *SomeA.X;</font> + <font color="blue"> ^~~~~~~~</font> +</pre> + +<p>In this example, not only do we tell you that there is a problem with the * +and point to it, we say exactly why and tell you what the type is (in case it is +a complicated subexpression, such as a call to an overloaded function). This +sort of attention to detail makes it much easier to understand and fix problems +quickly.</p> + +<h2>No Pretty Printing of Expressions in Diagnostics</h2> + +<p>Since Clang has range highlighting, it never needs to pretty print your code +back out to you. This is particularly bad in G++ (which often emits errors +containing lowered vtable references), but even GCC can produce +inscrutible error messages in some cases when it tries to do this. In this +example P and Q have type "int*":</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + #'exact_div_expr' not supported by pp_c_expression#'t.c:12: error: called object is not a function + $ <b>clang -fsyntax-only t.c</b> + t.c:12:8: error: called object type 'int' is not a function or function pointer + <font color="darkgreen"> (P-Q)();</font> + <font color="blue"> ~~~~~^</font> +</pre> + + +<h2>Typedef Preservation and Selective Unwrapping</h2> + +<p>Many programmers use high-level user defined types, typedefs, and other +syntactic sugar to refer to types in their program. This is useful because they +can abbreviate otherwise very long types and it is useful to preserve the +typename in diagnostics. However, sometimes very simple typedefs can wrap +trivial types and it is important to strip off the typedef to understand what +is going on. Clang aims to handle both cases well.<p> + +<p>For example, here is an example that shows where it is important to preserve +a typedef in C:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c:15: error: invalid operands to binary / (have 'float __vector__' and 'const int *') + $ <b>clang -fsyntax-only t.c</b> + t.c:15:11: error: can't convert between vector values of different size ('__m128' and 'int const *') + <font color="darkgreen"> myvec[1]/P;</font> + <font color="blue"> ~~~~~~~~^~</font> +</pre> + +<p>Here the type printed by GCC isn't even valid, but if the error were about a +very long and complicated type (as often happens in C++) the error message would +be ugly just because it was long and hard to read. Here's an example where it +is useful for the compiler to expose underlying details of a typedef:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c:13: error: request for member 'x' in something not a structure or union + $ <b>clang -fsyntax-only t.c</b> + t.c:13:9: error: member reference base type 'pid_t' (aka 'int') is not a structure or union + <font color="darkgreen"> myvar = myvar.x;</font> + <font color="blue"> ~~~~~ ^</font> +</pre> + +<p>If the user was somehow confused about how the system "pid_t" typedef is +defined, Clang helpfully displays it with "aka".</p> + +<p>In C++, type preservation includes retaining any qualification written into type names. For example, if we take a small snippet of code such as: + +<blockquote> +<pre> +namespace services { + struct WebService { }; +} +namespace myapp { + namespace servers { + struct Server { }; + } +} + +using namespace myapp; +void addHTTPService(servers::Server const &server, ::services::WebService const *http) { + server += http; +} +</pre> +</blockquote> + +<p>and then compile it, we see that Clang is both providing more accurate information and is retaining the types as written by the user (e.g., "servers::Server", "::services::WebService"): + +<pre> + $ <b>g++-4.2 -fsyntax-only t.cpp</b> + t.cpp:9: error: no match for 'operator+=' in 'server += http' + $ <b>clang -fsyntax-only t.cpp</b> + t.cpp:9:10: error: invalid operands to binary expression ('servers::Server const' and '::services::WebService const *') + <font color="darkgreen">server += http;</font> + <font color="blue">~~~~~~ ^ ~~~~</font> +</pre> + +<p>Naturally, type preservation extends to uses of templates, and Clang retains information about how a particular template specialization (like <code>std::vector<Real></code>) was spelled within the source code. For example:</p> + +<pre> + $ <b>g++-4.2 -fsyntax-only t.cpp</b> + t.cpp:12: error: no match for 'operator=' in 'str = vec' + $ <b>clang -fsyntax-only t.cpp</b> + t.cpp:12:7: error: incompatible type assigning 'vector<Real>', expected 'std::string' (aka 'class std::basic_string<char>') + <font color="darkgreen">str = vec</font>; + <font color="blue">^ ~~~</font> +</pre> + +<h2>Fix-it Hints</h2> + +<p>"Fix-it" hints provide advice for fixing small, localized problems +in source code. When Clang produces a diagnostic about a particular +problem that it can work around (e.g., non-standard or redundant +syntax, missing keywords, common mistakes, etc.), it may also provide +specific guidance in the form of a code transformation to correct the +problem. For example, here Clang warns about the use of a GCC +extension that has been considered obsolete since 1993:</p> + +<pre> + $ <b>clang t.c</b> + t.c:5:28: warning: use of GNU old-style field designator extension + <font color="darkgreen">struct point origin = { x: 0.0, y: 0.0 };</font> + <font color="red">~~</font> <font color="blue">^</font> + <font color="darkgreen">.x = </font> + t.c:5:36: warning: use of GNU old-style field designator extension + <font color="darkgreen">struct point origin = { x: 0.0, y: 0.0 };</font> + <font color="red">~~</font> <font color="blue">^</font> + <font color="darkgreen">.y = </font> +</pre> + +<p>The underlined code should be removed, then replaced with the code below the caret line (".x =" or ".y =", respectively). "Fix-it" hints are most useful for working around common user errors and misconceptions. For example, C++ users commonly forget the syntax for explicit specialization of class templates, as in the following error:</p> + +<pre> + $ <b>clang t.cpp</b> + t.cpp:9:3: error: template specialization requires 'template<>' + struct iterator_traits<file_iterator> { + <font color="blue">^</font> + <font color="darkgreen">template<> </font> +</pre> + +<p>Again, after describing the problem, Clang provides the fix--add <code>template<></code>--as part of the diagnostic.<p> + +<h2>Automatic Macro Expansion</h2> + +<p>Many errors happen in macros that are sometimes deeply nested. With +traditional compilers, you need to dig deep into the definition of the macro to +understand how you got into trouble. Here's a simple example that shows how +Clang helps you out:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c: In function 'test': + t.c:80: error: invalid operands to binary < (have 'struct mystruct' and 'float') + $ <b>clang -fsyntax-only t.c</b> + t.c:80:3: error: invalid operands to binary expression ('typeof(P)' (aka 'struct mystruct') and 'typeof(F)' (aka 'float')) + <font color="darkgreen"> X = MYMAX(P, F);</font> + <font color="blue"> ^~~~~~~~~~~</font> + t.c:76:94: note: instantiated from: + <font color="darkgreen">#define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })</font> + <font color="blue"> ~~~ ^ ~~~</font> +</pre> + +<p>This shows how clang automatically prints instantiation information and +nested range information for diagnostics as they are instantiated through macros +and also shows how some of the other pieces work in a bigger example. Here's +another real world warning that occurs in the "window" Unix package (which +implements the "wwopen" class of APIs):</p> + +<pre> + $ <b>clang -fsyntax-only t.c</b> + t.c:22:2: warning: type specifier missing, defaults to 'int' + <font color="darkgreen"> ILPAD();</font> + <font color="blue"> ^</font> + t.c:17:17: note: instantiated from: + <font color="darkgreen">#define ILPAD() PAD((NROW - tt.tt_row) * 10) /* 1 ms per char */</font> + <font color="blue"> ^</font> + t.c:14:2: note: instantiated from: + <font color="darkgreen"> register i; \</font> + <font color="blue"> ^</font> +</pre> + +<p>In practice, we've found that this is actually more useful in multiply nested +macros that in simple ones.</p> + +</div> +</body> +</html> diff --git a/www/distclang_status.html b/www/distclang_status.html new file mode 100644 index 000000000000..26ba31424f85 --- /dev/null +++ b/www/distclang_status.html @@ -0,0 +1,30 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Distributed Compilation Support</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style type="text/css"> +</style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<!--*************************************************************************--> +<h1>Distributed Compilation Support in Clang</h1> +<!--*************************************************************************--> + +<p> +This page tracks the status of Distributed Compilation support in Clang.<br> +Currently some basic features are working but the code is under heavy +development. </p> + + +</div> +</body> +</html> diff --git a/www/feature-compile1.png b/www/feature-compile1.png Binary files differnew file mode 100644 index 000000000000..cec7c4851492 --- /dev/null +++ b/www/feature-compile1.png diff --git a/www/feature-compile2.png b/www/feature-compile2.png Binary files differnew file mode 100644 index 000000000000..0eb93001ffca --- /dev/null +++ b/www/feature-compile2.png diff --git a/www/feature-memory1.png b/www/feature-memory1.png Binary files differnew file mode 100644 index 000000000000..29368aa83820 --- /dev/null +++ b/www/feature-memory1.png diff --git a/www/features.html b/www/features.html new file mode 100644 index 000000000000..21382fd5b17f --- /dev/null +++ b/www/features.html @@ -0,0 +1,423 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Features and Goals</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style type="text/css"> +</style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<!--*************************************************************************--> +<h1>Clang - Features and Goals</h1> +<!--*************************************************************************--> + +<p> +This page describes the <a href="index.html#goals">features and goals</a> of +Clang in more detail and gives a more broad explanation about what we mean. +These features are: +</p> + +<p>End-User Features:</p> + +<ul> +<li><a href="#performance">Fast compiles and low memory use</a></li> +<li><a href="#expressivediags">Expressive diagnostics</a></li> +<li><a href="#gcccompat">GCC compatibility</a></li> +</ul> + +<p>Utility and Applications:</p> + +<ul> +<li><a href="#libraryarch">Library based architecture</a></li> +<li><a href="#diverseclients">Support diverse clients</a></li> +<li><a href="#ideintegration">Integration with IDEs</a></li> +<li><a href="#license">Use the LLVM 'BSD' License</a></li> +</ul> + +<p>Internal Design and Implementation:</p> + +<ul> +<li><a href="#real">A real-world, production quality compiler</a></li> +<li><a href="#simplecode">A simple and hackable code base</a></li> +<li><a href="#unifiedparser">A single unified parser for C, Objective C, C++, + and Objective C++</a></li> +<li><a href="#conformance">Conformance with C/C++/ObjC and their + variants</a></li> +</ul> + +<!--*************************************************************************--> +<h2><a name="enduser">End-User Features</a></h2> +<!--*************************************************************************--> + + +<!--=======================================================================--> +<h3><a name="performance">Fast compiles and Low Memory Use</a></h3> +<!--=======================================================================--> + +<p>A major focus of our work on clang is to make it fast, light and scalable. +The library-based architecture of clang makes it straight-forward to time and +profile the cost of each layer of the stack, and the driver has a number of +options for performance analysis.</p> + +<p>While there is still much that can be done, we find that the clang front-end +is significantly quicker than gcc and uses less memory For example, when +compiling "Carbon.h" on Mac OS/X, we see that clang is 2.5x faster than GCC:</p> + +<img class="img_slide" src="feature-compile1.png" width="400" height="300" /> + +<p>Carbon.h is a monster: it transitively includes 558 files, 12.3M of code, +declares 10000 functions, has 2000 struct definitions, 8000 fields, 20000 enum +constants, etc (see slide 25+ of the <a href="clang_video-07-25-2007.html">clang +talk</a> for more information). It is also #include'd into almost every C file +in a GUI app on the Mac, so its compile time is very important.</p> + +<p>From the slide above, you can see that we can measure the time to preprocess +the file independently from the time to parse it, and independently from the +time to build the ASTs for the code. GCC doesn't provide a way to measure the +parser without AST building (it only provides -fsyntax-only). In our +measurements, we find that clang's preprocessor is consistently 40% faster than +GCCs, and the parser + AST builder is ~4x faster than GCC's. If you have +sources that do not depend as heavily on the preprocessor (or if you +use Precompiled Headers) you may see a much bigger speedup from clang. +</p> + +<p>Compile time performance is important, but when using clang as an API, often +memory use is even moreso: the less memory the code takes the more code you can +fit into memory at a time (useful for whole program analysis tools, for +example).</p> + +<img class="img_slide" src="feature-memory1.png" width="400" height="300" /> + +<p>Here we see a huge advantage of clang: its ASTs take <b>5x less memory</b> +than GCC's syntax trees, despite the fact that clang's ASTs capture far more +source-level information than GCC's trees do. This feat is accomplished through +the use of carefully designed APIs and efficient representations.</p> + +<p>In addition to being efficient when pitted head-to-head against GCC in batch +mode, clang is built with a <a href="#libraryarch">library based +architecture</a> that makes it relatively easy to adapt it and build new tools +with it. This means that it is often possible to apply out-of-the-box thinking +and novel techniques to improve compilation in various ways.</p> + +<img class="img_slide" src="feature-compile2.png" width="400" height="300" /> + +<p>This slide shows how the clang preprocessor can be used to make "distcc" +parallelization <b>3x</b> more scalable than when using the GCC preprocessor. +"distcc" quickly bottlenecks on the preprocessor running on the central driver +machine, so a fast preprocessor is very useful. Comparing the first two bars +of each group shows how a ~40% faster preprocessor can reduce preprocessing time +of these large C++ apps by about 40% (shocking!).</p> + +<p>The third bar on the slide is the interesting part: it shows how trivial +caching of file system accesses across invocations of the preprocessor allows +clang to reduce time spent in the kernel by 10x, making distcc over 3x more +scalable. This is obviously just one simple hack, doing more interesting things +(like caching tokens across preprocessed files) would yield another substantial +speedup.</p> + +<p>The clean framework-based design of clang means that many things are possible +that would be very difficult in other systems, for example incremental +compilation, multithreading, intelligent caching, etc. We are only starting +to tap the full potential of the clang design.</p> + + +<!--=======================================================================--> +<h3><a name="expressivediags">Expressive Diagnostics</a></h3> +<!--=======================================================================--> + +<p>In addition to being fast and functional, we aim to make Clang extremely user +friendly. As far as a command-line compiler goes, this basically boils down to +making the diagnostics (error and warning messages) generated by the compiler +be as useful as possible. There are several ways that we do this, but the +most important are pinpointing exactly what is wrong in the program, +highlighting related information so that it is easy to understand at a glance, +and making the wording as clear as possible.</p> + +<p>Here is one simple example that illustrates the difference between a typical +GCC and Clang diagnostic:</p> + +<pre> + $ <b>gcc-4.2 -fsyntax-only t.c</b> + t.c:7: error: invalid operands to binary + (have 'int' and 'struct A') + $ <b>clang -fsyntax-only t.c</b> + t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A') + <font color="darkgreen"> return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);</font> + <font color="blue"> ~~~~~~~~~~~~~~ ^ ~~~~~</font> +</pre> + +<p>Here you can see that you don't even need to see the original source code to +understand what is wrong based on the Clang error: Because clang prints a +caret, you know exactly <em>which</em> plus it is complaining about. The range +information highlights the left and right side of the plus which makes it +immediately obvious what the compiler is talking about, which is very useful for +cases involving precedence issues and many other situations.</p> + +<p>Clang diagnostics are very polished and have many features. For more +information and examples, please see the <a href="diagnostics.html">Expressive +Diagnostics</a> page.</p> + +<!--=======================================================================--> +<h3><a name="gcccompat">GCC Compatibility</a></h3> +<!--=======================================================================--> + +<p>GCC is currently the defacto-standard open source compiler today, and it +routinely compiles a huge volume of code. GCC supports a huge number of +extensions and features (many of which are undocumented) and a lot of +code and header files depend on these features in order to build.</p> + +<p>While it would be nice to be able to ignore these extensions and focus on +implementing the language standards to the letter, pragmatics force us to +support the GCC extensions that see the most use. Many users just want their +code to compile, they don't care to argue about whether it is pedantically C99 +or not.</p> + +<p>As mentioned above, all +extensions are explicitly recognized as such and marked with extension +diagnostics, which can be mapped to warnings, errors, or just ignored. +</p> + + +<!--*************************************************************************--> +<h2><a name="applications">Utility and Applications</a></h2> +<!--*************************************************************************--> + +<!--=======================================================================--> +<h3><a name="libraryarch">Library Based Architecture</a></h3> +<!--=======================================================================--> + +<p>A major design concept for clang is its use of a library-based +architecture. In this design, various parts of the front-end can be cleanly +divided into separate libraries which can then be mixed up for different needs +and uses. In addition, the library-based approach encourages good interfaces +and makes it easier for new developers to get involved (because they only need +to understand small pieces of the big picture).</p> + +<blockquote> +"The world needs better compiler tools, tools which are built as libraries. +This design point allows reuse of the tools in new and novel ways. However, +building the tools as libraries isn't enough: they must have clean APIs, be as +decoupled from each other as possible, and be easy to modify/extend. This +requires clean layering, decent design, and keeping the libraries independent of +any specific client."</blockquote> + +<p> +Currently, clang is divided into the following libraries and tool: +</p> + +<ul> +<li><b>libsupport</b> - Basic support library, from LLVM.</li> +<li><b>libsystem</b> - System abstraction library, from LLVM.</li> +<li><b>libbasic</b> - Diagnostics, SourceLocations, SourceBuffer abstraction, + file system caching for input source files.</li> +<li><b>libast</b> - Provides classes to represent the C AST, the C type system, + builtin functions, and various helpers for analyzing and manipulating the + AST (visitors, pretty printers, etc).</li> +<li><b>liblex</b> - Lexing and preprocessing, identifier hash table, pragma + handling, tokens, and macro expansion.</li> +<li><b>libparse</b> - Parsing. This library invokes coarse-grained 'Actions' + provided by the client (e.g. libsema builds ASTs) but knows nothing about + ASTs or other client-specific data structures.</li> +<li><b>libsema</b> - Semantic Analysis. This provides a set of parser actions + to build a standardized AST for programs.</li> +<li><b>libcodegen</b> - Lower the AST to LLVM IR for optimization & code + generation.</li> +<li><b>librewrite</b> - Editing of text buffers (important for code rewriting + transformation, like refactoring).</li> +<li><b>libanalysis</b> - Static analysis support.</li> +<li><b>clang</b> - A driver program, client of the libraries at various + levels.</li> +</ul> + +<p>As an example of the power of this library based design.... If you wanted to +build a preprocessor, you would take the Basic and Lexer libraries. If you want +an indexer, you would take the previous two and add the Parser library and +some actions for indexing. If you want a refactoring, static analysis, or +source-to-source compiler tool, you would then add the AST building and +semantic analyzer libraries.</p> + +<p>For more information about the low-level implementation details of the +various clang libraries, please see the <a href="docs/InternalsManual.html"> +clang Internals Manual</a>.</p> + +<!--=======================================================================--> +<h3><a name="diverseclients">Support Diverse Clients</a></h3> +<!--=======================================================================--> + +<p>Clang is designed and built with many grand plans for how we can use it. The +driving force is the fact that we use C and C++ daily, and have to suffer due to +a lack of good tools available for it. We believe that the C and C++ tools +ecosystem has been significantly limited by how difficult it is to parse and +represent the source code for these languages, and we aim to rectify this +problem in clang.</p> + +<p>The problem with this goal is that different clients have very different +requirements. Consider code generation, for example: a simple front-end that +parses for code generation must analyze the code for validity and emit code +in some intermediate form to pass off to a optimizer or backend. Because +validity analysis and code generation can largely be done on the fly, there is +not hard requirement that the front-end actually build up a full AST for all +the expressions and statements in the code. TCC and GCC are examples of +compilers that either build no real AST (in the former case) or build a stripped +down and simplified AST (in the later case) because they focus primarily on +codegen.</p> + +<p>On the opposite side of the spectrum, some clients (like refactoring) want +highly detailed information about the original source code and want a complete +AST to describe it with. Refactoring wants to have information about macro +expansions, the location of every paren expression '(((x)))' vs 'x', full +position information, and much more. Further, refactoring wants to look +<em>across the whole program</em> to ensure that it is making transformations +that are safe. Making this efficient and getting this right requires a +significant amount of engineering and algorithmic work that simply are +unnecessary for a simple static compiler.</p> + +<p>The beauty of the clang approach is that it does not restrict how you use it. +In particular, it is possible to use the clang preprocessor and parser to build +an extremely quick and light-weight on-the-fly code generator (similar to TCC) +that does not build an AST at all. As an intermediate step, clang supports +using the current AST generation and semantic analysis code and having a code +generation client free the AST for each function after code generation. Finally, +clang provides support for building and retaining fully-fledged ASTs, and even +supports writing them out to disk.</p> + +<p>Designing the libraries with clean and simple APIs allows these high-level +policy decisions to be determined in the client, instead of forcing "one true +way" in the implementation of any of these libraries. Getting this right is +hard, and we don't always get it right the first time, but we fix any problems +when we realize we made a mistake.</p> + +<!--=======================================================================--> +<h3><a name="ideintegration">Integration with IDEs</h3> +<!--=======================================================================--> + +<p> +We believe that Integrated Development Environments (IDE's) are a great way +to pull together various pieces of the development puzzle, and aim to make clang +work well in such an environment. The chief advantage of an IDE is that they +typically have visibility across your entire project and are long-lived +processes, whereas stand-alone compiler tools are typically invoked on each +individual file in the project, and thus have limited scope.</p> + +<p>There are many implications of this difference, but a significant one has to +do with efficiency and caching: sharing an address space across different files +in a project, means that you can use intelligent caching and other techniques to +dramatically reduce analysis/compilation time.</p> + +<p>A further difference between IDEs and batch compiler is that they often +impose very different requirements on the front-end: they depend on high +performance in order to provide a "snappy" experience, and thus really want +techniques like "incremental compilation", "fuzzy parsing", etc. Finally, IDEs +often have very different requirements than code generation, often requiring +information that a codegen-only frontend can throw away. Clang is +specifically designed and built to capture this information. +</p> + + +<!--=======================================================================--> +<h3><a name="license">Use the LLVM 'BSD' License</a></h3> +<!--=======================================================================--> + +<p>We actively indend for clang (and a LLVM as a whole) to be used for +commercial projects, and the BSD license is the simplest way to allow this. We +feel that the license encourages contributors to pick up the source and work +with it, and believe that those individuals and organizations will contribute +back their work if they do not want to have to maintain a fork forever (which is +time consuming and expensive when merges are involved). Further, nobody makes +money on compilers these days, but many people need them to get bigger goals +accomplished: it makes sense for everyone to work together.</p> + +<p>For more information about the LLVM/clang license, please see the <a +href="http://llvm.org/docs/DeveloperPolicy.html#license">LLVM License +Description</a> for more information.</p> + + + +<!--*************************************************************************--> +<h2><a name="design">Internal Design and Implementation</a></h2> +<!--*************************************************************************--> + +<!--=======================================================================--> +<h3><a name="real">A real-world, production quality compiler</a></h3> +<!--=======================================================================--> + +<p> +Clang is designed and built by experienced compiler developers who +are increasingly frustrated with the problems that <a +href="comparison.html">existing open source compilers</a> have. Clang is +carefully and thoughtfully designed and built to provide the foundation of a +whole new generation of C/C++/Objective C development tools, and we intend for +it to be production quality.</p> + +<p>Being a production quality compiler means many things: it means being high +performance, being solid and (relatively) bug free, and it means eventually +being used and depended on by a broad range of people. While we are still in +the early development stages, we strongly believe that this will become a +reality.</p> + +<!--=======================================================================--> +<h3><a name="simplecode">A simple and hackable code base</a></h3> +<!--=======================================================================--> + +<p>Our goal is to make it possible for anyone with a basic understanding +of compilers and working knowledge of the C/C++/ObjC languages to understand and +extend the clang source base. A large part of this falls out of our decision to +make the AST mirror the languages as closely as possible: you have your friendly +if statement, for statement, parenthesis expression, structs, unions, etc, all +represented in a simple and explicit way.</p> + +<p>In addition to a simple design, we work to make the source base approachable +by commenting it well, including citations of the language standards where +appropriate, and designing the code for simplicity. Beyond that, clang offers +a set of AST dumpers, printers, and visualizers that make it easy to put code in +and see how it is represented.</p> + +<!--=======================================================================--> +<h3><a name="unifiedparser">A single unified parser for C, Objective C, C++, +and Objective C++</a></h3> +<!--=======================================================================--> + +<p>Clang is the "C Language Family Front-end", which means we intend to support +the most popular members of the C family. We are convinced that the right +parsing technology for this class of languages is a hand-built recursive-descent +parser. Because it is plain C++ code, recursive descent makes it very easy for +new developers to understand the code, it easily supports ad-hoc rules and other +strange hacks required by C/C++, and makes it straight-forward to implement +excellent diagnostics and error recovery.</p> + +<p>We believe that implementing C/C++/ObjC in a single unified parser makes the +end result easier to maintain and evolve than maintaining a separate C and C++ +parser which must be bugfixed and maintained independently of each other.</p> + +<!--=======================================================================--> +<h3><a name="conformance">Conformance with C/C++/ObjC and their + variants</a></h3> +<!--=======================================================================--> + +<p>When you start work on implementing a language, you find out that there is a +huge gap between how the language works and how most people understand it to +work. This gap is the difference between a normal programmer and a (scary? +super-natural?) "language lawyer", who knows the ins and outs of the language +and can grok standardese with ease.</p> + +<p>In practice, being conformant with the languages means that we aim to support +the full language, including the dark and dusty corners (like trigraphs, +preprocessor arcana, C99 VLAs, etc). Where we support extensions above and +beyond what the standard officially allows, we make an effort to explicitly call +this out in the code and emit warnings about it (which are disabled by default, +but can optionally be mapped to either warnings or errors), allowing you to use +clang in "strict" mode if you desire.</p> + +<p>We also intend to support "dialects" of these languages, such as C89, K&R +C, C++'03, Objective-C 2, etc.</p> + +</div> +</body> +</html> diff --git a/www/get_involved.html b/www/get_involved.html new file mode 100644 index 000000000000..a383d7013225 --- /dev/null +++ b/www/get_involved.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Get Involved</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<h1>Getting Involved with the Clang Project</h1> + +<p>Once you have <a href="get_started.html">checked out and built</a> clang and +played around with it, you might be wondering what you can do to make it better +and contribute to its development. Alternatively, maybe you just want to follow +the development of the project to see it progress. +</p> + +<h2>Follow what's going on</h2> + +<p>Clang is a subproject of the <a href="http://llvm.org">LLVM Project</a>, but +has its own mailing lists because the communities have people with different +interests. The two clang lists are:</p> + +<ul> +<li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits +</a> - This list is for patch submission/discussion.</li> + +<li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a> - +This list is for everything else clang related (questions and answers, bug +reports, etc).</li> + +</ul> + +<p>If you are interested in clang only, these two lists should be all +you need. If you are interested in the LLVM optimizer and code generator, +please consider signing up for <a +href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> and <a +href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a> +as well.</p> + + +<p>The best way to talk with other developers on the project is through the <a +href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev mailing +list</a>. The clang mailing list is a very friendly place and we welcome +newcomers. In addition to the cfe-dev list, a significant amount of design +discussion takes place on the <a +href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits mailing +list</a>. All of these lists have archives, so you can browse through previous +discussions or follow the list development on the web if you prefer.</p> + +<p>If you're looking for something to work on, check out our <a href="OpenProjects.html">Open Projects</a> page or go look through the <a href="http://llvm.org/bugs/">Bugzilla bug database.</p> + +</div> +</body> +</html> diff --git a/www/get_started.html b/www/get_started.html new file mode 100644 index 000000000000..437cb38808f8 --- /dev/null +++ b/www/get_started.html @@ -0,0 +1,228 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Getting Started</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<h1>Getting Started: Building and Running Clang</h1> + +<p>This page gives you the shortest path to checking out Clang and demos a few +options. This should get you up and running with the minimum of muss and fuss. +If you like what you see, please consider <a href="get_involved.html">getting +involved</a> with the Clang community.</p> + +<h2>A Word of Warning</h2> + +<p>While this work aims to provide a fully functional C/C++/ObjC front-end, it +is still relatively new and under heavy development. Currently we believe clang +to be very usable as a C and Objective-C compiler, however there is no real C++ +support yet (this is obviously a big project). Additionally, for C and +Objective-C:</p> + +<ol> + <li>The semantic analyzer does not produce all of the warnings it should.</li> + <li>We don't consider the API to be stable yet, and reserve the right to + change fundamental things.</li> + <li>Only the X86-32 and X86-64 targets have been well tested.</li> +</ol> + +<p>If you run into problems, please file +bugs in <a href="http://llvm.org/bugs/">LLVM Bugzilla</a> or bring up the issue +on the +<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">Clang development +mailing list</a>.</p> + +<h2 id="build">Building Clang and Working with the Code</h2> + +<p>If you would like to check out and build Clang, the current procedure is as +follows:</p> + +<ol> + <li><a href="http://www.llvm.org/docs/GettingStarted.html#checkout">Checkout + and build LLVM</a> from SVN head:</li> + + <ul> + <li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li> + <li><tt>cd llvm</tt></li> + <li><tt>./configure; make</tt></li> + </ul> + <li>Checkout Clang:</li> + <ul> + <li>From within the <tt>llvm</tt> directory (where you + built llvm):</li> + <li><tt>cd tools</tt> + <li><tt>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li> + + </ul> + <li>If you intend to work on Clang C++ support, you may need to tell it how + to find your C++ standard library headers. If Clang cannot find your + system libstdc++ headers, please follow these instructions:</li> + + <ul> + <li>'<tt>touch empty.cpp; gcc -v empty.cpp -fsyntax-only</tt>' to get the + path.</li> + <li>Look for the comment "FIXME: temporary hack: + hard-coded paths" in <tt>clang/lib/Frontend/InitHeaderSearch.cpp</tt> and + change the lines below to include that path.</li> + </ul> + + <li>Build Clang:</li> + <ul> + <li><tt>cd clang</tt> (assuming that you are in <tt>llvm/tools</tt>)</li> + <li><tt>make</tt> (this will give you a debug build)</li> + </ul> + + <li>Try it out (assuming you add llvm/Debug/bin to your path):</li> + <ul> + <li><tt>clang-cc --help</tt></li> + <li><tt>clang-cc file.c -fsyntax-only</tt> (check for correctness)</li> + <li><tt>clang-cc file.c -ast-dump</tt> (internal debug dump of ast)</li> + <li><tt>clang-cc file.c -ast-view</tt> (<a + href="http://llvm.org/docs/ProgrammersManual.html#ViewGraph">set up graphviz + and rebuild llvm first</a>)</li> + <li><tt>clang-cc file.c -emit-llvm</tt> (print out unoptimized llvm code)</li> + <li><tt>clang-cc file.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | + llvm-dis</tt> (print out optimized llvm code)</li> + <li><tt>clang-cc file.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llc + > file.s</tt> (output native machine code)</li> + </ul> + + <p><em>Note</em>: Here <tt>clang-cc</tt> is the "low-level" frontend + executable that is similar in purpose to <tt>cc1</tt>. Clang also has a <a + href="#driver">high-level compiler driver</a> that acts as a drop-in + replacement for <tt>gcc</tt>. +</ol> + +<p>Note that the C front-end uses LLVM, but does not depend on llvm-gcc. If you +encounter problems with building Clang, make sure you have the latest SVN +version of LLVM. LLVM contains support libraries for Clang that will be updated +as well as development on Clang progresses.</p> + +<h3>Simultaneously Building Clang and LLVM:</h3> + +<p>Once you have checked out Clang into the llvm source tree it will build along +with the rest of <tt>llvm</tt>. To build all of LLVM and Clang together all at +once simply run <tt>make</tt> from the root LLVM directory.</p> + +<p><em>Note:</em> Observe that Clang is technically part of a separate +Subversion repository. As mentioned above, the latest Clang sources are tied to +the latest sources in the LLVM tree. You can update your toplevel LLVM project +and all (possibly unrelated) projects inside it with <tt><b>make +update</b></tt>. This will run <tt>svn update</tt> on all subdirectories related +to subversion. </p> + +<a name="driver"><h2>High-Level Compiler Driver (Drop-in Substitute for GCC)</h2></a> + +<p>While the <tt>clang-cc</tt> executable is a low-level frontend executable +that can perform code generation, program analysis, and other actions, it is not +designed to be a drop-in replacement for GCC's <tt>cc</tt>. For this purpose, +use the high-level driver, aptly named <tt>clang</tt>. Here are some +examples of how to use the high-level driver: +</p> + +<pre class="code"> +$ <b>cat t.c</b> +#include <stdio.h> +int main(int argc, char **argv) { printf("hello world\n"); } +$ <b>clang t.c</b> +$ <b>./a.out</b> +hello world +</pre> + +<h2>Examples of using Clang</h2> + +<p>The high-level driver <tt>clang</tt> is designed to understand most of GCC's +options, and the lower-level <tt>clang-cc</tt> executable also directly takes +many of GCC's options. You can see which options <tt>clang-cc</tt> accepts with +'<tt>clang-cc --help</tt>'. Here are a few examples of using <tt>clang</tt> and +<tt>clang-cc</tt>:</p> + +<!-- Thanks to + http://shiflett.org/blog/2006/oct/formatting-and-highlighting-php-code-listings +Site suggested using pre in CSS, but doesn't work in IE, so went for the <pre> +tag. --> + +<pre class="code"> +$ <b>cat ~/t.c</b> +typedef float V __attribute__((vector_size(16))); +V foo(V a, V b) { return a+b*a; } +</pre> + + +<h3>Preprocessing:</h3> + +<pre class="code"> +$ <b>clang ~/t.c -E</b> +# 1 "/Users/sabre/t.c" 1 + +typedef float V __attribute__((vector_size(16))); + +V foo(V a, V b) { return a+b*a; } +</pre> + + +<h3>Type checking:</h3> + +<pre class="code"> +$ <b>clang -fsyntax-only ~/t.c</b> +</pre> + + +<h3>GCC options:</h3> + +<pre class="code"> +$ <b>clang -fsyntax-only ~/t.c -pedantic</b> +/Users/sabre/t.c:2:17: warning: extension used +typedef float V __attribute__((vector_size(16))); + ^ +1 diagnostic generated. +</pre> + + +<h3>Pretty printing from the AST:</h3> + +<pre class="code"> +$ <b>clang-cc ~/t.c -ast-print</b> +typedef float V __attribute__(( vector_size(16) )); +V foo(V a, V b) { + return a + b * a; +} +</pre> + + +<h3>Code generation with LLVM:</h3> + +<pre class="code"> +$ <b>clang-cc ~/t.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llvm-dis</b> +define <4 x float> @foo(<4 x float> %a, <4 x float> %b) { +entry: + %mul = mul <4 x float> %b, %a + %add = add <4 x float> %mul, %a + ret <4 x float> %add +} +$ <b>clang-cc ~/t.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llc -march=ppc32 -mcpu=g5</b> +.. +_foo: + vmaddfp v2, v3, v2, v2 + blr +$ <b>clang-cc ~/t.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llc -march=x86 -mcpu=yonah</b> +.. +_foo: + mulps %xmm0, %xmm1 + addps %xmm0, %xmm1 + movaps %xmm1, %xmm0 + ret +</pre> + +</div> +</body> +</html> diff --git a/www/hacking.html b/www/hacking.html new file mode 100644 index 000000000000..db83861502ba --- /dev/null +++ b/www/hacking.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Hacking on clang</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> +</head> +<body> +<!--#include virtual="menu.html.incl"--> +<div id="content"> + <!--*********************************************************************--> + <h1>Hacking on Clang</h1> + <!--*********************************************************************--> + + <p>This document provides some hints for how to get started hacking + on Clang for developers who are new to the Clang and/or LLVM + codebases.</p> + <ul> + <li><a href="#docs">Developer Documentation</a></li> + <li><a href="#debugging">Debugging</a></li> + <li><a href="#testing">Testing</a></li> + <li><a href="#irgen">LLVM IR Generation</a></li> + </ul> + + <!--=====================================================================--> + <h2 id="docs">Developer Documentation</h2> + <!--=====================================================================--> + + <p>Both Clang and LLVM use doxygen to provide API documentation. Their + respective web pages (generated nightly) are here:</p> + <ul> + <li><a href="http://clang.llvm.org/doxygen">Clang</a></li> + <li><a href="http://llvm.org/doxygen">LLVM</a></li> + </ul> + + <p>For work on the LLVM IR generation, the LLVM assembly language + <a href="http://llvm.org/docs/LangRef.html">reference manual</a> is + also useful.</p> + + <!--=====================================================================--> + <h2 id="debugging">Debugging</h2> + <!--=====================================================================--> + + <p>Inspecting data structures in a debugger:</p> + <ul> + <li>Many LLVM and Clang data structures provide + a <tt>dump()</tt> method which will print a description of the + data structure to <tt>stderr</tt>.</li> + <li>The <a href="docs/InternalsManual.html#QualType"><tt>QualType</tt></a> + structure is used pervasively. This is a simple value class for + wrapping types with qualifiers; you can use + the <tt>isConstQualified()</tt>, for example, to get one of the + qualifiers, and the <tt>getTypePtr()</tt> method to get the + wrapped <tt>Type*</tt> which you can then dump.</li> + </ul> + + <!--=====================================================================--> + <h2 id="testing">Testing</h2> + <!--=====================================================================--> + + <p>Clang includes a basic regression suite in the tree which can be + run with <tt>make test</tt> from the top-level clang directory, or + just <tt>make</tt> in the <em>test</em> sub-directory. <tt>make + report</tt> can be used after running the tests to summarize the + results, and <tt>make VERBOSE=1</tt> can be used to show more detail + about what is being run.</p> + + <p>The regression suite can also be run with Valgrind by running + <tt>make test VG=1</tt> in the top-level clang directory.</p> + + <p>For more intensive changes, running + the <a href="http://llvm.org/docs/TestingGuide.html#testsuiterun">LLVM + Test Suite</a> with clang is recommended. Currently the best way to + override LLVMGCC, as in: <tt>make LLVMGCC="ccc -std=gnu89" + TEST=nightly report</tt> (make sure ccc is in your PATH or use the + full path).</p> + + <!--=====================================================================--> + <h2 id="irgen">LLVM IR Generation</h2> + <!--=====================================================================--> + + <p>The LLVM IR generation part of clang handles conversion of the + AST nodes output by the Sema module to the LLVM Intermediate + Representation (IR). Historically, this was referred to as + "codegen", and the Clang code for this lives + in <tt>lib/CodeGen</tt>.</p> + + <p>The output is most easily inspected using the <tt>-emit-llvm</tt> + option to clang (possibly in conjunction with <tt>-o -</tt>). You + can also use <tt>-emit-llvm-bc</tt> to write an LLVM bitcode file + which can be processed by the suite of LLVM tools + like <tt>llvm-dis</tt>, <tt>llvm-nm</tt>, etc. See the LLVM + <a href="http://llvm.org/docs/CommandGuide/">Command Guide</a> + for more information.</p> + +</div> +</body> +</html> diff --git a/www/index.html b/www/index.html new file mode 100644 index 000000000000..776c72962260 --- /dev/null +++ b/www/index.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>"clang" C Language Family Frontend for LLVM</title> + <link type="text/css" rel="stylesheet" href="menu.css"> + <link type="text/css" rel="stylesheet" href="content.css"> +</head> +<body> +<!--#include virtual="menu.html.incl"--> +<div id="content"> + <!--*********************************************************************--> + <h1>clang: a C language family frontend for LLVM</h1> + <!--*********************************************************************--> + + <p>The goal of the Clang project is to create a new C, C++, Objective C and + Objective C++ front-end for the <a href="http://www.llvm.org/">LLVM</a> + compiler. You can <a href="get_started.html">get and build</a> the source + today.</p> + + <!--=====================================================================--> + <h2 id="goals">Features and Goals</h2> + <!--=====================================================================--> + + <p>Some of the goals for the project include the following:</p> + + <p><b><a href="features.html#enduser">End-User Features</a></b>:</p> + + <ul> + <li>Fast compiles and low memory use</li> + <li>Expressive diagnostics (<a href="diagnostics.html">examples</a>)</li> + <li>GCC compatibility</li> + </ul> + + <p><b><a href="features.html#applications">Utility and + Applications</a></b>:</p> + + <ul> + <li>Modular library based architecture</li> + <li>Support diverse clients (refactoring, static analysis, code generation, + etc)</li> + <li>Allow tight integration with IDEs</li> + <li>Use the LLVM 'BSD' License</li> + </ul> + + <p><b><a href="features.html#design">Internal Design and + Implementation</a></b>:</p> + + <ul> + <li>A real-world, production quality compiler</li> + <li>A simple and hackable code base</li> + <li>A single unified parser for C, Objective C, C++, and Objective C++</li> + <li>Conformance with C/C++/ObjC and their variants</li> + </ul> + + <p>Of course this is only a rough outline of the goals and features of + Clang. To get a true sense of what it is all about, see the <a + href="features.html">Features</a> section, which breaks + each of these down and explains them in more detail.</p> + + + <!--=====================================================================--> + <h2>Why?</h2> + <!--=====================================================================--> + + <p>The development of a new front-end was started out of a need -- a need + for a compiler that allows better diagnostics, better integration with + IDEs, a license that is compatible with commercial products, and a + nimble compiler that is easy to develop and maintain. All of these were + motivations for starting work on a new front-end that could + meet these needs.</p> + + <p>A good (but quite dated) introduction to Clang can be found in the + following video lectures:</p> + + <ul> + <li><a href="clang_video-05-25-2007.html">Clang Introduction</a> + (May 2007)</li> + <li><a href="clang_video-07-25-2007.html">Features and Performance of + Clang</a> (July 2007)</li> + </ul> + + <p>For a more detailed comparison between Clang and other compilers, please + see the <a href="comparison.html">clang comparison page</a>.</p> + + <!--=====================================================================--> + <h2>Current Status</h2> + <!--=====================================================================--> + + <p>Clang is still under heavy development. Clang is considered to be + a production quality C and Objective-C compiler when targetting X86-32 and X86-64 + (other targets may have caveats, but are usually easy to fix). If you are + looking for source + analysis or source-to-source transformation tools, clang is probably + a great solution for you. If you are interested in C++, + <a href="cxx_status.html">full support</a> is still way off.</p> + + <!--=====================================================================--> + <h2>Get it and get involved!</h2> + <!--=====================================================================--> + + <p>Start by <a href="get_started.html">getting the code, building it, and + playing with it</a>. This will show you the sorts of things we can do + today and will let you have the "clang experience" first hand: hopefully + it will "resonate" with you. :)</p> + + <p>Once you've done that, please consider <a href="get_involved.html">getting + involved in the clang community</a>. The clang developers include numerous + volunteer contributors with a variety of backgrounds. If you're + interested in + following the development of clang, signing up for a mailing list is a good + way to learn about how the project works.</p> +</div> +</body> +</html> diff --git a/www/latest_checker.html.incl b/www/latest_checker.html.incl new file mode 100644 index 000000000000..90d444a40ba1 --- /dev/null +++ b/www/latest_checker.html.incl @@ -0,0 +1 @@ +<b><a href="http://checker.minormatter.com/checker-0.209.tar.bz2">checker-0.209.tar.bz2</a></b> (built May 18, 2009) diff --git a/www/menu.css b/www/menu.css new file mode 100644 index 000000000000..6e96a457ab53 --- /dev/null +++ b/www/menu.css @@ -0,0 +1,39 @@ +/***************/ +/* page layout */ +/***************/ + +[id=menu] { + position:fixed; + width:25ex; +} +[id=content] { + /* ***** EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */ + position:absolute; + left:29ex; + padding-right:4ex; +} + +/**************/ +/* menu style */ +/**************/ + +#menu .submenu { + padding-top:1em; + display:block; +} + +#menu label { + display:block; + font-weight: bold; + text-align: center; + background-color: rgb(192,192,192); +} +#menu a { + padding:0 .2em; + display:block; + text-align: center; + background-color: rgb(235,235,235); +} +#menu a:visited { + color:rgb(100,50,100); +}
\ No newline at end of file diff --git a/www/menu.html.incl b/www/menu.html.incl new file mode 100644 index 000000000000..ab3bf1dcf399 --- /dev/null +++ b/www/menu.html.incl @@ -0,0 +1,43 @@ +<div id="menu"> + <div> + <a href="http://llvm.org/">LLVM Home</a> + </div> + + <div class="submenu"> + <label>Clang Info</label> + <a href="/index.html">About</a> + <a href="/features.html">Features</a> + <a href="/comparison.html">Comparisons</a> + <a href="/get_started.html">Get Started</a> + <a href="/get_involved.html">Get Involved</a> + <a href="/OpenProjects.html">Open Projects</a> + <a href="/cxx_status.html">C++ Status</a> + <a href="/docs/LanguageExtensions.html">Language Extensions</a> + <a href="/docs/InternalsManual.html">Clang Internals</a> + <a href="/hacking.html">Hacking on Clang</a> + <a href="/performance.html">Performance</a> + </div> + + <div class="submenu"> + <label>Clang Tools</label> + <a href="/StaticAnalysis.html">Automatic Bug-Finding</a> + </div> + + <div class="submenu"> + <label>Quick Links</label> + <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a> + <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a> + <a href="http://llvm.org/bugs/">Bug Reports</a> + <a href="http://llvm.org/svn/llvm-project/cfe/trunk/">Browse SVN</a> + <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/">Browse ViewVC</a> + <a href="http://clang.llvm.org/doxygen/">doxygen</a> + <a href="http://t1.minormatter.com/~ddunbar/references.html">Spec. References</a> + <a href="http://t1.minormatter.com/~ddunbar/clang-cov/">Testing Coverage</a> + </div> + + <div class="submenu"> + <label>Events</label> + <a href="http://llvm.org/devmtg/">August 1, 2008 - LLVM/Clang Developer Meeting</a> + </div> + +</div> diff --git a/www/performance-2008-10-31.html b/www/performance-2008-10-31.html new file mode 100644 index 000000000000..5246ac30b857 --- /dev/null +++ b/www/performance-2008-10-31.html @@ -0,0 +1,134 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Performance</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style type="text/css"> +</style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<!--*************************************************************************--> +<h1>Clang - Performance</h1> +<!--*************************************************************************--> + +<p>This page tracks the compile time performance of Clang on two +interesting benchmarks: +<ul> + <li><i>Sketch</i>: The Objective-C example application shipped on + Mac OS X as part of Xcode. <i>Sketch</i> is indicative of a + "typical" Objective-C app. The source itself has a relatively + small amount of code (~7,500 lines of source code), but it relies + on the extensive Cocoa APIs to build its functionality. Like many + Objective-C applications, it includes + <tt>Cocoa/Cocoa.h</tt> in all of its source files, which represents a + significant stress test of the front-end's performance on lexing, + preprocessing, parsing, and syntax analysis.</li> + <li><i>176.gcc</i>: This is the gcc-2.7.2.2 code base as present in + SPECINT 2000. In contrast to Sketch, <i>176.gcc</i> consists of a + large amount of C source code (~220,000 lines) with few system + dependencies. This stresses the back-end's performance on generating + assembly code and debug information.</li> +</ul> +</p> + +<!--*************************************************************************--> +<h2><a name="enduser">Experiments</a></h2> +<!--*************************************************************************--> + +<p>Measurements are done by serially processing each file in the +respective benchmark, using Clang, gcc, and llvm-gcc as compilers. In +order to track the performance of various subsystems the timings have +been broken down into separate stages where possible: + +<ul> + <li><tt>-Eonly</tt>: This option runs the preprocessor but does not + perform any output. For gcc and llvm-gcc, the -MM option is used + as a rough equivalent to this step.</li> + <li><tt>-parse-noop</tt>: This option runs the parser on the input, + but without semantic analysis or any output. gcc and llvm-gcc have + no equivalent for this option.</li> + <li><tt>-fsyntax-only</tt>: This option runs the parser with semantic + analysis.</li> + <li><tt>-emit-llvm -O0</tt>: For Clang and llvm-gcc, this option + converts to the LLVM intermediate representation but doesn't + generate native code.</li> + <li><tt>-S -O0</tt>: Perform actual code generation to produce a + native assembler file.</li> + <li><tt>-S -O0 -g</tt>: This adds emission of debug information to + the assembly output.</li> +</ul> +</p> + +<p>This set of stages is chosen to be approximately additive, that is +each subsequent stage simply adds some additional processing. The +timings measure the delta of the given stage from the previous +one. For example, the timings for <tt>-fsyntax-only</tt> below show +the difference of running with <tt>-fsyntax-only</tt> versus running +with <tt>-parse-noop</tt> (for clang) or <tt>-MM</tt> with gcc and +llvm-gcc. This amounts to a fairly accurate measure of only the time +to perform semantic analysis (and parsing, in the case of gcc and llvm-gcc).</p> + +<p>These timings are chosen to break down the compilation process for +clang as much as possible. The graphs below show these numbers +combined so that it is easy to see how the time for a particular task +is divided among various components. For example, <tt>-S -O0</tt> +includes the time of <tt>-fsyntax-only</tt> and <tt>-emit-llvm -O0</tt>.</p> + +<p>Note that we already know that the LLVM optimizers are substantially (30-40%) +faster than the GCC optimizers at a given -O level, so we only focus on -O0 +compile time here.</p> + +<!--*************************************************************************--> +<h2><a name="enduser">Timing Results</a></h2> +<!--*************************************************************************--> + +<!--=======================================================================--> +<h3><a name="2008-10-31">2008-10-31</a></h3> +<!--=======================================================================--> + +<center><h4>Sketch</h4></center> +<img class="img_slide" + src="timing-data/2008-10-31/sketch.png" alt="Sketch Timings"/> + +<p>This shows Clang's substantial performance improvements in +preprocessing and semantic analysis; over 90% faster on +-fsyntax-only. As expected, time spent in code generation for this +benchmark is relatively small. One caveat, Clang's debug information +generation for Objective-C is very incomplete; this means the <tt>-S +-O0 -g</tt> numbers are unfair since Clang is generating substantially +less output.</p> + +<p>This chart also shows the effect of using precompiled headers (PCH) +on compiler time. gcc and llvm-gcc see a large performance improvement +with PCH; about 4x in wall time. Unfortunately, Clang does not yet +have an implementation of PCH-style optimizations, but we are actively +working to address this.</p> + +<center><h4>176.gcc</h4></center> +<img class="img_slide" + src="timing-data/2008-10-31/176.gcc.png" alt="176.gcc Timings"/> + +<p>Unlike the <i>Sketch</i> timings, compilation of <i>176.gcc</i> +involves a large amount of code generation. The time spent in Clang's +LLVM IR generation and code generation is on par with gcc's code +generation time but the improved parsing & semantic analysis +performance means Clang still comes in at ~29% faster versus gcc +on <tt>-S -O0 -g</tt> and ~20% faster versus llvm-gcc.</p> + +<p>These numbers indicate that Clang still has room for improvement in +several areas, notably our LLVM IR generation is significantly slower +than that of llvm-gcc, and both Clang and llvm-gcc incur a +significantly higher cost for adding debugging information compared to +gcc.</p> + +</div> +</body> +</html> diff --git a/www/performance.html b/www/performance.html new file mode 100644 index 000000000000..f76fc7a0094d --- /dev/null +++ b/www/performance.html @@ -0,0 +1,112 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>Clang - Performance</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <style type="text/css"> +</style> +</head> +<body> + +<!--#include virtual="menu.html.incl"--> + +<div id="content"> + +<!--*************************************************************************--> +<h1>Clang - Performance</h1> +<!--*************************************************************************--> + +<p>This page shows the compile time performance of Clang on two +interesting benchmarks: +<ul> + <li><i>Sketch</i>: The Objective-C example application shipped on + Mac OS X as part of Xcode. <i>Sketch</i> is indicative of a + "typical" Objective-C app. The source itself has a relatively + small amount of code (~7,500 lines of source code), but it relies + on the extensive Cocoa APIs to build its functionality. Like many + Objective-C applications, it includes <tt>Cocoa/Cocoa.h</tt> in + all of its source files, which represents a significant stress + test of the front-end's performance on lexing, preprocessing, + parsing, and syntax analysis.</li> + <li><i>176.gcc</i>: This is the gcc-2.7.2.2 code base as present in + SPECINT 2000. In contrast to Sketch, <i>176.gcc</i> consists of a + large amount of C source code (~200,000 lines) with few system + dependencies. This stresses the back-end's performance on generating + assembly code and debug information.</li> +</ul> +</p> + +<p> +For previous performance numbers, please +go <a href="performance-2008-10-31.html">here</a>. +</p> + +<!--*************************************************************************--> +<h2><a name="experiments">Experiments</a></h2> +<!--*************************************************************************--> + +<p>Measurements are done by running a full build (using xcodebuild or +make for Sketch and 176.gcc respectively) using Clang and gcc 4.2 as +compilers; gcc is run both with and without the new clang driver (ccc) +in order to evaluate the overhead of the driver itself.</p> + +<p>In order to track the performance of various subsystems the timings +have been broken down into separate stages where possible. This is +done by over-riding the CC environment variable used during the build +to point to one of a few simple shell scripts which may skip part of +the build. + +<ul> + <li><tt>non-compiler</tt>: The overhead of the build system itself; + for Sketch this also includes the time to build/copy various + non-source code resource files.</li> + <li><tt>+ driver</tt>: Add execution of the driver, but do not execute any + commands (by using the -### driver option).</li> + <li><tt>+ pch gen</tt>: Add generation of PCH files.</li> + <li><tt>+ cpp</tt>: Add preprocessing of source files (this time is + include in syntax for gcc).</li> + <li><tt>+ parse</tt>: Add parsing of source files (this time is + include in syntax for gcc).</li> + <li><tt>+ syntax</tt>: Add semantic checking of source files (for + gcc, this includes preprocessing and parsing as well).</li> + <li><tt>+ IRgen</tt>: Add generation of LLVM IR (gcc has no + corresponding phase).</li> + <li><tt>+ codegen</tt>: Add generation of assembler files.</li> + <li><tt>+ assembler</tt>: Add assembler time to generate .o files.</li> + <li><tt>+ linker</tt>: Add linker time.</li> +</ul> +</p> + +<p>This set of stages is chosen to be approximately additive, that is +each subsequent stage simply adds some additional processing. The +timings measure the delta of the given stage from the previous +one. For example, the timings for <tt>+ syntax</tt> below show the +difference of running with <tt>+ syntax</tt> versus running with <tt>+ +parse</tt> (for clang) or <tt>+ driver</tt> with gcc. This amounts to +a fairly accurate measure of only the time to perform semantic +analysis (and preprocessing/parsing, in the case of gcc).</p> + +<!--*************************************************************************--> +<h2><a name="timings">Timing Results</a></h2> +<!--*************************************************************************--> + +<!--=======================================================================--> +<h3><a name="2009-03-02">2009-03-02</a></h3> +<!--=======================================================================--> + +<a href="timing-data/2009-03-02/sketch.pdf"> +<img class="img_slide" + src="timing-data/2009-03-02/sketch.png" alt="Sketch Timings"/> +</a> + +<a href="timing-data/2009-03-02/176.gcc.pdf"> +<img class="img_slide" + src="timing-data/2009-03-02/176.gcc.png" alt="176.gcc Timings"/> +</a> + +</div> +</body> +</html> diff --git a/www/timing-data/2008-10-31/176.gcc-01.txt b/www/timing-data/2008-10-31/176.gcc-01.txt new file mode 100644 index 000000000000..3809e0d3b299 --- /dev/null +++ b/www/timing-data/2008-10-31/176.gcc-01.txt @@ -0,0 +1,135 @@ +Title: 176.gcc Timings +Timestamp: 2008-10-31_17-10 +Uname: Darwin lordcrumb.apple.com 10.0.0d3 Darwin Kernel Version 10.0.0d3: Fri Oct 24 02:12:11 PDT 2008; root:xnu-1353~2/RELEASE_I386 i386 +Path: /Users/ddunbar/nightlytest/176.gcc +Runs: 3 + +LLVM SVN Rev.: 58536 + +clang: /Users/ddunbar/llvm/Release-Asserts/bin//clang +gcc: /usr/bin/gcc-4.2 +llvm-gcc: /Users/ddunbar/llvm-gcc/install/bin/llvm-gcc + +Mode: Eonly Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 0.8321 0.8274 0.8274 0.8435 0.0080 2.4964 + sys 0.4209 0.4140 0.4140 0.4307 0.0071 1.2626 +wall 1.2965 1.2829 1.2829 1.3176 0.0152 3.8894 + +Mode: Eonly Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 0.8534 0.8465 0.8563 0.8575 0.0050 2.5603 + sys 0.5327 0.5200 0.5291 0.5490 0.0121 1.5980 +wall 1.4336 1.4104 1.4330 1.4575 0.0192 4.3009 + +Mode: Eonly Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 1.1313 1.1277 1.1304 1.1359 0.0034 3.3940 + sys 0.5579 0.5530 0.5539 0.5669 0.0063 1.6738 +wall 1.7860 1.7669 1.7890 1.8020 0.0145 5.3580 + + +Mode: parse-noop Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 0.9276 0.9267 0.9269 0.9292 0.0011 2.7827 + sys 0.4284 0.4244 0.4255 0.4353 0.0049 1.2852 +wall 1.3994 1.3941 1.3954 1.4086 0.0066 4.1981 + + +Mode: disable-free Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.2716 1.2497 1.2713 1.2937 0.0180 3.8147 + sys 0.4835 0.4815 0.4738 0.4953 0.0089 1.4506 +wall 1.8149 1.7838 1.8137 1.8471 0.0259 5.4446 + + +Mode: syntax Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.4042 1.4031 1.4044 1.4044 0.0009 4.2127 + sys 0.4818 0.4802 0.4838 0.4838 0.0015 1.4454 +wall 1.9359 1.9333 1.9376 1.9376 0.0019 5.8077 + +Mode: syntax Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 3.9188 3.8766 3.8846 3.9951 0.0541 11.7563 + sys 1.0207 1.0195 1.0141 1.0285 0.0059 3.0622 +wall 5.0500 5.0023 5.0092 5.1386 0.0627 15.1500 + +Mode: syntax Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 3.8854 3.8647 3.8868 3.9048 0.0164 11.6563 + sys 0.8548 0.8436 0.8455 0.8753 0.0145 2.5644 +wall 4.8695 4.8369 4.8614 4.9103 0.0305 14.6086 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 2.7903 2.7606 2.8026 2.8079 0.0211 8.3710 + sys 0.6645 0.6509 0.6759 0.6667 0.0104 1.9935 +wall 3.5577 3.4894 3.5650 3.6186 0.0530 10.6730 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 4.1711 4.1389 4.1729 4.2015 0.0256 12.5133 + sys 0.9335 0.9339 0.9218 0.9448 0.0094 2.8004 +wall 5.2380 5.1985 5.2417 5.2738 0.0309 15.7140 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 5.2797 5.1709 5.2643 5.4040 0.0958 15.8392 + sys 0.7739 0.7547 0.7726 0.7944 0.0162 2.3217 +wall 6.1807 6.1082 6.1174 6.3165 0.0961 18.5421 + Asm Lines: 735931 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 8.2410 8.1034 8.2230 8.3965 0.1203 24.7230 + sys 1.1924 1.1576 1.2112 1.2082 0.0246 3.5771 +wall 9.6010 9.3792 9.6800 9.7438 0.1590 28.8030 + Asm Lines: 514962 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 6.3978 6.3894 6.3894 6.4726 0.0579 19.1935 + sys 1.0638 1.0562 1.0562 1.0861 0.0160 3.1914 +wall 7.6185 7.5807 7.5807 7.6876 0.0489 22.8555 + Asm Lines: 597193 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.9798 3.9728 3.9752 3.9914 0.0083 11.9393 + sys 0.7313 0.7260 0.7326 0.7353 0.0039 2.1938 +wall 4.7915 4.7799 4.7878 4.8066 0.0112 14.3744 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 5.4838 5.4701 5.4701 5.5172 0.0238 16.4513 + sys 1.0527 1.0401 1.0401 1.0757 0.0163 3.1581 +wall 6.7059 6.6768 6.6768 6.7254 0.0210 20.1177 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 6.8213 6.7836 6.8060 6.8743 0.0386 20.4639 + sys 0.8527 0.8376 0.8598 0.8607 0.0107 2.5582 +wall 7.8055 7.7154 7.8109 7.8902 0.0714 23.4165 + Asm Lines: 1581804 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 8.7962 8.6334 8.7861 8.9691 0.1373 26.3887 + sys 1.2758 1.2395 1.2780 1.3100 0.0288 3.8275 +wall 10.2714 10.1274 10.2232 10.4635 0.1414 30.8142 + Asm Lines: 1403421 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.9903 7.9383 7.9821 8.0504 0.0461 23.9708 + sys 1.1587 1.1374 1.1592 1.1794 0.0171 3.4760 +wall 9.3711 9.2555 9.2884 9.5692 0.1408 28.1132 + Asm Lines: 1580849 + + + Done: 2008-10-31_17-16 diff --git a/www/timing-data/2008-10-31/176.gcc-02.txt b/www/timing-data/2008-10-31/176.gcc-02.txt new file mode 100644 index 000000000000..dd898c181068 --- /dev/null +++ b/www/timing-data/2008-10-31/176.gcc-02.txt @@ -0,0 +1,135 @@ +Title: 176.gcc Timings +Timestamp: 2008-10-31_17-17 +Uname: Darwin lordcrumb.apple.com 10.0.0d3 Darwin Kernel Version 10.0.0d3: Fri Oct 24 02:12:11 PDT 2008; root:xnu-1353~2/RELEASE_I386 i386 +Path: /Users/ddunbar/nightlytest/176.gcc +Runs: 3 + +LLVM SVN Rev.: 58536 + +clang: /Users/ddunbar/llvm/Release-Asserts/bin//clang +gcc: /usr/bin/gcc-4.2 +llvm-gcc: /Users/ddunbar/llvm-gcc/install/bin/llvm-gcc + +Mode: Eonly Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 0.8238 0.8184 0.8187 0.8342 0.0074 2.4713 + sys 0.4030 0.3891 0.3953 0.4247 0.0155 1.2091 +wall 1.2731 1.2477 1.2565 1.3152 0.0299 3.8194 + +Mode: Eonly Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 0.8584 0.8501 0.8560 0.8692 0.0080 2.5753 + sys 0.5426 0.5268 0.5453 0.5556 0.0119 1.6277 +wall 1.4485 1.4214 1.4503 1.4737 0.0214 4.3454 + +Mode: Eonly Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 1.1289 1.1338 1.1322 1.1207 0.0058 3.3866 + sys 0.5857 0.5787 0.5734 0.6051 0.0138 1.7572 +wall 1.8195 1.8110 1.8124 1.8350 0.0110 5.4585 + + +Mode: parse-noop Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 0.9286 0.9250 0.9250 0.9370 0.0059 2.7859 + sys 0.4255 0.4163 0.4163 0.4417 0.0115 1.2764 +wall 1.3970 1.3826 1.3826 1.4241 0.0192 4.1910 + + +Mode: disable-free Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.2962 1.2963 1.2963 1.3114 0.0125 3.8885 + sys 0.4842 0.4864 0.4864 0.4901 0.0059 1.4527 +wall 1.8424 1.8356 1.8356 1.8534 0.0078 5.5273 + + +Mode: syntax Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.4120 1.4055 1.4118 1.4188 0.0054 4.2360 + sys 0.4824 0.4786 0.4821 0.4864 0.0032 1.4471 +wall 1.9573 1.9467 1.9570 1.9682 0.0088 5.8719 + +Mode: syntax Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 3.9243 3.8431 3.9624 3.9675 0.0575 11.7730 + sys 1.0094 0.9967 1.0135 1.0180 0.0091 3.0282 +wall 5.0495 4.9447 5.1012 5.1025 0.0741 15.1484 + +Mode: syntax Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 3.9287 3.8760 3.9226 3.9874 0.0457 11.7860 + sys 0.8949 0.8684 0.9014 0.9147 0.0195 2.6846 +wall 4.9625 4.8722 4.9601 5.0550 0.0747 14.8874 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 2.8082 2.7806 2.8106 2.8334 0.0216 8.4246 + sys 0.6608 0.6564 0.6582 0.6677 0.0049 1.9823 +wall 3.5453 3.5150 3.5559 3.5650 0.0218 10.6359 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 4.1471 4.1512 4.1505 4.1395 0.0053 12.4413 + sys 0.9221 0.9069 0.9203 0.9391 0.0132 2.7663 +wall 5.2138 5.1919 5.2001 5.2495 0.0255 15.6415 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 5.1674 5.1537 5.1637 5.1637 0.0129 15.5022 + sys 0.7424 0.7404 0.7376 0.7376 0.0049 2.2271 +wall 6.0284 5.9844 6.0964 6.0964 0.0487 18.0852 + Asm Lines: 735931 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 8.0945 8.0259 8.1235 8.1342 0.0487 24.2835 + sys 1.1599 1.1517 1.1626 1.1654 0.0059 3.4796 +wall 9.4120 9.2935 9.4036 9.5390 0.1004 28.2361 + Asm Lines: 514962 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 6.4405 6.3577 6.4623 6.5014 0.0607 19.3214 + sys 1.0571 1.0454 1.0359 1.0902 0.0237 3.1714 +wall 7.6688 7.5631 7.6376 7.8058 0.1015 23.0065 + Asm Lines: 597193 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.9883 3.9539 3.9626 4.0485 0.0427 11.9650 + sys 0.7333 0.7209 0.7377 0.7413 0.0089 2.1998 +wall 4.8088 4.7485 4.7821 4.8957 0.0630 14.4263 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 5.4875 5.4528 5.5017 5.5017 0.0247 16.4626 + sys 1.0308 1.0231 1.0248 1.0248 0.0097 3.0923 +wall 6.6781 6.6372 6.7006 6.7006 0.0290 20.0342 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 6.7945 6.6664 6.7352 6.9819 0.1355 20.3835 + sys 0.8359 0.8172 0.8329 0.8577 0.0167 2.5077 +wall 7.7458 7.6003 7.7080 7.9290 0.1368 23.2374 + Asm Lines: 1581804 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 8.7280 8.6884 8.7084 8.7870 0.0426 26.1839 + sys 1.3031 1.2940 1.3118 1.3037 0.0073 3.9094 +wall 10.2039 10.1039 10.1162 10.3916 0.1328 30.6116 + Asm Lines: 1403421 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.9987 7.9805 7.9805 8.0493 0.0362 23.9962 + sys 1.1561 1.1523 1.1523 1.1626 0.0047 3.4682 +wall 9.3154 9.2801 9.2801 9.3606 0.0336 27.9463 + Asm Lines: 1580849 + + + Done: 2008-10-31_17-23 diff --git a/www/timing-data/2008-10-31/176.gcc.png b/www/timing-data/2008-10-31/176.gcc.png Binary files differnew file mode 100644 index 000000000000..53efd879312b --- /dev/null +++ b/www/timing-data/2008-10-31/176.gcc.png diff --git a/www/timing-data/2008-10-31/sketch-01.txt b/www/timing-data/2008-10-31/sketch-01.txt new file mode 100644 index 000000000000..ff5d83e1281b --- /dev/null +++ b/www/timing-data/2008-10-31/sketch-01.txt @@ -0,0 +1,187 @@ +Title: Sketch Timings +Timestamp: 2008-10-31_16-46 +Uname: Darwin lordcrumb.apple.com 10.0.0d3 Darwin Kernel Version 10.0.0d3: Fri Oct 24 02:12:11 PDT 2008; root:xnu-1353~2/RELEASE_I386 i386 +Path: /Users/ddunbar/nightlytest/Sketch.ref +Runs: 3 + +LLVM SVN Rev.: 58536 + +clang: /Users/ddunbar/llvm/Release-Asserts/bin//clang +gcc: /usr/bin/gcc-4.2 +llvm-gcc: /Users/ddunbar/llvm-gcc/install/bin/llvm-gcc + +Mode: Eonly Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.3762 1.3711 1.3724 1.3849 0.0062 4.1285 + sys 0.8306 0.8276 0.8274 0.8367 0.0044 2.4917 +wall 2.2290 2.2207 2.2219 2.2445 0.0109 6.6870 + +Mode: Eonly Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 2.2970 2.2352 2.2374 2.4184 0.0858 6.8910 + sys 1.0716 1.0338 1.0342 1.1470 0.0533 3.2149 +wall 3.4039 3.3027 3.3046 3.6043 0.1417 10.2116 + +Mode: Eonly Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 2.8472 2.7770 2.7770 2.9893 0.1005 8.5416 + sys 1.3153 1.2699 1.2699 1.4079 0.0655 3.9460 +wall 4.2134 4.0909 4.0909 4.4421 0.1618 12.6403 + + +Mode: parse-noop Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.7295 1.7228 1.7237 1.7421 0.0089 5.1886 + sys 0.8510 0.8468 0.8448 0.8615 0.0074 2.5530 +wall 2.6034 2.5913 2.5914 2.6277 0.0172 7.8103 + + +Mode: disable-free Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 2.7310 2.7274 2.7288 2.7288 0.0042 8.1930 + sys 0.9950 0.9890 0.9917 0.9917 0.0068 2.9851 +wall 3.7720 3.7515 3.7866 3.7866 0.0150 11.3161 + + +Mode: syntax Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 3.1817 3.1284 3.1620 3.2547 0.0534 9.5451 + sys 1.0815 1.0569 1.0737 1.1138 0.0239 3.2444 +wall 4.2918 4.2129 4.2635 4.3991 0.0786 12.8755 + +Mode: syntax Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 6.4086 6.3289 6.4012 6.4956 0.0682 19.2258 + sys 1.7617 1.7257 1.7615 1.7979 0.0295 5.2851 +wall 8.2403 8.1235 8.2432 8.3541 0.0942 24.7208 + +Mode: syntax Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 6.9711 6.8657 6.9738 7.0739 0.0850 20.9133 + sys 1.7577 1.7226 1.7801 1.7702 0.0251 5.2730 +wall 8.8020 8.6601 8.8243 8.9216 0.1079 26.4061 + +Mode: syntax Compiler: gcc PCH: 1 Flags: +name avg min med max SD total +user 0.6082 0.6078 0.6083 0.6085 0.0003 1.8245 + sys 0.8901 0.8826 0.8949 0.8927 0.0053 2.6702 +wall 1.5593 1.5558 1.5605 1.5617 0.0025 4.6780 + +Mode: syntax Compiler: llvm-gcc PCH: 1 Flags: +name avg min med max SD total +user 0.6413 0.6409 0.6409 0.6407 0.0008 1.9240 + sys 0.7872 0.7805 0.7805 0.7954 0.0062 2.3615 +wall 1.4837 1.4760 1.4760 1.4877 0.0054 4.4510 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 3.3512 3.2800 3.3205 3.4530 0.0739 10.0535 + sys 1.0991 1.0690 1.0833 1.1450 0.0330 3.2974 +wall 4.4934 4.4015 4.4394 4.6392 0.1043 13.4801 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 7.1104 7.0581 7.1061 7.1670 0.0446 21.3311 + sys 1.7621 1.7462 1.7556 1.7845 0.0163 5.2863 +wall 8.9510 8.8993 8.9352 9.0187 0.0500 26.8531 + +Mode: llvm Compiler: llvm-gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 0.8446 0.8300 0.8499 0.8538 0.0104 2.5338 + sys 0.8742 0.8366 0.8861 0.9000 0.0272 2.6227 +wall 1.7871 1.7366 1.8046 1.8201 0.0362 5.3613 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 3.4794 3.4750 3.4794 3.4794 0.0035 10.4381 + sys 1.0876 1.0817 1.0874 1.0874 0.0049 3.2628 +wall 4.6112 4.5958 4.6223 4.6223 0.0112 13.8337 + Asm Lines: 46279 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 6.8875 6.7735 6.8748 7.0143 0.0987 20.6626 + sys 1.8035 1.7586 1.8049 1.8472 0.0362 5.4106 +wall 8.7785 8.6100 8.7574 8.9682 0.1470 26.3356 + Asm Lines: 41008 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 7.3392 7.2327 7.3071 7.4779 0.1026 22.0176 + sys 1.8018 1.7703 1.7930 1.8420 0.0299 5.4053 +wall 9.2274 9.0793 9.1968 9.4062 0.1352 27.6823 + Asm Lines: 47243 + +Mode: asm Compiler: gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 1.0485 1.0361 1.0429 1.0666 0.0131 3.1456 + sys 1.0277 1.0097 1.0437 1.0296 0.0140 3.0830 +wall 2.1621 2.1181 2.1496 2.2185 0.0419 6.4862 + Asm Lines: 41001 + +Mode: asm Compiler: llvm-gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 0.9927 0.9898 0.9932 0.9951 0.0022 2.9781 + sys 0.8640 0.8529 0.8610 0.8781 0.0105 2.5920 +wall 1.9183 1.9041 1.9193 1.9315 0.0112 5.7550 + Asm Lines: 47238 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.3843 3.3639 3.3719 3.4173 0.0235 10.1530 + sys 1.0862 1.0743 1.0789 1.1053 0.0136 3.2585 +wall 4.5248 4.4754 4.4906 4.6084 0.0595 13.5744 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.4463 7.3855 7.3897 7.5638 0.0831 22.3390 + sys 1.7927 1.7653 1.7841 1.8286 0.0265 5.3780 +wall 9.3259 9.2350 9.2660 9.4767 0.1074 27.9777 + +Mode: llvm Compiler: llvm-gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.1532 1.1527 1.1527 1.1556 0.0018 3.4596 + sys 0.8746 0.8663 0.8663 0.8774 0.0060 2.6238 +wall 2.1168 2.0914 2.0914 2.1464 0.0226 6.3503 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.6819 3.5955 3.7080 3.7422 0.0627 11.0458 + sys 1.1386 1.0879 1.1480 1.1798 0.0381 3.4158 +wall 4.8606 4.7204 4.8947 4.9668 0.1034 14.5819 + Asm Lines: 106056 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.9271 7.8581 7.8581 8.0696 0.1008 23.7814 + sys 2.0275 1.9943 1.9943 2.0711 0.0322 6.0826 +wall 10.0313 9.9266 9.9266 10.2314 0.1415 30.0939 + Asm Lines: 177342 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.7083 7.6793 7.6941 7.6941 0.0312 23.1249 + sys 1.8122 1.7971 1.8204 1.8204 0.0107 5.4365 +wall 9.6227 9.5591 9.6555 9.6555 0.0450 28.8682 + Asm Lines: 203358 + +Mode: asm Compiler: gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.2589 1.2129 1.2130 1.3509 0.0650 3.7767 + sys 1.2141 1.1467 1.1601 1.3355 0.0860 3.6423 +wall 2.5426 2.4325 2.4357 2.7596 0.1534 7.6278 + Asm Lines: 177335 + +Mode: asm Compiler: llvm-gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.4234 1.3843 1.4009 1.4849 0.0440 4.2701 + sys 0.9822 0.9153 0.9446 1.0867 0.0749 2.9466 +wall 2.4856 2.3713 2.4482 2.6372 0.1117 7.4567 + Asm Lines: 203353 + + + Done: 2008-10-31_16-55 diff --git a/www/timing-data/2008-10-31/sketch-02.txt b/www/timing-data/2008-10-31/sketch-02.txt new file mode 100644 index 000000000000..88af3267ea61 --- /dev/null +++ b/www/timing-data/2008-10-31/sketch-02.txt @@ -0,0 +1,187 @@ +Title: Sketch Timings +Timestamp: 2008-10-31_16-59 +Uname: Darwin lordcrumb.apple.com 10.0.0d3 Darwin Kernel Version 10.0.0d3: Fri Oct 24 02:12:11 PDT 2008; root:xnu-1353~2/RELEASE_I386 i386 +Path: /Users/ddunbar/nightlytest/Sketch.ref +Runs: 3 + +LLVM SVN Rev.: 58536 + +clang: /Users/ddunbar/llvm/Release-Asserts/bin//clang +gcc: /usr/bin/gcc-4.2 +llvm-gcc: /Users/ddunbar/llvm-gcc/install/bin/llvm-gcc + +Mode: Eonly Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.4030 1.3765 1.3887 1.4437 0.0293 4.2089 + sys 0.8561 0.8388 0.8497 0.8796 0.0173 2.5682 +wall 2.2809 2.2373 2.2586 2.3468 0.0474 6.8426 + +Mode: Eonly Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 2.3041 2.2821 2.2821 2.3563 0.0371 6.9123 + sys 1.0772 1.0593 1.0593 1.0976 0.0157 3.2316 +wall 3.4323 3.3918 3.3918 3.4905 0.0422 10.2970 + +Mode: Eonly Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 2.7593 2.7038 2.7831 2.7831 0.0393 8.2778 + sys 1.2805 1.2605 1.2868 1.2868 0.0144 3.8414 +wall 4.0893 4.0056 4.1319 4.1319 0.0592 12.2679 + + +Mode: parse-noop Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 1.7430 1.7252 1.7429 1.7610 0.0146 5.2291 + sys 0.8573 0.8457 0.8605 0.8656 0.0085 2.5718 +wall 2.6237 2.5942 2.6266 2.6504 0.0230 7.8711 + + +Mode: disable-free Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 2.7684 2.7291 2.7310 2.8450 0.0542 8.3051 + sys 1.0088 0.9948 0.9960 1.0356 0.0189 3.0263 +wall 3.8203 3.7581 3.7635 3.9394 0.0842 11.4610 + + +Mode: syntax Compiler: clang PCH: 0 Flags: +name avg min med max SD total +user 3.1106 3.1115 3.1107 3.1095 0.0008 9.3317 + sys 1.0674 1.0630 1.0672 1.0721 0.0037 3.2022 +wall 4.2059 4.2015 4.2077 4.2085 0.0031 12.6176 + +Mode: syntax Compiler: gcc PCH: 0 Flags: +name avg min med max SD total +user 6.4166 6.3461 6.4479 6.4559 0.0500 19.2499 + sys 1.7649 1.7256 1.7836 1.7854 0.0278 5.2946 +wall 8.2536 8.1547 8.3018 8.3045 0.0700 24.7609 + +Mode: syntax Compiler: llvm-gcc PCH: 0 Flags: +name avg min med max SD total +user 7.0297 6.9018 7.0003 7.1869 0.1182 21.0890 + sys 1.7782 1.7336 1.7875 1.8136 0.0333 5.3347 +wall 8.8942 8.7128 8.8699 9.0999 0.1590 26.6826 + +Mode: syntax Compiler: gcc PCH: 1 Flags: +name avg min med max SD total +user 0.6133 0.6065 0.6089 0.6244 0.0079 1.8398 + sys 0.9115 0.8880 0.9019 0.9446 0.0241 2.7345 +wall 1.5864 1.5593 1.5669 1.6330 0.0331 4.7592 + +Mode: syntax Compiler: llvm-gcc PCH: 1 Flags: +name avg min med max SD total +user 0.6412 0.6387 0.6387 0.6477 0.0047 1.9235 + sys 0.7820 0.7654 0.7654 0.7955 0.0125 2.3461 +wall 1.4909 1.4783 1.4783 1.5124 0.0153 4.4726 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 3.2926 3.2939 3.2939 3.2998 0.0065 9.8778 + sys 1.0746 1.0728 1.0728 1.0793 0.0034 3.2237 +wall 4.4097 4.4045 4.4045 4.4150 0.0043 13.2290 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 7.3232 7.2559 7.3145 7.3991 0.0588 21.9695 + sys 1.8050 1.7967 1.7982 1.8201 0.0107 5.4151 +wall 9.2155 9.1243 9.2130 9.3092 0.0755 27.6465 + +Mode: llvm Compiler: llvm-gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 0.8337 0.8288 0.8288 0.8444 0.0076 2.5011 + sys 0.8575 0.8484 0.8484 0.8773 0.0140 2.5725 +wall 1.7973 1.7406 1.7406 1.9054 0.0764 5.3919 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 +name avg min med max SD total +user 3.4909 3.4823 3.4896 3.4896 0.0077 10.4728 + sys 1.0997 1.1027 1.1028 1.1028 0.0043 3.2991 +wall 4.6332 4.6179 4.6483 4.6483 0.0124 13.8996 + Asm Lines: 46279 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 6.8956 6.7882 6.9057 6.9929 0.0839 20.6868 + sys 1.7978 1.7703 1.7928 1.8302 0.0247 5.3933 +wall 8.7724 8.6360 8.7818 8.8994 0.1077 26.3172 + Asm Lines: 41008 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 +name avg min med max SD total +user 7.2722 7.2087 7.3014 7.3014 0.0450 21.8167 + sys 1.8020 1.7828 1.8083 1.8083 0.0139 5.4060 +wall 9.1527 9.0609 9.2011 9.2011 0.0650 27.4582 + Asm Lines: 47243 + +Mode: asm Compiler: gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 1.0563 1.0337 1.0373 1.0979 0.0294 3.1689 + sys 1.0249 0.9862 0.9837 1.1048 0.0565 3.0747 +wall 2.1458 2.0764 2.0838 2.2772 0.0930 6.4374 + Asm Lines: 41001 + +Mode: asm Compiler: llvm-gcc PCH: 1 Flags: -O0 +name avg min med max SD total +user 0.9983 0.9929 0.9929 1.0110 0.0090 2.9950 + sys 0.8616 0.8525 0.8525 0.8822 0.0146 2.5849 +wall 1.9268 1.9061 1.9061 1.9632 0.0259 5.7804 + Asm Lines: 47238 + + +Mode: llvm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.4344 3.3999 3.4302 3.4730 0.0300 10.3032 + sys 1.1155 1.0881 1.1394 1.1191 0.0211 3.3466 +wall 4.5875 4.5279 4.6054 4.6292 0.0432 13.7626 + +Mode: llvm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.5996 7.5021 7.5389 7.7578 0.1129 22.7988 + sys 1.8546 1.8469 1.8262 1.8908 0.0270 5.5639 +wall 9.5392 9.4246 9.4575 9.7353 0.1394 28.6175 + +Mode: llvm Compiler: llvm-gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.1556 1.1512 1.1542 1.1542 0.0042 3.4667 + sys 0.9021 0.8890 0.8971 0.8971 0.0131 2.7062 +wall 2.1308 2.1126 2.1487 2.1487 0.0147 6.3924 + + +Mode: asm Compiler: clang PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 3.6020 3.5895 3.5904 3.6259 0.0169 10.8059 + sys 1.0967 1.0879 1.0879 1.1143 0.0124 3.2901 +wall 4.7362 4.7169 4.7182 4.7736 0.0264 14.2087 + Asm Lines: 106056 + +Mode: asm Compiler: gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 8.0264 7.8409 8.0350 8.2033 0.1481 24.0792 + sys 2.0315 1.9767 2.0315 2.0864 0.0448 6.0946 +wall 10.1477 9.9000 10.1584 10.3846 0.1980 30.4430 + Asm Lines: 177342 + +Mode: asm Compiler: llvm-gcc PCH: 0 Flags: -O0 -g +name avg min med max SD total +user 7.8449 7.8189 7.8471 7.8687 0.0204 23.5346 + sys 1.8727 1.8768 1.8539 1.8874 0.0140 5.6181 +wall 9.8164 9.7803 9.8029 9.8661 0.0363 29.4492 + Asm Lines: 203358 + +Mode: asm Compiler: gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.2216 1.2137 1.2168 1.2342 0.0090 3.6647 + sys 1.1771 1.1627 1.1630 1.2055 0.0201 3.5312 +wall 2.4619 2.4419 2.4429 2.5008 0.0275 7.3856 + Asm Lines: 177335 + +Mode: asm Compiler: llvm-gcc PCH: 1 Flags: -O0 -g +name avg min med max SD total +user 1.3980 1.3682 1.3688 1.4569 0.0416 4.1939 + sys 0.9354 0.8951 0.9181 0.9930 0.0418 2.8062 +wall 2.4380 2.3312 2.3606 2.6224 0.1309 7.3141 + Asm Lines: 203353 + + + Done: 2008-10-31_17-08 diff --git a/www/timing-data/2008-10-31/sketch.png b/www/timing-data/2008-10-31/sketch.png Binary files differnew file mode 100644 index 000000000000..5ce3b11087ac --- /dev/null +++ b/www/timing-data/2008-10-31/sketch.png diff --git a/www/timing-data/2009-03-02/176.gcc.pdf b/www/timing-data/2009-03-02/176.gcc.pdf Binary files differnew file mode 100644 index 000000000000..0b2e610d085a --- /dev/null +++ b/www/timing-data/2009-03-02/176.gcc.pdf diff --git a/www/timing-data/2009-03-02/176.gcc.png b/www/timing-data/2009-03-02/176.gcc.png Binary files differnew file mode 100644 index 000000000000..4ae08e11adc4 --- /dev/null +++ b/www/timing-data/2009-03-02/176.gcc.png diff --git a/www/timing-data/2009-03-02/176.gcc.txt b/www/timing-data/2009-03-02/176.gcc.txt new file mode 100644 index 000000000000..f965e9729e6a --- /dev/null +++ b/www/timing-data/2009-03-02/176.gcc.txt @@ -0,0 +1,1120 @@ +ccc_path = """/Volumes/Data/ddunbar/llvm.install/bin/ccc""" +ccc_clang = """/Volumes/Data/ddunbar/zorg/xcb_scripts/cc/xcc.fb""" +ccc_gcc = """/Volumes/Data/ddunbar/zorg/xcb_scripts/cc/xcc.fb -ccc-no-clang""" +gcc = """/usr/bin/gcc-4.2""" +ccc_clang_info = """ +ccc version 1.0 (https://ddunbar@llvm.org/svn/llvm-project/cfe/trunk) + "/Volumes/Data/ddunbar/llvm.install/bin/clang" "-S" "-disable-free" "--relocation-model=pic" "--disable-fp-elim" "--nozero-initialized-in-bss" "--unwind-tables=1" "--mcpu=core2" "--fmath-errno=0" "-mmacosx-version-min=10.6.0" "-arch" "x86_64" "-o" "/tmp/tmp62ee6x.s" "-x" "c" "/dev/null" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/tmp/tmpyLxO26.o" "/tmp/tmp62ee6x.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.5.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/tmp/tmpyLxO26.o" "-lgcc_s.10.5" "-lgcc" "-lSystem" +""" +ccc_gcc_info = """ +ccc version 1.0 (https://ddunbar@llvm.org/svn/llvm-project/cfe/trunk) + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1" "-quiet" "-imultilib" "x86_64" "-D__DYNAMIC__" "/dev/null" "-fPIC" "-quiet" "-dumpbase" "null" "-mmacosx-version-min=10.6.0" "-m64" "-mtune=core2" "-auxbase" "null" "-o" "/tmp/tmpDx0Rtr.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/tmp/tmpNbvYrM.o" "/tmp/tmpDx0Rtr.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.5.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/tmp/tmpNbvYrM.o" "-lgcc_s.10.5" "-lgcc" "-lSystem" +""" +gcc_info = """ +Using built-in specs. +Target: i686-apple-darwin10 +Configured with: /var/tmp/gcc/gcc-5641~3/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 +Thread model: posix +gcc version 4.2.1 (Apple Inc. build 5641) + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1" "-quiet" "-imultilib" "x86_64" "-D__DYNAMIC__" "/dev/null" "-fPIC" "-quiet" "-dumpbase" "null" "-mmacosx-version-min=10.6.0" "-m64" "-mtune=core2" "-auxbase" "null" "-o" "/var/tmp//ccDnCoVC.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/var/tmp//ccwsOXBR.o" "/var/tmp//ccDnCoVC.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.6.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/var/tmp//ccwsOXBR.o" "-lgcc" "-lSystem" +""" +style = """make""" +runs = [] +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.041626, 0.067272, 0.122191), + (1, 0.041643, 0.067045, 0.122192), + (2, 0.041655, 0.067055, 0.121649), + (3, 0.041562, 0.066648, 0.121432), + (4, 0.041613, 0.066810, 0.121305), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.041606, 0.066993, 0.121704), + (1, 0.041581, 0.066630, 0.121471), + (2, 0.041602, 0.066922, 0.121765), + (3, 0.041581, 0.066859, 0.121405), + (4, 0.041689, 0.066980, 0.124326), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.041675, 0.067138, 0.121728), + (1, 0.041612, 0.066859, 0.121205), + (2, 0.041580, 0.066483, 0.120964), + (3, 0.041594, 0.066483, 0.120985), + (4, 0.041568, 0.066532, 0.120499), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.186639, 1.937014, 4.437061), + (1, 2.186681, 1.945610, 4.433872), + (2, 2.188041, 1.947231, 4.462319), + (3, 2.188190, 1.943516, 4.470365), + (4, 2.187020, 1.950682, 4.436890), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.195748, 1.947951, 4.443053), + (1, 2.194402, 1.940449, 4.432535), + (2, 2.195423, 1.943498, 4.447053), + (3, 2.196253, 1.950332, 4.448664), + (4, 2.195660, 1.942226, 4.437071), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.136111, 0.313413, 0.499384), + (1, 0.136203, 0.313310, 0.500697), + (2, 0.136639, 0.314917, 0.558877), + (3, 0.136173, 0.313843, 0.501008), + (4, 0.135965, 0.312723, 0.498594), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.819676, 2.374582, 5.801642), + (1, 2.819568, 2.375962, 5.525720), + (2, 2.819725, 2.377977, 5.526612), + (3, 2.819563, 2.374766, 5.525245), + (4, 2.820020, 2.378179, 5.531853), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.979842, 2.393759, 5.773241), + (1, 2.978360, 2.388217, 5.699588), + (2, 2.979615, 2.392749, 5.713015), + (3, 2.978055, 2.388861, 5.697303), + (4, 2.979260, 2.390138, 5.710568), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.525414, 2.495433, 6.457547), + (1, 3.523990, 2.498728, 6.378505), + (2, 3.523183, 2.492712, 6.370535), + (3, 3.523363, 2.494413, 6.376960), + (4, 3.525216, 2.501657, 6.413753), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.143927, 2.857721, 9.407785), + (1, 6.144766, 2.871091, 9.396498), + (2, 6.143893, 2.860256, 9.392155), + (3, 6.146454, 2.866420, 9.447510), + (4, 6.146771, 2.864488, 9.664806), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.975961, 1.044303, 5.199328), + (1, 3.976843, 1.044060, 5.209434), + (2, 3.976622, 1.043787, 5.223585), + (3, 3.975836, 1.043403, 5.198575), + (4, 3.975980, 1.035674, 5.196275), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.707728, 2.859466, 9.115580), + (1, 5.709064, 2.858221, 9.094858), + (2, 5.707868, 2.868881, 9.006296), + (3, 5.706836, 2.856589, 8.998487), + (4, 5.706603, 2.857047, 9.028045), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.855523, 3.041195, 11.679531), + (1, 7.855184, 3.046897, 11.389012), + (2, 7.855530, 3.039149, 11.435265), + (3, 7.856299, 3.037483, 11.382391), + (4, 7.854147, 3.043133, 11.373174), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.926280, 3.168833, 14.542014), + (1, 10.931726, 3.174573, 14.573554), + (2, 10.933809, 3.163183, 14.857843), + (3, 10.927966, 3.164824, 14.543822), + (4, 10.927423, 3.166222, 14.658131), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.755856, 1.342961, 10.311273), + (1, 8.756782, 1.346296, 10.314137), + (2, 8.760167, 1.338744, 10.442545), + (3, 8.759031, 1.346241, 10.333765), + (4, 8.758174, 1.339294, 10.328992), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.159773, 3.431851, 13.319311), + (1, 9.156190, 3.421113, 13.203571), + (2, 9.157752, 3.417859, 13.220865), + (3, 9.156178, 3.413504, 13.204341), + (4, 9.150167, 3.412242, 13.252471), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.062994, 3.497204, 16.184210), + (1, 12.065757, 3.486858, 16.503552), + (2, 12.063830, 3.499430, 16.171503), + (3, 12.065427, 3.500838, 16.268848), + (4, 12.063384, 3.503007, 16.164980), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.836694, 1.570806, 11.863629), + (1, 9.835162, 1.580921, 11.762224), + (2, 9.836416, 1.572111, 11.893337), + (3, 9.835066, 1.571860, 11.751330), + (4, 9.836771, 1.575158, 11.783299), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.262905, 3.437217, 13.459870), + (1, 9.262539, 3.446216, 13.349994), + (2, 9.260750, 3.445077, 13.357125), + (3, 9.263932, 3.448647, 13.366228), + (4, 9.258133, 3.443125, 13.369278), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.163348, 3.513017, 16.559292), + (1, 12.159476, 3.526493, 16.430252), + (2, 12.157784, 3.513763, 16.306505), + (3, 12.159307, 3.530832, 16.495815), + (4, 12.160843, 3.516564, 16.331499), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.945925, 1.592199, 11.971326), + (1, 9.944375, 1.603629, 11.899797), + (2, 9.945863, 1.601172, 11.917642), + (3, 9.946878, 1.601530, 12.113196), + (4, 9.943168, 1.596300, 11.910257), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.042234, 0.072110, 0.068216), + (1, 0.042155, 0.071582, 0.067917), + (2, 0.042120, 0.071280, 0.067838), + (3, 0.042134, 0.071281, 0.067688), + (4, 0.042182, 0.071185, 0.068571), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.042195, 0.072394, 0.067753), + (1, 0.042154, 0.071378, 0.067667), + (2, 0.042126, 0.071503, 0.067645), + (3, 0.042142, 0.071525, 0.067641), + (4, 0.042137, 0.071263, 0.067512), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.042117, 0.071863, 0.067866), + (1, 0.042095, 0.071587, 0.067778), + (2, 0.042123, 0.071824, 0.067718), + (3, 0.042017, 0.071448, 0.067336), + (4, 0.042098, 0.071669, 0.067649), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.312764, 2.250083, 2.579668), + (1, 2.313524, 2.255599, 2.581617), + (2, 2.314576, 2.236269, 2.751308), + (3, 2.313798, 2.247632, 2.576000), + (4, 2.308146, 2.127675, 2.449384), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.319161, 2.248583, 2.579843), + (1, 2.320569, 2.254949, 2.582595), + (2, 2.319615, 2.254838, 2.582868), + (3, 2.317640, 2.234440, 2.566378), + (4, 2.319468, 2.253768, 2.582185), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.138760, 0.342468, 0.274713), + (1, 0.138529, 0.338083, 0.270603), + (2, 0.138419, 0.339997, 0.272035), + (3, 0.138474, 0.339942, 0.271676), + (4, 0.138476, 0.339545, 0.271208), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.927601, 2.621882, 3.040263), + (1, 2.928817, 2.618327, 3.042979), + (2, 2.925842, 2.616328, 3.034669), + (3, 2.933845, 2.642455, 3.077028), + (4, 2.947212, 2.620121, 3.167388), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.095391, 2.632837, 3.130378), + (1, 3.096120, 2.626309, 3.120448), + (2, 3.095708, 2.622912, 3.125333), + (3, 3.096435, 2.628234, 3.124718), + (4, 3.095836, 2.623590, 3.124194), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.674570, 2.716479, 3.444615), + (1, 3.673243, 2.720120, 3.443432), + (2, 3.673080, 2.709820, 3.443546), + (3, 3.673200, 2.709185, 3.426130), + (4, 3.670534, 2.711744, 3.427015), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.389665, 3.072630, 4.983543), + (1, 6.385878, 3.080763, 4.975980), + (2, 6.389956, 3.069652, 4.982242), + (3, 6.388396, 3.078156, 4.977871), + (4, 6.391305, 3.090905, 4.994381), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.079359, 1.112710, 2.692685), + (1, 4.077052, 1.114109, 2.689234), + (2, 4.078218, 1.119202, 2.693919), + (3, 4.077124, 1.108491, 2.690559), + (4, 4.077296, 1.112142, 2.684408), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.043907, 3.082369, 4.874229), + (1, 6.044110, 3.072240, 4.860724), + (2, 6.049991, 3.085666, 4.927778), + (3, 6.050681, 3.087747, 4.866959), + (4, 6.046383, 3.081174, 4.865700), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.277376, 3.241075, 6.041627), + (1, 8.274767, 3.246052, 6.032635), + (2, 8.273632, 3.240323, 6.034355), + (3, 8.283322, 3.235898, 6.055232), + (4, 8.279572, 3.237813, 6.040545), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 11.267468, 3.368598, 7.582008), + (1, 11.264991, 3.356817, 7.573902), + (2, 11.258736, 3.371794, 7.616322), + (3, 11.272174, 3.375177, 7.750662), + (4, 11.265369, 3.355828, 7.569228), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.948892, 1.408841, 5.346675), + (1, 8.947425, 1.388794, 5.341078), + (2, 8.959290, 1.397633, 5.703015), + (3, 8.948915, 1.391639, 5.351654), + (4, 8.946706, 1.404458, 5.345449), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.576401, 3.659016, 6.972346), + (1, 9.577255, 3.641158, 6.953448), + (2, 9.572443, 3.647954, 7.051130), + (3, 9.571615, 3.646782, 6.956555), + (4, 9.572963, 3.653229, 6.957711), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.425333, 3.720605, 8.468826), + (1, 12.420657, 3.729020, 8.648778), + (2, 12.424221, 3.709511, 8.467562), + (3, 12.425595, 3.726297, 8.449276), + (4, 12.422584, 3.718660, 8.713483), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.042865, 1.647364, 6.147098), + (1, 10.038624, 1.646965, 6.107788), + (2, 10.036193, 1.643319, 6.100944), + (3, 10.037764, 1.637319, 6.121365), + (4, 10.044532, 1.648919, 6.354301), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.686781, 3.657538, 7.098294), + (1, 9.679355, 3.674326, 7.109849), + (2, 9.678938, 3.659032, 7.093127), + (3, 9.683371, 3.655282, 7.396885), + (4, 9.677578, 3.661111, 7.086666), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.511083, 3.753316, 8.574587), + (1, 12.517391, 3.745202, 8.579089), + (2, 12.515167, 3.747517, 8.906780), + (3, 12.510503, 3.744116, 8.561728), + (4, 12.516263, 3.740046, 8.578455), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.139224, 1.659640, 6.213839), + (1, 10.144829, 1.668260, 6.423697), + (2, 10.144182, 1.670476, 6.213931), + (3, 10.144068, 1.658834, 6.211693), + (4, 10.138223, 1.667654, 6.222308), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.044057, 0.093485, 0.045956), + (1, 0.044004, 0.092769, 0.045605), + (2, 0.043901, 0.092551, 0.045247), + (3, 0.043818, 0.091785, 0.045295), + (4, 0.043924, 0.091899, 0.045216), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.043938, 0.092531, 0.045317), + (1, 0.043985, 0.092990, 0.045413), + (2, 0.043847, 0.091943, 0.044986), + (3, 0.043889, 0.091626, 0.045207), + (4, 0.043936, 0.091446, 0.045068), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.043935, 0.092137, 0.045550), + (1, 0.044036, 0.092432, 0.045443), + (2, 0.043907, 0.092597, 0.045207), + (3, 0.043906, 0.092773, 0.045220), + (4, 0.043932, 0.092273, 0.045162), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.510229, 2.524326, 1.447378), + (1, 2.511153, 2.582682, 1.463158), + (2, 2.509131, 2.551808, 1.443700), + (3, 2.530506, 2.606601, 1.631594), + (4, 2.525546, 2.556516, 1.460912), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.519330, 2.572381, 1.455862), + (1, 2.519059, 2.662137, 1.521106), + (2, 2.506144, 2.556738, 1.456221), + (3, 2.511366, 2.577441, 1.459606), + (4, 2.526218, 2.553722, 1.574747), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.147023, 0.430956, 0.176525), + (1, 0.147430, 0.429136, 0.175834), + (2, 0.146893, 0.428812, 0.175145), + (3, 0.147174, 0.429968, 0.175169), + (4, 0.147492, 0.431385, 0.174682), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.167799, 3.158706, 1.805685), + (1, 3.167239, 3.135936, 1.802571), + (2, 3.157960, 3.130196, 1.803330), + (3, 3.146711, 3.153077, 1.813078), + (4, 3.149927, 3.152081, 1.801526), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.342516, 3.109718, 1.823208), + (1, 3.353297, 3.103074, 1.819566), + (2, 3.333260, 3.149734, 1.829796), + (3, 3.338234, 3.103725, 1.822010), + (4, 3.336550, 3.100652, 1.832110), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.970523, 3.209725, 1.991844), + (1, 3.937210, 3.198855, 1.976041), + (2, 3.955488, 3.206959, 1.989544), + (3, 3.946574, 3.198149, 1.980601), + (4, 3.948581, 3.205880, 1.983994), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.732216, 3.619584, 2.782476), + (1, 6.745420, 3.616948, 2.790903), + (2, 6.750526, 3.594650, 2.790881), + (3, 6.738845, 3.612443, 2.790569), + (4, 6.747457, 3.617553, 2.788687), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.194680, 1.292044, 1.444048), + (1, 4.190321, 1.300927, 1.441506), + (2, 4.198820, 1.293219, 1.444174), + (3, 4.209445, 1.289162, 1.447259), + (4, 4.187489, 1.282234, 1.440277), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.517757, 3.615464, 2.854763), + (1, 6.519460, 3.617775, 2.756124), + (2, 6.498704, 3.602169, 2.756365), + (3, 6.509982, 3.621462, 2.745702), + (4, 6.489827, 3.608797, 2.747793), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.825143, 3.794072, 3.362608), + (1, 8.824013, 3.765690, 3.355471), + (2, 8.813541, 3.783641, 3.357039), + (3, 8.786371, 3.786659, 3.345793), + (4, 8.772730, 3.771638, 3.454307), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 11.738484, 3.836784, 4.120546), + (1, 11.739288, 3.848616, 4.125808), + (2, 11.738261, 3.837534, 4.136642), + (3, 11.735003, 3.844597, 4.120444), + (4, 11.761638, 3.862457, 4.145417), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.155087, 1.561075, 2.833868), + (1, 9.154934, 1.538791, 2.833134), + (2, 9.183035, 1.553281, 2.902132), + (3, 9.151130, 1.546822, 2.879777), + (4, 9.151844, 1.542450, 2.825560), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.166988, 4.242308, 3.894601), + (1, 10.218686, 4.265537, 3.896997), + (2, 10.208211, 4.256174, 3.905990), + (3, 10.182169, 4.254989, 4.094963), + (4, 10.165336, 4.239672, 3.873703), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.960833, 4.319633, 4.628599), + (1, 12.997509, 4.323695, 4.942418), + (2, 12.940625, 4.326994, 4.624419), + (3, 12.947641, 4.300034, 4.597456), + (4, 12.942562, 4.308688, 4.619190), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.300396, 1.823967, 3.250894), + (1, 10.305252, 1.822285, 3.244746), + (2, 10.307011, 1.845773, 3.260861), + (3, 10.319953, 1.831435, 3.500671), + (4, 10.320805, 1.834782, 3.246639), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.297812, 4.264184, 4.013061), + (1, 10.315407, 4.293257, 4.021099), + (2, 10.257966, 4.265659, 4.006248), + (3, 10.307857, 4.273741, 4.044614), + (4, 10.273398, 4.260286, 4.216469), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 13.040233, 4.302015, 4.719135), + (1, 13.046999, 4.316412, 5.773880), + (2, 13.081143, 4.324329, 4.745519), + (3, 13.025611, 4.311093, 4.738916), + (4, 13.063041, 4.336277, 4.771969), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.419745, 1.855515, 3.343652), + (1, 10.447391, 1.858839, 3.374031), + (2, 10.428436, 1.866242, 3.381289), + (3, 10.428931, 1.879273, 3.582034), + (4, 10.410715, 1.836761, 3.371333), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.044629, 0.104236, 0.047124), + (1, 0.044357, 0.101072, 0.046054), + (2, 0.044261, 0.099350, 0.045512), + (3, 0.044279, 0.099032, 0.045401), + (4, 0.044291, 0.098233, 0.045262), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.044388, 0.101047, 0.045972), + (1, 0.044267, 0.100816, 0.045836), + (2, 0.044319, 0.100931, 0.045829), + (3, 0.044242, 0.102208, 0.046286), + (4, 0.044197, 0.101894, 0.046310), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.044199, 0.099476, 0.045336), + (1, 0.044064, 0.099032, 0.045431), + (2, 0.044081, 0.097169, 0.044910), + (3, 0.044055, 0.099088, 0.044957), + (4, 0.044322, 0.099454, 0.045563), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.768949, 3.566605, 1.008622), + (1, 2.753933, 3.515221, 1.011067), + (2, 2.790210, 3.581213, 1.006835), + (3, 2.742393, 3.612996, 1.065939), + (4, 2.783563, 3.457715, 0.977203), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.803126, 3.542212, 1.140376), + (1, 2.794538, 3.523127, 1.000266), + (2, 2.821545, 3.533185, 0.996633), + (3, 2.754702, 3.604113, 1.127400), + (4, 2.773800, 3.590831, 1.023085), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.162694, 0.629660, 0.131824), + (1, 0.162231, 0.630903, 0.131937), + (2, 0.162713, 0.636833, 0.133010), + (3, 0.163527, 0.627696, 0.130973), + (4, 0.162591, 0.628073, 0.128269), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.398995, 4.386961, 1.222372), + (1, 3.433913, 4.302404, 1.191109), + (2, 3.403972, 4.249079, 1.179600), + (3, 3.430418, 4.241026, 1.173406), + (4, 3.405708, 4.295249, 1.192367), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.589608, 4.234909, 1.206952), + (1, 3.595580, 4.250801, 1.195809), + (2, 3.598782, 4.186360, 1.189533), + (3, 3.576135, 4.210771, 1.192198), + (4, 3.596508, 4.272774, 1.195682), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.188318, 4.323380, 1.272841), + (1, 4.204432, 4.301331, 1.276169), + (2, 4.232123, 4.359346, 1.308850), + (3, 4.254709, 4.295013, 1.277959), + (4, 4.214074, 4.293825, 1.275462), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.056727, 4.672983, 1.677022), + (1, 7.064183, 4.697158, 1.685536), + (2, 7.013256, 4.653804, 1.669026), + (3, 7.077917, 4.720479, 1.692836), + (4, 7.028864, 4.654591, 1.674130), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.250811, 1.598520, 0.822128), + (1, 4.255341, 1.616523, 0.819562), + (2, 4.282720, 1.628032, 0.823764), + (3, 4.296236, 1.628292, 0.828753), + (4, 4.263254, 1.614337, 0.822968), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.828563, 4.698920, 1.665128), + (1, 6.887088, 4.678607, 1.660858), + (2, 6.867776, 4.703203, 1.657673), + (3, 6.841523, 4.645255, 1.637169), + (4, 6.904172, 4.682556, 1.690968), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.164624, 4.728257, 2.026243), + (1, 9.258789, 4.757386, 1.996115), + (2, 9.215979, 4.740186, 1.995604), + (3, 9.241390, 4.750833, 2.007054), + (4, 9.161773, 4.742841, 1.987729), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 12.113609, 4.726450, 2.385739), + (1, 12.121322, 4.784194, 2.416434), + (2, 12.095256, 4.762198, 2.394130), + (3, 12.125848, 4.743744, 2.386863), + (4, 12.117883, 4.759723, 2.384746), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.196017, 1.794764, 1.538604), + (1, 9.293693, 1.830825, 1.559088), + (2, 9.210498, 1.813935, 1.538989), + (3, 9.207860, 1.799598, 1.536893), + (4, 9.202729, 1.797648, 1.530905), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.574802, 5.298921, 2.539728), + (1, 10.657320, 5.376201, 2.329437), + (2, 10.650595, 5.345177, 2.311878), + (3, 10.611628, 5.366770, 2.319432), + (4, 10.599574, 5.358888, 2.479782), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 13.432160, 5.417611, 2.691172), + (1, 13.443341, 5.377409, 2.678012), + (2, 13.343336, 5.338212, 2.812471), + (3, 13.333183, 5.333529, 2.687594), + (4, 13.384371, 5.414969, 2.837339), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.381974, 2.152140, 1.786428), + (1, 10.378996, 2.143003, 1.774503), + (2, 10.453921, 2.187323, 1.794154), + (3, 10.398109, 2.212740, 2.013101), + (4, 10.435604, 2.197729, 1.779200), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.786656, 5.383657, 2.435159), + (1, 10.689933, 5.362047, 2.435158), + (2, 10.761754, 5.406655, 2.462640), + (3, 10.760319, 5.401706, 2.571526), + (4, 10.666932, 5.361587, 2.444485), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 13.519919, 5.421898, 2.821722), + (1, 13.447262, 5.364940, 2.926024), + (2, 13.464838, 5.369476, 2.802961), + (3, 13.514555, 5.440290, 2.831226), + (4, 13.443975, 5.410124, 2.947296), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.498388, 2.171118, 2.153460), + (1, 10.524313, 2.175829, 1.899075), + (2, 10.502688, 2.185754, 1.894639), + (3, 10.498667, 2.201617, 1.888811), + (4, 10.488970, 2.166527, 1.885400), +]} +)) diff --git a/www/timing-data/2009-03-02/sketch.pdf b/www/timing-data/2009-03-02/sketch.pdf Binary files differnew file mode 100644 index 000000000000..3b98a3d054a3 --- /dev/null +++ b/www/timing-data/2009-03-02/sketch.pdf diff --git a/www/timing-data/2009-03-02/sketch.png b/www/timing-data/2009-03-02/sketch.png Binary files differnew file mode 100644 index 000000000000..3d1bc142beea --- /dev/null +++ b/www/timing-data/2009-03-02/sketch.png diff --git a/www/timing-data/2009-03-02/sketch.txt b/www/timing-data/2009-03-02/sketch.txt new file mode 100644 index 000000000000..d2270e471a2b --- /dev/null +++ b/www/timing-data/2009-03-02/sketch.txt @@ -0,0 +1,2368 @@ +ccc_path = """/Volumes/Data/ddunbar/llvm.install/bin/ccc""" +ccc_clang = """/Volumes/Data/ddunbar/zorg/xcb_scripts/cc/xcc.fb""" +ccc_gcc = """/Volumes/Data/ddunbar/zorg/xcb_scripts/cc/xcc.fb -ccc-no-clang""" +gcc = """/usr/bin/gcc-4.2""" +ccc_clang_info = """ +ccc version 1.0 (https://ddunbar@llvm.org/svn/llvm-project/cfe/trunk) + "/Volumes/Data/ddunbar/llvm.install/bin/clang" "-S" "-disable-free" "--relocation-model=pic" "--disable-fp-elim" "--nozero-initialized-in-bss" "--unwind-tables=1" "--mcpu=core2" "--fmath-errno=0" "-mmacosx-version-min=10.6.0" "-arch" "x86_64" "-o" "/tmp/tmpugUQni.s" "-x" "c" "/dev/null" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/tmp/tmpH8AOZI.o" "/tmp/tmpugUQni.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.5.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/tmp/tmpH8AOZI.o" "-lgcc_s.10.5" "-lgcc" "-lSystem" +""" +ccc_gcc_info = """ +ccc version 1.0 (https://ddunbar@llvm.org/svn/llvm-project/cfe/trunk) + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1" "-quiet" "-imultilib" "x86_64" "-D__DYNAMIC__" "/dev/null" "-fPIC" "-quiet" "-dumpbase" "null" "-mmacosx-version-min=10.6.0" "-m64" "-mtune=core2" "-auxbase" "null" "-o" "/tmp/tmpTiOyJZ.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/tmp/tmpTi0lCN.o" "/tmp/tmpTiOyJZ.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.5.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/tmp/tmpTi0lCN.o" "-lgcc_s.10.5" "-lgcc" "-lSystem" +""" +gcc_info = """ +Using built-in specs. +Target: i686-apple-darwin10 +Configured with: /var/tmp/gcc/gcc-5630~5/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 +Thread model: posix +gcc version 4.2.1 (Apple Inc. build 5630) + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1" "-quiet" "-imultilib" "x86_64" "-D__DYNAMIC__" "/dev/null" "-fPIC" "-quiet" "-dumpbase" "null" "-mmacosx-version-min=10.6.0" "-m64" "-mtune=core2" "-auxbase" "null" "-o" "/var/tmp//ccuvh82w.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "x86_64" "-force_cpusubtype_ALL" "-o" "/var/tmp//ccb3T8Fr.o" "/var/tmp//ccuvh82w.s" + "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.6.0" "-weak_reference_mismatches" "non-weak" "-o" "a.out" "-lcrt1.10.5.o" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" "-L/usr/lib/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1" "-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.." "/var/tmp//ccb3T8Fr.o" "-lgcc_s.10.5" "-lgcc" "-lSystem" +""" +style = """xcb""" +runs = [] +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.405425, 0.222438, 0.698198), + (1, 0.403472, 0.218381, 0.695599), + (2, 0.403354, 0.217344, 0.695414), + (3, 0.403856, 0.218787, 0.703370), + (4, 0.404353, 0.221186, 0.695619), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.393260, 0.212802, 0.656048), + (1, 0.393075, 0.211285, 0.654796), + (2, 0.394300, 0.213498, 0.695105), + (3, 0.393851, 0.213657, 0.695272), + (4, 0.395458, 0.213304, 0.695908), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.403360, 0.216918, 0.704434), + (1, 0.403818, 0.219731, 0.696158), + (2, 0.402206, 0.218530, 0.697751), + (3, 0.403133, 0.218441, 0.695443), + (4, 0.403311, 0.218882, 0.695080), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.395200, 0.213912, 0.696117), + (1, 0.395331, 0.213822, 0.695887), + (2, 0.395293, 0.212402, 0.697557), + (3, 0.395446, 0.213684, 0.695732), + (4, 0.394667, 0.213321, 0.656472), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.403665, 0.217763, 0.694820), + (1, 0.403482, 0.217606, 0.695959), + (2, 0.404965, 0.219817, 0.819840), + (3, 0.404437, 0.217515, 0.695675), + (4, 0.402886, 0.216456, 0.703275), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.393583, 0.212237, 0.655196), + (1, 0.394063, 0.212744, 0.695220), + (2, 0.393998, 0.212889, 0.695448), + (3, 0.394364, 0.213507, 0.695090), + (4, 0.395886, 0.214974, 0.696254), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.129656, 0.771133, 2.056006), + (1, 1.129855, 0.772644, 2.055649), + (2, 1.130559, 0.768629, 2.055976), + (3, 1.130291, 0.769030, 2.059280), + (4, 1.130861, 0.771000, 2.055720), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.086760, 0.741197, 1.976344), + (1, 1.087919, 0.739640, 1.975560), + (2, 1.087589, 0.739815, 2.015386), + (3, 1.087730, 0.738847, 1.976232), + (4, 1.088193, 0.739529, 2.016033), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.138506, 0.768675, 2.064631), + (1, 1.138085, 0.770549, 2.097210), + (2, 1.138889, 0.771511, 2.096435), + (3, 1.138765, 0.770142, 2.064291), + (4, 1.138779, 0.768611, 2.095530), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.096902, 0.741661, 2.015757), + (1, 1.097165, 0.740449, 2.015432), + (2, 1.096494, 0.740608, 2.016453), + (3, 1.096410, 0.739960, 1.975427), + (4, 1.096579, 0.743114, 2.016444), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.444144, 0.284384, 0.814217), + (1, 0.445853, 0.286540, 0.816314), + (2, 0.446338, 0.287002, 0.814997), + (3, 0.445384, 0.284369, 0.823090), + (4, 0.444071, 0.284531, 0.815854), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.435113, 0.278547, 0.817260), + (1, 0.433108, 0.275659, 0.775024), + (2, 0.434473, 0.276611, 0.784047), + (3, 0.434224, 0.275786, 0.775677), + (4, 0.433396, 0.276622, 0.775240), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_pch", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.328464, 0.973747, 2.577016), + (1, 1.324318, 0.855290, 2.424347), + (2, 1.323693, 0.856675, 2.416951), + (3, 1.323004, 0.857324, 2.417132), + (4, 1.323843, 0.856000, 2.415804), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_pch", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.748207, 1.141266, 4.576484), + (1, 2.744640, 1.137930, 4.416237), + (2, 2.745616, 1.136230, 4.495978), + (3, 2.746108, 1.139037, 4.496219), + (4, 2.746059, 1.137958, 4.416920), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_pch", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.051374, 0.650962, 3.144706), + (1, 2.050914, 0.648174, 3.215974), + (2, 2.050343, 0.649010, 3.176205), + (3, 2.051910, 0.648745, 3.176613), + (4, 2.051386, 0.648306, 3.217578), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.835919, 1.148648, 3.257076), + (1, 1.835307, 1.146862, 3.264809), + (2, 1.834812, 1.147964, 3.257005), + (3, 1.835016, 1.144979, 3.256861), + (4, 1.836571, 1.148836, 3.256094), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.288802, 1.569778, 4.095720), + (1, 2.288176, 1.573356, 4.176816), + (2, 2.287878, 1.573807, 4.096939), + (3, 2.288041, 1.571541, 4.097750), + (4, 2.288190, 1.569398, 4.097146), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.220738, 1.167367, 3.657062), + (1, 2.219840, 1.170754, 3.657627), + (2, 2.220897, 1.172925, 3.657043), + (3, 2.221644, 1.167701, 3.656328), + (4, 2.223199, 1.171444, 3.657134), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.717655, 1.602645, 4.536037), + (1, 2.716324, 1.603188, 4.536210), + (2, 2.718783, 1.605672, 4.576816), + (3, 2.718146, 1.602360, 4.536958), + (4, 2.718544, 1.606428, 4.577367), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.453390, 1.390902, 5.176330), + (1, 3.453408, 1.394547, 5.176325), + (2, 3.453141, 1.392043, 5.176946), + (3, 3.457040, 1.390031, 5.257617), + (4, 3.453262, 1.395063, 5.138977), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.077200, 1.866592, 6.223139), + (1, 4.076044, 1.873001, 6.214158), + (2, 4.079719, 1.869271, 6.235665), + (3, 4.078223, 1.866927, 6.217922), + (4, 4.076013, 1.867985, 6.204512), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.397072, 2.178746, 6.177185), + (1, 3.397804, 2.167804, 6.177276), + (2, 3.398193, 2.168075, 6.250655), + (3, 3.397029, 2.165686, 6.184421), + (4, 3.397568, 2.178013, 6.179279), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.486708, 2.445768, 10.254543), + (1, 7.491379, 2.458432, 10.337225), + (2, 7.486408, 2.433698, 10.257034), + (3, 7.487016, 2.456457, 10.270939), + (4, 7.487323, 2.439337, 10.258257), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.670173, 1.622433, 4.897808), + (1, 2.666760, 1.609756, 4.776822), + (2, 2.667040, 1.610998, 4.856885), + (3, 2.671149, 1.594163, 4.816301), + (4, 2.669699, 1.607578, 4.866539), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 6.803057, 1.908280, 8.963127), + (1, 6.805076, 1.939662, 8.969825), + (2, 6.802844, 1.921782, 8.970996), + (3, 6.805031, 1.913186, 8.967523), + (4, 6.805252, 1.919294, 8.959788), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.627373, 1.415978, 5.377556), + (1, 3.625026, 1.415306, 5.337455), + (2, 3.624699, 1.411942, 5.377834), + (3, 3.627468, 1.422229, 5.376680), + (4, 3.625721, 1.421354, 5.377509), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.249780, 1.891114, 6.438770), + (1, 4.248041, 1.893114, 6.416578), + (2, 4.248877, 1.890255, 6.422580), + (3, 4.248459, 1.891867, 6.425267), + (4, 4.251042, 1.896335, 6.438381), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.813308, 1.436255, 5.577048), + (1, 3.812973, 1.436260, 5.577759), + (2, 3.814667, 1.436329, 5.576892), + (3, 3.814164, 1.439684, 5.577863), + (4, 3.816874, 1.432057, 5.625098), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.438589, 1.914821, 6.634438), + (1, 4.436802, 1.913064, 6.628424), + (2, 4.438023, 1.918364, 6.632666), + (3, 4.438494, 1.922851, 6.645062), + (4, 4.439727, 1.920331, 6.685016), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.975290, 2.296164, 6.913135), + (1, 3.977464, 2.309821, 6.916908), + (2, 3.976537, 2.309954, 6.848258), + (3, 3.977155, 2.305060, 7.357985), + (4, 3.974276, 2.289059, 6.862249), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.928091, 2.684142, 11.969055), + (1, 8.929295, 2.683263, 11.988445), + (2, 8.929175, 2.678390, 11.956474), + (3, 8.926613, 2.665122, 11.965071), + (4, 8.926613, 2.680630, 11.964381), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.249871, 1.745454, 5.497846), + (1, 3.249460, 1.737577, 5.538376), + (2, 3.253966, 1.727548, 5.616847), + (3, 3.251405, 1.725884, 5.496698), + (4, 3.250563, 1.721386, 5.536694), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.249350, 2.147359, 10.672894), + (1, 8.252421, 2.146136, 10.687439), + (2, 8.252766, 2.142015, 10.683719), + (3, 8.279512, 2.152184, 11.070527), + (4, 8.250015, 2.161431, 10.703253), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.917675, 1.531758, 5.777717), + (1, 3.917453, 1.532169, 5.777704), + (2, 3.920630, 1.538518, 5.857605), + (3, 3.917549, 1.535710, 5.776730), + (4, 3.917673, 1.529128, 5.776450), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.536313, 2.003164, 6.831313), + (1, 4.537451, 2.014513, 6.846562), + (2, 4.540679, 2.016759, 6.865437), + (3, 4.538081, 2.008899, 6.845811), + (4, 4.538438, 2.009600, 6.836498), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.123486, 2.383752, 7.115483), + (1, 4.127545, 2.372840, 7.151675), + (2, 4.125900, 2.381678, 7.138942), + (3, 4.123891, 2.369579, 7.127788), + (4, 4.125164, 2.370661, 7.117664), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.076157, 2.771491, 12.341310), + (1, 9.074681, 2.764608, 12.205139), + (2, 9.076881, 2.766755, 12.228073), + (3, 9.073910, 2.771638, 12.204252), + (4, 9.076773, 2.777037, 12.235749), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.388061, 1.779190, 5.737793), + (1, 3.387862, 1.790856, 5.697850), + (2, 3.387800, 1.789477, 5.780238), + (3, 3.387509, 1.788586, 5.743236), + (4, 3.388152, 1.784450, 6.178092), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.376118, 2.205600, 10.877337), + (1, 8.372512, 2.219382, 10.868894), + (2, 8.375968, 2.225479, 10.996566), + (3, 8.379525, 2.215791, 10.910221), + (4, 8.375433, 2.210534, 10.890280), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.948571, 1.553366, 5.857777), + (1, 3.946872, 1.549844, 5.817926), + (2, 3.948643, 1.545410, 5.817794), + (3, 3.947022, 1.548687, 5.816790), + (4, 3.951557, 1.560511, 5.937022), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.568105, 2.037309, 6.888153), + (1, 4.567872, 2.037818, 6.893678), + (2, 4.569582, 2.037795, 6.894469), + (3, 4.571991, 2.042292, 6.920444), + (4, 4.568506, 2.036233, 6.895221), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.153075, 2.389230, 7.183219), + (1, 4.150947, 2.401330, 7.175264), + (2, 4.150807, 2.390926, 7.237253), + (3, 4.152335, 2.393576, 7.265347), + (4, 4.154240, 2.408743, 7.201345), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.104507, 2.799196, 12.284425), + (1, 9.102214, 2.804734, 12.263326), + (2, 9.102799, 2.797758, 12.263314), + (3, 9.102472, 2.797718, 12.283471), + (4, 9.101655, 2.799231, 12.257987), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"1", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.412096, 1.803347, 5.817859), + (1, 3.412334, 1.792039, 5.897059), + (2, 3.413608, 1.789291, 5.817810), + (3, 3.413812, 1.785669, 5.827047), + (4, 3.413291, 1.782601, 5.738213), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"1", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.402455, 2.228676, 10.943842), + (1, 8.396442, 2.225608, 10.902714), + (2, 8.401735, 2.220712, 10.918381), + (3, 8.400619, 2.226284, 10.926158), + (4, 8.398896, 2.221540, 10.901292), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.421126, 0.234655, 0.534969), + (1, 0.418396, 0.232067, 0.536121), + (2, 0.419512, 0.236062, 0.536636), + (3, 0.420755, 0.236390, 0.535508), + (4, 0.421343, 0.234614, 0.537189), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.411128, 0.230994, 0.499097), + (1, 0.412593, 0.231427, 0.536123), + (2, 0.407668, 0.229908, 0.495794), + (3, 0.410890, 0.229289, 0.535618), + (4, 0.412812, 0.229662, 0.535043), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.421792, 0.234957, 0.536236), + (1, 0.421073, 0.235668, 0.538946), + (2, 0.418909, 0.236416, 0.535464), + (3, 0.420363, 0.235692, 0.535257), + (4, 0.419598, 0.234400, 0.534633), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.409040, 0.230090, 0.534802), + (1, 0.411753, 0.232552, 0.537293), + (2, 0.415536, 0.231495, 0.536877), + (3, 0.410714, 0.227612, 0.535090), + (4, 0.409547, 0.230152, 0.497187), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.421181, 0.235033, 0.535407), + (1, 0.420747, 0.236700, 0.535928), + (2, 0.418786, 0.235032, 0.534312), + (3, 0.420015, 0.233378, 0.535452), + (4, 0.421154, 0.235218, 0.535269), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.411356, 0.231786, 0.537593), + (1, 0.412772, 0.230723, 0.537039), + (2, 0.410034, 0.228264, 0.494194), + (3, 0.412693, 0.230932, 0.536339), + (4, 0.411372, 0.228262, 0.497113), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.185856, 0.840347, 1.416460), + (1, 1.186435, 0.854091, 1.415674), + (2, 1.183343, 0.844916, 1.415643), + (3, 1.181560, 0.857296, 1.415242), + (4, 1.187699, 0.853918, 1.415647), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.138810, 0.818035, 1.335935), + (1, 1.141064, 0.827249, 1.337062), + (2, 1.138410, 0.811996, 1.335346), + (3, 1.142644, 0.820159, 1.337486), + (4, 1.138460, 0.815423, 1.335647), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.194684, 0.841290, 1.415885), + (1, 1.195720, 0.844873, 1.416552), + (2, 1.194440, 0.850513, 1.415595), + (3, 1.191931, 0.850890, 1.414722), + (4, 1.192481, 0.853052, 1.416102), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.148891, 0.817183, 1.335717), + (1, 1.149617, 0.823096, 1.336040), + (2, 1.149791, 0.805679, 1.337424), + (3, 1.150876, 0.814239, 1.336748), + (4, 1.153157, 0.809177, 1.336246), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.463514, 0.310817, 0.614767), + (1, 0.464612, 0.310198, 0.618455), + (2, 0.463460, 0.308990, 0.616282), + (3, 0.463413, 0.311280, 0.617026), + (4, 0.467009, 0.310382, 0.857752), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.453517, 0.301571, 0.575912), + (1, 0.452100, 0.300588, 0.576359), + (2, 0.448456, 0.297936, 0.575121), + (3, 0.451645, 0.298907, 0.577323), + (4, 0.450964, 0.301582, 0.574520), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_pch", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.381350, 0.944251, 1.776275), + (1, 1.380373, 0.930919, 1.775617), + (2, 1.379352, 0.937129, 1.736723), + (3, 1.380977, 0.944068, 1.737369), + (4, 1.381796, 0.938486, 1.776093), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_pch", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.805408, 1.220930, 3.697693), + (1, 2.804236, 1.204836, 3.657105), + (2, 2.803037, 1.210121, 3.696933), + (3, 2.807280, 1.219531, 3.779261), + (4, 2.802821, 1.208316, 3.736487), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_pch", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.076567, 0.672051, 2.896169), + (1, 2.070465, 0.668786, 2.895749), + (2, 2.077549, 0.673245, 2.896393), + (3, 2.075634, 0.671026, 2.976119), + (4, 2.074463, 0.671262, 2.975937), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.909827, 1.258607, 2.215806), + (1, 1.910547, 1.261354, 2.255924), + (2, 1.907436, 1.262299, 2.216659), + (3, 1.908875, 1.254564, 2.256077), + (4, 1.906568, 1.264632, 2.215638), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.384586, 1.708563, 2.495874), + (1, 2.386876, 1.705256, 2.456596), + (2, 2.383560, 1.707485, 2.456364), + (3, 2.388580, 1.714631, 2.496008), + (4, 2.383943, 1.709754, 2.455848), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.296978, 1.274825, 2.415106), + (1, 2.303460, 1.279010, 2.456151), + (2, 2.300862, 1.277879, 2.536542), + (3, 2.297727, 1.277312, 2.416137), + (4, 2.299045, 1.281014, 2.457338), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.823962, 1.752509, 2.738192), + (1, 2.825617, 1.738546, 2.736478), + (2, 2.825608, 1.744360, 2.735298), + (3, 2.822577, 1.756988, 2.735053), + (4, 2.828362, 1.751245, 2.737930), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.586428, 1.498329, 3.258357), + (1, 3.581922, 1.510793, 3.258049), + (2, 3.584574, 1.523963, 3.256754), + (3, 3.585929, 1.525886, 3.296728), + (4, 3.583339, 1.509529, 3.255773), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.249019, 2.030066, 3.658088), + (1, 4.244427, 1.997319, 3.618002), + (2, 4.247446, 2.034549, 3.656419), + (3, 4.250734, 1.984081, 3.616241), + (4, 4.247304, 2.029095, 3.656926), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.533690, 2.339185, 4.777496), + (1, 3.542505, 2.348833, 4.697715), + (2, 3.544757, 2.349717, 4.658518), + (3, 3.542116, 2.342489, 4.697843), + (4, 3.532830, 2.358614, 4.777230), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.911000, 2.638922, 5.859227), + (1, 7.898019, 2.606325, 5.856922), + (2, 7.905536, 2.635740, 5.857377), + (3, 7.904312, 2.612189, 5.858381), + (4, 7.905098, 2.630487, 5.896411), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.751623, 1.803556, 3.817713), + (1, 2.747727, 1.810833, 3.816503), + (2, 2.748505, 1.805853, 3.937231), + (3, 2.751082, 1.785040, 3.856857), + (4, 2.712181, 1.628194, 4.458047), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.130218, 2.046734, 5.375091), + (1, 7.178329, 2.050762, 5.101087), + (2, 7.169060, 2.043104, 5.099096), + (3, 7.173283, 2.044239, 5.098124), + (4, 7.175252, 2.051192, 5.098199), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.789165, 1.527458, 3.336326), + (1, 3.777274, 1.538660, 3.375557), + (2, 3.784557, 1.519313, 3.376128), + (3, 3.787602, 1.522217, 3.335926), + (4, 3.787288, 1.526795, 3.337409), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.447726, 2.033431, 3.740433), + (1, 4.442726, 2.033703, 3.738224), + (2, 4.442734, 2.032771, 3.738289), + (3, 4.444849, 2.031724, 3.737305), + (4, 4.447839, 2.041379, 3.737854), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.976113, 1.536616, 3.457503), + (1, 3.982885, 1.550541, 3.459236), + (2, 3.980745, 1.542500, 3.418313), + (3, 3.983197, 1.534735, 3.416768), + (4, 3.984319, 1.549369, 3.456912), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.646497, 2.058736, 3.857968), + (1, 4.645902, 2.056331, 3.816948), + (2, 4.644425, 2.042617, 3.817483), + (3, 4.650170, 2.053945, 3.816996), + (4, 4.652057, 2.054087, 3.817612), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.227559, 2.531595, 5.137862), + (1, 4.227397, 2.523166, 5.177460), + (2, 4.221999, 2.507393, 5.217410), + (3, 4.222567, 2.526250, 5.217654), + (4, 4.227901, 2.540431, 5.098870), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.519619, 2.893774, 6.844787), + (1, 9.519173, 2.909991, 6.855886), + (2, 9.510792, 2.877242, 6.838998), + (3, 9.510783, 2.891383, 6.824785), + (4, 9.519126, 2.885516, 6.833841), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.451087, 1.898383, 4.336398), + (1, 3.449852, 1.892527, 4.337959), + (2, 3.454374, 1.893303, 4.658079), + (3, 3.455111, 1.882656, 4.378217), + (4, 3.450626, 1.869007, 4.337978), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.787702, 2.320593, 6.058270), + (1, 8.789275, 2.306274, 6.057923), + (2, 8.784843, 2.316817, 6.057423), + (3, 8.783675, 2.311861, 6.060013), + (4, 8.781261, 2.313746, 6.057873), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.083893, 1.630474, 3.536216), + (1, 4.087591, 1.635289, 3.497630), + (2, 4.085695, 1.632900, 3.538942), + (3, 4.091750, 1.621504, 3.537607), + (4, 4.083429, 1.624206, 3.538044), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.741063, 2.114975, 3.939181), + (1, 4.742471, 2.134199, 3.937271), + (2, 4.751861, 2.134679, 3.937887), + (3, 4.748915, 2.139128, 3.937938), + (4, 4.744369, 2.118603, 4.016509), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.373580, 2.603582, 5.297729), + (1, 4.375890, 2.576323, 5.258865), + (2, 4.371432, 2.583884, 5.297363), + (3, 4.374495, 2.589453, 5.257298), + (4, 4.369606, 2.606228, 5.257661), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.661360, 2.976421, 7.177350), + (1, 9.668097, 2.986125, 6.963308), + (2, 9.667800, 2.983053, 6.959276), + (3, 9.663941, 2.979323, 6.939242), + (4, 9.662299, 2.970007, 6.988974), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.579784, 1.946620, 4.378033), + (1, 3.579704, 1.964725, 4.377985), + (2, 3.584964, 1.951670, 4.376971), + (3, 3.576692, 1.920906, 4.418008), + (4, 3.590239, 1.966765, 4.377119), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.908318, 2.358443, 6.137820), + (1, 8.900847, 2.342913, 6.137705), + (2, 8.902168, 2.355932, 6.179136), + (3, 8.903369, 2.363490, 6.097751), + (4, 8.896827, 2.364196, 6.098246), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.122590, 1.633583, 3.696664), + (1, 4.114949, 1.638141, 3.578111), + (2, 4.114996, 1.631617, 3.536742), + (3, 4.118038, 1.641230, 3.578327), + (4, 4.112972, 1.639592, 3.575918), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.774701, 2.146296, 3.977572), + (1, 4.775361, 2.153011, 3.979860), + (2, 4.767364, 2.152865, 4.057217), + (3, 4.762550, 2.149360, 3.979342), + (4, 4.778981, 2.139902, 3.978489), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.400574, 2.604084, 5.299578), + (1, 4.404470, 2.623904, 5.338578), + (2, 4.396282, 2.608549, 5.297828), + (3, 4.410117, 2.614698, 5.340116), + (4, 4.406122, 2.619452, 5.337443), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.691876, 2.983326, 7.028989), + (1, 9.686101, 2.995257, 6.984466), + (2, 9.699200, 2.989842, 7.028152), + (3, 9.694729, 2.989742, 6.973924), + (4, 9.684670, 2.977108, 6.989194), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"2", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.603234, 1.964083, 4.458006), + (1, 3.607074, 1.941178, 4.417525), + (2, 3.603034, 1.943612, 4.737094), + (3, 3.602477, 1.935710, 4.378785), + (4, 3.603014, 1.920944, 4.496731), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"2", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.919863, 2.380177, 6.178527), + (1, 8.915304, 2.377547, 6.139442), + (2, 8.912262, 2.361640, 6.382166), + (3, 8.928109, 2.368477, 6.192743), + (4, 8.926360, 2.372693, 6.196191), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.433816, 0.270779, 0.497217), + (1, 0.435460, 0.270028, 0.496532), + (2, 0.433553, 0.269600, 0.496135), + (3, 0.444402, 0.277012, 0.497745), + (4, 0.435023, 0.270357, 0.496884), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.427882, 0.266594, 0.456246), + (1, 0.436036, 0.268734, 0.457465), + (2, 0.432485, 0.268278, 0.495730), + (3, 0.431188, 0.269520, 0.457981), + (4, 0.429806, 0.265927, 0.457372), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.439986, 0.271715, 0.496550), + (1, 0.433586, 0.270013, 0.496199), + (2, 0.432029, 0.268060, 0.497939), + (3, 0.439059, 0.272464, 0.497620), + (4, 0.434181, 0.272563, 0.497461), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.432427, 0.269396, 0.457136), + (1, 0.428288, 0.270302, 0.737128), + (2, 0.431231, 0.268325, 0.456252), + (3, 0.427926, 0.267086, 0.456874), + (4, 0.420557, 0.264270, 0.457617), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.434424, 0.272190, 0.498161), + (1, 0.434165, 0.269235, 0.494824), + (2, 0.432662, 0.270415, 0.500255), + (3, 0.438368, 0.274265, 0.496769), + (4, 0.436696, 0.274610, 0.495729), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.433117, 0.267209, 0.457335), + (1, 0.431207, 0.267527, 0.457362), + (2, 0.427488, 0.263088, 0.456154), + (3, 0.424716, 0.264632, 0.456745), + (4, 0.430324, 0.266478, 0.457237), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.243380, 0.979720, 1.137169), + (1, 1.278996, 0.992319, 1.137506), + (2, 1.287192, 0.993761, 1.138362), + (3, 1.287132, 0.979672, 1.137975), + (4, 1.280673, 0.991069, 1.134803), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.199258, 0.944011, 1.056302), + (1, 1.238243, 0.967198, 1.055378), + (2, 1.251064, 0.952736, 1.058118), + (3, 1.238275, 0.953812, 1.056281), + (4, 1.230085, 0.961011, 1.058278), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.303555, 1.002749, 1.177122), + (1, 1.297516, 0.987769, 1.179257), + (2, 1.291316, 0.989683, 1.134877), + (3, 1.297521, 0.998087, 1.177932), + (4, 1.298070, 0.996104, 1.136646), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.242426, 0.951754, 1.054691), + (1, 1.251845, 0.955747, 1.055754), + (2, 1.216099, 0.939568, 1.057614), + (3, 1.252534, 0.953115, 1.057181), + (4, 1.255139, 0.957134, 1.056560), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.480008, 0.367388, 0.535985), + (1, 0.482634, 0.363998, 0.537057), + (2, 0.487524, 0.362915, 0.536461), + (3, 0.486824, 0.371502, 0.536601), + (4, 0.486100, 0.368487, 0.536231), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.471967, 0.356792, 0.537280), + (1, 0.471389, 0.351906, 0.537328), + (2, 0.476653, 0.364830, 0.536856), + (3, 0.473745, 0.360644, 0.536245), + (4, 0.471692, 0.358740, 0.536919), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_pch", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.488745, 1.084366, 1.498790), + (1, 1.477772, 1.072057, 1.497152), + (2, 1.481656, 1.079815, 1.497487), + (3, 1.488131, 1.086291, 1.497713), + (4, 1.484908, 1.083611, 1.497307), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_pch", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.892219, 1.358115, 3.416973), + (1, 2.908085, 1.361083, 3.458190), + (2, 2.911845, 1.363507, 3.498229), + (3, 2.861631, 1.340626, 3.497350), + (4, 2.902695, 1.349841, 3.498252), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_pch", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.094289, 0.731166, 2.856787), + (1, 2.094159, 0.727149, 3.098345), + (2, 2.099123, 0.725737, 2.857987), + (3, 2.099356, 0.725484, 2.857824), + (4, 2.092198, 0.722902, 2.856964), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.072042, 1.472173, 1.777206), + (1, 2.082600, 1.489627, 1.777280), + (2, 2.056884, 1.488123, 1.817614), + (3, 2.070744, 1.497244, 1.776597), + (4, 2.067240, 1.482836, 1.777571), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.533060, 2.043311, 1.777522), + (1, 2.628373, 2.047752, 1.777593), + (2, 2.630915, 2.051977, 1.777852), + (3, 2.630455, 2.065881, 1.777911), + (4, 2.631787, 2.049902, 1.778263), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.505337, 1.496155, 1.898006), + (1, 2.495744, 1.488942, 1.897842), + (2, 2.515831, 1.484552, 1.897723), + (3, 2.498317, 1.488449, 1.897741), + (4, 2.515904, 1.484614, 1.897771), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.125124, 2.066737, 1.896962), + (1, 3.066430, 2.061710, 1.897127), + (2, 2.951498, 2.032558, 1.899777), + (3, 3.102248, 2.072226, 1.938907), + (4, 2.965375, 2.034301, 1.901575), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.959637, 1.775658, 2.417471), + (1, 3.731703, 1.768139, 2.338378), + (2, 3.938876, 1.797903, 2.376989), + (3, 3.942618, 1.776899, 2.376468), + (4, 3.955662, 1.784850, 2.417537), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.711232, 2.418611, 2.457315), + (1, 4.710700, 2.405150, 2.458243), + (2, 4.701677, 2.393935, 2.458244), + (3, 4.700064, 2.411945, 2.458502), + (4, 4.435552, 2.373475, 2.417904), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.765235, 3.147148, 4.457806), + (1, 3.792075, 3.092380, 4.138512), + (2, 3.755530, 3.109232, 4.099198), + (3, 3.775577, 3.132702, 4.259349), + (4, 3.765380, 3.153395, 4.138279), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.733600, 3.141350, 3.819429), + (1, 8.729315, 3.130464, 3.818712), + (2, 8.758360, 3.153188, 3.898371), + (3, 8.284330, 3.049157, 3.698701), + (4, 8.287672, 3.024545, 3.697567), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.874930, 2.387032, 3.537592), + (1, 2.912332, 2.467479, 3.577891), + (2, 2.864476, 2.410851, 3.499089), + (3, 2.907625, 2.451013, 3.618200), + (4, 2.911261, 2.404477, 4.099524), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.915458, 2.450591, 3.219913), + (1, 7.956233, 2.439542, 3.300366), + (2, 7.913691, 2.473252, 3.218957), + (3, 7.509113, 2.397069, 3.138018), + (4, 7.904014, 2.456804, 3.218425), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.942240, 1.800567, 2.417458), + (1, 4.154844, 1.814089, 2.457805), + (2, 4.176584, 1.830900, 2.457020), + (3, 4.158194, 1.830085, 2.778865), + (4, 4.150232, 1.830750, 2.459318), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.905547, 2.434522, 2.537988), + (1, 4.924605, 2.457269, 2.538644), + (2, 4.657417, 2.378047, 2.458053), + (3, 4.911690, 2.470984, 2.537993), + (4, 4.929673, 2.455544, 2.538190), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.418219, 1.850523, 2.536990), + (1, 4.366724, 1.852566, 2.538399), + (2, 4.384926, 1.854429, 2.539958), + (3, 4.394250, 1.842192, 2.539435), + (4, 4.397239, 1.838145, 2.540060), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.130585, 2.493244, 2.579148), + (1, 5.162982, 2.497135, 2.578713), + (2, 5.129066, 2.472889, 2.619872), + (3, 4.874468, 2.405774, 2.497419), + (4, 5.128376, 2.467295, 2.578880), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.630875, 3.227827, 4.420094), + (1, 4.603130, 3.292521, 4.698425), + (2, 4.637749, 3.169974, 4.378697), + (3, 4.662829, 3.216485, 4.459226), + (4, 4.661186, 3.194321, 4.459337), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.094412, 3.382733, 4.299690), + (1, 10.607728, 3.485426, 4.420339), + (2, 10.672437, 3.500697, 4.499281), + (3, 10.081432, 3.369802, 4.260940), + (4, 10.637020, 3.507006, 4.419349), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.756469, 2.606486, 3.858024), + (1, 3.742525, 2.585514, 3.860432), + (2, 3.763984, 2.594155, 3.858338), + (3, 3.750329, 2.597445, 3.861970), + (4, 3.780330, 2.594397, 4.178249), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.783391, 2.778921, 3.858346), + (1, 9.291026, 2.713206, 3.741779), + (2, 9.763105, 2.769221, 3.818018), + (3, 9.781831, 2.771892, 3.860051), + (4, 9.795868, 2.814192, 3.861095), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.526822, 1.970779, 2.579904), + (1, 4.516155, 1.962200, 2.579553), + (2, 4.502726, 1.967558, 2.657639), + (3, 4.475255, 1.944838, 2.578810), + (4, 4.552333, 1.965428, 2.620439), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.260314, 2.603498, 2.660341), + (1, 4.995161, 2.487917, 2.539731), + (2, 5.272310, 2.582304, 2.619170), + (3, 5.297074, 2.584287, 2.659045), + (4, 5.276844, 2.591704, 2.658579), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.820446, 3.357945, 4.457265), + (1, 4.695519, 3.299694, 4.700489), + (2, 4.802906, 3.355605, 4.499002), + (3, 4.790937, 3.298910, 4.497635), + (4, 4.807253, 3.403019, 4.538081), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.775635, 3.627255, 4.498454), + (1, 10.819002, 3.627111, 4.498795), + (2, 10.777939, 3.603335, 4.579594), + (3, 10.261991, 3.489692, 4.340296), + (4, 10.783511, 3.603470, 4.497803), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.926690, 2.635944, 3.858194), + (1, 3.904631, 2.622227, 3.819312), + (2, 3.902995, 2.656935, 3.899565), + (3, 3.842353, 2.559599, 3.939178), + (4, 3.912334, 2.629019, 3.858092), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.417663, 2.778879, 3.779754), + (1, 9.981881, 2.854902, 3.981156), + (2, 9.922719, 2.849422, 3.895627), + (3, 9.932923, 2.851789, 3.899661), + (4, 9.882651, 2.809967, 3.860299), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.524352, 1.986189, 2.979131), + (1, 4.571793, 1.979632, 2.617329), + (2, 4.551874, 1.976839, 2.657311), + (3, 4.535069, 1.982461, 2.660565), + (4, 4.517949, 1.967234, 2.619985), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.308971, 2.608535, 2.660880), + (1, 5.300322, 2.591561, 2.698928), + (2, 5.007866, 2.516937, 2.617425), + (3, 5.004273, 2.518780, 2.620204), + (4, 5.298584, 2.603459, 2.697609), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.829605, 3.306560, 4.499574), + (1, 4.834964, 3.359516, 4.499708), + (2, 4.848950, 3.406535, 4.500607), + (3, 4.846305, 3.301867, 4.501270), + (4, 4.841747, 3.311314, 4.460786), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.261230, 3.487758, 4.377307), + (1, 10.821449, 3.608144, 4.579734), + (2, 10.818690, 3.639902, 4.538873), + (3, 10.288671, 3.520532, 4.378760), + (4, 10.827655, 3.621076, 4.540632), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"4", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.945245, 2.727926, 4.020004), + (1, 3.927023, 2.718237, 3.937944), + (2, 3.864097, 2.645215, 4.258710), + (3, 3.959593, 2.659668, 3.857486), + (4, 3.949860, 2.636461, 3.860314), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"4", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.988320, 2.894515, 3.979462), + (1, 9.984554, 2.865497, 3.978603), + (2, 9.969262, 2.894911, 3.940909), + (3, 9.971215, 2.860655, 3.939045), + (4, 9.928752, 2.859610, 4.140611), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.437223, 0.305541, 0.456598), + (1, 0.437365, 0.302782, 0.455612), + (2, 0.444941, 0.302766, 0.458539), + (3, 0.443284, 0.309348, 0.457267), + (4, 0.438558, 0.302788, 0.456867), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.433141, 0.299426, 0.457566), + (1, 0.433713, 0.302028, 0.456971), + (2, 0.432310, 0.301072, 0.457115), + (3, 0.431210, 0.298571, 0.456809), + (4, 0.432891, 0.306442, 0.458554), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.440129, 0.307891, 0.457005), + (1, 0.441966, 0.305756, 0.456712), + (2, 0.444503, 0.310015, 0.457176), + (3, 0.439473, 0.304319, 0.457442), + (4, 0.443194, 0.306398, 0.457362), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.431106, 0.301673, 0.458410), + (1, 0.434829, 0.302589, 0.456891), + (2, 0.430545, 0.302707, 0.457500), + (3, 0.436609, 0.301462, 0.456980), + (4, 0.429837, 0.300629, 0.456958), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.441827, 0.306401, 0.457803), + (1, 0.440791, 0.307818, 0.456863), + (2, 0.441486, 0.306428, 0.456280), + (3, 0.441639, 0.303644, 0.457488), + (4, 0.435752, 0.302272, 0.456606), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"null", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.434382, 0.299908, 0.458576), + (1, 0.430466, 0.299767, 0.458895), + (2, 0.433482, 0.301923, 0.457146), + (3, 0.437816, 0.305736, 0.460591), + (4, 0.433787, 0.300150, 0.457657), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.248580, 1.078897, 1.137297), + (1, 1.240939, 1.052455, 1.415574), + (2, 1.241209, 1.084570, 1.136554), + (3, 1.240406, 1.093724, 1.136429), + (4, 1.240385, 1.082323, 1.136401), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.290192, 1.199382, 0.936326), + (1, 1.276522, 1.198278, 0.936272), + (2, 1.273170, 1.185225, 0.935751), + (3, 1.281657, 1.188458, 0.934154), + (4, 1.285165, 1.186782, 0.935658), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.261013, 1.087419, 1.135864), + (1, 1.261208, 1.088418, 1.134847), + (2, 1.243520, 1.091952, 1.135702), + (3, 1.256916, 1.061697, 1.138041), + (4, 1.262088, 1.105355, 1.137939), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.304031, 1.188856, 0.937909), + (1, 1.293276, 1.188637, 0.935459), + (2, 1.278288, 1.189283, 0.936833), + (3, 1.302987, 1.181945, 0.936069), + (4, 1.293851, 1.192556, 0.936999), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.490107, 0.418154, 0.575664), + (1, 0.489843, 0.413785, 0.535501), + (2, 0.487683, 0.415899, 0.535610), + (3, 0.484014, 0.413119, 0.535279), + (4, 0.491381, 0.413503, 0.537277), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"###", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 0.486695, 0.445844, 0.494296), + (1, 0.481367, 0.455675, 0.497159), + (2, 0.481974, 0.481187, 0.496221), + (3, 0.479369, 0.425384, 0.495441), + (4, 0.478301, 0.457115, 0.494315), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_pch", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.434857, 1.168123, 1.455765), + (1, 1.436208, 1.190995, 1.496024), + (2, 1.439552, 1.161674, 1.455066), + (3, 1.436967, 1.180953, 1.494596), + (4, 1.435067, 1.162529, 1.456440), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_pch", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.854271, 1.448036, 3.456023), + (1, 2.864284, 1.464534, 3.456831), + (2, 2.860290, 1.477350, 3.377527), + (3, 2.857286, 1.458217, 3.417068), + (4, 2.855595, 1.464395, 3.376247), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_pch", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.095114, 0.776987, 2.855911), + (1, 2.099607, 0.795455, 2.856180), + (2, 2.095073, 0.792649, 2.896811), + (3, 2.094082, 0.789727, 2.897515), + (4, 2.100236, 0.781259, 2.774968), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 1.999042, 1.594807, 1.777251), + (1, 1.990498, 1.601683, 1.736392), + (2, 2.006314, 1.599276, 1.897380), + (3, 1.994969, 1.622299, 1.775973), + (4, 1.988203, 1.577170, 1.736153), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"cpp", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.703651, 2.613281, 1.374149), + (1, 2.700635, 2.658189, 1.415542), + (2, 2.723514, 2.623613, 1.375880), + (3, 2.698653, 2.597336, 1.376495), + (4, 2.682678, 2.616761, 1.377316), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.415923, 1.586213, 1.856706), + (1, 2.413466, 1.580113, 1.854297), + (2, 2.415569, 1.611288, 1.856562), + (3, 2.398350, 1.569858, 1.855165), + (4, 2.394427, 1.597305, 1.856311), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"parse", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.166052, 2.593652, 1.456512), + (1, 3.196717, 2.604754, 1.456743), + (2, 3.101508, 2.536190, 1.456607), + (3, 3.174828, 2.591447, 1.456659), + (4, 3.201618, 2.596692, 1.457126), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.712949, 1.873531, 2.336073), + (1, 3.691984, 1.870964, 2.297376), + (2, 3.733735, 1.860346, 2.296816), + (3, 3.702759, 1.885194, 2.336534), + (4, 3.725368, 1.861191, 2.296488), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.674568, 2.896322, 1.777463), + (1, 4.751183, 2.932167, 1.774656), + (2, 4.619575, 2.943985, 1.775820), + (3, 4.831743, 2.966127, 1.785376), + (4, 4.696926, 2.918956, 1.774947), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.619956, 3.111231, 4.057294), + (1, 3.634434, 3.079039, 4.176458), + (2, 3.619489, 3.150783, 4.138602), + (3, 3.621266, 3.104540, 4.058816), + (4, 3.608454, 3.122193, 4.057912), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 8.685876, 3.735123, 2.538354), + (1, 8.928202, 3.820031, 2.775907), + (2, 9.001593, 3.780341, 2.615105), + (3, 8.914982, 3.802006, 2.576587), + (4, 8.672801, 3.745031, 2.537300), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 2.804784, 2.299355, 3.497193), + (1, 2.837757, 2.362386, 3.538558), + (2, 2.872059, 2.437397, 3.497046), + (3, 2.822245, 2.354290, 3.416766), + (4, 2.852352, 2.360742, 3.536904), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"syntax", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 7.840658, 2.912237, 2.176625), + (1, 7.786177, 2.867490, 2.098460), + (2, 8.029733, 2.900113, 2.094914), + (3, 7.787848, 2.850907, 2.096058), + (4, 8.009086, 2.890278, 2.097071), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.924865, 1.882098, 2.377105), + (1, 3.946578, 1.907070, 2.377384), + (2, 3.942964, 1.879682, 2.376026), + (3, 3.891159, 1.892699, 2.377748), + (4, 3.967042, 1.868087, 2.417171), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"irgen", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.959364, 2.975161, 1.817129), + (1, 5.054176, 2.984549, 1.817835), + (2, 4.919681, 2.991480, 1.815857), + (3, 4.910313, 2.971126, 1.816666), + (4, 4.951734, 2.972542, 1.815437), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.101830, 1.911448, 2.454536), + (1, 4.134987, 1.907901, 2.417187), + (2, 4.137531, 1.889402, 2.416253), + (3, 4.106261, 1.900297, 2.418632), + (4, 4.116540, 1.914047, 2.415859), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.144013, 2.981688, 1.855810), + (1, 5.084562, 2.953167, 1.816353), + (2, 5.123251, 2.985708, 1.937743), + (3, 5.218549, 3.005248, 1.816337), + (4, 5.121341, 2.958136, 1.817163), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.391211, 3.194895, 4.297978), + (1, 4.320212, 3.215877, 4.336974), + (2, 4.317236, 3.185048, 4.297096), + (3, 4.347551, 3.210930, 4.337750), + (4, 4.340133, 3.158959, 4.298051), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.533776, 4.099156, 2.857560), + (1, 10.875003, 4.167712, 2.978028), + (2, 10.559224, 4.084177, 2.898004), + (3, 10.529217, 4.091320, 2.857602), + (4, 10.531274, 4.079794, 2.857786), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.572211, 2.564058, 3.657172), + (1, 3.610311, 2.554201, 3.738315), + (2, 3.503969, 2.457425, 3.656664), + (3, 3.497522, 2.477225, 3.776817), + (4, 3.516315, 2.450350, 3.697352), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_asm", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.667563, 3.247271, 2.416874), + (1, 9.737532, 3.221747, 2.496587), + (2, 9.683672, 3.255651, 2.416956), + (3, 9.897372, 3.270324, 2.457738), + (4, 9.960110, 3.282960, 2.536374), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.216047, 2.040267, 2.417042), + (1, 4.198596, 2.057673, 2.417291), + (2, 4.355761, 2.050442, 2.456578), + (3, 4.269654, 2.046761, 2.414728), + (4, 4.258278, 2.065794, 2.415867), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.364820, 3.155647, 1.856490), + (1, 5.380241, 3.164256, 1.895779), + (2, 5.258991, 3.099702, 1.858494), + (3, 5.408499, 3.143804, 1.858232), + (4, 5.433442, 3.172182, 1.896951), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.509842, 3.336711, 4.298495), + (1, 4.493119, 3.342058, 4.338363), + (2, 4.497302, 3.391293, 4.376365), + (3, 4.552023, 3.326395, 4.296523), + (4, 4.511749, 3.315174, 4.258914), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 11.063909, 4.331076, 2.975250), + (1, 10.750918, 4.265164, 2.897127), + (2, 10.773158, 4.274519, 2.858005), + (3, 10.989661, 4.295921, 2.937906), + (4, 10.991448, 4.334725, 2.977596), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.668731, 2.619398, 3.657468), + (1, 3.654504, 2.592248, 3.696077), + (2, 3.665061, 2.625732, 3.699196), + (3, 3.673349, 2.573183, 3.697462), + (4, 3.682111, 2.613733, 3.738984), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"only_compile", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 9.810406, 3.300637, 2.416778), + (1, 10.048934, 3.350114, 2.496649), + (2, 9.875004, 3.340279, 2.537774), + (3, 10.160045, 3.376951, 2.619453), + (4, 10.115032, 3.362591, 2.537008), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.241536, 2.082256, 2.455986), + (1, 4.286330, 2.067488, 2.496313), + (2, 4.291944, 2.084961, 2.496839), + (3, 4.299382, 2.050242, 2.497274), + (4, 4.256038, 2.063266, 2.497293), +]} +)) +runs.append(( { 'cc':"ccc_clang", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 5.421218, 3.170845, 1.936421), + (1, 5.384884, 3.153992, 1.897806), + (2, 5.296851, 3.153219, 1.951468), + (3, 5.260795, 3.139369, 2.177163), + (4, 5.278498, 3.141780, 1.895288), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 4.484287, 3.364861, 4.377941), + (1, 4.531560, 3.308326, 4.377562), + (2, 4.578896, 3.345062, 4.377173), + (3, 4.566615, 3.446052, 4.417550), + (4, 4.515315, 3.375575, 4.336788), +]} +)) +runs.append(( { 'cc':"ccc_gcc", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.788959, 4.299290, 2.977905), + (1, 11.090341, 4.345425, 3.058836), + (2, 11.066430, 4.319885, 2.976521), + (3, 10.779432, 4.283670, 3.018155), + (4, 10.788091, 4.327036, 2.978633), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"8", + 'pch':"pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 3.682013, 2.568734, 3.737019), + (1, 3.782095, 2.599814, 3.777516), + (2, 3.694371, 2.626584, 3.858657), + (3, 3.701257, 2.616141, 4.138741), + (4, 3.772297, 2.652233, 3.697378), +]} +)) +runs.append(( { 'cc':"gcc", + 'script':"all", + 'threads':"8", + 'pch':"no_pch" }, +{ 'version' : 0, + 'samples' : [ + (0, 10.129212, 3.382389, 2.576426), + (1, 10.165855, 3.362136, 2.579688), + (2, 10.085414, 3.375557, 2.539346), + (3, 10.106707, 3.375161, 2.777265), + (4, 10.163243, 3.374295, 2.579247), +]} +)) |