[RFC/PATCH] IFN: Fix mask_{load,store} optab support macros

Kewen.Lin linkw@linux.ibm.com
Wed Jun 24 03:12:28 GMT 2020


Hi,

When I am working on IFNs for vector with length, I noticed that the
current optab support query for mask_load/mask_store looks unexpected.
The mask_load/mask_store requires two modes for convert_optab query,
but the macros direct_mask_{load,store}_optab_supported_p uses
direct_optab_supported_p which asserts type pair should have the same mode.

I'm not sure whether we have some special reason here or just a typo,
since everything goes well now, mask_{load,store} optab check is mainly
handled by can_vec_mask_load_store_p.

But if we have some codes as below (eg: one checking for all IFNs finally)

  tree_pair types = direct_internal_fn_types (ifn, call);
  if(direct_internal_fn_supported_p (ifn, types, OPTIMIZE_FOR_SPEED) ...

It will cause ICE.

Does it make sense to fix it?

Thanks in advance!

BR,
Kewen
-----
gcc/ChangeLog:

	* internal-fn.c (direct_mask_load_optab_supported_p): Use
	convert_optab_supported_p instead of direct_optab_supported_p.
	(direct_mask_store_optab_supported_p): Likewise.

-----
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index f9e851069a5..1e53ced60eb 100644
--- a/gcc/internal-fn.c
+++ b/gcc/internal-fn.c
@@ -3142,12 +3142,12 @@ multi_vector_optab_supported_p (convert_optab optab, tree_pair types,
 #define direct_cond_unary_optab_supported_p direct_optab_supported_p
 #define direct_cond_binary_optab_supported_p direct_optab_supported_p
 #define direct_cond_ternary_optab_supported_p direct_optab_supported_p
-#define direct_mask_load_optab_supported_p direct_optab_supported_p
+#define direct_mask_load_optab_supported_p convert_optab_supported_p
 #define direct_load_lanes_optab_supported_p multi_vector_optab_supported_p
 #define direct_mask_load_lanes_optab_supported_p multi_vector_optab_supported_p
 #define direct_gather_load_optab_supported_p convert_optab_supported_p
 #define direct_len_load_optab_supported_p direct_optab_supported_p
-#define direct_mask_store_optab_supported_p direct_optab_supported_p
+#define direct_mask_store_optab_supported_p convert_optab_supported_p
 #define direct_store_lanes_optab_supported_p multi_vector_optab_supported_p
 #define direct_mask_store_lanes_optab_supported_p multi_vector_optab_supported_p
 #define direct_scatter_store_optab_supported_p convert_optab_supported_p


More information about the Gcc-patches mailing list