Skip to content

Commit

Permalink
Mention the IRBuilder in Programmer's Manual with a few small examples.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210354 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
delcypher committed Jun 6, 2014
1 parent f4f9c6b commit 64d39d3
Showing 1 changed file with 36 additions and 1 deletion.
37 changes: 36 additions & 1 deletion docs/ProgrammersManual.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1918,7 +1918,7 @@ which is a pointer to an integer on the run time stack.

*Inserting instructions*

There are essentially two ways to insert an ``Instruction`` into an existing
There are essentially three ways to insert an ``Instruction`` into an existing
sequence of instructions that form a ``BasicBlock``:

* Insertion into an explicit instruction list
Expand Down Expand Up @@ -1988,6 +1988,41 @@ sequence of instructions that form a ``BasicBlock``:
which is much cleaner, especially if you're creating a lot of instructions and
adding them to ``BasicBlock``\ s.

* Insertion using an instance of ``IRBuilder``

Inserting several ``Instuction``\ s can be quite laborious using the previous
methods. The ``IRBuilder`` is a convenience class that can be used to add
several instructions to the end of a ``BasicBlock`` or before a particular
``Instruction``. It also supports constant folding and renaming named
registers (see ``IRBuilder``'s template arguments).

The example below demonstrates a very simple use of the ``IRBuilder`` where
three instructions are inserted before the instruction ``pi``. The first two
instructions are Call instructions and third instruction multiplies the return
value of the two calls.

.. code-block:: c++

Instruction *pi = ...;
IRBuilder<> Builder(pi);
CallInst* callOne = Builder.CreateCall(...);
CallInst* callTwo = Builder.CreateCall(...);
Value* result = Builder.CreateMul(callOne, callTwo);

The example below is similar to the above example except that the created
``IRBuilder`` inserts instructions at the end of the ``BasicBlock`` ``pb``.

.. code-block:: c++

BasicBlock *pb = ...;
IRBuilder<> Builder(pb);
CallInst* callOne = Builder.CreateCall(...);
CallInst* callTwo = Builder.CreateCall(...);
Value* result = Builder.CreateMul(callOne, callTwo);

See :doc:`tutorial/LangImpl3` for a practical use of the ``IRBuilder``.


.. _schanges_deleting:

Deleting Instructions
Expand Down

0 comments on commit 64d39d3

Please sign in to comment.