; select Cond, 0, -1 --> sext (!Cond)
define i32 @select_0_or_neg1(i1 %cond) {
-; ISEL-LABEL: select_0_or_neg1:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 0, 3, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_0_or_neg1:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bc 12, 1, .LBB6_1
-; NO_ISEL-NEXT: blr
-; NO_ISEL-NEXT: .LBB6_1:
-; NO_ISEL-NEXT: addi 3, 0, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_0_or_neg1:
+; ALL: # %bb.0:
+; ALL-NEXT: not 3, 3
+; ALL-NEXT: clrldi 3, 3, 63
+; ALL-NEXT: neg 3, 3
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 0, i32 -1
ret i32 %sel
}
define i32 @select_0_or_neg1_zeroext(i1 zeroext %cond) {
-; ISEL-LABEL: select_0_or_neg1_zeroext:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 0, 3, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_0_or_neg1_zeroext:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bc 12, 1, .LBB7_1
-; NO_ISEL-NEXT: blr
-; NO_ISEL-NEXT: .LBB7_1:
-; NO_ISEL-NEXT: addi 3, 0, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_0_or_neg1_zeroext:
+; ALL: # %bb.0:
+; ALL-NEXT: xori 3, 3, 1
+; ALL-NEXT: neg 3, 3
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 0, i32 -1
ret i32 %sel
}
define i32 @select_0_or_neg1_signext(i1 signext %cond) {
-; ISEL-LABEL: select_0_or_neg1_signext:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 0, 3, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_0_or_neg1_signext:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bc 12, 1, .LBB8_1
-; NO_ISEL-NEXT: blr
-; NO_ISEL-NEXT: .LBB8_1:
-; NO_ISEL-NEXT: addi 3, 0, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_0_or_neg1_signext:
+; ALL: # %bb.0:
+; ALL-NEXT: not 3, 3
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 0, i32 -1
ret i32 %sel
}
; select Cond, -1, 0 --> sext (Cond)
define i32 @select_neg1_or_0(i1 %cond) {
-; ISEL-LABEL: select_neg1_or_0:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 3, 4, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_neg1_or_0:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_neg1_or_0:
+; ALL: # %bb.0:
+; ALL-NEXT: clrldi 3, 3, 63
+; ALL-NEXT: neg 3, 3
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 -1, i32 0
ret i32 %sel
}
define i32 @select_neg1_or_0_zeroext(i1 zeroext %cond) {
-; ISEL-LABEL: select_neg1_or_0_zeroext:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 3, 4, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_neg1_or_0_zeroext:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_neg1_or_0_zeroext:
+; ALL: # %bb.0:
+; ALL-NEXT: neg 3, 3
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 -1, i32 0
ret i32 %sel
}
define i32 @select_neg1_or_0_signext(i1 signext %cond) {
-; ISEL-LABEL: select_neg1_or_0_signext:
-; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
-; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: ori 3, 3, 65535
-; ISEL-NEXT: isel 3, 3, 4, 1
-; ISEL-NEXT: blr
-;
-; NO_ISEL-LABEL: select_neg1_or_0_signext:
-; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
-; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: ori 3, 3, 65535
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
-; NO_ISEL-NEXT: blr
+; ALL-LABEL: select_neg1_or_0_signext:
+; ALL: # %bb.0:
+; ALL-NEXT: blr
%sel = select i1 %cond, i32 -1, i32 0
ret i32 %sel
}
define i8 @sel_constants_sub_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_sub_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: li 4, 18
-; ISEL-NEXT: ori 3, 3, 65527
-; ISEL-NEXT: isel 3, 3, 4, 1
+; ISEL-NEXT: li 4, -9
+; ISEL-NEXT: li 3, 18
+; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_sub_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: li 4, 18
-; NO_ISEL-NEXT: ori 3, 3, 65527
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
+; NO_ISEL-NEXT: li 4, -9
+; NO_ISEL-NEXT: li 3, 18
+; NO_ISEL-NEXT: bc 12, 1, .LBB22_1
+; NO_ISEL-NEXT: blr
+; NO_ISEL-NEXT: .LBB22_1:
+; NO_ISEL-NEXT: addi 3, 4, 0
; NO_ISEL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
%bo = sub i8 %sel, 5
define i8 @sel_constants_mul_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_mul_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: lis 4, 16383
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: ori 3, 4, 65531
-; ISEL-NEXT: li 4, 115
-; ISEL-NEXT: sldi 3, 3, 2
-; ISEL-NEXT: isel 3, 3, 4, 1
+; ISEL-NEXT: li 4, -20
+; ISEL-NEXT: li 3, 115
+; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_mul_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: lis 4, 16383
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: ori 3, 4, 65531
-; NO_ISEL-NEXT: li 4, 115
-; NO_ISEL-NEXT: sldi 3, 3, 2
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
+; NO_ISEL-NEXT: li 4, -20
+; NO_ISEL-NEXT: li 3, 115
+; NO_ISEL-NEXT: bc 12, 1, .LBB24_1
+; NO_ISEL-NEXT: blr
+; NO_ISEL-NEXT: .LBB24_1:
+; NO_ISEL-NEXT: addi 3, 4, 0
; NO_ISEL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
%bo = mul i8 %sel, 5
define i8 @sel_constants_srem_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_srem_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: lis 4, 16383
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: ori 3, 4, 65535
-; ISEL-NEXT: li 4, 3
-; ISEL-NEXT: sldi 3, 3, 2
-; ISEL-NEXT: isel 3, 3, 4, 1
+; ISEL-NEXT: li 4, -4
+; ISEL-NEXT: li 3, 3
+; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_srem_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: lis 4, 16383
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: ori 3, 4, 65535
-; NO_ISEL-NEXT: li 4, 3
-; NO_ISEL-NEXT: sldi 3, 3, 2
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
+; NO_ISEL-NEXT: li 4, -4
+; NO_ISEL-NEXT: li 3, 3
+; NO_ISEL-NEXT: bc 12, 1, .LBB29_1
+; NO_ISEL-NEXT: blr
+; NO_ISEL-NEXT: .LBB29_1:
+; NO_ISEL-NEXT: addi 3, 4, 0
; NO_ISEL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
%bo = srem i8 %sel, 5
define i8 @sel_constants_urem_constant(i1 %cond) {
; ALL-LABEL: sel_constants_urem_constant:
; ALL: # %bb.0:
-; ALL-NEXT: rlwinm 3, 3, 0, 31, 31
+; ALL-NEXT: clrldi 3, 3, 63
; ALL-NEXT: subfic 3, 3, 3
; ALL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
define i8 @sel_constants_and_constant(i1 %cond) {
; ALL-LABEL: sel_constants_and_constant:
; ALL: # %bb.0:
-; ALL-NEXT: rlwinm 3, 3, 0, 31, 31
+; ALL-NEXT: clrldi 3, 3, 63
; ALL-NEXT: subfic 3, 3, 5
; ALL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
define i8 @sel_constants_or_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_or_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: li 4, 23
-; ISEL-NEXT: ori 3, 3, 65533
-; ISEL-NEXT: isel 3, 3, 4, 1
+; ISEL-NEXT: li 4, -3
+; ISEL-NEXT: li 3, 23
+; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_or_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: li 4, 23
-; NO_ISEL-NEXT: ori 3, 3, 65533
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
+; NO_ISEL-NEXT: li 4, -3
+; NO_ISEL-NEXT: li 3, 23
+; NO_ISEL-NEXT: bc 12, 1, .LBB34_1
+; NO_ISEL-NEXT: blr
+; NO_ISEL-NEXT: .LBB34_1:
+; NO_ISEL-NEXT: addi 3, 4, 0
; NO_ISEL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
%bo = or i8 %sel, 5
define i8 @sel_constants_xor_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_xor_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: li 4, 0
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: oris 3, 4, 65535
-; ISEL-NEXT: li 4, 18
-; ISEL-NEXT: ori 3, 3, 65529
-; ISEL-NEXT: isel 3, 3, 4, 1
+; ISEL-NEXT: li 4, -7
+; ISEL-NEXT: li 3, 18
+; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_xor_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: li 4, 0
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: oris 3, 4, 65535
-; NO_ISEL-NEXT: li 4, 18
-; NO_ISEL-NEXT: ori 3, 3, 65529
-; NO_ISEL-NEXT: bclr 12, 1, 0
-; NO_ISEL-NEXT: # %bb.1:
-; NO_ISEL-NEXT: ori 3, 4, 0
+; NO_ISEL-NEXT: li 4, -7
+; NO_ISEL-NEXT: li 3, 18
+; NO_ISEL-NEXT: bc 12, 1, .LBB35_1
+; NO_ISEL-NEXT: blr
+; NO_ISEL-NEXT: .LBB35_1:
+; NO_ISEL-NEXT: addi 3, 4, 0
; NO_ISEL-NEXT: blr
%sel = select i1 %cond, i8 -4, i8 23
%bo = xor i8 %sel, 5
define i8 @sel_constants_shl_constant(i1 %cond) {
; ISEL-LABEL: sel_constants_shl_constant:
; ISEL: # %bb.0:
-; ISEL-NEXT: lis 4, 2047
-; ISEL-NEXT: lis 5, 511
; ISEL-NEXT: andi. 3, 3, 1
-; ISEL-NEXT: ori 3, 4, 65535
-; ISEL-NEXT: ori 4, 5, 65535
-; ISEL-NEXT: sldi 3, 3, 5
-; ISEL-NEXT: sldi 4, 4, 7
+; ISEL-NEXT: li 4, -128
+; ISEL-NEXT: li 3, -32
; ISEL-NEXT: isel 3, 4, 3, 1
; ISEL-NEXT: blr
;
; NO_ISEL-LABEL: sel_constants_shl_constant:
; NO_ISEL: # %bb.0:
-; NO_ISEL-NEXT: lis 4, 2047
-; NO_ISEL-NEXT: lis 5, 511
; NO_ISEL-NEXT: andi. 3, 3, 1
-; NO_ISEL-NEXT: ori 3, 4, 65535
-; NO_ISEL-NEXT: ori 4, 5, 65535
-; NO_ISEL-NEXT: sldi 3, 3, 5
-; NO_ISEL-NEXT: sldi 4, 4, 7
+; NO_ISEL-NEXT: li 4, -128
+; NO_ISEL-NEXT: li 3, -32
; NO_ISEL-NEXT: bc 12, 1, .LBB36_1
; NO_ISEL-NEXT: blr
; NO_ISEL-NEXT: .LBB36_1:
; NO_CMOV-LABEL: cmov_zpromotion_8_to_16:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $117, %al
+; NO_CMOV-NEXT: movl $117, %eax
; NO_CMOV-NEXT: jne .LBB0_2
; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-19, %al
+; NO_CMOV-NEXT: movl $237, %eax
; NO_CMOV-NEXT: .LBB0_2:
-; NO_CMOV-NEXT: movzbl %al, %eax
; NO_CMOV-NEXT: # kill: def $ax killed $ax killed $eax
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 117, i8 -19
; NO_CMOV-LABEL: cmov_zpromotion_8_to_32:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $126, %al
+; NO_CMOV-NEXT: movl $126, %eax
; NO_CMOV-NEXT: jne .LBB1_2
; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-1, %al
+; NO_CMOV-NEXT: movl $255, %eax
; NO_CMOV-NEXT: .LBB1_2:
-; NO_CMOV-NEXT: movzbl %al, %eax
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 12414, i8 -1
%ret = zext i8 %t0 to i32
; CMOV-NEXT: testb $1, %dil
; CMOV-NEXT: movl $126, %ecx
; CMOV-NEXT: movl $255, %eax
-; CMOV-NEXT: cmovnel %ecx, %eax
+; CMOV-NEXT: cmovneq %rcx, %rax
; CMOV-NEXT: retq
;
; NO_CMOV-LABEL: cmov_zpromotion_8_to_64:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $126, %al
+; NO_CMOV-NEXT: movl $126, %eax
; NO_CMOV-NEXT: jne .LBB2_2
; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-1, %al
+; NO_CMOV-NEXT: movl $255, %eax
; NO_CMOV-NEXT: .LBB2_2:
-; NO_CMOV-NEXT: movzbl %al, %eax
; NO_CMOV-NEXT: xorl %edx, %edx
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 12414, i8 -1
; CMOV-NEXT: testb $1, %dil
; CMOV-NEXT: movl $12414, %ecx # imm = 0x307E
; CMOV-NEXT: movl $65535, %eax # imm = 0xFFFF
-; CMOV-NEXT: cmovnel %ecx, %eax
+; CMOV-NEXT: cmovneq %rcx, %rax
; CMOV-NEXT: retq
;
; NO_CMOV-LABEL: cmov_zpromotion_16_to_64:
; NO_CMOV-LABEL: cmov_spromotion_8_to_16:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $117, %al
+; NO_CMOV-NEXT: movl $117, %eax
; NO_CMOV-NEXT: jne .LBB6_2
; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-19, %al
+; NO_CMOV-NEXT: movl $65517, %eax # imm = 0xFFED
; NO_CMOV-NEXT: .LBB6_2:
-; NO_CMOV-NEXT: movsbl %al, %eax
; NO_CMOV-NEXT: # kill: def $ax killed $ax killed $eax
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 117, i8 -19
; NO_CMOV-LABEL: cmov_spromotion_8_to_32:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $126, %al
+; NO_CMOV-NEXT: movl $126, %eax
; NO_CMOV-NEXT: jne .LBB7_2
; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-1, %al
+; NO_CMOV-NEXT: movl $-1, %eax
; NO_CMOV-NEXT: .LBB7_2:
-; NO_CMOV-NEXT: movsbl %al, %eax
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 12414, i8 -1
%ret = sext i8 %t0 to i32
; NO_CMOV-LABEL: cmov_spromotion_8_to_64:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movb $126, %al
-; NO_CMOV-NEXT: jne .LBB8_2
-; NO_CMOV-NEXT: # %bb.1:
-; NO_CMOV-NEXT: movb $-1, %al
-; NO_CMOV-NEXT: .LBB8_2:
-; NO_CMOV-NEXT: movsbl %al, %eax
-; NO_CMOV-NEXT: movl %eax, %edx
-; NO_CMOV-NEXT: sarl $31, %edx
+; NO_CMOV-NEXT: jne .LBB8_1
+; NO_CMOV-NEXT: # %bb.2:
+; NO_CMOV-NEXT: movl $-1, %eax
+; NO_CMOV-NEXT: movl $-1, %edx
+; NO_CMOV-NEXT: retl
+; NO_CMOV-NEXT: .LBB8_1:
+; NO_CMOV-NEXT: xorl %edx, %edx
+; NO_CMOV-NEXT: movl $126, %eax
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i8 12414, i8 -1
%ret = sext i8 %t0 to i64
; NO_CMOV-LABEL: cmov_spromotion_16_to_64:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movl $12414, %eax # imm = 0x307E
-; NO_CMOV-NEXT: jne .LBB10_2
-; NO_CMOV-NEXT: # %bb.1:
+; NO_CMOV-NEXT: jne .LBB10_1
+; NO_CMOV-NEXT: # %bb.2:
; NO_CMOV-NEXT: movl $-1, %eax
-; NO_CMOV-NEXT: .LBB10_2:
-; NO_CMOV-NEXT: movl %eax, %edx
-; NO_CMOV-NEXT: sarl $31, %edx
+; NO_CMOV-NEXT: movl $-1, %edx
+; NO_CMOV-NEXT: retl
+; NO_CMOV-NEXT: .LBB10_1:
+; NO_CMOV-NEXT: xorl %edx, %edx
+; NO_CMOV-NEXT: movl $12414, %eax # imm = 0x307E
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i16 12414, i16 -1
%ret = sext i16 %t0 to i64
; NO_CMOV-LABEL: cmov_spromotion_32_to_64:
; NO_CMOV: # %bb.0:
; NO_CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
-; NO_CMOV-NEXT: movl $12414, %eax # imm = 0x307E
-; NO_CMOV-NEXT: jne .LBB11_2
-; NO_CMOV-NEXT: # %bb.1:
+; NO_CMOV-NEXT: jne .LBB11_1
+; NO_CMOV-NEXT: # %bb.2:
; NO_CMOV-NEXT: movl $-1, %eax
-; NO_CMOV-NEXT: .LBB11_2:
-; NO_CMOV-NEXT: movl %eax, %edx
-; NO_CMOV-NEXT: sarl $31, %edx
+; NO_CMOV-NEXT: movl $-1, %edx
+; NO_CMOV-NEXT: retl
+; NO_CMOV-NEXT: .LBB11_1:
+; NO_CMOV-NEXT: xorl %edx, %edx
+; NO_CMOV-NEXT: movl $12414, %eax # imm = 0x307E
; NO_CMOV-NEXT: retl
%t0 = select i1 %c, i32 12414, i32 -1
%ret = sext i32 %t0 to i64