2 /* { dg-require-effective-target power10_hw } */
3 /* { dg-options "-mdejagnu-cpu=power10 -O2 -ftree-vectorize -fno-vect-cost-model" } */
5 /* Verify the execution goes well with shift count either 32 or 48. */
10 typedef signed short sh
;
11 typedef signed long long sll
;
12 typedef unsigned int ui
;
13 typedef unsigned short uh
;
14 typedef unsigned long long ull
;
21 #define TEST(NTYPE, TYPE, WTYPE, CNT) \
22 void __attribute__ ((noipa)) test_##TYPE##CNT () \
24 for (int i = 0; i < N; i++) \
25 NTYPE##_c[i] = ((WTYPE) TYPE##_a[i] * (WTYPE) TYPE##_b[i]) >> CNT; \
28 void __attribute__ ((noipa, optimize ("O1"))) check_##TYPE##CNT () \
30 test_##TYPE##CNT (); \
31 for (int i = 0; i < N; i++) \
33 NTYPE exp = ((WTYPE) TYPE##_a[i] * (WTYPE) TYPE##_b[i]) >> CNT; \
34 if (NTYPE##_c[i] != exp) \
39 TEST (sh
, si
, sll
, 32)
40 TEST (sh
, si
, sll
, 48)
41 TEST (uh
, ui
, ull
, 32)
42 TEST (uh
, ui
, ull
, 48)
48 for (int i
= 0; i
< N
; i
++)
50 ui_a
[i
] = si_a
[i
] = 0x12345678ULL
+ 0x1000ULL
* (i
* 3 - 1);
51 ui_b
[i
] = si_b
[i
] = 0x87654321ULL
- 0x500000ULL
* (i
* 5 + 1);