On Sat, Apr 27, 2024 at 1:04 AM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > Currently the middle-end only knows how to support temporal stores > (the undocumented storent optab) so let's verify that the only time > we set nontemporal_move on an assign is if the the lhs is not a > gimple reg. > > Bootstrapped and tested on x86_64-linux-gnu no regressions.
OK. > gcc/ChangeLog: > > PR middle-end/112976 > * tree-cfg.cc (verify_gimple_assign): Verify that > nontmporal moves are stores. > * gimple.h (struct gimple): Note that only > nontemporal stores are supported. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/gimple.h | 3 ++- > gcc/tree-cfg.cc | 11 +++++++++++ > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/gcc/gimple.h b/gcc/gimple.h > index 8a8ca109bbf..bd315ffc2dd 100644 > --- a/gcc/gimple.h > +++ b/gcc/gimple.h > @@ -236,7 +236,8 @@ struct GTY((desc ("gimple_statement_structure (&%h)"), > tag ("GSS_BASE"), > for clearing this bit before using it. */ > unsigned int visited : 1; > > - /* Nonzero if this tuple represents a non-temporal move. */ > + /* Nonzero if this tuple represents a non-temporal move; currently > + only stores are supported. */ > unsigned int nontemporal_move : 1; > > /* Pass local flags. These flags are free for any pass to use as > diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc > index b1ba33018fd..06a96f96be7 100644 > --- a/gcc/tree-cfg.cc > +++ b/gcc/tree-cfg.cc > @@ -4837,6 +4837,17 @@ verify_gimple_assign_single (gassign *stmt) > static bool > verify_gimple_assign (gassign *stmt) > { > + if (gimple_assign_nontemporal_move_p (stmt)) > + { > + tree lhs = gimple_assign_lhs (stmt); > + if (is_gimple_reg (lhs)) > + { > + error ("nontemporal store lhs cannot a gimple register"); > + debug_generic_stmt (lhs); > + return true; > + } > + } > + > switch (gimple_assign_rhs_class (stmt)) > { > case GIMPLE_SINGLE_RHS: > -- > 2.43.0 >