X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FFAQ.rst;h=0559a1ff21505988bcc43e225886edd17fc29c49;hb=b3108e1962a66412427154c070c6a95bd7f2b676;hp=67e8d0b27b26ee4ba991b638b6bd24c6643eb639;hpb=527036d5ff4bcb1afe6e85cfab9a3d85dcc5db7b;p=oota-llvm.git diff --git a/docs/FAQ.rst b/docs/FAQ.rst index 67e8d0b27b2..0559a1ff215 100644 --- a/docs/FAQ.rst +++ b/docs/FAQ.rst @@ -1,5 +1,3 @@ -.. _faq: - ================================ Frequently Asked Questions (FAQ) ================================ @@ -53,6 +51,29 @@ Some porting problems may exist in the following areas: like the Bourne Shell and sed. Porting to systems without these tools (MacOS 9, Plan 9) will require more effort. +What API do I use to store a value to one of the virtual registers in LLVM IR's SSA representation? +--------------------------------------------------------------------------------------------------- + +In short: you can't. It's actually kind of a silly question once you grok +what's going on. Basically, in code like: + +.. code-block:: llvm + + %result = add i32 %foo, %bar + +, ``%result`` is just a name given to the ``Value`` of the ``add`` +instruction. In other words, ``%result`` *is* the add instruction. The +"assignment" doesn't explicitly "store" anything to any "virtual register"; +the "``=``" is more like the mathematical sense of equality. + +Longer explanation: In order to generate a textual representation of the +IR, some kind of name has to be given to each instruction so that other +instructions can textually reference it. However, the isomorphic in-memory +representation that you manipulate from C++ has no such restriction since +instructions can simply keep pointers to any other ``Value``'s that they +reference. In fact, the names of dummy numbered temporaries like ``%1`` are +not explicitly represented in the in-memory representation at all (see +``Value::getName()``). Build Problems ============== @@ -81,7 +102,7 @@ grabbing the wrong linker/assembler/etc, there are two ways to fix it: .. code-block:: console - % PATH=[the path without the bad program] ./configure ... + % PATH=[the path without the bad program] $LLVM_SRC_DIR/configure ... This is still somewhat inconvenient, but it allows ``configure`` to do its work without having to adjust your ``PATH`` permanently. @@ -163,14 +184,6 @@ This is `a bug in GCC `_, and affects projects other than LLVM. Try upgrading or downgrading your GCC. -Compiling LLVM with GCC succeeds, but the resulting tools do not work, what can be wrong? ------------------------------------------------------------------------------------------ -Several versions of GCC have shown a weakness in miscompiling the LLVM -codebase. Please consult your compiler version (``gcc --version``) to find -out whether it is `broken `_. If so, your only -option is to upgrade GCC to a known good version. - - After Subversion update, rebuilding gives the error "No rule to make target". ----------------------------------------------------------------------------- If the error is of the form: