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. 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