Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / cmov-promotion.ll
blobe96faa7fbb7e7e1bb4cb0bbcf51de24116897974
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefix=CMOV
3 ; RUN: llc < %s -mtriple=i686-unknown-unknown   -mattr=-cmov | FileCheck %s --check-prefix=NO_CMOV
5 define i16 @cmov_zpromotion_8_to_16(i1 %c) {
6 ; CMOV-LABEL: cmov_zpromotion_8_to_16:
7 ; CMOV:       # %bb.0:
8 ; CMOV-NEXT:    testb $1, %dil
9 ; CMOV-NEXT:    movl $117, %ecx
10 ; CMOV-NEXT:    movl $237, %eax
11 ; CMOV-NEXT:    cmovnel %ecx, %eax
12 ; CMOV-NEXT:    # kill: def $ax killed $ax killed $eax
13 ; CMOV-NEXT:    retq
15 ; NO_CMOV-LABEL: cmov_zpromotion_8_to_16:
16 ; NO_CMOV:       # %bb.0:
17 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
18 ; NO_CMOV-NEXT:    movl $117, %eax
19 ; NO_CMOV-NEXT:    jne .LBB0_2
20 ; NO_CMOV-NEXT:  # %bb.1:
21 ; NO_CMOV-NEXT:    movl $237, %eax
22 ; NO_CMOV-NEXT:  .LBB0_2:
23 ; NO_CMOV-NEXT:    # kill: def $ax killed $ax killed $eax
24 ; NO_CMOV-NEXT:    retl
25   %t0 = select i1 %c, i8 117, i8 -19
26   %ret = zext i8 %t0 to i16
27   ret i16 %ret
30 define i32 @cmov_zpromotion_8_to_32(i1 %c) {
31 ; CMOV-LABEL: cmov_zpromotion_8_to_32:
32 ; CMOV:       # %bb.0:
33 ; CMOV-NEXT:    testb $1, %dil
34 ; CMOV-NEXT:    movl $126, %ecx
35 ; CMOV-NEXT:    movl $255, %eax
36 ; CMOV-NEXT:    cmovnel %ecx, %eax
37 ; CMOV-NEXT:    retq
39 ; NO_CMOV-LABEL: cmov_zpromotion_8_to_32:
40 ; NO_CMOV:       # %bb.0:
41 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
42 ; NO_CMOV-NEXT:    movl $126, %eax
43 ; NO_CMOV-NEXT:    jne .LBB1_2
44 ; NO_CMOV-NEXT:  # %bb.1:
45 ; NO_CMOV-NEXT:    movl $255, %eax
46 ; NO_CMOV-NEXT:  .LBB1_2:
47 ; NO_CMOV-NEXT:    retl
48   %t0 = select i1 %c, i8 12414, i8 -1
49   %ret = zext i8 %t0 to i32
50   ret i32 %ret
53 define i64 @cmov_zpromotion_8_to_64(i1 %c) {
54 ; CMOV-LABEL: cmov_zpromotion_8_to_64:
55 ; CMOV:       # %bb.0:
56 ; CMOV-NEXT:    testb $1, %dil
57 ; CMOV-NEXT:    movl $126, %ecx
58 ; CMOV-NEXT:    movl $255, %eax
59 ; CMOV-NEXT:    cmovneq %rcx, %rax
60 ; CMOV-NEXT:    retq
62 ; NO_CMOV-LABEL: cmov_zpromotion_8_to_64:
63 ; NO_CMOV:       # %bb.0:
64 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
65 ; NO_CMOV-NEXT:    movl $126, %eax
66 ; NO_CMOV-NEXT:    jne .LBB2_2
67 ; NO_CMOV-NEXT:  # %bb.1:
68 ; NO_CMOV-NEXT:    movl $255, %eax
69 ; NO_CMOV-NEXT:  .LBB2_2:
70 ; NO_CMOV-NEXT:    xorl %edx, %edx
71 ; NO_CMOV-NEXT:    retl
72   %t0 = select i1 %c, i8 12414, i8 -1
73   %ret = zext i8 %t0 to i64
74   ret i64 %ret
77 define i32 @cmov_zpromotion_16_to_32(i1 %c) {
78 ; CMOV-LABEL: cmov_zpromotion_16_to_32:
79 ; CMOV:       # %bb.0:
80 ; CMOV-NEXT:    testb $1, %dil
81 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
82 ; CMOV-NEXT:    movl $65535, %eax # imm = 0xFFFF
83 ; CMOV-NEXT:    cmovnel %ecx, %eax
84 ; CMOV-NEXT:    retq
86 ; NO_CMOV-LABEL: cmov_zpromotion_16_to_32:
87 ; NO_CMOV:       # %bb.0:
88 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
89 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
90 ; NO_CMOV-NEXT:    jne .LBB3_2
91 ; NO_CMOV-NEXT:  # %bb.1:
92 ; NO_CMOV-NEXT:    movl $65535, %eax # imm = 0xFFFF
93 ; NO_CMOV-NEXT:  .LBB3_2:
94 ; NO_CMOV-NEXT:    retl
95   %t0 = select i1 %c, i16 12414, i16 -1
96   %ret = zext i16 %t0 to i32
97   ret i32 %ret
100 define i64 @cmov_zpromotion_16_to_64(i1 %c) {
101 ; CMOV-LABEL: cmov_zpromotion_16_to_64:
102 ; CMOV:       # %bb.0:
103 ; CMOV-NEXT:    testb $1, %dil
104 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
105 ; CMOV-NEXT:    movl $65535, %eax # imm = 0xFFFF
106 ; CMOV-NEXT:    cmovneq %rcx, %rax
107 ; CMOV-NEXT:    retq
109 ; NO_CMOV-LABEL: cmov_zpromotion_16_to_64:
110 ; NO_CMOV:       # %bb.0:
111 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
112 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
113 ; NO_CMOV-NEXT:    jne .LBB4_2
114 ; NO_CMOV-NEXT:  # %bb.1:
115 ; NO_CMOV-NEXT:    movl $65535, %eax # imm = 0xFFFF
116 ; NO_CMOV-NEXT:  .LBB4_2:
117 ; NO_CMOV-NEXT:    xorl %edx, %edx
118 ; NO_CMOV-NEXT:    retl
119   %t0 = select i1 %c, i16 12414, i16 -1
120   %ret = zext i16 %t0 to i64
121   ret i64 %ret
124 define i64 @cmov_zpromotion_32_to_64(i1 %c) {
125 ; CMOV-LABEL: cmov_zpromotion_32_to_64:
126 ; CMOV:       # %bb.0:
127 ; CMOV-NEXT:    testb $1, %dil
128 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
129 ; CMOV-NEXT:    movl $43107, %eax # imm = 0xA863
130 ; CMOV-NEXT:    cmovnel %ecx, %eax
131 ; CMOV-NEXT:    retq
133 ; NO_CMOV-LABEL: cmov_zpromotion_32_to_64:
134 ; NO_CMOV:       # %bb.0:
135 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
136 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
137 ; NO_CMOV-NEXT:    jne .LBB5_2
138 ; NO_CMOV-NEXT:  # %bb.1:
139 ; NO_CMOV-NEXT:    movl $43107, %eax # imm = 0xA863
140 ; NO_CMOV-NEXT:  .LBB5_2:
141 ; NO_CMOV-NEXT:    xorl %edx, %edx
142 ; NO_CMOV-NEXT:    retl
143   %t0 = select i1 %c, i32 12414, i32 43107
144   %ret = zext i32 %t0 to i64
145   ret i64 %ret
148 define i16 @cmov_spromotion_8_to_16(i1 %c) {
149 ; CMOV-LABEL: cmov_spromotion_8_to_16:
150 ; CMOV:       # %bb.0:
151 ; CMOV-NEXT:    testb $1, %dil
152 ; CMOV-NEXT:    movl $117, %ecx
153 ; CMOV-NEXT:    movl $65517, %eax # imm = 0xFFED
154 ; CMOV-NEXT:    cmovnel %ecx, %eax
155 ; CMOV-NEXT:    # kill: def $ax killed $ax killed $eax
156 ; CMOV-NEXT:    retq
158 ; NO_CMOV-LABEL: cmov_spromotion_8_to_16:
159 ; NO_CMOV:       # %bb.0:
160 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
161 ; NO_CMOV-NEXT:    movl $117, %eax
162 ; NO_CMOV-NEXT:    jne .LBB6_2
163 ; NO_CMOV-NEXT:  # %bb.1:
164 ; NO_CMOV-NEXT:    movl $65517, %eax # imm = 0xFFED
165 ; NO_CMOV-NEXT:  .LBB6_2:
166 ; NO_CMOV-NEXT:    # kill: def $ax killed $ax killed $eax
167 ; NO_CMOV-NEXT:    retl
168   %t0 = select i1 %c, i8 117, i8 -19
169   %ret = sext i8 %t0 to i16
170   ret i16 %ret
173 define i32 @cmov_spromotion_8_to_32(i1 %c) {
174 ; CMOV-LABEL: cmov_spromotion_8_to_32:
175 ; CMOV:       # %bb.0:
176 ; CMOV-NEXT:    testb $1, %dil
177 ; CMOV-NEXT:    movl $126, %ecx
178 ; CMOV-NEXT:    movl $99, %eax
179 ; CMOV-NEXT:    cmovnel %ecx, %eax
180 ; CMOV-NEXT:    retq
182 ; NO_CMOV-LABEL: cmov_spromotion_8_to_32:
183 ; NO_CMOV:       # %bb.0:
184 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
185 ; NO_CMOV-NEXT:    movl $126, %eax
186 ; NO_CMOV-NEXT:    jne .LBB7_2
187 ; NO_CMOV-NEXT:  # %bb.1:
188 ; NO_CMOV-NEXT:    movl $99, %eax
189 ; NO_CMOV-NEXT:  .LBB7_2:
190 ; NO_CMOV-NEXT:    retl
191   %t0 = select i1 %c, i8 12414, i8 43107
192   %ret = sext i8 %t0 to i32
193   ret i32 %ret
196 define i64 @cmov_spromotion_8_to_64(i1 %c) {
197 ; CMOV-LABEL: cmov_spromotion_8_to_64:
198 ; CMOV:       # %bb.0:
199 ; CMOV-NEXT:    testb $1, %dil
200 ; CMOV-NEXT:    movl $126, %ecx
201 ; CMOV-NEXT:    movl $99, %eax
202 ; CMOV-NEXT:    cmovneq %rcx, %rax
203 ; CMOV-NEXT:    retq
205 ; NO_CMOV-LABEL: cmov_spromotion_8_to_64:
206 ; NO_CMOV:       # %bb.0:
207 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
208 ; NO_CMOV-NEXT:    movl $126, %eax
209 ; NO_CMOV-NEXT:    jne .LBB8_2
210 ; NO_CMOV-NEXT:  # %bb.1:
211 ; NO_CMOV-NEXT:    movl $99, %eax
212 ; NO_CMOV-NEXT:  .LBB8_2:
213 ; NO_CMOV-NEXT:    xorl %edx, %edx
214 ; NO_CMOV-NEXT:    retl
215   %t0 = select i1 %c, i8 12414, i8 43107
216   %ret = sext i8 %t0 to i64
217   ret i64 %ret
220 define i32 @cmov_spromotion_16_to_32(i1 %c) {
221 ; CMOV-LABEL: cmov_spromotion_16_to_32:
222 ; CMOV:       # %bb.0:
223 ; CMOV-NEXT:    testb $1, %dil
224 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
225 ; CMOV-NEXT:    movl $-22429, %eax # imm = 0xA863
226 ; CMOV-NEXT:    cmovnel %ecx, %eax
227 ; CMOV-NEXT:    retq
229 ; NO_CMOV-LABEL: cmov_spromotion_16_to_32:
230 ; NO_CMOV:       # %bb.0:
231 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
232 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
233 ; NO_CMOV-NEXT:    jne .LBB9_2
234 ; NO_CMOV-NEXT:  # %bb.1:
235 ; NO_CMOV-NEXT:    movl $-22429, %eax # imm = 0xA863
236 ; NO_CMOV-NEXT:  .LBB9_2:
237 ; NO_CMOV-NEXT:    retl
238   %t0 = select i1 %c, i16 12414, i16 43107
239   %ret = sext i16 %t0 to i32
240   ret i32 %ret
243 define i64 @cmov_spromotion_16_to_64(i1 %c) {
244 ; CMOV-LABEL: cmov_spromotion_16_to_64:
245 ; CMOV:       # %bb.0:
246 ; CMOV-NEXT:    testb $1, %dil
247 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
248 ; CMOV-NEXT:    movq $-22429, %rax # imm = 0xA863
249 ; CMOV-NEXT:    cmovneq %rcx, %rax
250 ; CMOV-NEXT:    retq
252 ; NO_CMOV-LABEL: cmov_spromotion_16_to_64:
253 ; NO_CMOV:       # %bb.0:
254 ; NO_CMOV-NEXT:    xorl %edx, %edx
255 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
256 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
257 ; NO_CMOV-NEXT:    je .LBB10_1
258 ; NO_CMOV-NEXT:  # %bb.2:
259 ; NO_CMOV-NEXT:    je .LBB10_3
260 ; NO_CMOV-NEXT:  .LBB10_4:
261 ; NO_CMOV-NEXT:    retl
262 ; NO_CMOV-NEXT:  .LBB10_1:
263 ; NO_CMOV-NEXT:    movl $-22429, %eax # imm = 0xA863
264 ; NO_CMOV-NEXT:    jne .LBB10_4
265 ; NO_CMOV-NEXT:  .LBB10_3:
266 ; NO_CMOV-NEXT:    movl $-1, %edx
267 ; NO_CMOV-NEXT:    retl
268   %t0 = select i1 %c, i16 12414, i16 43107
269   %ret = sext i16 %t0 to i64
270   ret i64 %ret
273 define i64 @cmov_spromotion_32_to_64(i1 %c) {
274 ; CMOV-LABEL: cmov_spromotion_32_to_64:
275 ; CMOV:       # %bb.0:
276 ; CMOV-NEXT:    testb $1, %dil
277 ; CMOV-NEXT:    movl $12414, %ecx # imm = 0x307E
278 ; CMOV-NEXT:    movl $43107, %eax # imm = 0xA863
279 ; CMOV-NEXT:    cmovneq %rcx, %rax
280 ; CMOV-NEXT:    retq
282 ; NO_CMOV-LABEL: cmov_spromotion_32_to_64:
283 ; NO_CMOV:       # %bb.0:
284 ; NO_CMOV-NEXT:    testb $1, {{[0-9]+}}(%esp)
285 ; NO_CMOV-NEXT:    movl $12414, %eax # imm = 0x307E
286 ; NO_CMOV-NEXT:    jne .LBB11_2
287 ; NO_CMOV-NEXT:  # %bb.1:
288 ; NO_CMOV-NEXT:    movl $43107, %eax # imm = 0xA863
289 ; NO_CMOV-NEXT:  .LBB11_2:
290 ; NO_CMOV-NEXT:    xorl %edx, %edx
291 ; NO_CMOV-NEXT:    retl
292   %t0 = select i1 %c, i32 12414, i32 43107
293   %ret = sext i32 %t0 to i64
294   ret i64 %ret