[llvm-dev] (no subject)
Doerfert, Johannes Rudolf via llvm-dev
llvm-dev at lists.llvm.org
Sat Jan 26 17:25:20 PST 2019
I now get your intent but can't really help you. You need to ask interpreter folks.
I'd suggest you send another email, state clearly what you want, and put a summary in the subject line.
You can also try the IRC, though during the week you might have more luck.
________________________________
From: Alberto Barbaro <barbaro.alberto at gmail.com>
Sent: Saturday, January 26, 2019 7:07:26 PM
To: Doerfert, Johannes Rudolf
Cc: llvm-dev
Subject: Re: [llvm-dev] (no subject)
Hi,
All good points and jokes in your email :)
My final goal is the get the value of %8 at runtime. So considering the program is called argv I would like to execute something like ./argv 22 and get the value of argv[0]. Is it possible? So far I have the address where the parameter at position 0 in store but I'd like to read the value and print it.
I hope it is clear now
Thanks again
On Fri, Jan 25, 2019, 06:23 Doerfert, Johannes Rudolf <jdoerfert at anl.gov<mailto:jdoerfert at anl.gov> wrote:
On 01/20, Alberto Barbaro via llvm-dev wrote:
> Hi all,
> I have the following C code:
>
> #include<stdio.h>
>
> int main(int argc, char *argv[]) {
>
> printf("%s\n", argv[0]);
> return argc;
> }
>
> that generates the following IR for the main function:
>
> ; Function Attrs: noinline nounwind optnone uwtable
> define i32 @main(i32, i8**) #0 {
> %3 = alloca i32, align 4
> %4 = alloca i32, align 4
> %5 = alloca i8**, align 8
> store i32 0, i32* %3, align 4
> store i32 %0, i32* %4, align 4
> store i8** %1, i8*** %5, align 8
> %6 = load i8**, i8*** %5, align 8
> %7 = getelementptr inbounds i8*, i8** %6, i64 0
> %8 = load i8*, i8** %7, align 8
> %9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4
> x i8]* @.str, i32 0, i32 0), i8* %8)
> %10 = load i32, i32* %4, align 4
> ret i32 %10
> }
You should really run -mem2reg (without the optnone though). Also
-instcombine is afterwards often helpful to clean up clang generated
code, or maybe just run it with -O1.
> I think %8 will contain the address of argv[0], so %7 was storing a pointer
> to pointer to argv? I'm not sure of that.
Let's see: argc is %0 and argv == &argv[0] is %1. The latter is stored
in %5, which is loaded as %6. The GEP (%7) is a no-op, thus %6 == %7.
Finally, %8 is the value argv[0] of type char/i8.
> Considering that I can access the GenericValue set by
> visitGetElementPtrInst. How can I obtain the value of argv[0] at runtime
> using the Interpreter class?
Sorry can't help with that. I don't know the Interpreter class and I
guess "GenericValue" and "visitGetElementPtrInst" are somehow related to
it.
> Thanks
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
Johannes Doerfert
Researcher
Argonne National Laboratory
Lemont, IL 60439, USA
jdoerfert at anl.gov<mailto:jdoerfert at anl.gov>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190127/22cef4aa/attachment.html>
More information about the llvm-dev
mailing list