1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2
- ; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64
3
- ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=FASTISEL-X64
4
- ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X64
5
- ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
6
- ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=FASTISEL-X86
7
- ; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
2
+ ; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
3
+ ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64, FASTISEL-X64
4
+ ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL- X64
5
+ ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86,DAG-X86
6
+ ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86, FASTISEL-X86
7
+ ; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL- X86
8
8
9
9
define i8 @smax_i8 (i8 %a , i8 %b ) nounwind readnone {
10
- ; X64-LABEL: smax_i8:
11
- ; X64: # %bb.0:
12
- ; X64-NEXT: movl %esi, %eax
13
- ; X64-NEXT: cmpb %al, %dil
14
- ; X64-NEXT: cmovgl %edi, %eax
15
- ; X64-NEXT: # kill: def $al killed $al killed $eax
16
- ; X64-NEXT: retq
10
+ ; DAG- X64-LABEL: smax_i8:
11
+ ; DAG- X64: # %bb.0:
12
+ ; DAG- X64-NEXT: movl %esi, %eax
13
+ ; DAG- X64-NEXT: cmpb %al, %dil
14
+ ; DAG- X64-NEXT: cmovgl %edi, %eax
15
+ ; DAG- X64-NEXT: # kill: def $al killed $al killed $eax
16
+ ; DAG- X64-NEXT: retq
17
17
;
18
18
; FASTISEL-X64-LABEL: smax_i8:
19
19
; FASTISEL-X64: # %bb.0:
@@ -24,6 +24,17 @@ define i8 @smax_i8(i8 %a, i8 %b) nounwind readnone {
24
24
; FASTISEL-X64-NEXT: # kill: def $al killed $al killed $eax
25
25
; FASTISEL-X64-NEXT: retq
26
26
;
27
+ ; GISEL-X64-LABEL: smax_i8:
28
+ ; GISEL-X64: # %bb.0:
29
+ ; GISEL-X64-NEXT: movl %esi, %eax
30
+ ; GISEL-X64-NEXT: xorl %ecx, %ecx
31
+ ; GISEL-X64-NEXT: cmpb %al, %dil
32
+ ; GISEL-X64-NEXT: setg %cl
33
+ ; GISEL-X64-NEXT: andl $1, %ecx
34
+ ; GISEL-X64-NEXT: cmovnew %di, %ax
35
+ ; GISEL-X64-NEXT: # kill: def $al killed $al killed $eax
36
+ ; GISEL-X64-NEXT: retq
37
+ ;
27
38
; X86-LABEL: smax_i8:
28
39
; X86: # %bb.0:
29
40
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
@@ -35,16 +46,20 @@ define i8 @smax_i8(i8 %a, i8 %b) nounwind readnone {
35
46
; X86-NEXT: .LBB0_2:
36
47
; X86-NEXT: retl
37
48
;
38
- ; FASTISEL-X86-LABEL: smax_i8:
39
- ; FASTISEL-X86: # %bb.0:
40
- ; FASTISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
41
- ; FASTISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
42
- ; FASTISEL-X86-NEXT: cmpb %cl, %al
43
- ; FASTISEL-X86-NEXT: jg .LBB0_2
44
- ; FASTISEL-X86-NEXT: # %bb.1:
45
- ; FASTISEL-X86-NEXT: movl %ecx, %eax
46
- ; FASTISEL-X86-NEXT: .LBB0_2:
47
- ; FASTISEL-X86-NEXT: retl
49
+ ; GISEL-X86-LABEL: smax_i8:
50
+ ; GISEL-X86: # %bb.0:
51
+ ; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
52
+ ; GISEL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
53
+ ; GISEL-X86-NEXT: xorl %edx, %edx
54
+ ; GISEL-X86-NEXT: cmpb %al, %cl
55
+ ; GISEL-X86-NEXT: setg %dl
56
+ ; GISEL-X86-NEXT: andl $1, %edx
57
+ ; GISEL-X86-NEXT: je .LBB0_2
58
+ ; GISEL-X86-NEXT: # %bb.1:
59
+ ; GISEL-X86-NEXT: movl %ecx, %eax
60
+ ; GISEL-X86-NEXT: .LBB0_2:
61
+ ; GISEL-X86-NEXT: # kill: def $al killed $al killed $eax
62
+ ; GISEL-X86-NEXT: retl
48
63
%ret = call i8 @llvm.smax.i8 (i8 %a , i8 %b )
49
64
ret i8 %ret
50
65
}
@@ -57,25 +72,28 @@ define i16 @smax_i16(i16 %a, i16 %b) nounwind readnone {
57
72
; X64-NEXT: # kill: def $ax killed $ax killed $eax
58
73
; X64-NEXT: retq
59
74
;
60
- ; FASTISEL-X64-LABEL: smax_i16:
61
- ; FASTISEL-X64: # %bb.0:
62
- ; FASTISEL-X64-NEXT: movl %esi, %eax
63
- ; FASTISEL-X64-NEXT: cmpw %ax, %di
64
- ; FASTISEL-X64-NEXT: cmovgl %edi, %eax
65
- ; FASTISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax
66
- ; FASTISEL-X64-NEXT: retq
75
+ ; GISEL-X64-LABEL: smax_i16:
76
+ ; GISEL-X64: # %bb.0:
77
+ ; GISEL-X64-NEXT: movl %edi, %eax
78
+ ; GISEL-X64-NEXT: xorl %ecx, %ecx
79
+ ; GISEL-X64-NEXT: cmpw %si, %ax
80
+ ; GISEL-X64-NEXT: setg %cl
81
+ ; GISEL-X64-NEXT: andl $1, %ecx
82
+ ; GISEL-X64-NEXT: cmovew %si, %ax
83
+ ; GISEL-X64-NEXT: # kill: def $ax killed $ax killed $eax
84
+ ; GISEL-X64-NEXT: retq
67
85
;
68
- ; X86-LABEL: smax_i16:
69
- ; X86: # %bb.0:
70
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
71
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
72
- ; X86-NEXT: cmpw %cx, %ax
73
- ; X86-NEXT: jg .LBB1_2
74
- ; X86-NEXT: # %bb.1:
75
- ; X86-NEXT: movl %ecx, %eax
76
- ; X86-NEXT: .LBB1_2:
77
- ; X86-NEXT: # kill: def $ax killed $ax killed $eax
78
- ; X86-NEXT: retl
86
+ ; DAG- X86-LABEL: smax_i16:
87
+ ; DAG- X86: # %bb.0:
88
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
89
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %eax
90
+ ; DAG- X86-NEXT: cmpw %cx, %ax
91
+ ; DAG- X86-NEXT: jg .LBB1_2
92
+ ; DAG- X86-NEXT: # %bb.1:
93
+ ; DAG- X86-NEXT: movl %ecx, %eax
94
+ ; DAG- X86-NEXT: .LBB1_2:
95
+ ; DAG- X86-NEXT: # kill: def $ax killed $ax killed $eax
96
+ ; DAG- X86-NEXT: retl
79
97
;
80
98
; FASTISEL-X86-LABEL: smax_i16:
81
99
; FASTISEL-X86: # %bb.0:
@@ -88,6 +106,21 @@ define i16 @smax_i16(i16 %a, i16 %b) nounwind readnone {
88
106
; FASTISEL-X86-NEXT: .LBB1_2:
89
107
; FASTISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax
90
108
; FASTISEL-X86-NEXT: retl
109
+ ;
110
+ ; GISEL-X86-LABEL: smax_i16:
111
+ ; GISEL-X86: # %bb.0:
112
+ ; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
113
+ ; GISEL-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
114
+ ; GISEL-X86-NEXT: xorl %edx, %edx
115
+ ; GISEL-X86-NEXT: cmpw %ax, %cx
116
+ ; GISEL-X86-NEXT: setg %dl
117
+ ; GISEL-X86-NEXT: andl $1, %edx
118
+ ; GISEL-X86-NEXT: je .LBB1_2
119
+ ; GISEL-X86-NEXT: # %bb.1:
120
+ ; GISEL-X86-NEXT: movl %ecx, %eax
121
+ ; GISEL-X86-NEXT: .LBB1_2:
122
+ ; GISEL-X86-NEXT: # kill: def $ax killed $ax killed $eax
123
+ ; GISEL-X86-NEXT: retl
91
124
%ret = call i16 @llvm.smax.i16 (i16 %a , i16 %b )
92
125
ret i16 %ret
93
126
}
@@ -99,12 +132,15 @@ define i32 @smax_i32(i32 %a, i32 %b) nounwind readnone {
99
132
; X64-NEXT: cmovgl %edi, %eax
100
133
; X64-NEXT: retq
101
134
;
102
- ; FASTISEL-X64-LABEL: smax_i32:
103
- ; FASTISEL-X64: # %bb.0:
104
- ; FASTISEL-X64-NEXT: movl %esi, %eax
105
- ; FASTISEL-X64-NEXT: cmpl %esi, %edi
106
- ; FASTISEL-X64-NEXT: cmovgl %edi, %eax
107
- ; FASTISEL-X64-NEXT: retq
135
+ ; GISEL-X64-LABEL: smax_i32:
136
+ ; GISEL-X64: # %bb.0:
137
+ ; GISEL-X64-NEXT: movl %edi, %eax
138
+ ; GISEL-X64-NEXT: xorl %ecx, %ecx
139
+ ; GISEL-X64-NEXT: cmpl %esi, %edi
140
+ ; GISEL-X64-NEXT: setg %cl
141
+ ; GISEL-X64-NEXT: andl $1, %ecx
142
+ ; GISEL-X64-NEXT: cmovel %esi, %eax
143
+ ; GISEL-X64-NEXT: retq
108
144
;
109
145
; X86-LABEL: smax_i32:
110
146
; X86: # %bb.0:
@@ -117,16 +153,19 @@ define i32 @smax_i32(i32 %a, i32 %b) nounwind readnone {
117
153
; X86-NEXT: .LBB2_2:
118
154
; X86-NEXT: retl
119
155
;
120
- ; FASTISEL-X86-LABEL: smax_i32:
121
- ; FASTISEL-X86: # %bb.0:
122
- ; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
123
- ; FASTISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
124
- ; FASTISEL-X86-NEXT: cmpl %ecx, %eax
125
- ; FASTISEL-X86-NEXT: jg .LBB2_2
126
- ; FASTISEL-X86-NEXT: # %bb.1:
127
- ; FASTISEL-X86-NEXT: movl %ecx, %eax
128
- ; FASTISEL-X86-NEXT: .LBB2_2:
129
- ; FASTISEL-X86-NEXT: retl
156
+ ; GISEL-X86-LABEL: smax_i32:
157
+ ; GISEL-X86: # %bb.0:
158
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
159
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
160
+ ; GISEL-X86-NEXT: xorl %edx, %edx
161
+ ; GISEL-X86-NEXT: cmpl %eax, %ecx
162
+ ; GISEL-X86-NEXT: setg %dl
163
+ ; GISEL-X86-NEXT: andl $1, %edx
164
+ ; GISEL-X86-NEXT: je .LBB2_2
165
+ ; GISEL-X86-NEXT: # %bb.1:
166
+ ; GISEL-X86-NEXT: movl %ecx, %eax
167
+ ; GISEL-X86-NEXT: .LBB2_2:
168
+ ; GISEL-X86-NEXT: retl
130
169
%ret = call i32 @llvm.smax.i32 (i32 %a , i32 %b )
131
170
ret i32 %ret
132
171
}
@@ -138,32 +177,35 @@ define i64 @smax_i64(i64 %a, i64 %b) nounwind readnone {
138
177
; X64-NEXT: cmovgq %rdi, %rax
139
178
; X64-NEXT: retq
140
179
;
141
- ; FASTISEL-X64-LABEL: smax_i64:
142
- ; FASTISEL-X64: # %bb.0:
143
- ; FASTISEL-X64-NEXT: movq %rsi, %rax
144
- ; FASTISEL-X64-NEXT: cmpq %rsi, %rdi
145
- ; FASTISEL-X64-NEXT: cmovgq %rdi, %rax
146
- ; FASTISEL-X64-NEXT: retq
180
+ ; GISEL-X64-LABEL: smax_i64:
181
+ ; GISEL-X64: # %bb.0:
182
+ ; GISEL-X64-NEXT: movq %rdi, %rax
183
+ ; GISEL-X64-NEXT: xorl %ecx, %ecx
184
+ ; GISEL-X64-NEXT: cmpq %rsi, %rdi
185
+ ; GISEL-X64-NEXT: setg %cl
186
+ ; GISEL-X64-NEXT: andl $1, %ecx
187
+ ; GISEL-X64-NEXT: cmoveq %rsi, %rax
188
+ ; GISEL-X64-NEXT: retq
147
189
;
148
- ; X86-LABEL: smax_i64:
149
- ; X86: # %bb.0:
150
- ; X86-NEXT: pushl %edi
151
- ; X86-NEXT: pushl %esi
152
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
153
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
154
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
155
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
156
- ; X86-NEXT: cmpl %eax, %ecx
157
- ; X86-NEXT: movl %esi, %edi
158
- ; X86-NEXT: sbbl %edx, %edi
159
- ; X86-NEXT: jl .LBB3_2
160
- ; X86-NEXT: # %bb.1:
161
- ; X86-NEXT: movl %ecx, %eax
162
- ; X86-NEXT: movl %esi, %edx
163
- ; X86-NEXT: .LBB3_2:
164
- ; X86-NEXT: popl %esi
165
- ; X86-NEXT: popl %edi
166
- ; X86-NEXT: retl
190
+ ; DAG- X86-LABEL: smax_i64:
191
+ ; DAG- X86: # %bb.0:
192
+ ; DAG- X86-NEXT: pushl %edi
193
+ ; DAG- X86-NEXT: pushl %esi
194
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %eax
195
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %edx
196
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
197
+ ; DAG- X86-NEXT: movl {{[0-9]+}}(%esp), %esi
198
+ ; DAG- X86-NEXT: cmpl %eax, %ecx
199
+ ; DAG- X86-NEXT: movl %esi, %edi
200
+ ; DAG- X86-NEXT: sbbl %edx, %edi
201
+ ; DAG- X86-NEXT: jl .LBB3_2
202
+ ; DAG- X86-NEXT: # %bb.1:
203
+ ; DAG- X86-NEXT: movl %ecx, %eax
204
+ ; DAG- X86-NEXT: movl %esi, %edx
205
+ ; DAG- X86-NEXT: .LBB3_2:
206
+ ; DAG- X86-NEXT: popl %esi
207
+ ; DAG- X86-NEXT: popl %edi
208
+ ; DAG- X86-NEXT: retl
167
209
;
168
210
; FASTISEL-X86-LABEL: smax_i64:
169
211
; FASTISEL-X86: # %bb.0:
@@ -184,6 +226,44 @@ define i64 @smax_i64(i64 %a, i64 %b) nounwind readnone {
184
226
; FASTISEL-X86-NEXT: popl %esi
185
227
; FASTISEL-X86-NEXT: popl %edi
186
228
; FASTISEL-X86-NEXT: retl
229
+ ;
230
+ ; GISEL-X86-LABEL: smax_i64:
231
+ ; GISEL-X86: # %bb.0:
232
+ ; GISEL-X86-NEXT: pushl %ebp
233
+ ; GISEL-X86-NEXT: pushl %ebx
234
+ ; GISEL-X86-NEXT: pushl %edi
235
+ ; GISEL-X86-NEXT: pushl %esi
236
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %esi
237
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
238
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
239
+ ; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %edx
240
+ ; GISEL-X86-NEXT: cmpl %eax, %esi
241
+ ; GISEL-X86-NEXT: seta %bl
242
+ ; GISEL-X86-NEXT: xorl %ecx, %ecx
243
+ ; GISEL-X86-NEXT: cmpl %edx, %ebp
244
+ ; GISEL-X86-NEXT: setg %bh
245
+ ; GISEL-X86-NEXT: sete %cl
246
+ ; GISEL-X86-NEXT: testl %ecx, %ecx
247
+ ; GISEL-X86-NEXT: je .LBB3_2
248
+ ; GISEL-X86-NEXT: # %bb.1:
249
+ ; GISEL-X86-NEXT: movb %bl, %bh
250
+ ; GISEL-X86-NEXT: .LBB3_2:
251
+ ; GISEL-X86-NEXT: movzbl %bh, %edi
252
+ ; GISEL-X86-NEXT: andl $1, %edi
253
+ ; GISEL-X86-NEXT: je .LBB3_4
254
+ ; GISEL-X86-NEXT: # %bb.3:
255
+ ; GISEL-X86-NEXT: movl %esi, %eax
256
+ ; GISEL-X86-NEXT: .LBB3_4:
257
+ ; GISEL-X86-NEXT: testl %edi, %edi
258
+ ; GISEL-X86-NEXT: je .LBB3_6
259
+ ; GISEL-X86-NEXT: # %bb.5:
260
+ ; GISEL-X86-NEXT: movl %ebp, %edx
261
+ ; GISEL-X86-NEXT: .LBB3_6:
262
+ ; GISEL-X86-NEXT: popl %esi
263
+ ; GISEL-X86-NEXT: popl %edi
264
+ ; GISEL-X86-NEXT: popl %ebx
265
+ ; GISEL-X86-NEXT: popl %ebp
266
+ ; GISEL-X86-NEXT: retl
187
267
%ret = call i64 @llvm.smax.i64 (i64 %a , i64 %b )
188
268
ret i64 %ret
189
269
}
0 commit comments