@@ -12,6 +12,8 @@ declare i32 @llvm.smax.i32(i32, i32)
12
12
declare i32 @llvm.smin.i32 (i32 , i32 )
13
13
declare i64 @llvm.smax.i64 (i64 , i64 )
14
14
declare i64 @llvm.smin.i64 (i64 , i64 )
15
+ declare i128 @llvm.smax.i128 (i128 , i128 )
16
+ declare i128 @llvm.smin.i128 (i128 , i128 )
15
17
16
18
define i8 @test_i8_smax (i8 %a ) nounwind {
17
19
; X64-LABEL: test_i8_smax:
@@ -259,3 +261,107 @@ define i64 @test_i64_smin(i64 %a) nounwind {
259
261
%r = call i64 @llvm.smin.i64 (i64 %a , i64 0 )
260
262
ret i64 %r
261
263
}
264
+
265
+ define i128 @test_i128_smax (i128 %a ) nounwind {
266
+ ; X64-LABEL: test_i128_smax:
267
+ ; X64: # %bb.0:
268
+ ; X64-NEXT: movq %rdi, %rax
269
+ ; X64-NEXT: xorl %edx, %edx
270
+ ; X64-NEXT: testq %rsi, %rsi
271
+ ; X64-NEXT: cmovsq %rdx, %rax
272
+ ; X64-NEXT: cmovgq %rsi, %rdx
273
+ ; X64-NEXT: retq
274
+ ;
275
+ ; X86-BMI-LABEL: test_i128_smax:
276
+ ; X86-BMI: # %bb.0:
277
+ ; X86-BMI-NEXT: pushl %edi
278
+ ; X86-BMI-NEXT: pushl %esi
279
+ ; X86-BMI-NEXT: pushl %eax
280
+ ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %eax
281
+ ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
282
+ ; X86-BMI-NEXT: xorl %edx, %edx
283
+ ; X86-BMI-NEXT: testl %ecx, %ecx
284
+ ; X86-BMI-NEXT: cmovlel %edx, %ecx
285
+ ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %esi
286
+ ; X86-BMI-NEXT: cmovsl %edx, %esi
287
+ ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %edi
288
+ ; X86-BMI-NEXT: cmovsl %edx, %edi
289
+ ; X86-BMI-NEXT: cmovnsl {{[0-9]+}}(%esp), %edx
290
+ ; X86-BMI-NEXT: movl %ecx, 12(%eax)
291
+ ; X86-BMI-NEXT: movl %edx, 8(%eax)
292
+ ; X86-BMI-NEXT: movl %edi, 4(%eax)
293
+ ; X86-BMI-NEXT: movl %esi, (%eax)
294
+ ; X86-BMI-NEXT: addl $4, %esp
295
+ ; X86-BMI-NEXT: popl %esi
296
+ ; X86-BMI-NEXT: popl %edi
297
+ ; X86-BMI-NEXT: retl $4
298
+ ;
299
+ ; X86-NOBMI-LABEL: test_i128_smax:
300
+ ; X86-NOBMI: # %bb.0:
301
+ ; X86-NOBMI-NEXT: pushl %edi
302
+ ; X86-NOBMI-NEXT: pushl %esi
303
+ ; X86-NOBMI-NEXT: pushl %eax
304
+ ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
305
+ ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
306
+ ; X86-NOBMI-NEXT: testl %ecx, %ecx
307
+ ; X86-NOBMI-NEXT: movl $0, %edx
308
+ ; X86-NOBMI-NEXT: movl $0, %esi
309
+ ; X86-NOBMI-NEXT: movl $0, %edi
310
+ ; X86-NOBMI-NEXT: js .LBB8_2
311
+ ; X86-NOBMI-NEXT: # %bb.1:
312
+ ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
313
+ ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
314
+ ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
315
+ ; X86-NOBMI-NEXT: .LBB8_2:
316
+ ; X86-NOBMI-NEXT: jg .LBB8_4
317
+ ; X86-NOBMI-NEXT: # %bb.3:
318
+ ; X86-NOBMI-NEXT: xorl %ecx, %ecx
319
+ ; X86-NOBMI-NEXT: .LBB8_4:
320
+ ; X86-NOBMI-NEXT: movl %ecx, 12(%eax)
321
+ ; X86-NOBMI-NEXT: movl %edi, 8(%eax)
322
+ ; X86-NOBMI-NEXT: movl %esi, 4(%eax)
323
+ ; X86-NOBMI-NEXT: movl %edx, (%eax)
324
+ ; X86-NOBMI-NEXT: addl $4, %esp
325
+ ; X86-NOBMI-NEXT: popl %esi
326
+ ; X86-NOBMI-NEXT: popl %edi
327
+ ; X86-NOBMI-NEXT: retl $4
328
+ %r = call i128 @llvm.smax.i128 (i128 %a , i128 0 )
329
+ ret i128 %r
330
+ }
331
+
332
+ define i128 @test_i128_smin (i128 %a ) nounwind {
333
+ ; X64-LABEL: test_i128_smin:
334
+ ; X64: # %bb.0:
335
+ ; X64-NEXT: movq %rdi, %rax
336
+ ; X64-NEXT: movq %rsi, %rdx
337
+ ; X64-NEXT: sarq $63, %rdx
338
+ ; X64-NEXT: andq %rdx, %rax
339
+ ; X64-NEXT: andq %rsi, %rdx
340
+ ; X64-NEXT: retq
341
+ ;
342
+ ; X86-LABEL: test_i128_smin:
343
+ ; X86: # %bb.0:
344
+ ; X86-NEXT: pushl %edi
345
+ ; X86-NEXT: pushl %esi
346
+ ; X86-NEXT: pushl %eax
347
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
348
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
349
+ ; X86-NEXT: movl %ecx, %edx
350
+ ; X86-NEXT: sarl $31, %edx
351
+ ; X86-NEXT: andl %edx, %ecx
352
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
353
+ ; X86-NEXT: andl %edx, %esi
354
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
355
+ ; X86-NEXT: andl %edx, %edi
356
+ ; X86-NEXT: andl {{[0-9]+}}(%esp), %edx
357
+ ; X86-NEXT: movl %ecx, 12(%eax)
358
+ ; X86-NEXT: movl %edx, 8(%eax)
359
+ ; X86-NEXT: movl %edi, 4(%eax)
360
+ ; X86-NEXT: movl %esi, (%eax)
361
+ ; X86-NEXT: addl $4, %esp
362
+ ; X86-NEXT: popl %esi
363
+ ; X86-NEXT: popl %edi
364
+ ; X86-NEXT: retl $4
365
+ %r = call i128 @llvm.smin.i128 (i128 %a , i128 0 )
366
+ ret i128 %r
367
+ }
0 commit comments