Skip to content

Commit 263e458

Browse files
authored
[X86] select-smin-smax.ll - add i8/i16 test coverage (#153788)
Pulled out of #151893 to show 32/64-bit target coverage
1 parent 61caab7 commit 263e458

File tree

1 file changed

+140
-8
lines changed

1 file changed

+140
-8
lines changed

llvm/test/CodeGen/X86/select-smin-smax.ll

Lines changed: 140 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,143 @@
44
; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,+cmov < %s | FileCheck %s --check-prefixes=X86,X86-BMI
55
; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=-bmi < %s | FileCheck %s --check-prefixes=X86,X86-NOBMI
66

7+
declare i8 @llvm.smax.i8(i8, i8)
8+
declare i8 @llvm.smin.i8(i8, i8)
9+
declare i16 @llvm.smax.i16(i16, i16)
10+
declare i16 @llvm.smin.i16(i16, i16)
711
declare i32 @llvm.smax.i32(i32, i32)
812
declare i32 @llvm.smin.i32(i32, i32)
913
declare i64 @llvm.smax.i64(i64, i64)
1014
declare i64 @llvm.smin.i64(i64, i64)
1115

16+
define i8 @test_i8_smax(i8 %a) nounwind {
17+
; X64-LABEL: test_i8_smax:
18+
; X64: # %bb.0:
19+
; X64-NEXT: xorl %eax, %eax
20+
; X64-NEXT: testb %dil, %dil
21+
; X64-NEXT: cmovgl %edi, %eax
22+
; X64-NEXT: # kill: def $al killed $al killed $eax
23+
; X64-NEXT: retq
24+
;
25+
; X86-BMI-LABEL: test_i8_smax:
26+
; X86-BMI: # %bb.0:
27+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
28+
; X86-BMI-NEXT: xorl %eax, %eax
29+
; X86-BMI-NEXT: testb %cl, %cl
30+
; X86-BMI-NEXT: cmovgl %ecx, %eax
31+
; X86-BMI-NEXT: # kill: def $al killed $al killed $eax
32+
; X86-BMI-NEXT: retl
33+
;
34+
; X86-NOBMI-LABEL: test_i8_smax:
35+
; X86-NOBMI: # %bb.0:
36+
; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %eax
37+
; X86-NOBMI-NEXT: testb %al, %al
38+
; X86-NOBMI-NEXT: jg .LBB0_2
39+
; X86-NOBMI-NEXT: # %bb.1:
40+
; X86-NOBMI-NEXT: xorl %eax, %eax
41+
; X86-NOBMI-NEXT: .LBB0_2:
42+
; X86-NOBMI-NEXT: # kill: def $al killed $al killed $eax
43+
; X86-NOBMI-NEXT: retl
44+
%r = call i8 @llvm.smax.i8(i8 %a, i8 0)
45+
ret i8 %r
46+
}
47+
48+
define i8 @test_i8_smin(i8 %a) nounwind {
49+
; X64-LABEL: test_i8_smin:
50+
; X64: # %bb.0:
51+
; X64-NEXT: xorl %eax, %eax
52+
; X64-NEXT: testb %dil, %dil
53+
; X64-NEXT: cmovsl %edi, %eax
54+
; X64-NEXT: # kill: def $al killed $al killed $eax
55+
; X64-NEXT: retq
56+
;
57+
; X86-BMI-LABEL: test_i8_smin:
58+
; X86-BMI: # %bb.0:
59+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
60+
; X86-BMI-NEXT: xorl %eax, %eax
61+
; X86-BMI-NEXT: testb %cl, %cl
62+
; X86-BMI-NEXT: cmovsl %ecx, %eax
63+
; X86-BMI-NEXT: # kill: def $al killed $al killed $eax
64+
; X86-BMI-NEXT: retl
65+
;
66+
; X86-NOBMI-LABEL: test_i8_smin:
67+
; X86-NOBMI: # %bb.0:
68+
; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %eax
69+
; X86-NOBMI-NEXT: testb %al, %al
70+
; X86-NOBMI-NEXT: js .LBB1_2
71+
; X86-NOBMI-NEXT: # %bb.1:
72+
; X86-NOBMI-NEXT: xorl %eax, %eax
73+
; X86-NOBMI-NEXT: .LBB1_2:
74+
; X86-NOBMI-NEXT: # kill: def $al killed $al killed $eax
75+
; X86-NOBMI-NEXT: retl
76+
%r = call i8 @llvm.smin.i8(i8 %a, i8 0)
77+
ret i8 %r
78+
}
79+
80+
define i16 @test_i16_smax(i16 %a) nounwind {
81+
; X64-LABEL: test_i16_smax:
82+
; X64: # %bb.0:
83+
; X64-NEXT: xorl %eax, %eax
84+
; X64-NEXT: testw %di, %di
85+
; X64-NEXT: cmovgl %edi, %eax
86+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
87+
; X64-NEXT: retq
88+
;
89+
; X86-BMI-LABEL: test_i16_smax:
90+
; X86-BMI: # %bb.0:
91+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
92+
; X86-BMI-NEXT: xorl %eax, %eax
93+
; X86-BMI-NEXT: testw %cx, %cx
94+
; X86-BMI-NEXT: cmovgl %ecx, %eax
95+
; X86-BMI-NEXT: # kill: def $ax killed $ax killed $eax
96+
; X86-BMI-NEXT: retl
97+
;
98+
; X86-NOBMI-LABEL: test_i16_smax:
99+
; X86-NOBMI: # %bb.0:
100+
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
101+
; X86-NOBMI-NEXT: testw %ax, %ax
102+
; X86-NOBMI-NEXT: jg .LBB2_2
103+
; X86-NOBMI-NEXT: # %bb.1:
104+
; X86-NOBMI-NEXT: xorl %eax, %eax
105+
; X86-NOBMI-NEXT: .LBB2_2:
106+
; X86-NOBMI-NEXT: # kill: def $ax killed $ax killed $eax
107+
; X86-NOBMI-NEXT: retl
108+
%r = call i16 @llvm.smax.i16(i16 %a, i16 0)
109+
ret i16 %r
110+
}
111+
112+
define i16 @test_i16_smin(i16 %a) nounwind {
113+
; X64-LABEL: test_i16_smin:
114+
; X64: # %bb.0:
115+
; X64-NEXT: xorl %eax, %eax
116+
; X64-NEXT: testw %di, %di
117+
; X64-NEXT: cmovsl %edi, %eax
118+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
119+
; X64-NEXT: retq
120+
;
121+
; X86-BMI-LABEL: test_i16_smin:
122+
; X86-BMI: # %bb.0:
123+
; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
124+
; X86-BMI-NEXT: xorl %eax, %eax
125+
; X86-BMI-NEXT: testw %cx, %cx
126+
; X86-BMI-NEXT: cmovsl %ecx, %eax
127+
; X86-BMI-NEXT: # kill: def $ax killed $ax killed $eax
128+
; X86-BMI-NEXT: retl
129+
;
130+
; X86-NOBMI-LABEL: test_i16_smin:
131+
; X86-NOBMI: # %bb.0:
132+
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
133+
; X86-NOBMI-NEXT: testw %ax, %ax
134+
; X86-NOBMI-NEXT: js .LBB3_2
135+
; X86-NOBMI-NEXT: # %bb.1:
136+
; X86-NOBMI-NEXT: xorl %eax, %eax
137+
; X86-NOBMI-NEXT: .LBB3_2:
138+
; X86-NOBMI-NEXT: # kill: def $ax killed $ax killed $eax
139+
; X86-NOBMI-NEXT: retl
140+
%r = call i16 @llvm.smin.i16(i16 %a, i16 0)
141+
ret i16 %r
142+
}
143+
12144
define i32 @test_i32_smax(i32 %a) nounwind {
13145
; X64-BMI-LABEL: test_i32_smax:
14146
; X64-BMI: # %bb.0:
@@ -36,10 +168,10 @@ define i32 @test_i32_smax(i32 %a) nounwind {
36168
; X86-NOBMI: # %bb.0:
37169
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
38170
; X86-NOBMI-NEXT: testl %eax, %eax
39-
; X86-NOBMI-NEXT: jg .LBB0_2
171+
; X86-NOBMI-NEXT: jg .LBB4_2
40172
; X86-NOBMI-NEXT: # %bb.1:
41173
; X86-NOBMI-NEXT: xorl %eax, %eax
42-
; X86-NOBMI-NEXT: .LBB0_2:
174+
; X86-NOBMI-NEXT: .LBB4_2:
43175
; X86-NOBMI-NEXT: retl
44176
%r = call i32 @llvm.smax.i32(i32 %a, i32 0)
45177
ret i32 %r
@@ -93,15 +225,15 @@ define i64 @test_i64_smax(i64 %a) nounwind {
93225
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
94226
; X86-NOBMI-NEXT: testl %edx, %edx
95227
; X86-NOBMI-NEXT: movl $0, %eax
96-
; X86-NOBMI-NEXT: jns .LBB2_1
228+
; X86-NOBMI-NEXT: jns .LBB6_1
97229
; X86-NOBMI-NEXT: # %bb.2:
98-
; X86-NOBMI-NEXT: jle .LBB2_3
99-
; X86-NOBMI-NEXT: .LBB2_4:
230+
; X86-NOBMI-NEXT: jle .LBB6_3
231+
; X86-NOBMI-NEXT: .LBB6_4:
100232
; X86-NOBMI-NEXT: retl
101-
; X86-NOBMI-NEXT: .LBB2_1:
233+
; X86-NOBMI-NEXT: .LBB6_1:
102234
; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
103-
; X86-NOBMI-NEXT: jg .LBB2_4
104-
; X86-NOBMI-NEXT: .LBB2_3:
235+
; X86-NOBMI-NEXT: jg .LBB6_4
236+
; X86-NOBMI-NEXT: .LBB6_3:
105237
; X86-NOBMI-NEXT: xorl %edx, %edx
106238
; X86-NOBMI-NEXT: retl
107239
%r = call i64 @llvm.smax.i64(i64 %a, i64 0)

0 commit comments

Comments
 (0)