@@ -38,13 +38,13 @@ define i8 @cmov_bsf8_undef(i8 %x, i8 %y) nounwind {
3838; X86: # %bb.0:
3939; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
4040; X86-NEXT: testb %al, %al
41- ; X86-NEXT: je .LBB1_1
41+ ; X86-NEXT: jne .LBB1_1
4242; X86-NEXT: # %bb.2:
43- ; X86-NEXT: rep bsfl %eax , %eax
43+ ; X86-NEXT: movzbl {{[0-9]+}}(%esp) , %eax
4444; X86-NEXT: # kill: def $al killed $al killed $eax
4545; X86-NEXT: retl
4646; X86-NEXT: .LBB1_1:
47- ; X86-NEXT: movzbl {{[0-9]+}}(%esp) , %eax
47+ ; X86-NEXT: rep bsfl %eax , %eax
4848; X86-NEXT: # kill: def $al killed $al killed $eax
4949; X86-NEXT: retl
5050;
@@ -56,8 +56,8 @@ define i8 @cmov_bsf8_undef(i8 %x, i8 %y) nounwind {
5656; X64-NEXT: # kill: def $al killed $al killed $eax
5757; X64-NEXT: retq
5858 %1 = tail call i8 @llvm.cttz.i8 (i8 %x , i1 true )
59- %2 = icmp eq i8 %x , 0
60- %3 = select i1 %2 , i8 %y , i8 %1
59+ %2 = icmp ne i8 %x , 0
60+ %3 = select i1 %2 , i8 %1 , i8 %y
6161 ret i8 %3
6262}
6363
@@ -66,14 +66,14 @@ define i16 @cmov_bsf16(i16 %x, i16 %y) nounwind {
6666; X86: # %bb.0:
6767; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
6868; X86-NEXT: testw %ax, %ax
69- ; X86-NEXT: je .LBB2_1
69+ ; X86-NEXT: jne .LBB2_1
7070; X86-NEXT: # %bb.2:
71- ; X86-NEXT: orl $65536, %eax # imm = 0x10000
72- ; X86-NEXT: rep bsfl %eax, %eax
71+ ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
7372; X86-NEXT: # kill: def $ax killed $ax killed $eax
7473; X86-NEXT: retl
7574; X86-NEXT: .LBB2_1:
76- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
75+ ; X86-NEXT: orl $65536, %eax # imm = 0x10000
76+ ; X86-NEXT: rep bsfl %eax, %eax
7777; X86-NEXT: # kill: def $ax killed $ax killed $eax
7878; X86-NEXT: retl
7979;
@@ -87,8 +87,8 @@ define i16 @cmov_bsf16(i16 %x, i16 %y) nounwind {
8787; X64-NEXT: # kill: def $ax killed $ax killed $eax
8888; X64-NEXT: retq
8989 %1 = tail call i16 @llvm.cttz.i16 (i16 %x , i1 false )
90- %2 = icmp eq i16 %x , 0
91- %3 = select i1 %2 , i16 %y , i16 %1
90+ %2 = icmp ne i16 %x , 0
91+ %3 = select i1 %2 , i16 %1 , i16 %y
9292 ret i16 %3
9393}
9494
@@ -157,12 +157,12 @@ define i32 @cmov_bsf32_undef(i32 %x, i32 %y) nounwind {
157157; X86: # %bb.0:
158158; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
159159; X86-NEXT: testl %eax, %eax
160- ; X86-NEXT: je .LBB5_1
160+ ; X86-NEXT: jne .LBB5_1
161161; X86-NEXT: # %bb.2:
162- ; X86-NEXT: rep bsfl %eax , %eax
162+ ; X86-NEXT: movl {{[0-9]+}}(%esp) , %eax
163163; X86-NEXT: retl
164164; X86-NEXT: .LBB5_1:
165- ; X86-NEXT: movl {{[0-9]+}}(%esp) , %eax
165+ ; X86-NEXT: rep bsfl %eax , %eax
166166; X86-NEXT: retl
167167;
168168; X64-LABEL: cmov_bsf32_undef:
@@ -171,8 +171,8 @@ define i32 @cmov_bsf32_undef(i32 %x, i32 %y) nounwind {
171171; X64-NEXT: cmovel %esi, %eax
172172; X64-NEXT: retq
173173 %1 = tail call i32 @llvm.cttz.i32 (i32 %x , i1 true )
174- %2 = icmp eq i32 %x , 0
175- %3 = select i1 %2 , i32 %y , i32 %1
174+ %2 = icmp ne i32 %x , 0
175+ %3 = select i1 %2 , i32 %1 , i32 %y
176176 ret i32 %3
177177}
178178
@@ -199,7 +199,7 @@ define i64 @cmov_bsf64(i64 %x, i64 %y) nounwind {
199199; X86-NEXT: movl $64, %eax
200200; X86-NEXT: orl %ecx, %esi
201201; X86-NEXT: jne .LBB6_7
202- ; X86-NEXT: .LBB6_6:
202+ ; X86-NEXT: .LBB6_6: # %cond.end
203203; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
204204; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
205205; X86-NEXT: .LBB6_7: # %cond.end
@@ -218,8 +218,8 @@ define i64 @cmov_bsf64(i64 %x, i64 %y) nounwind {
218218; X64-NEXT: cmoveq %rsi, %rax
219219; X64-NEXT: retq
220220 %1 = tail call i64 @llvm.cttz.i64 (i64 %x , i1 false )
221- %2 = icmp eq i64 %x , 0
222- %3 = select i1 %2 , i64 %y , i64 %1
221+ %2 = icmp ne i64 %x , 0
222+ %3 = select i1 %2 , i64 %1 , i64 %y
223223 ret i64 %3
224224}
225225
@@ -375,10 +375,10 @@ define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {
375375; X86-NEXT: orl %ebx, %ebp
376376; X86-NEXT: orl %edi, %ebp
377377; X86-NEXT: je .LBB9_11
378- ; X86-NEXT: # %bb.1: # %select.false .sink
378+ ; X86-NEXT: # %bb.1: # %select.true .sink
379379; X86-NEXT: testl %edx, %edx
380380; X86-NEXT: jne .LBB9_2
381- ; X86-NEXT: # %bb.3: # %select.false .sink
381+ ; X86-NEXT: # %bb.3: # %select.true .sink
382382; X86-NEXT: rep bsfl %ecx, %edi
383383; X86-NEXT: addl $32, %edi
384384; X86-NEXT: testl %ebx, %ebx
@@ -402,20 +402,20 @@ define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {
402402; X86-NEXT: rep bsfl %edx, %edi
403403; X86-NEXT: testl %ebx, %ebx
404404; X86-NEXT: jne .LBB9_5
405- ; X86-NEXT: .LBB9_6: # %select.false .sink
405+ ; X86-NEXT: .LBB9_6: # %select.true .sink
406406; X86-NEXT: rep bsfl %esi, %esi
407407; X86-NEXT: addl $32, %esi
408408; X86-NEXT: orl %ecx, %edx
409409; X86-NEXT: jne .LBB9_9
410- ; X86-NEXT: .LBB9_8: # %select.false .sink
410+ ; X86-NEXT: .LBB9_8: # %select.true .sink
411411; X86-NEXT: addl $64, %esi
412412; X86-NEXT: movl %esi, %edi
413- ; X86-NEXT: .LBB9_9: # %select.false .sink
413+ ; X86-NEXT: .LBB9_9: # %select.true .sink
414414; X86-NEXT: movl %edi, (%eax)
415415; X86-NEXT: movl $0, 12(%eax)
416416; X86-NEXT: movl $0, 8(%eax)
417417; X86-NEXT: movl $0, 4(%eax)
418- ; X86-NEXT: .LBB9_10: # %select.false .sink
418+ ; X86-NEXT: .LBB9_10: # %select.true .sink
419419; X86-NEXT: popl %esi
420420; X86-NEXT: popl %edi
421421; X86-NEXT: popl %ebx
@@ -427,7 +427,7 @@ define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {
427427; X64-NEXT: movq %rdi, %rax
428428; X64-NEXT: orq %rsi, %rax
429429; X64-NEXT: je .LBB9_2
430- ; X64-NEXT: # %bb.1: # %select.false .sink
430+ ; X64-NEXT: # %bb.1: # %select.true .sink
431431; X64-NEXT: rep bsfq %rdi, %rcx
432432; X64-NEXT: rep bsfq %rsi, %rax
433433; X64-NEXT: addq $64, %rax
@@ -440,8 +440,8 @@ define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {
440440; X64-NEXT: movq %rcx, %rdx
441441; X64-NEXT: retq
442442 %1 = tail call i128 @llvm.cttz.i128 (i128 %x , i1 true )
443- %2 = icmp eq i128 %x , 0
444- %3 = select i1 %2 , i128 %y , i128 %1
443+ %2 = icmp ne i128 %x , 0
444+ %3 = select i1 %2 , i128 %1 , i128 %y
445445 ret i128 %3
446446}
447447
0 commit comments