Could vector type of poly_int and compile-time constants be enabled at the same time ?
Richard Sandiford
richard.sandiford@arm.com
Thu Apr 29 09:03:38 GMT 2021
JojoR via Gcc <gcc@gcc.gnu.org> writes:
> Hi,
>
> I have a little know about for 'Sizes and offsets as runtime invariants’,
>
> and need to add vector types like V2SImode as compile-time constants
> with enabled vector types of runtime invariants.
>
> Could I enable two vector types at same time ?
> I guess it’s not allow :(
>
> Could anyone give me some hints ?
Vector modes like V2SI always represent fixed-length vectors.
Variable-length vector modes have to be defined explicitly in the
.def file.
A target can have both variable-length and fixed-length vectors.
Probably the best place to look for examples is the aarch64 backend.
There we have:
- V2SI (64-bit Advanced SIMD)
- V4SI (128-bit Advanced SIMD)
- VNx2SI (variable-length SVE vector with 2 32-bit elements per
128-bit granule)
- VNx4SI (variable-length SVE vector with 4 32-bit elements per
128-bit granule)
etc.
In target-independent code, things like GET_MODE_NUNITS are always
poly_ints. In other words, the number of elements might be constant
(is_constant()) or might vary at runtime (!is_constant()).
On targets like x86 that don't define variable-length vectors,
things like GET_MODE_NUNITS are always compile-time constants
*within config/i386*. This removes the need to use is_constant()
everywhere.
On targets like aarch64 that do define variable-length vectors,
things like GET_MODE_NUNITS are poly_ints even in config/aarch64.
However, GET_MODE_NUNITS is still constant for V2SI and V4SI.
We just have to use to_constant() to get the constant 2 or 4.
Thanks,
Richard
More information about the Gcc
mailing list