
<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="language">Source language</a></h2>

<p>
Select the type of source code you want to compile. If you upload a file you
don't need this as the language is detected from the file extension.</p>


<h2><a name="optlevel">Optimization level</a></h2>

<p>
<dl>

  <dt><tt><b>Standard</b></tt>: </dt>
<dd>
Select this option to run a standard set of LLVM optimizations.
</dd>

  <dt><tt><b>LTO</b></tt>: </dt>
<dd>
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.
Note that you have to define 'main' in your program for this 
to make much of a difference.
</dd>

  <dt><tt><b>None</b></tt>: </dt>
<dd>
Select this option to turn off all optimizations.
</dd>
</dl>

<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="demangle">Demangle C++ names with C++ filt</a></h2>

<p>
Select this option if you want to run the target output code through "c++filt", 
which converts 'mangled' C++ names to their unmangled version. 
Note that target code produced will not be lexically valid, but it will 
be easier to understand.
</p>


<h2><a name="target">Target</a></h2>

<p>
Select the target you want to output code for. Generally a target uses the
<a href="http://llvm.org/cmds/llc.html">llc</a> tool to output machine assembly
code. However, a few special targets exists: </p>
<dl>

  <dt><tt><b>LLVM assembly</b></tt>: </dt>
<dd>
Select this option to run the LLVM dissambler
(<a href="http://llvm.org/cmds/llvm-dis.html">llvm-dis</a> tool) to show the LLVM IR.
</dd>

  <dt><tt><b>LLVM C++ API code</b></tt>: </dt>
<dd>
Select this option to auto generate the C++ API calls that could be used to
create the .bc file.
</dd>
</dl>


<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>

</body>
</html>

