public inbox for jit@gcc.gnu.org
 help / color / mirror / Atom feed
From: Petter Tomner <tomner@kth.se>
To: Antoni Boucher <bouanto@zoho.com>,
	David Malcolm <dmalcolm@redhat.com>,
	"jit@gcc.gnu.org" <jit@gcc.gnu.org>,
	"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: SV: [commited] jit: Support for global rvalue initialization and constructors
Date: Thu, 30 Dec 2021 01:16:39 +0000	[thread overview]
Message-ID: <a479db5b024c4d7fb39bbed104717e91@kth.se> (raw)
In-Reply-To: <a05bc0ec22fd946c739bf298f1936e7027a9e032.camel@zoho.com>

[-- Attachment #1: Type: text/plain, Size: 3502 bytes --]

Could you be more specific? I tried the equivalent of:

/*    int [50] foobar = {1,2,3,4};
      int [50] foo() { int arr[50];
		       arr = (int [50]){-1,-2,-3,-4,-5,-6};
		       arr = foobar;
		       arr = (int [50]){1,2,3,4,5,6};
		       arr[6] = 1234;
		       return arr;}

       N.B: Not a typo, returning an array.
*/

in test-local-init-rvalue.c with a global and local "arr" and it ran fine. (See attachment).

Regards, Petter


Från: Antoni Boucher <bouanto@zoho.com>
Skickat: den 29 december 2021 23:45
Till: Petter Tomner; David Malcolm; jit@gcc.gnu.org; gcc-patches@gcc.gnu.org
Ämne: Re: [commited] jit: Support for global rvalue initialization and constructors
    
I realized that trying to do an assignment to an array created by the
new array constructor API will result in a "gimplification failed"
error:

libgccjit.so: error: gimplification failed
0x7fa3a441e5d3 gimplify_expr(tree_node**, gimple**, gimple**, bool
(*)(tree_node*), int)
        ../../../gcc/gcc/gimplify.c:15964
0x7fa3a442b1ab gimplify_modify_expr
        ../../../gcc/gcc/gimplify.c:5975
0x7fa3a441ac4c gimplify_expr(tree_node**, gimple**, gimple**, bool
(*)(tree_node*), int)
        ../../../gcc/gcc/gimplify.c:14951
0x7fa3a441e63c gimplify_stmt(tree_node**, gimple**)
        ../../../gcc/gcc/gimplify.c:7026
0x7fa3a441bca3 gimplify_statement_list
        ../../../gcc/gcc/gimplify.c:2014
0x7fa3a441bca3 gimplify_expr(tree_node**, gimple**, gimple**, bool
(*)(tree_node*), int)
        ../../../gcc/gcc/gimplify.c:15396
0x7fa3a441e63c gimplify_stmt(tree_node**, gimple**)
        ../../../gcc/gcc/gimplify.c:7026
0x7fa3a441f000 gimplify_bind_expr
        ../../../gcc/gcc/gimplify.c:1427
0x7fa3a441adc6 gimplify_expr(tree_node**, gimple**, gimple**, bool
(*)(tree_node*), int)
        ../../../gcc/gcc/gimplify.c:15152
0x7fa3a441e63c gimplify_stmt(tree_node**, gimple**)
        ../../../gcc/gcc/gimplify.c:7026
0x7fa3a4420671 gimplify_body(tree_node*, bool)
        ../../../gcc/gcc/gimplify.c:16197
0x7fa3a4420b3c gimplify_function_tree(tree_node*)
        ../../../gcc/gcc/gimplify.c:16351
0x7fa3a419fe5e gcc::jit::playback::function::postprocess()
        ../../../gcc/gcc/jit/jit-playback.c:1909
0x7fa3a41a13dc gcc::jit::playback::context::replay()
        ../../../gcc/gcc/jit/jit-playback.c:3250


Should an assignment to such a value be supported?

Le mercredi 15 décembre 2021 à 19:19 +0000, Petter Tomner a écrit :
> Oh ye I accidentally dropped that in the merge thank you.
> 
> I believe there is an implicit "global:" in the top of each version
> scope, so it shouldn't
> matter other than looking a bit deviant.
> 
> Regards,
> Petter
> 
> Från: Antoni Boucher <bouanto@zoho.com>
> Skickat: den 15 december 2021 15:19
> Till: Petter Tomner; David Malcolm; jit@gcc.gnu.org;
> gcc-patches@gcc.gnu.org
> Ämne: Re: [commited] jit: Support for global rvalue initialization
> and constructors
>     
> Hi Petter.
> I believe you have forgotten the line `global:` in the file
> `gcc/jit/libgccjit.map`.
> I'm not sure what this line does, but it is there for all other ABI.
> David: What do you think?
> Regards.
> 
> Le mardi 14 décembre 2021 à 17:22 +0000, Petter Tomner via Jit a
> écrit :
> > Hi!
> > 
> > I have pushed the patch for rvalue initialization and ctors for
> > libgccjit, for ABI 19.
> > 
> > Please see attached patch.
> > 
> > Regards,
> > Petter
> >           
> 
>     

    

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: bug_test.patch --]
[-- Type: text/x-patch; name="bug_test.patch", Size: 3553 bytes --]

