-.. _faq:
-
================================
Frequently Asked Questions (FAQ)
================================
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
==============
#. Run ``configure`` with an alternative ``PATH`` that is correct. In a
Bourne compatible shell, the syntax would be:
-.. code-block:: bash
+.. code-block:: console
% PATH=[the path without the bad program] ./configure ...
If the Makefile already exists in your object tree, you can just run the
following command in the top level directory of your object tree:
-.. code-block:: bash
+.. code-block:: console
% ./config.status <relative path to Makefile>;
For example, if you built LLVM with the command:
-.. code-block:: bash
+.. code-block:: console
% gmake ENABLE_PROFILING=1
...then you must run the tests with the following commands:
-.. code-block:: bash
+.. code-block:: console
% cd llvm/test
% gmake ENABLE_PROFILING=1
-----------------------------------------------------------------------------
If the error is of the form:
-.. code-block:: bash
+.. code-block:: console
gmake[2]: *** No rule to make target `/path/to/somefile',
- needed by `/path/to/another/file.d'.
+ needed by `/path/to/another/file.d'.
Stop.
This may occur anytime files are moved within the Subversion repository or
removed entirely. In this case, the best solution is to erase all ``.d``
files, which list dependencies for source files, and rebuild:
-.. code-block:: bash
+.. code-block:: console
% cd $LLVM_OBJ_DIR
% rm -f `find . -name \*\.d`