public inbox for jit@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Malcolm <dmalcolm@redhat.com>
To: 李鹏泽 <lipengze@pku.edu.cn>
Cc: jit@gcc.gnu.org
Subject: Re: Questions about using array as parameter in gccjit generated funtion
Date: Mon, 12 Oct 2020 10:40:56 -0400	[thread overview]
Message-ID: <ebaf840caa8569d5ec76ab7763adee638b167831.camel@redhat.com> (raw)
In-Reply-To: <3b7ce66e.4d53b.1751d114365.Coremail.lipengze@pku.edu.cn>

On Mon, 2020-10-12 at 21:47 +0800, 李鹏泽 wrote:
> Dear maintainer of lib gccjit:
> 
>   I'm using gccjit to generate a function and pass some parameters to
> it, but I encountered a strange problem, and I did not find solutions
> in the search engine and gcc jit documentation. So I am here hope to
> get some help from you.
> 
>   I installed with sudo dnf install libgccjit-devel the version of
> gccjit is 10.2.1, gcc version is 10.2.1, Fedora version is release
> 32.
> 
>   The problem happened when I tried to pass an int array to a gccjit
> function. If I don't turn on -O optimization when compile the total
> source code in the terminal (not the gccjit optimization option), the
> output will be nonsense, like:
> 
> 
> 
> # root @ SLOT1-4 in ~/wanpcs/jit/docs/examples [6:24:43] C:127
> $ ./t3
> obj: loop_body
> loop_test returned: 451999691
> (base)
> 
> 
>   If I use -O option, then every thing just goes fine. But I wonder
> why I have to turn on the gcc -O option which is bad for debugging to
> get expected result.

I tried your example, and I got the same behavior.

I tried adding all of the various debugging options from 
https://gcc.gnu.org/onlinedocs/jit/topics/contexts.html

In particular, I added:
  gcc_jit_context_set_bool_option (
    ctxt,
    GCC_JIT_BOOL_OPTION_DEBUGINFO,
    1);
and set the 2nd param of gcc_jit_context_dump_to_file, so that I can
step through the generated code in gdb.

With that, I recompiled with -g (so that the precompiled code can also
be stepped through in gdb), and set a breakpoint in gdb on loop_test.

Without -O, I see:


Breakpoint 1, loop_test (n=5, arr=...) at ./pre.dump:8
8	  sum = (int)0;
(gdb) p arr
$15 = {-10536, 32767, 4200493, 1, 1}

#1  0x00000000004017a3 in main (argc=1, argv=0x7fffffffd6d8) at
/tmp/arr.c:198
198	  int val = loop_test (5, arr);
(gdb) p arr
$16 = {1, 2, 3, 4, 5}


whereas with -O I see:

Breakpoint 1, loop_test (n=5, arr=...) at ./pre.dump:8
8	  sum = (int)0;
(gdb) p arr
$17 = {1, 2, 3, 4, 5}
(gdb) up
#1  0x0000000000401625 in main (argc=<optimized out>, argv=<optimized
out>) at /tmp/arr.c:198
198	  int val = loop_test (5, arr);
(gdb) p arr
$18 = {1, 2, 3, 4, 5}



So somehow "arr" is not being passed correctly to the generated code in
the "compiled without -O" case.




>   The attachment arr.c is a program from tutorial 3 with minor
> change. In this program I use the gccjit funtion to get the sum of an
> array(line 99 to line 111). The array is gotten from parameter (line
> 49). The output function is defined in (line 52-57). The call of the
> generated function is in line 178 and the array parameter is defined
> in line 177.

It's helpful to update the comments at the same time as updating the
code.


>   To compile this file just as the tutorial said "gcc arr.c -o arr
> -lgccjit ". 
> 
>   Any suggestions will be helpful, and if you could take some time
> out of your busy schedule to give me some advice, I would greatly
> appreciate it. If I did not make the question clear please let me
> know. Gccjit is a fancy tool and I wish it could becomes better! Many
> Thanks!

I'm not yet sure whether this is a bug in libgccjit, or whether there's
a subtle mistake somewhere in your code.

What happens if you construct an equivalent example in pure C without
gccjit (perhaps putting the equivalent of loop_test in a separate
source file?)


I hope this above is helpful
Dave



      reply	other threads:[~2020-10-12 14:41 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-12 13:47 李鹏泽
2020-10-12 14:40 ` David Malcolm [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ebaf840caa8569d5ec76ab7763adee638b167831.camel@redhat.com \
    --to=dmalcolm@redhat.com \
    --cc=jit@gcc.gnu.org \
    --cc=lipengze@pku.edu.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).