[LLVMdev] Steps to addDestination

Tim Northover t.p.northover at gmail.com
Tue Jul 23 23:37:46 PDT 2013

Hi Rasha,

On Wed, Jul 24, 2013 at 12:28 AM, Rasha Omar <rasha.sala7 at gmail.com> wrote:
> 1- I need the first example.

Oh good.
> 2- I set the Address uninitialized according to the documentation
> " Setting the name on the Value automatically updates the module's symbol
> table" from Value.h source code

That's referring to a string name, and is only really important for
clarity and debugging the IR being produced. It means you could start
out with something like

    %1 = add i32 %lhs, %rhs
    ret i32 %1

(where the %1 is just an automatically incrementing label provided by
LLVM) then call MyAddInst.setName("theSum") and LLVM would
automatically convert this to:

    %theSum = add i32 %lhs, %rhs
    ret i32 %theSum

You still have to have an initialised, valid Value pointer to be able
to do this.

> 3- I'm not sure about "select" instruction, you mean that the address is the
> new destination (basic block)that will be added

The address will be, directly or indirectly, the result of a
"BlockAddress::get(...)" call. Perhaps directly (though that would be
rather useless since then you'd just as well create a direct branch to
that block, perhaps via a "select" as in my code, or via load/store.
Perhaps even passed into the function as a parameter in a rather
bizarre set of circumstances.

Do you know about the Cpp backend, by the way? It can be very useful
for working out just what you have to write to emit certain LLVM IR.

What you do is write your own .ll file by hand, having the features
you want, then run

$ llc -march=cpp example_file.ll -o -

LLVM will produce some C++ code that generates the module you wrote.
It's not necessarily in the best of styles, but shows you roughly
which calls you should be making.



More information about the llvm-dev mailing list