From bdb0c0aaf3a9f02dd590667c9d068905e0f483fe Mon Sep 17 00:00:00 2001 From: Sean Silva Date: Thu, 27 Dec 2012 10:23:04 +0000 Subject: docs: Add FAQ about "storing to a virtual register". This came up for the N+1'st time today in IRC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171155 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/FAQ.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/FAQ.rst b/docs/FAQ.rst index 67e8d0b27b..b4c6261c65 100644 --- a/docs/FAQ.rst +++ b/docs/FAQ.rst @@ -53,6 +53,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 ============== -- cgit v1.2.3