<div dir="ltr"><br><div>Thank you so much to you both. I got it working.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 28 April 2017 at 14:49, Tim Northover <span dir="ltr"><<a href="mailto:t.p.northover@gmail.com" target="_blank">t.p.northover@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 28 April 2017 at 14:38, Dipanjan Das via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
> I want to insert a call to `func` just before the store instruction with the<br>
> address `x` of global variable `g` as parameter.<br>
<br>
Your error is because the function you create is "void @func(i32)" but<br>
you're trying to pass it an i32* (the address of the global). This<br>
mismatch is spotted by LLVM's verifier and it quits.<br>
<br>
So you have to make them match up somehow. IMO the best way to do this<br>
would be to instead create "void @func(i8*)" (as Joel explained) and<br>
then use IRBuilder::CreateBitCast on "po" to convert it from an i32*<br>
to an i8*. Then you can pass that result to @func instead of "po".<br>
<br>
Incidentally, the "i32  call void bitcast (void (i64)* @func to void<br>
(i32)*)(i32* @a)" line in the output suggests you're being<br>
inconsistent about how you call getOrCreateFunction for @func<br>
elsewhere in your code: the first time it's told to expect an i64 so<br>
when you getOrCreateFunction a second time LLVM "helpfully" inserts a<br>
constant bitcast of its own. This is almost certainly not a good idea.<br>
<span class="HOEnZb"><font color="#888888"><br>
Tim.<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><span><div><div dir="ltr"><p>Thanks & Regards,</p>
<div>Dipanjan</div></div></div></span></div></div>
</div>