On 11/20/23 15:46, David Malcolm wrote:
On Fri, 2023-11-17 at 14:09 -0700, Jeff Law wrote:


On 11/17/23 14:08, Antoni Boucher wrote:
In contrast with the other frontends, libgccjit can be executed
multiple times in a row in the same process.
Yup.  I'm aware of that.  Even so calling init_emit_once more than
one
time still seems wrong.

There are two approaches we follow when dealing with state stored in
global variables:
(a) clean it all up via the various functions called from
toplev::finalize
(b) make it effectively constant once initialized, with idempotent
initialization

The multiple in-process executions of libgccjit could pass in different
code-generation options.  Does the RTL-initialization logic depend
anywhere on flags passed in, because if so, we're probably going to
need to re-run the initialization.
The INIT_EXPANDERS code would be the most concerning as it's implementation is totally hidden and provided by the target. I wouldn't be at all surprised if one or more do something evil in there. That probably needs to be evaluated on a target by target basis.

The rest really do look like single init, even in a JIT environment kinds of things -- ie all the shared constants in RTL.



Jeff

Reply via email to