[5/9] Add mode_for_int_vector helper functions
Richard Biener
richard.guenther@gmail.com
Tue Sep 5 12:58:00 GMT 2017
On Tue, Sep 5, 2017 at 2:33 PM, Richard Sandiford
<richard.sandiford@linaro.org> wrote:
> Richard Biener <richard.guenther@gmail.com> writes:
>> On Mon, Sep 4, 2017 at 1:36 PM, Richard Sandiford
>> <richard.sandiford@linaro.org> wrote:
>>> There are at least a few places that want to create an integer vector
>>> with a specified element size and element count, or to create the
>>> integer equivalent of an existing mode. This patch adds helpers
>>> for doing that.
>>>
>>> The require ()s are all used in functions that go on to emit
>>> instructions that use the result as a vector mode.
>>>
>>> 2017-09-04 Richard Sandiford <richard.sandiford@linaro.org>
>>>
>>> gcc/
>>> * machmode.h (mode_for_int_vector): New function.
>>> * stor-layout.c (mode_for_int_vector): Likewise.
>>> * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Use it.
>>> * config/powerpcspe/powerpcspe.c (rs6000_do_expand_vec_perm): Likewise.
>>> * config/rs6000/rs6000.c (rs6000_do_expand_vec_perm): Likewise.
>>> * config/s390/s390.c (s390_expand_vec_compare_cc): Likewise.
>>> (s390_expand_vcond): Likewise.
>>>
>>> Index: gcc/machmode.h
>>> ===================================================================
>>> --- gcc/machmode.h 2017-09-04 12:18:50.674859598 +0100
>>> +++ gcc/machmode.h 2017-09-04 12:18:53.153306182 +0100
>>> @@ -706,6 +706,21 @@ extern machine_mode bitwise_mode_for_mod
>>>
>>> extern machine_mode mode_for_vector (scalar_mode, unsigned);
>>>
>>> +extern opt_machine_mode mode_for_int_vector (unsigned int, unsigned int);
>>> +
>>> +/* Return the integer vector equivalent of MODE, if one exists. In other
>>> + words, return the mode for an integer vector that has the same number
>>> + of bits as MODE and the same number of elements as MODE, with the
>>> + latter being 1 if MODE is scalar. The returned mode can be either
>>> + an integer mode or a vector mode. */
>>> +
>>> +inline opt_machine_mode
>>> +mode_for_int_vector (machine_mode mode)
>>
>> So this is similar to int_mode_for_mode which means...
>>
>> int_vector_mode_for_vector_mode?
>
> I'd used that style of name originally, but didn't like it because
> it gave the impression that the result would be a VECTOR_MODE_P.
Oh, it isn't? Ah, yes, it can be an integer mode...
> mode_for_int_vector was supposed to be consistent with mode_for_vector.
>
>>> +{
>>
>> Nothing prevents use with non-vector MODE here, can we place an assert here?
>
> That was deliberate. I wanted it to work with scalars too, returning
> a V1xx in that case.
Ok.
>>> + return mode_for_int_vector (GET_MODE_UNIT_BITSIZE (mode),
>>> + GET_MODE_NUNITS (mode));
>>> +}
>>> +
>>> /* A class for iterating through possible bitfield modes. */
>>> class bit_field_mode_iterator
>>> {
>>> Index: gcc/stor-layout.c
>>> ===================================================================
>>> --- gcc/stor-layout.c 2017-09-04 12:18:50.675762071 +0100
>>> +++ gcc/stor-layout.c 2017-09-04 12:18:53.153306182 +0100
>>> @@ -517,6 +517,23 @@ mode_for_vector (scalar_mode innermode,
>>> return mode;
>>> }
>>>
>>> +/* Return the mode for a vector that has NUNITS integer elements of
>>> + INT_BITS bits each, if such a mode exists. The mode can be either
>>> + an integer mode or a vector mode. */
>>> +
>>> +opt_machine_mode
>>> +mode_for_int_vector (unsigned int int_bits, unsigned int nunits)
>>
>> That's more vector_int_mode_for_size (...), no? Similar to int_mode_for_size
>> or mode_for_size.
>>
>> Ok with those renamings. I wonder if int_vector_mode_for_vector_mode
>> is necessary -- is calling vector_int_mode_for_size
>> (GET_MODE_UNIT_BITSIZE (mode),
>> GET_MODE_NUNITS (mode)) too cumbersome?
>
> IMO yes :-) It's certainly longer than the equivalent int_mode_for_mode
> expansion.
I see.
Patch is ok as-is then.
Thanks,
Richard.
> Thanks,
> Richard
More information about the Gcc-patches
mailing list