1 /* Similiar to vec-cmp-1.c but requires that
2 s390_canonicalize_comparison is able to merge the the two nested
3 compares. */
4
5 /* { dg-do compile { target { s390*-*-* } } } */
6 /* { dg-options "-O3 -mzarch -march=z13 -mzvector -fno-asynchronous-unwind-tables" } */
7
8 #include <vecintrin.h>
9
10 int g = 1;
11
12 void __attribute__((noinline,noclone))
all_eq_double(vector double a,vector double b)13 all_eq_double (vector double a, vector double b)
14 {
15 if (__builtin_expect (vec_all_eq (a, b), 1))
16 g = 2;
17 }
18 /* { dg-final { scan-assembler-times all_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tjne 1 } } */
19
20 void __attribute__((noinline,noclone))
all_ne_double(vector double a,vector double b)21 all_ne_double (vector double a, vector double b)
22 {
23 if (__builtin_expect (vec_all_ne (a, b), 1))
24 g = 2;
25 }
26 /* { dg-final { scan-assembler-times all_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tjle 1 } } */
27
28 void __attribute__((noinline,noclone))
all_gt_double(vector double a,vector double b)29 all_gt_double (vector double a, vector double b)
30 {
31 if (__builtin_expect (vec_all_gt (a, b), 1))
32 g = 2;
33 }
34 /* { dg-final { scan-assembler-times all_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tjne 1 } } */
35
36 void __attribute__((noinline,noclone))
all_lt_double(vector double a,vector double b)37 all_lt_double (vector double a, vector double b)
38 {
39 if (__builtin_expect (vec_all_lt (a, b), 1))
40 g = 2;
41 }
42 /* { dg-final { scan-assembler-times all_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tjne 1 } } */
43
44 void __attribute__((noinline,noclone))
all_ge_double(vector double a,vector double b)45 all_ge_double (vector double a, vector double b)
46 {
47 if (__builtin_expect (vec_all_ge (a, b), 1))
48 g = 2;
49 }
50 /* { dg-final { scan-assembler-times all_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tjne 1 } } */
51
52 void __attribute__((noinline,noclone))
all_le_double(vector double a,vector double b)53 all_le_double (vector double a, vector double b)
54 {
55 if (__builtin_expect (vec_all_le (a, b), 1))
56 g = 2;
57 }
58 /* { dg-final { scan-assembler-times all_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tjne 1 } } */
59
60 void __attribute__((noinline,noclone))
any_eq_double(vector double a,vector double b)61 any_eq_double (vector double a, vector double b)
62 {
63 if (__builtin_expect (vec_any_eq (a, b), 1))
64 g = 2;
65 }
66 /* { dg-final { scan-assembler-times any_eq_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tjnle 1 } } */
67
68 void __attribute__((noinline,noclone))
any_ne_double(vector double a,vector double b)69 any_ne_double (vector double a, vector double b)
70 {
71 if (__builtin_expect (vec_any_ne (a, b), 1))
72 g = 2;
73 }
74 /* { dg-final { scan-assembler-times any_ne_double:\n\tvfcedbs\t%v\[0-9\]*,%v24,%v26\n\tje 1 } } */
75
76 void __attribute__((noinline,noclone))
any_gt_double(vector double a,vector double b)77 any_gt_double (vector double a, vector double b)
78 {
79 if (__builtin_expect (vec_any_gt (a, b), 1))
80 g = 2;
81 }
82 /* { dg-final { scan-assembler-times any_gt_double:\n\tvfchdbs\t%v\[0-9\]*,%v24,%v26\n\tjnle 1 } } */
83
84 void __attribute__((noinline,noclone))
any_lt_double(vector double a,vector double b)85 any_lt_double (vector double a, vector double b)
86 {
87 if (__builtin_expect (vec_any_lt (a, b), 1))
88 g = 2;
89 }
90 /* { dg-final { scan-assembler-times any_lt_double:\n\tvfchdbs\t%v\[0-9\]*,%v26,%v24\n\tjnle 1 } } */
91
92 void __attribute__((noinline,noclone))
any_ge_double(vector double a,vector double b)93 any_ge_double (vector double a, vector double b)
94 {
95 if (__builtin_expect (vec_any_ge (a, b), 1))
96 g = 2;
97 }
98 /* { dg-final { scan-assembler-times any_ge_double:\n\tvfchedbs\t%v\[0-9\]*,%v24,%v26\n\tjnle 1 } } */
99
100 void __attribute__((noinline,noclone))
any_le_double(vector double a,vector double b)101 any_le_double (vector double a, vector double b)
102 {
103 if (__builtin_expect (vec_any_le (a, b), 1))
104 g = 2;
105 }
106 /* { dg-final { scan-assembler-times any_le_double:\n\tvfchedbs\t%v\[0-9\]*,%v26,%v24\n\tjnle 1 } } */
107
108 void __attribute__((noinline,noclone))
all_eq_int(vector int a,vector int b)109 all_eq_int (vector int a, vector int b)
110 {
111 if (__builtin_expect (vec_all_eq (a, b), 1))
112 g = 2;
113 }
114 /* { dg-final { scan-assembler-times all_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tjne 1 } } */
115
116 void __attribute__((noinline,noclone))
all_ne_int(vector int a,vector int b)117 all_ne_int (vector int a, vector int b)
118 {
119 if (__builtin_expect (vec_all_ne (a, b), 1))
120 g = 2;
121 }
122 /* { dg-final { scan-assembler-times all_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tjle 1 } } */
123
124 void __attribute__((noinline,noclone))
all_gt_int(vector int a,vector int b)125 all_gt_int (vector int a, vector int b)
126 {
127 if (__builtin_expect (vec_all_gt (a, b), 1))
128 g = 2;
129 }
130 /* { dg-final { scan-assembler-times all_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tjne 1 } } */
131
132 void __attribute__((noinline,noclone))
all_lt_int(vector int a,vector int b)133 all_lt_int (vector int a, vector int b)
134 {
135 if (__builtin_expect (vec_all_lt (a, b), 1))
136 g = 2;
137 }
138 /* { dg-final { scan-assembler-times all_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tjne 1 } } */
139
140 void __attribute__((noinline,noclone))
all_ge_int(vector int a,vector int b)141 all_ge_int (vector int a, vector int b)
142 {
143 if (__builtin_expect (vec_all_ge (a, b), 1))
144 g = 2;
145 }
146 /* { dg-final { scan-assembler-times all_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tjle 1 } } */
147
148 void __attribute__((noinline,noclone))
all_le_int(vector int a,vector int b)149 all_le_int (vector int a, vector int b)
150 {
151 if (__builtin_expect (vec_all_le (a, b), 1))
152 g = 2;
153 }
154 /* { dg-final { scan-assembler-times all_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tjle 1 } } */
155
156 void __attribute__((noinline,noclone))
any_eq_int(vector int a,vector int b)157 any_eq_int (vector int a, vector int b)
158 {
159 if (__builtin_expect (vec_any_eq (a, b), 1))
160 g = 2;
161 }
162 /* { dg-final { scan-assembler-times any_eq_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tjnle 1 } } */
163
164 void __attribute__((noinline,noclone))
any_ne_int(vector int a,vector int b)165 any_ne_int (vector int a, vector int b)
166 {
167 if (__builtin_expect (vec_any_ne (a, b), 1))
168 g = 2;
169 }
170 /* { dg-final { scan-assembler-times any_ne_int:\n\tvceqfs\t%v\[0-9\]*,%v24,%v26\n\tje 1 } } */
171
172 void __attribute__((noinline,noclone))
any_gt_int(vector int a,vector int b)173 any_gt_int (vector int a, vector int b)
174 {
175 if (__builtin_expect (vec_any_gt (a, b), 1))
176 g = 2;
177 }
178 /* { dg-final { scan-assembler-times any_gt_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tjnle 1 } } */
179
180 void __attribute__((noinline,noclone))
any_lt_int(vector int a,vector int b)181 any_lt_int (vector int a, vector int b)
182 {
183 if (__builtin_expect (vec_any_lt (a, b), 1))
184 g = 2;
185 }
186 /* { dg-final { scan-assembler-times any_lt_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tjnle 1 } } */
187
188 void __attribute__((noinline,noclone))
any_ge_int(vector int a,vector int b)189 any_ge_int (vector int a, vector int b)
190 {
191 if (__builtin_expect (vec_any_ge (a, b), 1))
192 g = 2;
193 }
194 /* { dg-final { scan-assembler-times any_ge_int:\n\tvchfs\t%v\[0-9\]*,%v26,%v24\n\tje 1 } } */
195
196 void __attribute__((noinline,noclone))
any_le_int(vector int a,vector int b)197 any_le_int (vector int a, vector int b)
198 {
199 if (__builtin_expect (vec_any_le (a, b), 1))
200 g = 2;
201 }
202 /* { dg-final { scan-assembler-times any_le_int:\n\tvchfs\t%v\[0-9\]*,%v24,%v26\n\tje 1 } } */
203
204