xref: /llvm-project/flang/test/Lower/PowerPC/ppc-vec-cmp.f90 (revision 246b57cb2086b22ad8b41051c77e86ef478053a1)
1! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR" %s
2! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR" %s
3! REQUIRES: target=powerpc{{.*}}
4
5!----------------------
6! vec_cmpge
7!----------------------
8
9! CHECK-LABEL: vec_cmpge_test_i8
10subroutine vec_cmpge_test_i8(arg1, arg2)
11  vector(integer(8)) :: arg1, arg2
12  vector(unsigned(8)) :: r
13  r = vec_cmpge(arg1, arg2)
14
15! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
16! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
17! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]])
18! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1)
19end subroutine vec_cmpge_test_i8
20
21! CHECK-LABEL: vec_cmpge_test_i4
22subroutine vec_cmpge_test_i4(arg1, arg2)
23  vector(integer(4)) :: arg1, arg2
24  vector(unsigned(4)) :: r
25  r = vec_cmpge(arg1, arg2)
26
27! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
28! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
29! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]])
30! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1)
31end subroutine vec_cmpge_test_i4
32
33! CHECK-LABEL: vec_cmpge_test_i2
34subroutine vec_cmpge_test_i2(arg1, arg2)
35  vector(integer(2)) :: arg1, arg2
36  vector(unsigned(2)) :: r
37  r = vec_cmpge(arg1, arg2)
38
39! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
40! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
41! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]])
42! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1)
43end subroutine vec_cmpge_test_i2
44
45! CHECK-LABEL: vec_cmpge_test_i1
46subroutine vec_cmpge_test_i1(arg1, arg2)
47  vector(integer(1)) :: arg1, arg2
48  vector(unsigned(1)) :: r
49  r = vec_cmpge(arg1, arg2)
50
51! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
52! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
53! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]])
54! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1)
55end subroutine vec_cmpge_test_i1
56
57! CHECK-LABEL: vec_cmpge_test_u8
58subroutine vec_cmpge_test_u8(arg1, arg2)
59  vector(unsigned(8)) :: arg1, arg2
60  vector(unsigned(8)) :: r
61  r = vec_cmpge(arg1, arg2)
62
63! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
64! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
65! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]])
66! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1)
67end subroutine vec_cmpge_test_u8
68
69! CHECK-LABEL: vec_cmpge_test_u4
70subroutine vec_cmpge_test_u4(arg1, arg2)
71  vector(unsigned(4)) :: arg1, arg2
72  vector(unsigned(4)) :: r
73  r = vec_cmpge(arg1, arg2)
74
75! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
76! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
77! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]])
78! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1)
79end subroutine vec_cmpge_test_u4
80
81! CHECK-LABEL: vec_cmpge_test_u2
82subroutine vec_cmpge_test_u2(arg1, arg2)
83  vector(unsigned(2)) :: arg1, arg2
84  vector(unsigned(2)) :: r
85  r = vec_cmpge(arg1, arg2)
86
87! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
88! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
89! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]])
90! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1)
91end subroutine vec_cmpge_test_u2
92
93! CHECK-LABEL: vec_cmpge_test_u1
94subroutine vec_cmpge_test_u1(arg1, arg2)
95  vector(unsigned(1)) :: arg1, arg2
96  vector(unsigned(1)) :: r
97  r = vec_cmpge(arg1, arg2)
98
99! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
100! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
101! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]])
102! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1)
103end subroutine vec_cmpge_test_u1
104
105subroutine vec_cmpge_test_r4(arg1, arg2)
106  vector(real(4)) :: arg1, arg2
107  vector(unsigned(4)) :: r
108  r = vec_cmpge(arg1, arg2)
109
110! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16
111! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16
112! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %[[arg1]], <4 x float> %[[arg2]])
113end subroutine vec_cmpge_test_r4
114
115subroutine vec_cmpge_test_r8(arg1, arg2)
116  vector(real(8)) :: arg1, arg2
117  vector(unsigned(8)) :: r
118  r = vec_cmpge(arg1, arg2)
119
120! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16
121! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16
122! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %[[arg1]], <2 x double> %[[arg2]])
123end subroutine vec_cmpge_test_r8
124
125!----------------------
126! vec_cmpgt
127!----------------------
128
129! CHECK-LABEL: vec_cmpgt_test_i1
130subroutine vec_cmpgt_test_i1(arg1, arg2)
131  vector(integer(1)) :: arg1, arg2
132  vector(unsigned(1)) :: r
133  r = vec_cmpgt(arg1, arg2)
134
135! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
136! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
137! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]])
138end subroutine vec_cmpgt_test_i1
139
140! CHECK-LABEL: vec_cmpgt_test_i2
141subroutine vec_cmpgt_test_i2(arg1, arg2)
142  vector(integer(2)) :: arg1, arg2
143  vector(unsigned(2)) :: r
144  r = vec_cmpgt(arg1, arg2)
145
146! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
147! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
148! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]])
149end subroutine vec_cmpgt_test_i2
150
151! CHECK-LABEL: vec_cmpgt_test_i4
152subroutine vec_cmpgt_test_i4(arg1, arg2)
153  vector(integer(4)) :: arg1, arg2
154  vector(unsigned(4)) :: r
155  r = vec_cmpgt(arg1, arg2)
156
157! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
158! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
159! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]])
160end subroutine vec_cmpgt_test_i4
161
162! CHECK-LABEL: vec_cmpgt_test_i8
163subroutine vec_cmpgt_test_i8(arg1, arg2)
164  vector(integer(8)) :: arg1, arg2
165  vector(unsigned(8)) :: r
166  r = vec_cmpgt(arg1, arg2)
167
168! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
169! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
170! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]])
171end subroutine vec_cmpgt_test_i8
172
173! CHECK-LABEL: vec_cmpgt_test_u1
174subroutine vec_cmpgt_test_u1(arg1, arg2)
175  vector(unsigned(1)) :: arg1, arg2
176  vector(unsigned(1)) :: r
177  r = vec_cmpgt(arg1, arg2)
178
179! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
180! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
181! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]])
182end subroutine vec_cmpgt_test_u1
183
184! CHECK-LABEL: vec_cmpgt_test_u2
185subroutine vec_cmpgt_test_u2(arg1, arg2)
186  vector(unsigned(2)) :: arg1, arg2
187  vector(unsigned(2)) :: r
188  r = vec_cmpgt(arg1, arg2)
189
190! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
191! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
192! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]])
193end subroutine vec_cmpgt_test_u2
194
195! CHECK-LABEL: vec_cmpgt_test_u4
196subroutine vec_cmpgt_test_u4(arg1, arg2)
197  vector(unsigned(4)) :: arg1, arg2
198  vector(unsigned(4)) :: r
199  r = vec_cmpgt(arg1, arg2)
200
201! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
202! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
203! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]])
204end subroutine vec_cmpgt_test_u4
205
206! CHECK-LABEL: vec_cmpgt_test_u8
207subroutine vec_cmpgt_test_u8(arg1, arg2)
208  vector(unsigned(8)) :: arg1, arg2
209  vector(unsigned(8)) :: r
210  r = vec_cmpgt(arg1, arg2)
211
212! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
213! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
214! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]])
215end subroutine vec_cmpgt_test_u8
216
217! CHECK-LABEL: vec_cmpgt_test_r4
218subroutine vec_cmpgt_test_r4(arg1, arg2)
219  vector(real(4)) :: arg1, arg2
220  vector(unsigned(4)) :: r
221  r = vec_cmpgt(arg1, arg2)
222
223! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16
224! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16
225! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %[[arg1]], <4 x float> %[[arg2]])
226end subroutine vec_cmpgt_test_r4
227
228! CHECK-LABEL: vec_cmpgt_test_r8
229subroutine vec_cmpgt_test_r8(arg1, arg2)
230  vector(real(8)) :: arg1, arg2
231  vector(unsigned(8)) :: r
232  r = vec_cmpgt(arg1, arg2)
233
234! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16
235! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16
236! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %[[arg1]], <2 x double> %[[arg2]])
237end subroutine vec_cmpgt_test_r8
238
239!----------------------
240! vec_cmple
241!----------------------
242
243! CHECK-LABEL: vec_cmple_test_i8
244subroutine vec_cmple_test_i8(arg1, arg2)
245  vector(integer(8)) :: arg1, arg2
246  vector(unsigned(8)) :: r
247  r = vec_cmple(arg1, arg2)
248
249! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
250! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
251! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]])
252! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1)
253end subroutine vec_cmple_test_i8
254
255! CHECK-LABEL: vec_cmple_test_i4
256subroutine vec_cmple_test_i4(arg1, arg2)
257  vector(integer(4)) :: arg1, arg2
258  vector(unsigned(4)) :: r
259  r = vec_cmple(arg1, arg2)
260
261! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
262! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
263! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]])
264! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1)
265end subroutine vec_cmple_test_i4
266
267! CHECK-LABEL: vec_cmple_test_i2
268subroutine vec_cmple_test_i2(arg1, arg2)
269  vector(integer(2)) :: arg1, arg2
270  vector(unsigned(2)) :: r
271  r = vec_cmple(arg1, arg2)
272
273! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
274! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
275! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]])
276! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1)
277end subroutine vec_cmple_test_i2
278
279! CHECK-LABEL: vec_cmple_test_i1
280subroutine vec_cmple_test_i1(arg1, arg2)
281  vector(integer(1)) :: arg1, arg2
282  vector(unsigned(1)) :: r
283  r = vec_cmple(arg1, arg2)
284
285! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
286! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
287! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]])
288! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1)
289end subroutine vec_cmple_test_i1
290
291! CHECK-LABEL: vec_cmple_test_u8
292subroutine vec_cmple_test_u8(arg1, arg2)
293  vector(unsigned(8)) :: arg1, arg2
294  vector(unsigned(8)) :: r
295  r = vec_cmple(arg1, arg2)
296
297! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
298! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
299! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]])
300! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1)
301end subroutine vec_cmple_test_u8
302
303! CHECK-LABEL: vec_cmple_test_u4
304subroutine vec_cmple_test_u4(arg1, arg2)
305  vector(unsigned(4)) :: arg1, arg2
306  vector(unsigned(4)) :: r
307  r = vec_cmple(arg1, arg2)
308
309! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
310! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
311! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]])
312! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1)
313end subroutine vec_cmple_test_u4
314
315! CHECK-LABEL: vec_cmple_test_u2
316subroutine vec_cmple_test_u2(arg1, arg2)
317  vector(unsigned(2)) :: arg1, arg2
318  vector(unsigned(2)) :: r
319  r = vec_cmple(arg1, arg2)
320
321! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
322! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
323! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]])
324! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1)
325end subroutine vec_cmple_test_u2
326
327! CHECK-LABEL: vec_cmple_test_u1
328subroutine vec_cmple_test_u1(arg1, arg2)
329  vector(unsigned(1)) :: arg1, arg2
330  vector(unsigned(1)) :: r
331  r = vec_cmple(arg1, arg2)
332
333! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
334! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
335! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]])
336! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1)
337end subroutine vec_cmple_test_u1
338
339! CHECK-LABEL: vec_cmple_test_r4
340subroutine vec_cmple_test_r4(arg1, arg2)
341  vector(real(4)) :: arg1, arg2
342  vector(unsigned(4)) :: r
343  r = vec_cmple(arg1, arg2)
344
345! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16
346! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16
347! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %[[arg2]], <4 x float> %[[arg1]])
348end subroutine vec_cmple_test_r4
349
350! CHECK-LABEL: vec_cmple_test_r8
351subroutine vec_cmple_test_r8(arg1, arg2)
352  vector(real(8)) :: arg1, arg2
353  vector(unsigned(8)) :: r
354  r = vec_cmple(arg1, arg2)
355
356! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16
357! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16
358! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %[[arg2]], <2 x double> %[[arg1]])
359end subroutine vec_cmple_test_r8
360
361!----------------------
362! vec_cmplt
363!----------------------
364
365! CHECK-LABEL: vec_cmplt_test_i1
366subroutine vec_cmplt_test_i1(arg1, arg2)
367  vector(integer(1)) :: arg1, arg2
368  vector(unsigned(1)) :: r
369  r = vec_cmplt(arg1, arg2)
370
371! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
372! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
373! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]])
374end subroutine vec_cmplt_test_i1
375
376! CHECK-LABEL: vec_cmplt_test_i2
377subroutine vec_cmplt_test_i2(arg1, arg2)
378  vector(integer(2)) :: arg1, arg2
379  vector(unsigned(2)) :: r
380  r = vec_cmplt(arg1, arg2)
381
382! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
383! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
384! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]])
385end subroutine vec_cmplt_test_i2
386
387! CHECK-LABEL: vec_cmplt_test_i4
388subroutine vec_cmplt_test_i4(arg1, arg2)
389  vector(integer(4)) :: arg1, arg2
390  vector(unsigned(4)) :: r
391  r = vec_cmplt(arg1, arg2)
392
393! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
394! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
395! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]])
396end subroutine vec_cmplt_test_i4
397
398! CHECK-LABEL: vec_cmplt_test_i8
399subroutine vec_cmplt_test_i8(arg1, arg2)
400  vector(integer(8)) :: arg1, arg2
401  vector(unsigned(8)) :: r
402  r = vec_cmplt(arg1, arg2)
403
404! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
405! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
406! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]])
407end subroutine vec_cmplt_test_i8
408
409! CHECK-LABEL: vec_cmplt_test_u1
410subroutine vec_cmplt_test_u1(arg1, arg2)
411  vector(unsigned(1)) :: arg1, arg2
412  vector(unsigned(1)) :: r
413  r = vec_cmplt(arg1, arg2)
414
415! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
416! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
417! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]])
418end subroutine vec_cmplt_test_u1
419
420! CHECK-LABEL: vec_cmplt_test_u2
421subroutine vec_cmplt_test_u2(arg1, arg2)
422  vector(unsigned(2)) :: arg1, arg2
423  vector(unsigned(2)) :: r
424  r = vec_cmplt(arg1, arg2)
425
426! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
427! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16
428! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]])
429end subroutine vec_cmplt_test_u2
430
431! CHECK-LABEL: vec_cmplt_test_u4
432subroutine vec_cmplt_test_u4(arg1, arg2)
433  vector(unsigned(4)) :: arg1, arg2
434  vector(unsigned(4)) :: r
435  r = vec_cmplt(arg1, arg2)
436
437! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
438! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
439! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]])
440end subroutine vec_cmplt_test_u4
441
442! CHECK-LABEL: vec_cmplt_test_u8
443subroutine vec_cmplt_test_u8(arg1, arg2)
444  vector(unsigned(8)) :: arg1, arg2
445  vector(unsigned(8)) :: r
446  r = vec_cmplt(arg1, arg2)
447
448! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
449! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
450! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]])
451end subroutine vec_cmplt_test_u8
452
453! CHECK-LABEL: vec_cmplt_test_r4
454subroutine vec_cmplt_test_r4(arg1, arg2)
455  vector(real(4)) :: arg1, arg2
456  vector(unsigned(4)) :: r
457  r = vec_cmplt(arg1, arg2)
458
459! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16
460! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16
461! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %[[arg2]], <4 x float> %[[arg1]])
462end subroutine vec_cmplt_test_r4
463
464! CHECK-LABEL: vec_cmplt_test_r8
465subroutine vec_cmplt_test_r8(arg1, arg2)
466  vector(real(8)) :: arg1, arg2
467  vector(unsigned(8)) :: r
468  r = vec_cmplt(arg1, arg2)
469
470! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16
471! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16
472! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %[[arg2]], <2 x double> %[[arg1]])
473end subroutine vec_cmplt_test_r8
474
475