On Tue, 2023-10-03 at 10:32 -0400, Andrew MacLeod wrote: > Pass counting in VRP is used to decide when to call early VRP, pass > the > flag to enable warnings, and when the final pass is. > > If you try to add additional passes, this becomes quite fragile. This > patch simply chooses the pass based on the data pointer passed in, > and > remove the pass counter. The first FULL VRP pass invokes the > warning > code, and the flag passed in now represents the FINAL pass of VRP. > There is no longer a global flag which, as it turns out, wasn't > working > well with the JIT compiler, but when undetected. (Thanks to dmalcolm > for helping me sort out what was going on there) > > > Bootstraps on x86_64-pc-linux-gnu with no regressions. Pushed.
[CCing jit mailing list] I'm worried that this patch may have "papered over" an issue with libgccjit. Specifically: [...snip...] > diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc > index d7b194f5904..05266dfe34a 100644 > --- a/gcc/tree-vrp.cc > +++ b/gcc/tree-vrp.cc > @@ -1120,36 +1120,44 @@ const pass_data pass_data_early_vrp = > ( TODO_cleanup_cfg | TODO_update_ssa | TODO_verify_all ), > }; > > -static int vrp_pass_num = 0; > +static bool run_warning_pass = true; I see the global variable "run_warning_pass" starts out true here > class pass_vrp : public gimple_opt_pass > { > public: > pass_vrp (gcc::context *ctxt, const pass_data &data_) > - : gimple_opt_pass (data_, ctxt), data (data_), warn_array_bounds_p > (false), > - my_pass (vrp_pass_num++) > - {} > + : gimple_opt_pass (data_, ctxt), data (data_), > + warn_array_bounds_p (false), final_p (false) > + { > + // Only the frst VRP pass should run warnings. > + if (&data == &pass_data_vrp) > + { > + warn_array_bounds_p = run_warning_pass; > + run_warning_pass = false; ...and run_warning_pass affects the member data pass_vrp::warn_array_bounds_p here, and then becomes false, but nothing seems to ever reset run_warning_pass back to true. It seems that with this patch, if libgccjit compiles more than one gcc_jit_context in the same process, the first context compilation will warn, whereas subsequent ones in that process won't. Or did I miss something? [...snip...] Thoughts? Dave