RISC-V: Support FP irintf auto vectorization
This patch would like to support the FP irintf auto vectorization.
* int irintf (float)
Due to the limitation that only the same size of data type are allowed
in the vectorier, the standard name lrintmn2 only act on SF => SI.
Given we have code like:
void
test_irintf (int *out, float *in, unsigned count)
{
for (unsigned i = 0; i < count; i++)
out[i] = __builtin_irintf (in[i]);
}
Before this patch:
.L3:
...
flw fa5,0(a1)
fcvt.w.s a5,fa5,dyn
sw a5,-4(a0)
...
bne a1,a4,.L3
After this patch:
.L3:
...
vle32.v v1,0(a1)
vfcvt.x.f.v v1,v1
vse32.v v1,0(a0)
...
bne a2,zero,.L3
The rest part like DF => SI/HF => SI will be covered by the hook
TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION.
gcc/ChangeLog:
* config/riscv/autovec.md (lrint<mode><vlconvert>2): Rename from.
(lrint<mode><v_i_l_ll_convert>2): Rename to.
* config/riscv/vector-iterators.md: Rename and remove TARGET_64BIT.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/unop/math-irint-0.c: New test.
* gcc.target/riscv/rvv/autovec/unop/math-irint-run-0.c: New test.
* gcc.target/riscv/rvv/autovec/vls/math-irint-0.c: New test.
Signed-off-by:
Pan Li <pan2.li@intel.com>
Showing
- gcc/config/riscv/autovec.md 5 additions, 4 deletionsgcc/config/riscv/autovec.md
- gcc/config/riscv/vector-iterators.md 37 additions, 37 deletionsgcc/config/riscv/vector-iterators.md
- gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-irint-0.c 14 additions, 0 deletions...estsuite/gcc.target/riscv/rvv/autovec/unop/math-irint-0.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-irint-run-0.c 63 additions, 0 deletions...uite/gcc.target/riscv/rvv/autovec/unop/math-irint-run-0.c
- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c 30 additions, 0 deletions...testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c
Loading
Please register or sign in to comment