aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs-query.c
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2021-09-13 10:37:49 -0700
committerIan Lance Taylor <iant@golang.org>2021-09-13 10:37:49 -0700
commite252b51ccde010cbd2a146485d8045103cd99533 (patch)
treee060f101cdc32bf5e520de8e5275db9d4236b74c /gcc/optabs-query.c
parentf10c7c4596dda99d2ee872c995ae4aeda65adbdf (diff)
parent104c05c5284b7822d770ee51a7d91946c7e56d50 (diff)
downloadgcc-e252b51ccde010cbd2a146485d8045103cd99533.zip
gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.gz
gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.bz2
Merge from trunk revision 104c05c5284b7822d770ee51a7d91946c7e56d50.
Diffstat (limited to 'gcc/optabs-query.c')
-rw-r--r--gcc/optabs-query.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/gcc/optabs-query.c b/gcc/optabs-query.c
index 3248ce2..a6dd0fe 100644
--- a/gcc/optabs-query.c
+++ b/gcc/optabs-query.c
@@ -582,27 +582,18 @@ can_vec_mask_load_store_p (machine_mode mode,
return false;
vmode = targetm.vectorize.preferred_simd_mode (smode);
- if (!VECTOR_MODE_P (vmode))
- return false;
-
- if (targetm.vectorize.get_mask_mode (vmode).exists (&mask_mode)
+ if (VECTOR_MODE_P (vmode)
+ && targetm.vectorize.get_mask_mode (vmode).exists (&mask_mode)
&& convert_optab_handler (op, vmode, mask_mode) != CODE_FOR_nothing)
return true;
auto_vector_modes vector_modes;
targetm.vectorize.autovectorize_vector_modes (&vector_modes, true);
- for (unsigned int i = 0; i < vector_modes.length (); ++i)
- {
- poly_uint64 cur = GET_MODE_SIZE (vector_modes[i]);
- poly_uint64 nunits;
- if (!multiple_p (cur, GET_MODE_SIZE (smode), &nunits))
- continue;
- if (mode_for_vector (smode, nunits).exists (&vmode)
- && VECTOR_MODE_P (vmode)
- && targetm.vectorize.get_mask_mode (vmode).exists (&mask_mode)
- && convert_optab_handler (op, vmode, mask_mode) != CODE_FOR_nothing)
- return true;
- }
+ for (machine_mode base_mode : vector_modes)
+ if (related_vector_mode (base_mode, smode).exists (&vmode)
+ && targetm.vectorize.get_mask_mode (vmode).exists (&mask_mode)
+ && convert_optab_handler (op, vmode, mask_mode) != CODE_FOR_nothing)
+ return true;
return false;
}
@@ -749,7 +740,8 @@ supports_vec_gather_load_p ()
this_fn_optabs->supports_vec_gather_load_cached = true;
this_fn_optabs->supports_vec_gather_load
- = supports_vec_convert_optab_p (gather_load_optab);
+ = (supports_vec_convert_optab_p (gather_load_optab)
+ || supports_vec_convert_optab_p (mask_gather_load_optab));
return this_fn_optabs->supports_vec_gather_load;
}
@@ -766,7 +758,8 @@ supports_vec_scatter_store_p ()
this_fn_optabs->supports_vec_scatter_store_cached = true;
this_fn_optabs->supports_vec_scatter_store
- = supports_vec_convert_optab_p (scatter_store_optab);
+ = (supports_vec_convert_optab_p (scatter_store_optab)
+ || supports_vec_convert_optab_p (mask_scatter_store_optab));
return this_fn_optabs->supports_vec_scatter_store;
}