diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-11-14 14:39:57 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-11-14 14:39:57 +0000 |
commit | d083ee47a9828236016841356fc7207e7c90bbbd (patch) | |
tree | 90747a64f3a7312d7fcdd25bc7c864ff408c02df /gcc/config | |
parent | f09552335030433018fd5f7f6b9848339b5ca2da (diff) | |
download | gcc-d083ee47a9828236016841356fc7207e7c90bbbd.zip gcc-d083ee47a9828236016841356fc7207e7c90bbbd.tar.gz gcc-d083ee47a9828236016841356fc7207e7c90bbbd.tar.bz2 |
Replace mode_for_int_vector with related_int_vector_mode
mode_for_int_vector, like mode_for_vector, can sometimes return
an integer mode or an unsupported vector mode. But no callers
are interested in that case, and only want supported vector modes.
This patch therefore replaces mode_for_int_vector with
related_int_vector_mode, which gives the target a chance to pick
its preferred vector mode for the given element mode and size.
2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* machmode.h (mode_for_int_vector): Delete.
(related_int_vector_mode): Declare.
* stor-layout.c (mode_for_int_vector): Delete.
(related_int_vector_mode): New function.
* optabs.c (expand_vec_perm_1): Use related_int_vector_mode
instead of mode_for_int_vector.
(expand_vec_perm_const): Likewise.
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Likewise.
(aarch64_evpc_sve_tbl): Likewise.
* config/s390/s390.c (s390_expand_vec_compare_cc): Likewise.
(s390_expand_vcond): Likewise.
From-SVN: r278230
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 6 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 9a5f27f..b6c8d77 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1816,7 +1816,7 @@ aarch64_sve_element_int_mode (machine_mode mode) } /* Return the integer vector mode associated with SVE mode MODE. - Unlike mode_for_int_vector, this can handle the case in which + Unlike related_int_vector_mode, this can handle the case in which MODE is a predicate (and thus has a different total size). */ machine_mode @@ -12537,7 +12537,7 @@ aarch64_emit_approx_sqrt (rtx dst, rtx src, bool recp) gcc_assert (use_rsqrt_p (mode)); machine_mode mmsk = (VECTOR_MODE_P (mode) - ? mode_for_int_vector (mode).require () + ? related_int_vector_mode (mode).require () : int_mode_for_mode (mode).require ()); rtx xmsk = gen_reg_rtx (mmsk); if (!recp) @@ -19068,7 +19068,7 @@ aarch64_evpc_sve_tbl (struct expand_vec_perm_d *d) if (d->testing_p) return true; - machine_mode sel_mode = mode_for_int_vector (d->vmode).require (); + machine_mode sel_mode = related_int_vector_mode (d->vmode).require (); rtx sel = vec_perm_indices_to_rtx (sel_mode, d->perm); if (d->one_vector_p) emit_unspec2 (d->target, UNSPEC_TBL, d->op0, force_reg (sel_mode, sel)); diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index c761158..8cb19ea 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -6653,7 +6653,7 @@ s390_expand_vec_compare_cc (rtx target, enum rtx_code code, case LE: cc_producer_mode = CCVFHEmode; code = GE; swap_p = true; break; default: gcc_unreachable (); } - scratch_mode = mode_for_int_vector (GET_MODE (cmp1)).require (); + scratch_mode = related_int_vector_mode (GET_MODE (cmp1)).require (); if (inv_p) all_p = !all_p; @@ -6759,7 +6759,7 @@ s390_expand_vcond (rtx target, rtx then, rtx els, /* We always use an integral type vector to hold the comparison result. */ - result_mode = mode_for_int_vector (cmp_mode).require (); + result_mode = related_int_vector_mode (cmp_mode).require (); result_target = gen_reg_rtx (result_mode); /* We allow vector immediates as comparison operands that |