1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
5 /* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fdump-tree-vect-details" } */
16 #define TYPE long long
20 #define SIGN_TYPE signed TYPE
24 #define UNS_TYPE unsigned TYPE
27 #define ALIGN_ATTR __attribute__((__aligned__(ALIGN)))
29 SIGN_TYPE sa
[SIZE
] ALIGN_ATTR
;
30 SIGN_TYPE sb
[SIZE
] ALIGN_ATTR
;
31 SIGN_TYPE sc
[SIZE
] ALIGN_ATTR
;
33 UNS_TYPE ua
[SIZE
] ALIGN_ATTR
;
34 UNS_TYPE ub
[SIZE
] ALIGN_ATTR
;
35 UNS_TYPE uc
[SIZE
] ALIGN_ATTR
;
38 sign_lt (SIGN_TYPE val1
, SIGN_TYPE val2
)
42 for (i
= 0; i
< SIZE
; i
++)
43 sa
[i
] = (sb
[i
] < sc
[i
]) ? val1
: val2
;
47 sign_lte (SIGN_TYPE val1
, SIGN_TYPE val2
)
51 for (i
= 0; i
< SIZE
; i
++)
52 sa
[i
] = (sb
[i
] <= sc
[i
]) ? val1
: val2
;
56 sign_gt (SIGN_TYPE val1
, SIGN_TYPE val2
)
60 for (i
= 0; i
< SIZE
; i
++)
61 sa
[i
] = (sb
[i
] > sc
[i
]) ? val1
: val2
;
65 sign_gte (SIGN_TYPE val1
, SIGN_TYPE val2
)
69 for (i
= 0; i
< SIZE
; i
++)
70 sa
[i
] = (sb
[i
] >= sc
[i
]) ? val1
: val2
;
75 uns_lt (UNS_TYPE val1
, UNS_TYPE val2
)
79 for (i
= 0; i
< SIZE
; i
++)
80 ua
[i
] = (ub
[i
] < uc
[i
]) ? val1
: val2
;
84 uns_lte (UNS_TYPE val1
, UNS_TYPE val2
)
88 for (i
= 0; i
< SIZE
; i
++)
89 ua
[i
] = (ub
[i
] <= uc
[i
]) ? val1
: val2
;
93 uns_gt (UNS_TYPE val1
, UNS_TYPE val2
)
97 for (i
= 0; i
< SIZE
; i
++)
98 ua
[i
] = (ub
[i
] > uc
[i
]) ? val1
: val2
;
102 uns_gte (UNS_TYPE val1
, UNS_TYPE val2
)
106 for (i
= 0; i
< SIZE
; i
++)
107 ua
[i
] = (ub
[i
] >= uc
[i
]) ? val1
: val2
;
110 /* { dg-final { scan-assembler-times {\mvcmpgtsd\M} 4 } } */
111 /* { dg-final { scan-assembler-times {\mvcmpgtud\M} 4 } } */
112 /* { dg-final { scan-assembler-not {\mvcmpequd\M} } } */
113 /* { dg-final { scan-tree-dump-times "vect_model_simple_cost" 8 "vect" } } */