[llvm-branch-commits] [llvm] 03bffc1 - Revert "[X86] combineCMov - fold CMOV(LOAD(PTR0),LOAD(PTR1)) -> LOAD(CMOV(PTR…"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Feb 20 09:28:12 PST 2026


Author: Simon Pilgrim
Date: 2026-02-20T17:28:08Z
New Revision: 03bffc1d082b1c11364e15585b7d9c27b0375c48

URL: https://github.com/llvm/llvm-project/commit/03bffc1d082b1c11364e15585b7d9c27b0375c48
DIFF: https://github.com/llvm/llvm-project/commit/03bffc1d082b1c11364e15585b7d9c27b0375c48.diff

LOG: Revert "[X86] combineCMov - fold CMOV(LOAD(PTR0),LOAD(PTR1)) -> LOAD(CMOV(PTR…"

This reverts commit e80e9405f91e35783d0cbc8f492af0684ec1a758.

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86ISelLowering.cpp
    llvm/test/CodeGen/X86/cmov-fp.ll
    llvm/test/CodeGen/X86/dagcombine-select.ll
    llvm/test/CodeGen/X86/fdiv-combine.ll
    llvm/test/CodeGen/X86/fp128-select.ll
    llvm/test/CodeGen/X86/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
    llvm/test/CodeGen/X86/select_const.ll
    llvm/test/CodeGen/X86/sse-load-ret.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 1bf969db93ee0..447dcac0c5d9b 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -49944,37 +49944,6 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
     }
   }
 
-  // Attempt to fold CMOV(LOAD(PTR0),LOAD(PTR1)) -> LOAD(CMOV(PTR0,PTR1))
-  // TODO: Allow matching extloads?
-  if (TrueOp.getResNo() == 0 && ISD::isNormalLoad(TrueOp.getNode()) &&
-      FalseOp.getResNo() == 0 && ISD::isNormalLoad(FalseOp.getNode()) &&
-      TrueOp.hasOneUse() && FalseOp.hasOneUse()) {
-    auto *TrueLd = cast<LoadSDNode>(TrueOp);
-    auto *FalseLd = cast<LoadSDNode>(FalseOp);
-    // Ensure the loads and pointers are as similar as possible.
-    EVT PtrVT = FalseLd->getBasePtr().getValueType();
-    if (TrueLd->getChain() == FalseLd->getChain() &&
-        TrueLd->getPointerInfo().getAddrSpace() ==
-            FalseLd->getPointerInfo().getAddrSpace() &&
-        TrueLd->getMemOperand()->getFlags() ==
-            FalseLd->getMemOperand()->getFlags() &&
-        TrueLd->isSimple() && FalseLd->isSimple() &&
-        !TrueLd->isPredecessorOf(Cond.getNode()) &&
-        !FalseLd->isPredecessorOf(Cond.getNode())) {
-      SDValue Ops[] = {FalseLd->getBasePtr(), TrueLd->getBasePtr(),
-                       DAG.getTargetConstant(CC, DL, MVT::i8), Cond};
-      SDValue NewPtr = DAG.getNode(X86ISD::CMOV, DL, PtrVT, Ops);
-      SDValue NewLd = DAG.getLoad(
-          VT, DL, FalseLd->getChain(), NewPtr,
-          MachinePointerInfo(FalseLd->getPointerInfo().getAddrSpace()),
-          std::min(FalseLd->getAlign(), TrueLd->getAlign()),
-          FalseLd->getMemOperand()->getFlags());
-      DAG.makeEquivalentMemoryOrdering(TrueLd, NewLd);
-      DAG.makeEquivalentMemoryOrdering(FalseLd, NewLd);
-      return NewLd;
-    }
-  }
-
   // If this is a select between two integer constants, try to do some
   // optimizations.  Note that the operands are ordered the opposite of SELECT
   // operands.

