@@ -12,6 +12,8 @@ declare i32 @llvm.smax.i32(i32, i32)
1212declare i32 @llvm.smin.i32 (i32 , i32 )
1313declare i64 @llvm.smax.i64 (i64 , i64 )
1414declare i64 @llvm.smin.i64 (i64 , i64 )
15+ declare i128 @llvm.smax.i128 (i128 , i128 )
16+ declare i128 @llvm.smin.i128 (i128 , i128 )
1517
1618define i8 @test_i8_smax (i8 %a ) nounwind {
1719; X64-LABEL: test_i8_smax:
@@ -259,3 +261,107 @@ define i64 @test_i64_smin(i64 %a) nounwind {
259261 %r = call i64 @llvm.smin.i64 (i64 %a , i64 0 )
260262 ret i64 %r
261263}
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