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_apinski@quicinc.com>
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
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's lhs cannot be a gimple register");
+ debug_generic_stmt (lhs);
+ return true;
+ }
+ }
+
switch (gimple_assign_rhs_class (stmt))
{
case GIMPLE_SINGLE_RHS: