X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FFAQ.html;h=2dffd203ffdc406b61f45c1892979b74c338c388;hb=14fbcbfa2b7146569c588c451825206906c3b55a;hp=a8f80dd10fa5561186076bf6144cb4cda7253ddc;hpb=237dc2a8079af79be30ef9966624661943fc6901;p=oota-llvm.git diff --git a/docs/FAQ.html b/docs/FAQ.html index a8f80dd10fa..2dffd203ffd 100644 --- a/docs/FAQ.html +++ b/docs/FAQ.html @@ -55,6 +55,15 @@ target". +
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.-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".
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.
+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.
+-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. +
+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:
+ +Compile your program as normal with llvm-g++:
or:
+ +With llvm-gcc3, this will generate program and program.bc. The .bc file is +the LLVM version of the program all linked together.
+ +Convert the LLVM code to C code, using the LLC tool with the C +backend:
Finally, compile the c file:
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.
+-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>?
@@ -548,6 +637,51 @@ instead of iostreams to print values.+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. +
++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:
+ +Is compiled to "ret int undef" because "i" never has a value +specified for it. +
+