Skip to content

Commit a9ff15d

Browse files
authored
[X86] select-smin-smax.ll - add 32-bit test coverage (#153780)
Inspired by #151893
1 parent d803a93 commit a9ff15d

File tree

1 file changed

+101
-38
lines changed

1 file changed

+101
-38
lines changed
Lines changed: 101 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,129 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=-bmi < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOBMI
3-
; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi < %s | FileCheck %s --check-prefixes=CHECK,CHECK-BMI
2+
; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi < %s | FileCheck %s --check-prefixes=X64,X64-BMI
3+
; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=-bmi < %s | FileCheck %s --check-prefixes=X64,X64-NOBMI
4+
; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,+cmov < %s | FileCheck %s --check-prefixes=X86,X86-BMI
5+
; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=-bmi < %s | FileCheck %s --check-prefixes=X86,X86-NOBMI
46

57
declare i32 @llvm.smax.i32(i32, i32)
68
declare i32 @llvm.smin.i32(i32, i32)
79
declare i64 @llvm.smax.i64(i64, i64)
810
declare i64 @llvm.smin.i64(i64, i64)
911

1012
define i32 @test_i32_smax(i32 %a) nounwind {
11-
; CHECK-NOBMI-LABEL: test_i32_smax:
12-
; CHECK-NOBMI: # %bb.0:
13-
; CHECK-NOBMI-NEXT: xorl %eax, %eax
14-
; CHECK-NOBMI-NEXT: testl %edi, %edi
15-
; CHECK-NOBMI-NEXT: cmovgl %edi, %eax
16-
; CHECK-NOBMI-NEXT: retq
13+
; X64-BMI-LABEL: test_i32_smax:
14+
; X64-BMI: # %bb.0:
15+
; X64-BMI-NEXT: movl %edi, %eax
16+
; X64-BMI-NEXT: sarl $31, %eax
17+
; X64-BMI-NEXT: andnl %edi, %eax, %eax
18+
; X64-BMI-NEXT: retq
1719
;
18-
; CHECK-BMI-LABEL: test_i32_smax:
19-
; CHECK-BMI: # %bb.0:
20-
; CHECK-BMI-NEXT: movl %edi, %eax
21-
; CHECK-BMI-NEXT: sarl $31, %eax
22-
; CHECK-BMI-NEXT: andnl %edi, %eax, %eax
23-
; CHECK-BMI-NEXT: retq
20+
; X64-NOBMI-LABEL: test_i32_smax:
21+
; X64-NOBMI: # %bb.0:
22+
; X64-NOBMI-NEXT: xorl %eax, %eax
23+
; X64-NOBMI-NEXT: testl %edi, %edi
24+
; X64-NOBMI-NEXT: cmovgl %edi, %eax
25+
; X64-NOBMI-NEXT: retq
26+
;
27+
; X86-BMI-LABEL: test_i32_smax:
28+
; X86-BMI: # %bb.0:
29+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %eax
30+
; X86-BMI-NEXT: movl %eax, %ecx
31+
; X86-BMI-NEXT: sarl $31, %ecx
32+
; X86-BMI-NEXT: andnl %eax, %ecx, %eax
33+
; X86-BMI-NEXT: retl
34+
;
35+
; X86-NOBMI-LABEL: test_i32_smax:
36+
; X86-NOBMI: # %bb.0:
37+
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
38+
; X86-NOBMI-NEXT: testl %eax, %eax
39+
; X86-NOBMI-NEXT: jg .LBB0_2
40+
; X86-NOBMI-NEXT: # %bb.1:
41+
; X86-NOBMI-NEXT: xorl %eax, %eax
42+
; X86-NOBMI-NEXT: .LBB0_2:
43+
; X86-NOBMI-NEXT: retl
2444
%r = call i32 @llvm.smax.i32(i32 %a, i32 0)
2545
ret i32 %r
2646
}
2747

2848
define i32 @test_i32_smin(i32 %a) nounwind {
29-
; CHECK-LABEL: test_i32_smin:
30-
; CHECK: # %bb.0:
31-
; CHECK-NEXT: movl %edi, %eax
32-
; CHECK-NEXT: sarl $31, %eax
33-
; CHECK-NEXT: andl %edi, %eax
34-
; CHECK-NEXT: retq
49+
; X64-LABEL: test_i32_smin:
50+
; X64: # %bb.0:
51+
; X64-NEXT: movl %edi, %eax
52+
; X64-NEXT: sarl $31, %eax
53+
; X64-NEXT: andl %edi, %eax
54+
; X64-NEXT: retq
55+
;
56+
; X86-LABEL: test_i32_smin:
57+
; X86: # %bb.0:
58+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
59+
; X86-NEXT: movl %ecx, %eax
60+
; X86-NEXT: sarl $31, %eax
61+
; X86-NEXT: andl %ecx, %eax
62+
; X86-NEXT: retl
3563
%r = call i32 @llvm.smin.i32(i32 %a, i32 0)
3664
ret i32 %r
3765
}
3866

3967
define i64 @test_i64_smax(i64 %a) nounwind {
40-
; CHECK-NOBMI-LABEL: test_i64_smax:
41-
; CHECK-NOBMI: # %bb.0:
42-
; CHECK-NOBMI-NEXT: xorl %eax, %eax
43-
; CHECK-NOBMI-NEXT: testq %rdi, %rdi
44-
; CHECK-NOBMI-NEXT: cmovgq %rdi, %rax
45-
; CHECK-NOBMI-NEXT: retq
68+
; X64-BMI-LABEL: test_i64_smax:
69+
; X64-BMI: # %bb.0:
70+
; X64-BMI-NEXT: movq %rdi, %rax
71+
; X64-BMI-NEXT: sarq $63, %rax
72+
; X64-BMI-NEXT: andnq %rdi, %rax, %rax
73+
; X64-BMI-NEXT: retq
4674
;
47-
; CHECK-BMI-LABEL: test_i64_smax:
48-
; CHECK-BMI: # %bb.0:
49-
; CHECK-BMI-NEXT: movq %rdi, %rax
50-
; CHECK-BMI-NEXT: sarq $63, %rax
51-
; CHECK-BMI-NEXT: andnq %rdi, %rax, %rax
52-
; CHECK-BMI-NEXT: retq
75+
; X64-NOBMI-LABEL: test_i64_smax:
76+
; X64-NOBMI: # %bb.0:
77+
; X64-NOBMI-NEXT: xorl %eax, %eax
78+
; X64-NOBMI-NEXT: testq %rdi, %rdi
79+
; X64-NOBMI-NEXT: cmovgq %rdi, %rax
80+
; X64-NOBMI-NEXT: retq
81+
;
82+
; X86-BMI-LABEL: test_i64_smax:
83+
; X86-BMI: # %bb.0:
84+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %edx
85+
; X86-BMI-NEXT: xorl %eax, %eax
86+
; X86-BMI-NEXT: testl %edx, %edx
87+
; X86-BMI-NEXT: cmovlel %eax, %edx
88+
; X86-BMI-NEXT: cmovnsl {{[0-9]+}}(%esp), %eax
89+
; X86-BMI-NEXT: retl
90+
;
91+
; X86-NOBMI-LABEL: test_i64_smax:
92+
; X86-NOBMI: # %bb.0:
93+
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
94+
; X86-NOBMI-NEXT: testl %edx, %edx
95+
; X86-NOBMI-NEXT: movl $0, %eax
96+
; X86-NOBMI-NEXT: jns .LBB2_1
97+
; X86-NOBMI-NEXT: # %bb.2:
98+
; X86-NOBMI-NEXT: jle .LBB2_3
99+
; X86-NOBMI-NEXT: .LBB2_4:
100+
; X86-NOBMI-NEXT: retl
101+
; X86-NOBMI-NEXT: .LBB2_1:
102+
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
103+
; X86-NOBMI-NEXT: jg .LBB2_4
104+
; X86-NOBMI-NEXT: .LBB2_3:
105+
; X86-NOBMI-NEXT: xorl %edx, %edx
106+
; X86-NOBMI-NEXT: retl
53107
%r = call i64 @llvm.smax.i64(i64 %a, i64 0)
54108
ret i64 %r
55109
}
56110

57111
define i64 @test_i64_smin(i64 %a) nounwind {
58-
; CHECK-LABEL: test_i64_smin:
59-
; CHECK: # %bb.0:
60-
; CHECK-NEXT: movq %rdi, %rax
61-
; CHECK-NEXT: sarq $63, %rax
62-
; CHECK-NEXT: andq %rdi, %rax
63-
; CHECK-NEXT: retq
112+
; X64-LABEL: test_i64_smin:
113+
; X64: # %bb.0:
114+
; X64-NEXT: movq %rdi, %rax
115+
; X64-NEXT: sarq $63, %rax
116+
; X64-NEXT: andq %rdi, %rax
117+
; X64-NEXT: retq
118+
;
119+
; X86-LABEL: test_i64_smin:
120+
; X86: # %bb.0:
121+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
122+
; X86-NEXT: movl %edx, %eax
123+
; X86-NEXT: sarl $31, %eax
124+
; X86-NEXT: andl %eax, %edx
125+
; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
126+
; X86-NEXT: retl
64127
%r = call i64 @llvm.smin.i64(i64 %a, i64 0)
65128
ret i64 %r
66129
}

0 commit comments

Comments
 (0)