# Demo page information

Press "back" or click here to return to the demo page.

## Hints and Advice

- The generated LLVM code will be easier to read if you use stdio (e.g., printf) than iostreams (e.g., std::cout).
- Unused inline functions and methods are not generated. Instead of '`class foo { void bar() {}};`', try writing '`class foo { void bar(); }; void foo::bar() {}`'.
- If you want to try out a file that uses non-standard header files, you should preprocess it (e.g., with the `-save-temps` or `-E` options to `gcc`) then upload the result.

## Demangle C++ names with C++ filt

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.

## Run link-time optimizer

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.

## Show detailed pass statistics

Select this option to enable compilation timings and statistics from various optimizers.

## Analyze generated bytecode

Select this option to run the llvm-bcanalyzer tool on the generated bytecode, which introspects into the format of the .bc file itself.

## Show C++ API code

Select this option to run the llvm2cpp tool on the generated bytecode, which auto generates the C++ API calls that could be used to create the .bc file.