Skip to content

Commit

Permalink
RISC-V: Add test for FP llceil auto vectorization
Browse files Browse the repository at this point in the history
The below FP API are supported already by sharing the same standard
name, as well as the machine mode.

long long llceil (double);

This patch would like to add the test cases for ensuring the
correctness.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/unop/math-llceil-0.c: New test.
	* gcc.target/riscv/rvv/autovec/unop/math-llceil-run-0.c: New test.
	* gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
Signed-off-by: Pan Li <pan2.li@intel.com>
  • Loading branch information
Incarnation-p-lee authored and ouuleilei-bot committed Oct 13, 2023
1 parent c2d62cd commit 8e896c3
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
20 changes: 20 additions & 0 deletions gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-llceil-0.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math -fno-schedule-insns -fno-schedule-insns2" } */
/* { dg-final { check-function-bodies "**" "" } } */

#include <stdint-gcc.h>
#include "test-math.h"

/*
** test_double_int64_t___builtin_llceil:
** frrm\s+[atx][0-9]+
** ...
** fsrmi\s+3
** ...
** vsetvli\s+[atx][0-9]+,\s*zero,\s*e64,\s*m1,\s*ta,\s*ma
** vfcvt\.x\.f\.v\s+v[0-9]+,\s*v[0-9]+
** ...
** fsrm\s+[atx][0-9]+
** ret
*/
TEST_UNARY_CALL_CVT (double, int64_t, __builtin_llceil)
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* { dg-do run { target { riscv_v && rv64 } } } */
/* { dg-additional-options "-std=c99 -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math" } */

#include <stdint-gcc.h>
#include "test-math.h"

#define ARRAY_SIZE 128

double in[ARRAY_SIZE];
int64_t out[ARRAY_SIZE];
int64_t ref[ARRAY_SIZE];

TEST_UNARY_CALL_CVT (double, int64_t, __builtin_llceil)
TEST_ASSERT (int64_t)

TEST_INIT_CVT (double, 1.2, int64_t, __builtin_llceil (1.2), 1)
TEST_INIT_CVT (double, -1.2, int64_t, __builtin_llceil (-1.2), 2)
TEST_INIT_CVT (double, 0.5, int64_t, __builtin_llceil (0.5), 3)
TEST_INIT_CVT (double, -0.5, int64_t, __builtin_llceil (-0.5), 4)
TEST_INIT_CVT (double, 0.1, int64_t, __builtin_llceil (0.1), 5)
TEST_INIT_CVT (double, -0.1, int64_t, __builtin_llceil (-0.1), 6)
TEST_INIT_CVT (double, 3.0, int64_t, __builtin_llceil (3.0), 7)
TEST_INIT_CVT (double, -3.0, int64_t, __builtin_llceil (-3.0), 8)
TEST_INIT_CVT (double, 4503599627370495.5, int64_t, __builtin_llceil (4503599627370495.5), 9)
TEST_INIT_CVT (double, 4503599627370497.0, int64_t, __builtin_llceil (4503599627370497.0), 10)
TEST_INIT_CVT (double, -4503599627370495.5, int64_t, __builtin_llceil (-4503599627370495.5), 11)
TEST_INIT_CVT (double, -4503599627370496.0, int64_t, __builtin_llceil (-4503599627370496.0), 12)
TEST_INIT_CVT (double, 0.0, int64_t, __builtin_llceil (-0.0), 13)
TEST_INIT_CVT (double, -0.0, int64_t, __builtin_llceil (-0.0), 14)
TEST_INIT_CVT (double, 9223372036854774784.0, int64_t, __builtin_llceil (9223372036854774784.0), 15)
TEST_INIT_CVT (double, 9223372036854775808.0, int64_t, 0x7fffffffffffffff, 16)
TEST_INIT_CVT (double, -9223372036854775808.0, int64_t, __builtin_llceil (-9223372036854775808.0), 17)
TEST_INIT_CVT (double, -9223372036854777856.0, int64_t, 0x8000000000000000, 18)
TEST_INIT_CVT (double, __builtin_inf (), int64_t, __builtin_llceil (__builtin_inf ()), 19)
TEST_INIT_CVT (double, -__builtin_inf (), int64_t, __builtin_llceil (-__builtin_inf ()), 20)
TEST_INIT_CVT (double, __builtin_nan (""), int64_t, 0x7fffffffffffffff, 21)

int
main ()
{
RUN_TEST_CVT (double, int64_t, 1, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 2, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 3, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 4, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 5, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 6, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 7, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 8, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 9, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 10, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 11, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 12, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 13, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 14, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 15, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 16, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 17, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 18, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 19, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 20, __builtin_llceil, in, out, ref, ARRAY_SIZE);
RUN_TEST_CVT (double, int64_t, 21, __builtin_llceil, in, out, ref, ARRAY_SIZE);

return 0;
}
30 changes: 30 additions & 0 deletions gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */

#include "def.h"

DEF_OP_V_CVT (llceil, 1, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 2, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 4, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 8, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 16, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 32, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 64, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 128, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 256, double, int64_t, __builtin_llceil)
DEF_OP_V_CVT (llceil, 512, double, int64_t, __builtin_llceil)

/* { dg-final { scan-assembler-not {csrr} } } */
/* { dg-final { scan-tree-dump-not "1,1" "optimized" } } */
/* { dg-final { scan-tree-dump-not "2,2" "optimized" } } */
/* { dg-final { scan-tree-dump-not "4,4" "optimized" } } */
/* { dg-final { scan-tree-dump-not "16,16" "optimized" } } */
/* { dg-final { scan-tree-dump-not "32,32" "optimized" } } */
/* { dg-final { scan-tree-dump-not "64,64" "optimized" } } */
/* { dg-final { scan-tree-dump-not "128,128" "optimized" } } */
/* { dg-final { scan-tree-dump-not "256,256" "optimized" } } */
/* { dg-final { scan-tree-dump-not "512,512" "optimized" } } */
/* { dg-final { scan-tree-dump-not "1024,1024" "optimized" } } */
/* { dg-final { scan-tree-dump-not "2048,2048" "optimized" } } */
/* { dg-final { scan-tree-dump-not "4096,4096" "optimized" } } */
/* { dg-final { scan-assembler-times {vfcvt\.x\.f\.v\s+v[0-9]+,\s*v[0-9]+} 9 } } */

0 comments on commit 8e896c3

Please sign in to comment.