Hi Rasha,
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.
Cheers.
Tim.