]> gcc.gnu.org Git - gcc.git/blob - gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop_run-1.c
RISC-V: Add RVV FMA auto-vectorization support
[gcc.git] / gcc / testsuite / gcc.target / riscv / rvv / autovec / ternop / ternop_run-1.c
1 /* { dg-do run { target { riscv_vector } } } */
2 /* { dg-additional-options "--param=riscv-autovec-preference=scalable" } */
3
4 #include "ternop-1.c"
5
6 #define TEST_LOOP(TYPE, NUM) \
7 { \
8 TYPE array1_##NUM[NUM] = {}; \
9 TYPE array2_##NUM[NUM] = {}; \
10 TYPE array3_##NUM[NUM] = {}; \
11 TYPE array4_##NUM[NUM] = {}; \
12 for (int i = 0; i < NUM; ++i) \
13 { \
14 array1_##NUM[i] = (i & 1) + 5; \
15 array2_##NUM[i] = i - NUM / 3; \
16 array3_##NUM[i] = NUM - NUM / 3 - i; \
17 array4_##NUM[i] = NUM - NUM / 3 - i; \
18 asm volatile("" ::: "memory"); \
19 } \
20 ternop_##TYPE (array3_##NUM, array1_##NUM, array2_##NUM, NUM); \
21 for (int i = 0; i < NUM; i++) \
22 if (array3_##NUM[i] \
23 != (TYPE) (array1_##NUM[i] * array2_##NUM[i] + array4_##NUM[i])) \
24 __builtin_abort (); \
25 }
26
27 int __attribute__ ((optimize (0))) main ()
28 {
29 TEST_LOOP (int8_t, 7)
30 TEST_LOOP (uint8_t, 7)
31 TEST_LOOP (int16_t, 7)
32 TEST_LOOP (uint16_t, 7)
33 TEST_LOOP (int32_t, 7)
34 TEST_LOOP (uint32_t, 7)
35 TEST_LOOP (int64_t, 7)
36 TEST_LOOP (uint64_t, 7)
37
38 TEST_LOOP (int8_t, 16)
39 TEST_LOOP (uint8_t, 16)
40 TEST_LOOP (int16_t, 16)
41 TEST_LOOP (uint16_t, 16)
42 TEST_LOOP (int32_t, 16)
43 TEST_LOOP (uint32_t, 16)
44 TEST_LOOP (int64_t, 16)
45 TEST_LOOP (uint64_t, 16)
46
47 TEST_LOOP (int8_t, 77)
48 TEST_LOOP (uint8_t, 77)
49 TEST_LOOP (int16_t, 77)
50 TEST_LOOP (uint16_t, 77)
51 TEST_LOOP (int32_t, 77)
52 TEST_LOOP (uint32_t, 77)
53 TEST_LOOP (int64_t, 77)
54 TEST_LOOP (uint64_t, 77)
55
56 TEST_LOOP (int8_t, 128)
57 TEST_LOOP (uint8_t, 128)
58 TEST_LOOP (int16_t, 128)
59 TEST_LOOP (uint16_t, 128)
60 TEST_LOOP (int32_t, 128)
61 TEST_LOOP (uint32_t, 128)
62 TEST_LOOP (int64_t, 128)
63 TEST_LOOP (uint64_t, 128)
64
65 TEST_LOOP (int8_t, 15641)
66 TEST_LOOP (uint8_t, 15641)
67 TEST_LOOP (int16_t, 15641)
68 TEST_LOOP (uint16_t, 15641)
69 TEST_LOOP (int32_t, 15641)
70 TEST_LOOP (uint32_t, 15641)
71 TEST_LOOP (int64_t, 15641)
72 TEST_LOOP (uint64_t, 15641)
73
74 TEST_LOOP (int8_t, 795)
75 TEST_LOOP (uint8_t, 795)
76 TEST_LOOP (int16_t, 795)
77 TEST_LOOP (uint16_t, 795)
78 TEST_LOOP (int32_t, 795)
79 TEST_LOOP (uint32_t, 795)
80 TEST_LOOP (int64_t, 795)
81 TEST_LOOP (uint64_t, 795)
82
83 return 0;
84 }
This page took 0.037853 seconds and 5 git commands to generate.