diff options
author | Alan Lawrence <alan.lawrence@arm.com> | 2014-11-13 16:20:13 +0000 |
---|---|---|
committer | Alan Lawrence <alalaw01@gcc.gnu.org> | 2014-11-13 16:20:13 +0000 |
commit | 557be5a8767902f204e8afa04551a387eac33a26 (patch) | |
tree | eec657cc746f77494e987ad6b044c2a73effafa8 /gcc/tree-vect-data-refs.c | |
parent | 1c5fd343ded2f26d6bf1e6459d6d7b80cb8564e6 (diff) | |
download | gcc-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.c | 51 |
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++) { |