diff  --git a/llvm/test/CodeGen/X86/cmov-fp.ll b/llvm/test/CodeGen/X86/cmov-fp.ll
index 8054436c1f015..77665d083b7e3 100644
--- a/llvm/test/CodeGen/X86/cmov-fp.ll
+++ b/llvm/test/CodeGen/X86/cmov-fp.ll
@@ -8,12 +8,23 @@
 define double @test1(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test1:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmoval %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    ja .LBB0_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB0_3
+; SSE-NEXT:  .LBB0_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB0_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test1:
@@ -49,12 +60,23 @@ define double @test1(i32 %a, i32 %b, double %x) nounwind {
 define double @test2(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test2:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovael %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jae .LBB1_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB1_3
+; SSE-NEXT:  .LBB1_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB1_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test2:
@@ -90,12 +112,23 @@ define double @test2(i32 %a, i32 %b, double %x) nounwind {
 define double @test3(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test3:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovbl %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jb .LBB2_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB2_3
+; SSE-NEXT:  .LBB2_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB2_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test3:
@@ -131,12 +164,23 @@ define double @test3(i32 %a, i32 %b, double %x) nounwind {
 define double @test4(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test4:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovbel %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jbe .LBB3_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB3_3
+; SSE-NEXT:  .LBB3_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB3_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test4:
@@ -172,12 +216,23 @@ define double @test4(i32 %a, i32 %b, double %x) nounwind {
 define double @test5(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test5:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovgl %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jg .LBB4_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB4_3
+; SSE-NEXT:  .LBB4_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB4_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test5:
@@ -215,12 +270,23 @@ define double @test5(i32 %a, i32 %b, double %x) nounwind {
 define double @test6(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test6:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovgel %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jge .LBB5_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB5_3
+; SSE-NEXT:  .LBB5_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB5_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test6:
@@ -258,12 +324,23 @@ define double @test6(i32 %a, i32 %b, double %x) nounwind {
 define double @test7(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test7:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovll %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jl .LBB6_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB6_3
+; SSE-NEXT:  .LBB6_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB6_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test7:
@@ -301,12 +378,23 @@ define double @test7(i32 %a, i32 %b, double %x) nounwind {
 define double @test8(i32 %a, i32 %b, double %x) nounwind {
 ; SSE-LABEL: test8:
 ; SSE:       # %bb.0:
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovlel %eax, %ecx
-; SSE-NEXT:    fldl (%ecx)
+; SSE-NEXT:    pushl %ebp
+; SSE-NEXT:    movl %esp, %ebp
+; SSE-NEXT:    andl $-8, %esp
+; SSE-NEXT:    subl $8, %esp
+; SSE-NEXT:    movl 8(%ebp), %eax
+; SSE-NEXT:    cmpl 12(%ebp), %eax
+; SSE-NEXT:    jle .LBB7_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; SSE-NEXT:    jmp .LBB7_3
+; SSE-NEXT:  .LBB7_1:
+; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]
+; SSE-NEXT:  .LBB7_3:
+; SSE-NEXT:    movsd %xmm0, (%esp)
+; SSE-NEXT:    fldl (%esp)
+; SSE-NEXT:    movl %ebp, %esp
+; SSE-NEXT:    popl %ebp
 ; SSE-NEXT:    retl
 ;
 ; NOSSE-LABEL: test8:
@@ -344,34 +432,62 @@ define double @test8(i32 %a, i32 %b, double %x) nounwind {
 define float @test9(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test9:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmoval %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    ja .LBB8_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB8_3
+; SSE-NEXT:  .LBB8_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB8_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
-; NOSSE-LABEL: test9:
-; NOSSE:       # %bb.0:
-; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE-NEXT:    cmoval %eax, %ecx
-; NOSSE-NEXT:    flds (%ecx)
-; NOSSE-NEXT:    retl
+; NOSSE2-LABEL: test9:
+; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
+; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    ja .LBB8_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB8_3
+; NOSSE2-NEXT:  .LBB8_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB8_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
+; NOSSE2-NEXT:    retl
+;
+; NOSSE1-LABEL: test9:
+; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
+; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovnbe %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
+; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test9:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    ja .LBB8_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB8_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp ugt i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -381,34 +497,62 @@ define float @test9(i32 %a, i32 %b, float %x) nounwind {
 define float @test10(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test10:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovael %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jae .LBB9_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB9_3
+; SSE-NEXT:  .LBB9_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB9_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
-; NOSSE-LABEL: test10:
-; NOSSE:       # %bb.0:
-; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE-NEXT:    cmovael %eax, %ecx
-; NOSSE-NEXT:    flds (%ecx)
-; NOSSE-NEXT:    retl
+; NOSSE2-LABEL: test10:
+; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
+; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    jae .LBB9_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB9_3
+; NOSSE2-NEXT:  .LBB9_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB9_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
+; NOSSE2-NEXT:    retl
+;
+; NOSSE1-LABEL: test10:
+; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
+; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovnb %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
+; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test10:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jae .LBB9_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB9_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp uge i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -418,34 +562,62 @@ define float @test10(i32 %a, i32 %b, float %x) nounwind {
 define float @test11(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test11:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovbl %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jb .LBB10_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB10_3
+; SSE-NEXT:  .LBB10_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB10_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
-; NOSSE-LABEL: test11:
-; NOSSE:       # %bb.0:
-; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE-NEXT:    cmovbl %eax, %ecx
-; NOSSE-NEXT:    flds (%ecx)
-; NOSSE-NEXT:    retl
+; NOSSE2-LABEL: test11:
+; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
+; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    jb .LBB10_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB10_3
+; NOSSE2-NEXT:  .LBB10_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB10_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
+; NOSSE2-NEXT:    retl
+;
+; NOSSE1-LABEL: test11:
+; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
+; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovb %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
+; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test11:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jb .LBB10_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB10_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp ult i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -455,34 +627,62 @@ define float @test11(i32 %a, i32 %b, float %x) nounwind {
 define float @test12(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test12:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovbel %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jbe .LBB11_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB11_3
+; SSE-NEXT:  .LBB11_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB11_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
-; NOSSE-LABEL: test12:
-; NOSSE:       # %bb.0:
-; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE-NEXT:    cmovbel %eax, %ecx
-; NOSSE-NEXT:    flds (%ecx)
-; NOSSE-NEXT:    retl
+; NOSSE2-LABEL: test12:
+; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
+; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE2-NEXT:    jbe .LBB11_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB11_3
+; NOSSE2-NEXT:  .LBB11_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB11_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
+; NOSSE2-NEXT:    retl
+;
+; NOSSE1-LABEL: test12:
+; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
+; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovbe %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
+; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test12:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jbe .LBB11_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB11_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp ule i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -492,46 +692,64 @@ define float @test12(i32 %a, i32 %b, float %x) nounwind {
 define float @test13(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test13:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovgl %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jg .LBB12_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB12_3
+; SSE-NEXT:  .LBB12_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB12_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
 ; NOSSE2-LABEL: test13:
 ; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
 ; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE2-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE2-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE2-NEXT:    cmovgl %eax, %ecx
-; NOSSE2-NEXT:    flds (%ecx)
+; NOSSE2-NEXT:    jg .LBB12_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB12_3
+; NOSSE2-NEXT:  .LBB12_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB12_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
 ; NOSSE2-NEXT:    retl
 ;
 ; NOSSE1-LABEL: test13:
 ; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    setg %al
 ; NOSSE1-NEXT:    testb %al, %al
-; NOSSE1-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE1-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE1-NEXT:    cmovgl %eax, %ecx
-; NOSSE1-NEXT:    flds (%ecx)
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovne %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
 ; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test13:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jg .LBB12_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB12_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp sgt i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -541,46 +759,64 @@ define float @test13(i32 %a, i32 %b, float %x) nounwind {
 define float @test14(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test14:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovgel %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jge .LBB13_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB13_3
+; SSE-NEXT:  .LBB13_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB13_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
 ; NOSSE2-LABEL: test14:
 ; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
 ; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE2-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE2-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE2-NEXT:    cmovgel %eax, %ecx
-; NOSSE2-NEXT:    flds (%ecx)
+; NOSSE2-NEXT:    jge .LBB13_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB13_3
+; NOSSE2-NEXT:  .LBB13_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB13_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
 ; NOSSE2-NEXT:    retl
 ;
 ; NOSSE1-LABEL: test14:
 ; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    setge %al
 ; NOSSE1-NEXT:    testb %al, %al
-; NOSSE1-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE1-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE1-NEXT:    cmovgel %eax, %ecx
-; NOSSE1-NEXT:    flds (%ecx)
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovne %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
 ; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test14:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jge .LBB13_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB13_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp sge i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -590,46 +826,64 @@ define float @test14(i32 %a, i32 %b, float %x) nounwind {
 define float @test15(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test15:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovll %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jl .LBB14_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB14_3
+; SSE-NEXT:  .LBB14_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB14_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
 ; NOSSE2-LABEL: test15:
 ; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
 ; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE2-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE2-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE2-NEXT:    cmovll %eax, %ecx
-; NOSSE2-NEXT:    flds (%ecx)
+; NOSSE2-NEXT:    jl .LBB14_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB14_3
+; NOSSE2-NEXT:  .LBB14_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB14_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
 ; NOSSE2-NEXT:    retl
 ;
 ; NOSSE1-LABEL: test15:
 ; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    setl %al
 ; NOSSE1-NEXT:    testb %al, %al
-; NOSSE1-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE1-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE1-NEXT:    cmovll %eax, %ecx
-; NOSSE1-NEXT:    flds (%ecx)
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovne %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
 ; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test15:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jl .LBB14_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB14_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp slt i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x
@@ -639,46 +893,64 @@ define float @test15(i32 %a, i32 %b, float %x) nounwind {
 define float @test16(i32 %a, i32 %b, float %x) nounwind {
 ; SSE-LABEL: test16:
 ; SSE:       # %bb.0:
+; SSE-NEXT:    pushl %eax
 ; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovlel %eax, %ecx
-; SSE-NEXT:    flds (%ecx)
+; SSE-NEXT:    jle .LBB15_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; SSE-NEXT:    jmp .LBB15_3
+; SSE-NEXT:  .LBB15_1:
+; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; SSE-NEXT:  .LBB15_3:
+; SSE-NEXT:    movss %xmm0, (%esp)
+; SSE-NEXT:    flds (%esp)
+; SSE-NEXT:    popl %eax
 ; SSE-NEXT:    retl
 ;
 ; NOSSE2-LABEL: test16:
 ; NOSSE2:       # %bb.0:
+; NOSSE2-NEXT:    pushl %eax
 ; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOSSE2-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE2-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE2-NEXT:    cmovlel %eax, %ecx
-; NOSSE2-NEXT:    flds (%ecx)
+; NOSSE2-NEXT:    jle .LBB15_1
+; NOSSE2-NEXT:  # %bb.2:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; NOSSE2-NEXT:    jmp .LBB15_3
+; NOSSE2-NEXT:  .LBB15_1:
+; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]
+; NOSSE2-NEXT:  .LBB15_3:
+; NOSSE2-NEXT:    movss %xmm0, (%esp)
+; NOSSE2-NEXT:    flds (%esp)
+; NOSSE2-NEXT:    popl %eax
 ; NOSSE2-NEXT:    retl
 ;
 ; NOSSE1-LABEL: test16:
 ; NOSSE1:       # %bb.0:
+; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
 ; NOSSE1-NEXT:    setle %al
 ; NOSSE1-NEXT:    testb %al, %al
-; NOSSE1-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; NOSSE1-NEXT:    leal {{[0-9]+}}(%esp), %ecx
-; NOSSE1-NEXT:    cmovlel %eax, %ecx
-; NOSSE1-NEXT:    flds (%ecx)
+; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
+; NOSSE1-NEXT:    fxch %st(1)
+; NOSSE1-NEXT:    fcmovne %st(1), %st
+; NOSSE1-NEXT:    fstp %st(1)
 ; NOSSE1-NEXT:    retl
 ;
 ; NOCMOV-LABEL: test16:
 ; NOCMOV:       # %bb.0:
+; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)
 ; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
 ; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; NOCMOV-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
 ; NOCMOV-NEXT:    jle .LBB15_2
 ; NOCMOV-NEXT:  # %bb.1:
-; NOCMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; NOCMOV-NEXT:    fstp %st(0)
+; NOCMOV-NEXT:    fldz
+; NOCMOV-NEXT:    fxch %st(1)
 ; NOCMOV-NEXT:  .LBB15_2:
-; NOCMOV-NEXT:    flds (%eax)
+; NOCMOV-NEXT:    fstp %st(1)
 ; NOCMOV-NEXT:    retl
   %cmp = icmp sle i32 %a, %b
   %sel = select i1 %cmp, float 99.0, float %x

diff  --git a/llvm/test/CodeGen/X86/dagcombine-select.ll b/llvm/test/CodeGen/X86/dagcombine-select.ll
index 2276a5b47e342..1380c02663ee0 100644
--- a/llvm/test/CodeGen/X86/dagcombine-select.ll
+++ b/llvm/test/CodeGen/X86/dagcombine-select.ll
@@ -277,10 +277,12 @@ define double @fsub_constant_sel_constants(i1 %cond) {
 ; CHECK-LABEL: fsub_constant_sel_constants:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; CHECK-NEXT:    cmovneq %rax, %rcx
-; CHECK-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; CHECK-NEXT:    jne .LBB20_1
+; CHECK-NEXT:  # %bb.2:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [-1.8200000000000003E+1,0.0E+0]
+; CHECK-NEXT:    retq
+; CHECK-NEXT:  .LBB20_1:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [9.0999999999999996E+0,0.0E+0]
 ; CHECK-NEXT:    retq
   %sel = select i1 %cond, double -4.0, double 23.3
   %bo = fsub double 5.1, %sel
@@ -291,10 +293,12 @@ define double @fdiv_constant_sel_constants(i1 %cond) {
 ; CHECK-LABEL: fdiv_constant_sel_constants:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; CHECK-NEXT:    cmovneq %rax, %rcx
-; CHECK-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; CHECK-NEXT:    jne .LBB21_1
+; CHECK-NEXT:  # %bb.2:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [2.188841201716738E-1,0.0E+0]
+; CHECK-NEXT:    retq
+; CHECK-NEXT:  .LBB21_1:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [-1.2749999999999999E+0,0.0E+0]
 ; CHECK-NEXT:    retq
   %sel = select i1 %cond, double -4.0, double 23.3
   %bo = fdiv double 5.1, %sel
@@ -305,10 +309,12 @@ define double @frem_constant_sel_constants(i1 %cond) {
 ; CHECK-LABEL: frem_constant_sel_constants:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    testb $1, %dil
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; CHECK-NEXT:    cmovneq %rax, %rcx
-; CHECK-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; CHECK-NEXT:    jne .LBB22_1
+; CHECK-NEXT:  # %bb.2:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [5.0999999999999996E+0,0.0E+0]
+; CHECK-NEXT:    retq
+; CHECK-NEXT:  .LBB22_1:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0999999999999996E+0,0.0E+0]
 ; CHECK-NEXT:    retq
   %sel = select i1 %cond, double -4.0, double 23.3
   %bo = frem double 5.1, %sel

diff  --git a/llvm/test/CodeGen/X86/fdiv-combine.ll b/llvm/test/CodeGen/X86/fdiv-combine.ll
index 731b9b63f695a..1abcdc3cca9b7 100644
--- a/llvm/test/CodeGen/X86/fdiv-combine.ll
+++ b/llvm/test/CodeGen/X86/fdiv-combine.ll
@@ -100,10 +100,12 @@ define float @div_select_constant_fold(i1 zeroext %arg) {
 ; CHECK-LABEL: div_select_constant_fold:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    testl %edi, %edi
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; CHECK-NEXT:    cmovneq %rax, %rcx
-; CHECK-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; CHECK-NEXT:    jne .LBB6_1
+; CHECK-NEXT:  # %bb.2:
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = [3.0E+0,0.0E+0,0.0E+0,0.0E+0]
+; CHECK-NEXT:    retq
+; CHECK-NEXT:  .LBB6_1:
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = [2.5E+0,0.0E+0,0.0E+0,0.0E+0]
 ; CHECK-NEXT:    retq
   %tmp = select i1 %arg, float 5.000000e+00, float 6.000000e+00
   %B2 = fdiv nnan float %tmp, 2.000000e+00

diff  --git a/llvm/test/CodeGen/X86/fp128-select.ll b/llvm/test/CodeGen/X86/fp128-select.ll
index a1a29b33b897d..27a651e23f886 100644
--- a/llvm/test/CodeGen/X86/fp128-select.ll
+++ b/llvm/test/CodeGen/X86/fp128-select.ll
@@ -12,9 +12,13 @@ define void @test_select(ptr %p, ptr %q, i1 zeroext %c) nounwind {
 ; SSE-LABEL: test_select:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    testl %edx, %edx
-; SSE-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; SSE-NEXT:    cmovneq %rdi, %rax
-; SSE-NEXT:    movups (%rax), %xmm0
+; SSE-NEXT:    jne .LBB0_1
+; SSE-NEXT:  # %bb.2:
+; SSE-NEXT:    movaps {{.*#+}} xmm0 = [NaN]
+; SSE-NEXT:    movaps %xmm0, (%rsi)
+; SSE-NEXT:    retq
+; SSE-NEXT:  .LBB0_1:
+; SSE-NEXT:    movups (%rdi), %xmm0
 ; SSE-NEXT:    movaps %xmm0, (%rsi)
 ; SSE-NEXT:    retq
 ;

diff  --git a/llvm/test/CodeGen/X86/hoist-and-by-const-from-shl-in-eqcmp-zero.ll b/llvm/test/CodeGen/X86/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
index 274b31173e6ab..b816150de2d06 100644
--- a/llvm/test/CodeGen/X86/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
+++ b/llvm/test/CodeGen/X86/hoist-and-by-const-from-shl-in-eqcmp-zero.ll
@@ -344,11 +344,14 @@ define i1 @scalar_i64_lowestbit_eq(i64 %x, i64 %y) nounwind {
 ; X86-LABEL: scalar_i64_lowestbit_eq:
 ; X86:       # %bb.0:
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx
 ; X86-NEXT:    testb $32, %al
-; X86-NEXT:    leal {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    cmovnel %ecx, %edx
-; X86-NEXT:    movl (%edx), %ecx
+; X86-NEXT:    je .LBB10_1
+; X86-NEXT:  # %bb.2:
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    jmp .LBB10_3
+; X86-NEXT:  .LBB10_1:
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:  .LBB10_3:
 ; X86-NEXT:    btl %eax, %ecx
 ; X86-NEXT:    setae %al
 ; X86-NEXT:    retl

diff  --git a/llvm/test/CodeGen/X86/select_const.ll b/llvm/test/CodeGen/X86/select_const.ll
index 52ad40a5f8c2b..35f4655dd6d7c 100644
--- a/llvm/test/CodeGen/X86/select_const.ll
+++ b/llvm/test/CodeGen/X86/select_const.ll
@@ -832,10 +832,12 @@ define <4 x i32> @sel_constants_add_constant_vec(i1 %cond) {
 ; X64-LABEL: sel_constants_add_constant_vec:
 ; X64:       # %bb.0:
 ; X64-NEXT:    testb $1, %dil
-; X64-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; X64-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; X64-NEXT:    cmovneq %rax, %rcx
-; X64-NEXT:    movaps (%rcx), %xmm0
+; X64-NEXT:    jne .LBB37_1
+; X64-NEXT:  # %bb.2:
+; X64-NEXT:    movaps {{.*#+}} xmm0 = [12,13,14,15]
+; X64-NEXT:    retq
+; X64-NEXT:  .LBB37_1:
+; X64-NEXT:    movaps {{.*#+}} xmm0 = [4294967293,14,4,4]
 ; X64-NEXT:    retq
   %sel = select i1 %cond, <4 x i32> <i32 -4, i32 12, i32 1, i32 0>, <4 x i32> <i32 11, i32 11, i32 11, i32 11>
   %bo = add <4 x i32> %sel, <i32 1, i32 2, i32 3, i32 4>
@@ -846,27 +848,33 @@ define <2 x double> @sel_constants_fmul_constant_vec(i1 %cond) {
 ; X86-LABEL: sel_constants_fmul_constant_vec:
 ; X86:       # %bb.0:
 ; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
-; X86-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; X86-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
+; X86-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-NEXT:    jne .LBB38_2
 ; X86-NEXT:  # %bb.1:
-; X86-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; X86-NEXT:    fstp %st(1)
+; X86-NEXT:    fldz
 ; X86-NEXT:  .LBB38_2:
-; X86-NEXT:    fldl (%eax)
-; X86-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; X86-NEXT:    fstp %st(0)
+; X86-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
+; X86-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
 ; X86-NEXT:    jne .LBB38_4
 ; X86-NEXT:  # %bb.3:
-; X86-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
+; X86-NEXT:    fstp %st(1)
+; X86-NEXT:    fldz
 ; X86-NEXT:  .LBB38_4:
-; X86-NEXT:    fldl (%eax)
+; X86-NEXT:    fstp %st(0)
 ; X86-NEXT:    retl
 ;
 ; X64-LABEL: sel_constants_fmul_constant_vec:
 ; X64:       # %bb.0:
 ; X64-NEXT:    testb $1, %dil
-; X64-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; X64-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; X64-NEXT:    cmovneq %rax, %rcx
-; X64-NEXT:    movaps (%rcx), %xmm0
+; X64-NEXT:    jne .LBB38_1
+; X64-NEXT:  # %bb.2:
+; X64-NEXT:    movaps {{.*#+}} xmm0 = [1.1883E+2,3.4539999999999999E+1]
+; X64-NEXT:    retq
+; X64-NEXT:  .LBB38_1:
+; X64-NEXT:    movaps {{.*#+}} xmm0 = [-2.0399999999999999E+1,3.768E+1]
 ; X64-NEXT:    retq
   %sel = select i1 %cond, <2 x double> <double -4.0, double 12.0>, <2 x double> <double 23.3, double 11.0>
   %bo = fmul <2 x double> %sel, <double 5.1, double 3.14>

diff  --git a/llvm/test/CodeGen/X86/sse-load-ret.ll b/llvm/test/CodeGen/X86/sse-load-ret.ll
index faa62e48534cc..0e9b24360e2f8 100644
--- a/llvm/test/CodeGen/X86/sse-load-ret.ll
+++ b/llvm/test/CodeGen/X86/sse-load-ret.ll
@@ -23,11 +23,26 @@ define double @test2() {
 define double @test3(i1 %B) {
 ; CHECK-LABEL: test3:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    testb $1, {{[0-9]+}}(%esp)
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %eax
-; CHECK-NEXT:    movl ${{\.?LCPI[0-9]+_[0-9]+}}, %ecx
-; CHECK-NEXT:    cmovnel %eax, %ecx
-; CHECK-NEXT:    fldl (%ecx)
+; CHECK-NEXT:    pushl %ebp
+; CHECK-NEXT:    .cfi_def_cfa_offset 8
+; CHECK-NEXT:    .cfi_offset %ebp, -8
+; CHECK-NEXT:    movl %esp, %ebp
+; CHECK-NEXT:    .cfi_def_cfa_register %ebp
+; CHECK-NEXT:    andl $-8, %esp
+; CHECK-NEXT:    subl $8, %esp
+; CHECK-NEXT:    testb $1, 8(%ebp)
+; CHECK-NEXT:    jne .LBB2_1
+; CHECK-NEXT:  # %bb.2:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [5.2301123123000002E+2,0.0E+0]
+; CHECK-NEXT:    jmp .LBB2_3
+; CHECK-NEXT:  .LBB2_1:
+; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.2341200000000001E+2,0.0E+0]
+; CHECK-NEXT:  .LBB2_3:
+; CHECK-NEXT:    movsd %xmm0, (%esp)
+; CHECK-NEXT:    fldl (%esp)
+; CHECK-NEXT:    movl %ebp, %esp
+; CHECK-NEXT:    popl %ebp
+; CHECK-NEXT:    .cfi_def_cfa %esp, 4
 ; CHECK-NEXT:    retl
 	%C = select i1 %B, double 123.412, double 523.01123123
 	ret double %C


        


More information about the llvm-branch-commits mailing list