[llvm-dev] How to get the address of a global variable in LLVM? (original) (raw)
Dipanjan Das via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 28 15:06:19 PDT 2017
- Previous message: [llvm-dev] How to get the address of a global variable in LLVM?
- Next message: [llvm-dev] Problem with Polly build
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Thank you so much to you both. I got it working.
On 28 April 2017 at 14:49, Tim Northover <t.p.northover at gmail.com> wrote:
On 28 April 2017 at 14:38, Dipanjan Das via llvm-dev <llvm-dev at lists.llvm.org> wrote: > I want to insert a call to
func
just before the store instruction with the > addressx
of global variableg
as parameter.Your error is because the function you create is "void @func(i32)" but you're trying to pass it an i32* (the address of the global). This mismatch is spotted by LLVM's verifier and it quits. So you have to make them match up somehow. IMO the best way to do this would be to instead create "void @func(i8*)" (as Joel explained) and then use IRBuilder::CreateBitCast on "po" to convert it from an i32* to an i8*. Then you can pass that result to @func instead of "po". Incidentally, the "i32 call void bitcast (void (i64)* @func to void (i32))(i32 @a)" line in the output suggests you're being inconsistent about how you call getOrCreateFunction for @func elsewhere in your code: the first time it's told to expect an i64 so when you getOrCreateFunction a second time LLVM "helpfully" inserts a constant bitcast of its own. This is almost certainly not a good idea. Tim.
--
Thanks & Regards, Dipanjan -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170428/e30ebf90/attachment.html>
- Previous message: [llvm-dev] How to get the address of a global variable in LLVM?
- Next message: [llvm-dev] Problem with Polly build
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]