aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Vieira <andre.simoesdiasvieira@arm.com>2022-10-13 10:34:27 +0100
committerAndre Vieira <andre.simoesdiasvieira@arm.com>2022-10-13 10:34:27 +0100
commit7f9a7465c863e482708d2a00f5f7ff91ae3a7e0b (patch)
tree9920213cbd3ac1cff2cdafe44277d4754203f358
parent7c059880fca175589efc8e06ef458020a005658d (diff)
downloadgcc-7f9a7465c863e482708d2a00f5f7ff91ae3a7e0b.zip
gcc-7f9a7465c863e482708d2a00f5f7ff91ae3a7e0b.tar.gz
gcc-7f9a7465c863e482708d2a00f5f7ff91ae3a7e0b.tar.bz2
vect: Don't pattern match BITFIELD_REF's of non-integrals [PR107226]
The original patch supported matching the vect_recog_bitfield_ref_pattern for BITFIELD_REF's where the first operand didn't have a INTEGRAL_TYPE_P type. That means it would also match vectors, leading to regressions in targets that supported vectorization of those. gcc/ChangeLog: PR tree-optimization/107226 * tree-vect-patterns.cc (vect_recog_bitfield_ref_pattern): Reject BITFIELD_REF's with non integral typed first operands.
-rw-r--r--gcc/tree-vect-patterns.cc21
1 files changed, 2 insertions, 19 deletions
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 0cc315d..6afd57a 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -1913,6 +1913,7 @@ vect_recog_bitfield_ref_pattern (vec_info *vinfo, stmt_vec_info stmt_info,
return NULL;
if (!INTEGRAL_TYPE_P (TREE_TYPE (bf_ref))
+ || !INTEGRAL_TYPE_P (TREE_TYPE (container))
|| TYPE_MODE (TREE_TYPE (container)) == E_BLKmode)
return NULL;
@@ -1921,25 +1922,7 @@ vect_recog_bitfield_ref_pattern (vec_info *vinfo, stmt_vec_info stmt_info,
tree ret = gimple_assign_lhs (first_stmt);
tree ret_type = TREE_TYPE (ret);
bool shift_first = true;
- tree vectype;
-
- /* If the first operand of the BIT_FIELD_REF is not an INTEGER type, convert
- it to one of the same width so we can perform the necessary masking and
- shifting. */
- if (!INTEGRAL_TYPE_P (TREE_TYPE (container)))
- {
- unsigned HOST_WIDE_INT container_size =
- tree_to_uhwi (TYPE_SIZE (TREE_TYPE (container)));
- tree int_type = build_nonstandard_integer_type (container_size, true);
- pattern_stmt
- = gimple_build_assign (vect_recog_temp_ssa_var (int_type),
- VIEW_CONVERT_EXPR, container);
- vectype = get_vectype_for_scalar_type (vinfo, int_type);
- container = gimple_assign_lhs (pattern_stmt);
- append_pattern_def_seq (vinfo, stmt_info, pattern_stmt, vectype);
- }
- else
- vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (container));
+ tree vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (container));
/* We move the conversion earlier if the loaded type is smaller than the
return type to enable the use of widening loads. */