From b18a97e5dd0935e1c4a626c230f21457d0aad3d5 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Mon, 13 Sep 2021 19:49:49 +0200 Subject: Merged current trunk to branch. --- gcc/optabs-query.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) (limited to 'gcc/optabs-query.c') diff --git a/gcc/optabs-query.c b/gcc/optabs-query.c index be24105..a6dd0fe 100644 --- a/gcc/optabs-query.c +++ b/gcc/optabs-query.c @@ -1,5 +1,5 @@ /* IR-agnostic target query functions relating to optabs - Copyright (C) 1987-2020 Free Software Foundation, Inc. + Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GCC. @@ -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; } -- cgit v1.1