diff --git a/gcc/testsuite/jit.dg/test-local-init-rvalue.c b/gcc/testsuite/jit.dg/test-local-init-rvalue.c
index 1d74679c07c..308f5c39538 100644
--- a/gcc/testsuite/jit.dg/test-local-init-rvalue.c
+++ b/gcc/testsuite/jit.dg/test-local-init-rvalue.c
@@ -456,12 +456,42 @@ create_code (gcc_jit_context *ctxt, void *user_data)
 				   0,
 				   gcc_jit_lvalue_as_rvalue(local));
   }
-  { /* int[50] foo() { int arr[50];
+  { /* int [50] foobar = {1,2,3,4};
+       int[50] foo() { int arr[50];
+		       arr = (int [50]){-1,-2,-3,-4,-5,-6};
+		       arr = foobar;
 		       arr = (int [50]){1,2,3,4,5,6};
+		       arr[6] = 1234;
 		       return arr;}
 
        N.B: Not a typo, returning an array.
      */
+
+    gcc_jit_rvalue *rval_1 = gcc_jit_context_new_rvalue_from_int (
+      ctxt, int_type, 1);
+    gcc_jit_rvalue *rval_2 = gcc_jit_context_new_rvalue_from_int (
+      ctxt, int_type, 2);
+    gcc_jit_rvalue *rval_3 = gcc_jit_context_new_rvalue_from_int (
+      ctxt, int_type, 3);
+    gcc_jit_rvalue *rval_4 = gcc_jit_context_new_rvalue_from_int (
+      ctxt, int_type, 4);
+
+    gcc_jit_rvalue *values4[] = {rval_1, rval_2, rval_3, rval_4};
+
+    gcc_jit_rvalue *ctor3 =
+      gcc_jit_context_new_array_constructor (ctxt,
+					     0,
+					     int50arr_type,
+					     4,
+					     values4);
+    gcc_jit_lvalue *global_intarr_1234 =
+      gcc_jit_context_new_global (ctxt, NULL,
+				  GCC_JIT_GLOBAL_EXPORTED,
+				  int50arr_type,
+				  "foobar");
+
+    gcc_jit_global_set_initializer_rvalue (global_intarr_1234, ctor3);
+
     gcc_jit_function *fn =
       gcc_jit_context_new_function (ctxt,
 				    0,
@@ -471,11 +501,19 @@ create_code (gcc_jit_context *ctxt, void *user_data)
 				    0,
 				    0,
 				    0);
+
     gcc_jit_lvalue *local =
       gcc_jit_function_new_local (fn,
 				  0,
 				  int50arr_type,
 				  "local");
+    /*
+    gcc_jit_lvalue *local =
+      gcc_jit_context_new_global (ctxt,
+				  0, GCC_JIT_GLOBAL_EXPORTED,
+				  int50arr_type,
+				  "local");
+    */
     gcc_jit_block *block = gcc_jit_function_new_block (fn, "start");
 
     gcc_jit_rvalue *values[6];
@@ -490,8 +528,37 @@ create_code (gcc_jit_context *ctxt, void *user_data)
 	 6,
 	 values);
 
+    gcc_jit_rvalue *values2[6];
+
+    for (int i = 0; i < 6; i++)
+      values2[i] = gcc_jit_context_new_rvalue_from_int (ctxt, int_type, -i - 1);
+
+    gcc_jit_rvalue *ctor2 = gcc_jit_context_new_array_constructor (
+	 ctxt,
+	 0,
+	 int50arr_type,
+	 6,
+	 values2);
+
+    gcc_jit_block_add_assignment (
+      block, 0, local,
+      gcc_jit_lvalue_as_rvalue (global_intarr_1234));
+    gcc_jit_block_add_assignment (block, 0, local, ctor2);
     gcc_jit_block_add_assignment (block, 0, local, ctor);
 
+    gcc_jit_lvalue *arr_access =
+      gcc_jit_context_new_array_access (ctxt, 0,
+					gcc_jit_lvalue_as_rvalue (local),
+					gcc_jit_context_new_rvalue_from_int (
+					  ctxt,
+					  int_type,
+					  6));
+    gcc_jit_block_add_assignment (block, 0, arr_access,
+				  gcc_jit_context_new_rvalue_from_int (
+				    ctxt,
+				    int_type,
+				    1234));
+
     gcc_jit_block_end_with_return (block,
 				   0,
 				   gcc_jit_lvalue_as_rvalue(local));
@@ -696,7 +763,7 @@ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
     struct int50arr (*fn) (void) =
       gcc_jit_result_get_code (result, "fn_int50arr_123s");
     struct int50arr ans = fn ();
-    int key[50] = {1,2,3,4,5,6};
+    int key[50] = {1,2,3,4,5,6, 1234};
 
     CHECK_VALUE (memcmp (ans.arr, key, sizeof (key)), 0);
   }

  reply	other threads:[~2021-12-30  1:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-14 17:22 Petter Tomner
2021-12-15 14:19 ` Antoni Boucher
2021-12-15 19:19   ` SV: " Petter Tomner
2021-12-29 22:45     ` Antoni Boucher
2021-12-30  1:16       ` Petter Tomner [this message]
2021-12-30  1:40         ` SV: " Antoni Boucher
2021-12-30  8:14           ` SV: " Petter Tomner

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=a479db5b024c4d7fb39bbed104717e91@kth.se \
    --to=tomner@kth.se \
    --cc=bouanto@zoho.com \
    --cc=dmalcolm@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jit@gcc.gnu.org \
    /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).