aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorAlan Lawrence <alan.lawrence@arm.com>2014-11-13 16:20:13 +0000
committerAlan Lawrence <alalaw01@gcc.gnu.org>2014-11-13 16:20:13 +0000
commit557be5a8767902f204e8afa04551a387eac33a26 (patch)
treeeec657cc746f77494e987ad6b044c2a73effafa8 /gcc/tree-vect-data-refs.c
parent1c5fd343ded2f26d6bf1e6459d6d7b80cb8564e6 (diff)
downloadgcc-557be5a8767902f204e8afa04551a387eac33a26.zip
gcc-557be5a8767902f204e8afa04551a387eac33a26.tar.gz
gcc-557be5a8767902f204e8afa04551a387eac33a26.tar.bz2
[Vectorizer] Split vect_gen_perm_mask into _checked and _any variants
* tree-vectorizer.h (vect_gen_perm_mask): Remove. (vect_gen_perm_mask_checked, vect_gen_perm_mask_any): New. tree_vec_data_refs.c (vect_permute_load_chain, vec_permute_store_chain, vec_shift_permute_load_chain): Replace vect_gen_perm_mask & assert with vect_gen_perm_mask_checked. * tree-vect-stmts.c (vectorizable_mask_load_store, vectorizable_load): Likewise. (vect_gen_perm_mask_checked): New. (vect_gen_perm_mask): Remove can_vec_perm_p check, rename to... (vect_gen_perm_mask_any): ...this. (perm_mask_for_reverse): Call can_vec_perm_p and vect_gen_perm_mask_checked. From-SVN: r217508
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c51
1 files changed, 17 insertions, 34 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index d07885f..2f8e0c2 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -4619,8 +4619,7 @@ vect_permute_store_chain (vec<tree> dr_chain,
if (3 * i + nelt2 < nelt)
sel[3 * i + nelt2] = 0;
}
- perm3_mask_low = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm3_mask_low != NULL);
+ perm3_mask_low = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < nelt; i++)
{
@@ -4631,8 +4630,7 @@ vect_permute_store_chain (vec<tree> dr_chain,
if (3 * i + nelt2 < nelt)
sel[3 * i + nelt2] = nelt + j2++;
}
- perm3_mask_high = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm3_mask_high != NULL);
+ perm3_mask_high = vect_gen_perm_mask_checked (vectype, sel);
vect1 = dr_chain[0];
vect2 = dr_chain[1];
@@ -4671,13 +4669,11 @@ vect_permute_store_chain (vec<tree> dr_chain,
sel[i * 2] = i;
sel[i * 2 + 1] = i + nelt;
}
- perm_mask_high = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm_mask_high != NULL);
+ perm_mask_high = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < nelt; i++)
sel[i] += nelt / 2;
- perm_mask_low = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm_mask_low != NULL);
+ perm_mask_low = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0, n = log_length; i < n; i++)
{
@@ -5180,8 +5176,7 @@ vect_permute_load_chain (vec<tree> dr_chain,
sel[i] = 3 * i + k;
else
sel[i] = 0;
- perm3_mask_low = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm3_mask_low != NULL);
+ perm3_mask_low = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0, j = 0; i < nelt; i++)
if (3 * i + k < 2 * nelt)
@@ -5189,8 +5184,7 @@ vect_permute_load_chain (vec<tree> dr_chain,
else
sel[i] = nelt + ((nelt + k) % 3) + 3 * (j++);
- perm3_mask_high = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm3_mask_high != NULL);
+ perm3_mask_high = vect_gen_perm_mask_checked (vectype, sel);
first_vect = dr_chain[0];
second_vect = dr_chain[1];
@@ -5224,13 +5218,11 @@ vect_permute_load_chain (vec<tree> dr_chain,
for (i = 0; i < nelt; ++i)
sel[i] = i * 2;
- perm_mask_even = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm_mask_even != NULL);
+ perm_mask_even = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < nelt; ++i)
sel[i] = i * 2 + 1;
- perm_mask_odd = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm_mask_odd != NULL);
+ perm_mask_odd = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < log_length; i++)
{
@@ -5386,8 +5378,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
supported by target\n");
return false;
}
- perm2_mask1 = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm2_mask1 != NULL);
+ perm2_mask1 = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < nelt / 2; ++i)
sel[i] = i * 2 + 1;
@@ -5401,8 +5392,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
supported by target\n");
return false;
}
- perm2_mask2 = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm2_mask2 != NULL);
+ perm2_mask2 = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to shift all elements.
For vector length 8 it is {4 5 6 7 8 9 10 11}. */
@@ -5415,8 +5405,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"shift permutation is not supported by target\n");
return false;
}
- shift1_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (shift1_mask != NULL);
+ shift1_mask = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to select vector from 2.
For vector length 8 it is {0 1 2 3 12 13 14 15}. */
@@ -5431,8 +5420,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"select is not supported by target\n");
return false;
}
- select_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (select_mask != NULL);
+ select_mask = vect_gen_perm_mask_checked (vectype, sel);
for (i = 0; i < log_length; i++)
{
@@ -5498,8 +5486,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
supported by target\n");
return false;
}
- perm3_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (perm3_mask != NULL);
+ perm3_mask = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to shift all elements.
For vector length 8 it is {6 7 8 9 10 11 12 13}. */
@@ -5512,8 +5499,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"shift permutation is not supported by target\n");
return false;
}
- shift1_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (shift1_mask != NULL);
+ shift1_mask = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to shift all elements.
For vector length 8 it is {5 6 7 8 9 10 11 12}. */
@@ -5526,8 +5512,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"shift permutation is not supported by target\n");
return false;
}
- shift2_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (shift2_mask != NULL);
+ shift2_mask = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to shift all elements.
For vector length 8 it is {3 4 5 6 7 8 9 10}. */
@@ -5540,8 +5525,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"shift permutation is not supported by target\n");
return false;
}
- shift3_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (shift3_mask != NULL);
+ shift3_mask = vect_gen_perm_mask_checked (vectype, sel);
/* Generating permutation constant to shift all elements.
For vector length 8 it is {5 6 7 8 9 10 11 12}. */
@@ -5554,8 +5538,7 @@ vect_shift_permute_load_chain (vec<tree> dr_chain,
"shift permutation is not supported by target\n");
return false;
}
- shift4_mask = vect_gen_perm_mask (vectype, sel);
- gcc_assert (shift4_mask != NULL);
+ shift4_mask = vect_gen_perm_mask_checked (vectype, sel);
for (k = 0; k < 3; k++)
{