X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=docs%2FFAQ.html;h=2dffd203ffdc406b61f45c1892979b74c338c388;hb=3b23a8cc23a20d01f602e588fc1cf309cebd92fb;hp=e43e3b22a570fd7c46aac6657fd2fc78be645fd5;hpb=a34e65dc92f30ba2e94413ab8f47a07c7ba6b87c;p=oota-llvm.git diff --git a/docs/FAQ.html b/docs/FAQ.html index e43e3b22a57..2dffd203ffd 100644 --- a/docs/FAQ.html +++ b/docs/FAQ.html @@ -55,6 +55,15 @@ target". +
  • Source Languages +
      +
    1. What source languages are supported?
    2. +
    3. What support is there for higher level source + language constructs for building a compiler?
    4. +
    5. I don't understand the GetElementPtr + instruction. Help!
    6. +
    +
  • Using the GCC Front End
    1. @@ -67,23 +76,31 @@ When I compile code using the LLVM GCC front end, it complains that it cannot find libcrtend.a.
    2. + +
    3. + How can I disable all optimizations when compiling code using the LLVM GCC front end? +
    4. + +
    5. Can I use LLVM to convert C++ code to C code?
    6. +
  • Questions about code generated by the GCC front-end
      -
    1. What is this __main() call that gets inserted into - main()?
    2. -
    3. Where did all of my code go??
    4. -
    5. What is this llvm.global_ctors and +
    6. What is this __main() call that gets inserted into + main()?
    7. +
    8. What is this llvm.global_ctors and _GLOBAL__I__tmp_webcompile... stuff that happens when I - #include <iostream>?
    9. + #include <iostream>? +
    10. Where did all of my code go??
    11. +
    12. What is this "undef" thing that shows up in my code?
  • -

    Written by The LLVM Team

    +

    Written by The LLVM Team

    @@ -123,7 +140,7 @@ Source Initiative (OSI).

    Yes. The modified source distribution must retain the copyright notice and follow the three bulletted conditions listed in the LLVM license.

    +href="http://llvm.org/releases/1.3/LICENSE.TXT">LLVM license.

    @@ -346,31 +363,6 @@ build.

    affects projects other than LLVM. Try upgrading or downgrading your GCC.

    -
    -

    -When I use the test suite, all of the C Backend tests fail. What is -wrong? -

    -
    - -
    -

    -If you build LLVM and the C Backend tests fail in llvm/test/Programs, -then chances are good that the directory pointed to by the LLVM_LIB_SEARCH_PATH -environment variable does not contain the libcrtend.a library. -

    - -

    -To fix it, verify that LLVM_LIB_SEARCH_PATH points to the correct directory -and that libcrtend.a is inside. For pre-built LLVM GCC front ends, this -should be the absolute path to -cfrontend/<platform>/llvm-gcc/bytecode-libs. If you've -built your own LLVM GCC front end, then ensure that you've built and installed -the libraries in llvm/runtime and have LLVM_LIB_SEARCH_PATH pointing -to the LLVMGCCDIR/bytecode-libs subdirectory. -

    -
    -

    After CVS update, rebuilding gives the error "No rule to make target".

    @@ -402,6 +394,49 @@ which list dependencies for source files, and rebuild:

    rebuilding.

    + +
    Source Languages
    + +

    + What source languages are supported?

    +
    +
    +

    LLVM currently has full support for C and C++ source languages. These are + available through a special version of GCC that LLVM calls the + C Front End

    +

    There is an incomplete version of a Java front end available in the + llvm-java CVS repository. There is no documentation on this yet so + you'll need to download the code, compile it, and try it.

    +

    In the examples/BFtoLLVM directory is a translator for the + BrainF*** language (2002 Language Specification).

    +

    In the projects/Stacker directory is a compiler and runtime + library for the Stacker language, a "toy" language loosely based on Forth.

    +

    The PyPy developers are working on integrating LLVM into the PyPy backend + so that PyPy language can translate to LLVM.

    +
    +
    +

    What support is there for a higher level source language constructs for + building a compiler?

    +
    +
    +

    Currently, there isn't much. LLVM supports an intermediate representation + which is useful for code representation but will not support the high level + (abstract syntax tree) representation needed by most compilers. There are no + facilities for lexical nor semantic analysis. There is, however, a mostly + implemented configuration-driven + compiler driver which simplifies the task + of running optimizations, linking, and executable generation.

    +
    + +
    +

    I don't understand the GetElementPtr + instruction. Help!

    +
    +
    +

    See The Often Misunderstood GEP + Instruction. +

    +
    Using the GCC Front End @@ -458,13 +493,91 @@ find libcrtend.a.

    -In order to find libcrtend.a, you must have the directory in which it lives in -your LLVM_LIB_SEARCH_PATH environment variable. For the binary distribution of -the LLVM GCC front end, this will be the full path of the bytecode-libs -directory inside of the LLVM GCC distribution. +The only way this can happen is if you haven't installed the runtime library. To +correct this, do:

    +
    +  % cd llvm/runtime
    +  % make clean ; make install-bytecode
    +
    +
    + +
    +

    +How can I disable all optimizations when compiling code using the LLVM GCC front end?

    +
    +

    +Passing "-Wa,-disable-opt -Wl,-disable-opt" will disable *all* cleanup and +optimizations done at the llvm level, leaving you with the truly horrible +code that you desire. +

    +
    + + +
    +

    +Can I use LLVM to convert C++ code to C code? +

    +
    + +
    +

    Yes, you can use LLVM to convert code from any language LLVM supports to C. +Note that the generated C code will be very low level (all loops are lowered +to gotos, etc) and not very pretty (comments are stripped, original source +formatting is totally lost, variables are renamed, expressions are regrouped), +so this may not be what you're looking for. However, this is a good way to add +C++ support for a processor that does not otherwise have a C++ compiler. +

    + +

    Use commands like this:

    + +
      +
    1. Compile your program as normal with llvm-g++:

    2. + +
      $ llvm-g++ x.cpp -o program
      + +

      or:

      + +
      + llvm-g++ a.cpp -c
      + llvm-g++ b.cpp -c
      + llvm-g++ a.o b.o -o program +
      + +

      With llvm-gcc3, this will generate program and program.bc. The .bc file is +the LLVM version of the program all linked together.

      + +
    3. Convert the LLVM code to C code, using the LLC tool with the C +backend:

    4. + +
      $ llc -march=c program.bc -o program.c
      + +
    5. Finally, compile the c file:

    6. + +
      $ cc x.c
      + +
    + +

    Note that, by default, the C backend does not support exception handling. +If you want/need it for a certain program, you can enable it by passing +"-enable-correct-eh-support" to the llc program. The resultant code will +use setjmp/longjmp to implement exception support that is correct but +relatively slow. +

    + +

    Also note: this specific sequence of commands won't work if you use a +function defined in the C++ runtime library (or any other C++ library). To +access an external C++ library, you must manually +compile libstdc++ to LLVM bytecode, statically link it into your program, then +use the commands above to convert the whole result into C code. Alternatively, +you can compile the libraries and your application into two different chunks +of C code and link them.

    + +
    + +
    @@ -472,6 +585,7 @@ directory inside of the LLVM GCC distribution.

    + What is this __main() call that gets inserted into main()?

    @@ -493,29 +607,8 @@ linked in automatically when you link the program. -

    -Where did all of my code go?? -

    - -
    -

    -If you are using the LLVM demo page, you may often wonder what happened to all -of the code that you typed in. Remember that the demo script is running the -code through the LLVM optimizers, so if your code doesn't actually do anything -useful, it might all be deleted. -

    - -

    -To prevent this, make sure that the code is actually needed. For example, if -you are computing some expression, return the value from the function instead of -leaving it in a local variable. If you really want to constrain the optimizer, -you can read from and assign to volatile global variables. -

    -
    - - -
    +

    What is this llvm.global_ctors and _GLOBAL__I__tmp_webcompile... stuff that happens when I #include <iostream>?

    @@ -544,6 +637,51 @@ instead of iostreams to print values.

    + + +

    + +Where did all of my code go?? +

    + +
    +

    +If you are using the LLVM demo page, you may often wonder what happened to all +of the code that you typed in. Remember that the demo script is running the +code through the LLVM optimizers, so if your code doesn't actually do anything +useful, it might all be deleted. +

    + +

    +To prevent this, make sure that the code is actually needed. For example, if +you are computing some expression, return the value from the function instead of +leaving it in a local variable. If you really want to constrain the optimizer, +you can read from and assign to volatile global variables. +

    +
    + + + +

    + +

    What is this "undef" thing that shows up in my code? +

    + +
    +

    +undef is the LLVM way of representing +a value that is not defined. You can get these if you do not initialize a +variable before you use it. For example, the C function:

    + +
    + int X() { int i; return i; } +
    + +

    Is compiled to "ret int undef" because "i" never has a value +specified for it. +

    +
    +
    @@ -553,7 +691,7 @@ instead of iostreams to print values.

    Valid HTML 4.01! - LLVM Compiler Infrastructure
    + LLVM Compiler Infrastructure
    Last modified: $Date$