brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.3 KiB · 77665d0 Raw
1312 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=i686-- -mcpu pentium4 < %s | FileCheck %s -check-prefix=SSE3; RUN: llc -mtriple=i686-- -mcpu pentium3 < %s | FileCheck %s -check-prefixes=NOSSE,NOSSE24; RUN: llc -mtriple=i686-- -mcpu pentium2 < %s | FileCheck %s -check-prefixes=NOSSE,NOSSE15; RUN: llc -mtriple=i686-- -mcpu pentium < %s | FileCheck %s -check-prefix=NOCMOV6; PR140357 8define double @test1(i32 %a, i32 %b, double %x) nounwind {9; SSE-LABEL: test1:10; SSE:       # %bb.0:11; SSE-NEXT:    pushl %ebp12; SSE-NEXT:    movl %esp, %ebp13; SSE-NEXT:    andl $-8, %esp14; SSE-NEXT:    subl $8, %esp15; SSE-NEXT:    movl 8(%ebp), %eax16; SSE-NEXT:    cmpl 12(%ebp), %eax17; SSE-NEXT:    ja .LBB0_118; SSE-NEXT:  # %bb.2:19; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero20; SSE-NEXT:    jmp .LBB0_321; SSE-NEXT:  .LBB0_1:22; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]23; SSE-NEXT:  .LBB0_3:24; SSE-NEXT:    movsd %xmm0, (%esp)25; SSE-NEXT:    fldl (%esp)26; SSE-NEXT:    movl %ebp, %esp27; SSE-NEXT:    popl %ebp28; SSE-NEXT:    retl29;30; NOSSE-LABEL: test1:31; NOSSE:       # %bb.0:32; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)33; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax34; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax35; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}36; NOSSE-NEXT:    fxch %st(1)37; NOSSE-NEXT:    fcmovnbe %st(1), %st38; NOSSE-NEXT:    fstp %st(1)39; NOSSE-NEXT:    retl40;41; NOCMOV-LABEL: test1:42; NOCMOV:       # %bb.0:43; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)44; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax45; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax46; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}47; NOCMOV-NEXT:    ja .LBB0_248; NOCMOV-NEXT:  # %bb.1:49; NOCMOV-NEXT:    fstp %st(0)50; NOCMOV-NEXT:    fldz51; NOCMOV-NEXT:    fxch %st(1)52; NOCMOV-NEXT:  .LBB0_2:53; NOCMOV-NEXT:    fstp %st(1)54; NOCMOV-NEXT:    retl55  %cmp = icmp ugt i32 %a, %b56  %sel = select i1 %cmp, double 99.0, double %x57  ret double %sel58}59 60define double @test2(i32 %a, i32 %b, double %x) nounwind {61; SSE-LABEL: test2:62; SSE:       # %bb.0:63; SSE-NEXT:    pushl %ebp64; SSE-NEXT:    movl %esp, %ebp65; SSE-NEXT:    andl $-8, %esp66; SSE-NEXT:    subl $8, %esp67; SSE-NEXT:    movl 8(%ebp), %eax68; SSE-NEXT:    cmpl 12(%ebp), %eax69; SSE-NEXT:    jae .LBB1_170; SSE-NEXT:  # %bb.2:71; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero72; SSE-NEXT:    jmp .LBB1_373; SSE-NEXT:  .LBB1_1:74; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]75; SSE-NEXT:  .LBB1_3:76; SSE-NEXT:    movsd %xmm0, (%esp)77; SSE-NEXT:    fldl (%esp)78; SSE-NEXT:    movl %ebp, %esp79; SSE-NEXT:    popl %ebp80; SSE-NEXT:    retl81;82; NOSSE-LABEL: test2:83; NOSSE:       # %bb.0:84; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)85; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax86; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax87; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}88; NOSSE-NEXT:    fxch %st(1)89; NOSSE-NEXT:    fcmovnb %st(1), %st90; NOSSE-NEXT:    fstp %st(1)91; NOSSE-NEXT:    retl92;93; NOCMOV-LABEL: test2:94; NOCMOV:       # %bb.0:95; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)96; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax97; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax98; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}99; NOCMOV-NEXT:    jae .LBB1_2100; NOCMOV-NEXT:  # %bb.1:101; NOCMOV-NEXT:    fstp %st(0)102; NOCMOV-NEXT:    fldz103; NOCMOV-NEXT:    fxch %st(1)104; NOCMOV-NEXT:  .LBB1_2:105; NOCMOV-NEXT:    fstp %st(1)106; NOCMOV-NEXT:    retl107  %cmp = icmp uge i32 %a, %b108  %sel = select i1 %cmp, double 99.0, double %x109  ret double %sel110}111 112define double @test3(i32 %a, i32 %b, double %x) nounwind {113; SSE-LABEL: test3:114; SSE:       # %bb.0:115; SSE-NEXT:    pushl %ebp116; SSE-NEXT:    movl %esp, %ebp117; SSE-NEXT:    andl $-8, %esp118; SSE-NEXT:    subl $8, %esp119; SSE-NEXT:    movl 8(%ebp), %eax120; SSE-NEXT:    cmpl 12(%ebp), %eax121; SSE-NEXT:    jb .LBB2_1122; SSE-NEXT:  # %bb.2:123; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero124; SSE-NEXT:    jmp .LBB2_3125; SSE-NEXT:  .LBB2_1:126; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]127; SSE-NEXT:  .LBB2_3:128; SSE-NEXT:    movsd %xmm0, (%esp)129; SSE-NEXT:    fldl (%esp)130; SSE-NEXT:    movl %ebp, %esp131; SSE-NEXT:    popl %ebp132; SSE-NEXT:    retl133;134; NOSSE-LABEL: test3:135; NOSSE:       # %bb.0:136; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)137; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax138; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax139; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}140; NOSSE-NEXT:    fxch %st(1)141; NOSSE-NEXT:    fcmovb %st(1), %st142; NOSSE-NEXT:    fstp %st(1)143; NOSSE-NEXT:    retl144;145; NOCMOV-LABEL: test3:146; NOCMOV:       # %bb.0:147; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)148; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax149; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax150; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}151; NOCMOV-NEXT:    jb .LBB2_2152; NOCMOV-NEXT:  # %bb.1:153; NOCMOV-NEXT:    fstp %st(0)154; NOCMOV-NEXT:    fldz155; NOCMOV-NEXT:    fxch %st(1)156; NOCMOV-NEXT:  .LBB2_2:157; NOCMOV-NEXT:    fstp %st(1)158; NOCMOV-NEXT:    retl159  %cmp = icmp ult i32 %a, %b160  %sel = select i1 %cmp, double 99.0, double %x161  ret double %sel162}163 164define double @test4(i32 %a, i32 %b, double %x) nounwind {165; SSE-LABEL: test4:166; SSE:       # %bb.0:167; SSE-NEXT:    pushl %ebp168; SSE-NEXT:    movl %esp, %ebp169; SSE-NEXT:    andl $-8, %esp170; SSE-NEXT:    subl $8, %esp171; SSE-NEXT:    movl 8(%ebp), %eax172; SSE-NEXT:    cmpl 12(%ebp), %eax173; SSE-NEXT:    jbe .LBB3_1174; SSE-NEXT:  # %bb.2:175; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero176; SSE-NEXT:    jmp .LBB3_3177; SSE-NEXT:  .LBB3_1:178; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]179; SSE-NEXT:  .LBB3_3:180; SSE-NEXT:    movsd %xmm0, (%esp)181; SSE-NEXT:    fldl (%esp)182; SSE-NEXT:    movl %ebp, %esp183; SSE-NEXT:    popl %ebp184; SSE-NEXT:    retl185;186; NOSSE-LABEL: test4:187; NOSSE:       # %bb.0:188; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)189; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax190; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax191; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}192; NOSSE-NEXT:    fxch %st(1)193; NOSSE-NEXT:    fcmovbe %st(1), %st194; NOSSE-NEXT:    fstp %st(1)195; NOSSE-NEXT:    retl196;197; NOCMOV-LABEL: test4:198; NOCMOV:       # %bb.0:199; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)200; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax201; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax202; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}203; NOCMOV-NEXT:    jbe .LBB3_2204; NOCMOV-NEXT:  # %bb.1:205; NOCMOV-NEXT:    fstp %st(0)206; NOCMOV-NEXT:    fldz207; NOCMOV-NEXT:    fxch %st(1)208; NOCMOV-NEXT:  .LBB3_2:209; NOCMOV-NEXT:    fstp %st(1)210; NOCMOV-NEXT:    retl211  %cmp = icmp ule i32 %a, %b212  %sel = select i1 %cmp, double 99.0, double %x213  ret double %sel214}215 216define double @test5(i32 %a, i32 %b, double %x) nounwind {217; SSE-LABEL: test5:218; SSE:       # %bb.0:219; SSE-NEXT:    pushl %ebp220; SSE-NEXT:    movl %esp, %ebp221; SSE-NEXT:    andl $-8, %esp222; SSE-NEXT:    subl $8, %esp223; SSE-NEXT:    movl 8(%ebp), %eax224; SSE-NEXT:    cmpl 12(%ebp), %eax225; SSE-NEXT:    jg .LBB4_1226; SSE-NEXT:  # %bb.2:227; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero228; SSE-NEXT:    jmp .LBB4_3229; SSE-NEXT:  .LBB4_1:230; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]231; SSE-NEXT:  .LBB4_3:232; SSE-NEXT:    movsd %xmm0, (%esp)233; SSE-NEXT:    fldl (%esp)234; SSE-NEXT:    movl %ebp, %esp235; SSE-NEXT:    popl %ebp236; SSE-NEXT:    retl237;238; NOSSE-LABEL: test5:239; NOSSE:       # %bb.0:240; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)241; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax242; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax243; NOSSE-NEXT:    setg %al244; NOSSE-NEXT:    testb %al, %al245; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}246; NOSSE-NEXT:    fxch %st(1)247; NOSSE-NEXT:    fcmovne %st(1), %st248; NOSSE-NEXT:    fstp %st(1)249; NOSSE-NEXT:    retl250;251; NOCMOV-LABEL: test5:252; NOCMOV:       # %bb.0:253; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)254; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax255; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax256; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}257; NOCMOV-NEXT:    jg .LBB4_2258; NOCMOV-NEXT:  # %bb.1:259; NOCMOV-NEXT:    fstp %st(0)260; NOCMOV-NEXT:    fldz261; NOCMOV-NEXT:    fxch %st(1)262; NOCMOV-NEXT:  .LBB4_2:263; NOCMOV-NEXT:    fstp %st(1)264; NOCMOV-NEXT:    retl265  %cmp = icmp sgt i32 %a, %b266  %sel = select i1 %cmp, double 99.0, double %x267  ret double %sel268}269 270define double @test6(i32 %a, i32 %b, double %x) nounwind {271; SSE-LABEL: test6:272; SSE:       # %bb.0:273; SSE-NEXT:    pushl %ebp274; SSE-NEXT:    movl %esp, %ebp275; SSE-NEXT:    andl $-8, %esp276; SSE-NEXT:    subl $8, %esp277; SSE-NEXT:    movl 8(%ebp), %eax278; SSE-NEXT:    cmpl 12(%ebp), %eax279; SSE-NEXT:    jge .LBB5_1280; SSE-NEXT:  # %bb.2:281; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero282; SSE-NEXT:    jmp .LBB5_3283; SSE-NEXT:  .LBB5_1:284; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]285; SSE-NEXT:  .LBB5_3:286; SSE-NEXT:    movsd %xmm0, (%esp)287; SSE-NEXT:    fldl (%esp)288; SSE-NEXT:    movl %ebp, %esp289; SSE-NEXT:    popl %ebp290; SSE-NEXT:    retl291;292; NOSSE-LABEL: test6:293; NOSSE:       # %bb.0:294; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)295; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax296; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax297; NOSSE-NEXT:    setge %al298; NOSSE-NEXT:    testb %al, %al299; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}300; NOSSE-NEXT:    fxch %st(1)301; NOSSE-NEXT:    fcmovne %st(1), %st302; NOSSE-NEXT:    fstp %st(1)303; NOSSE-NEXT:    retl304;305; NOCMOV-LABEL: test6:306; NOCMOV:       # %bb.0:307; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)308; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax309; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax310; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}311; NOCMOV-NEXT:    jge .LBB5_2312; NOCMOV-NEXT:  # %bb.1:313; NOCMOV-NEXT:    fstp %st(0)314; NOCMOV-NEXT:    fldz315; NOCMOV-NEXT:    fxch %st(1)316; NOCMOV-NEXT:  .LBB5_2:317; NOCMOV-NEXT:    fstp %st(1)318; NOCMOV-NEXT:    retl319  %cmp = icmp sge i32 %a, %b320  %sel = select i1 %cmp, double 99.0, double %x321  ret double %sel322}323 324define double @test7(i32 %a, i32 %b, double %x) nounwind {325; SSE-LABEL: test7:326; SSE:       # %bb.0:327; SSE-NEXT:    pushl %ebp328; SSE-NEXT:    movl %esp, %ebp329; SSE-NEXT:    andl $-8, %esp330; SSE-NEXT:    subl $8, %esp331; SSE-NEXT:    movl 8(%ebp), %eax332; SSE-NEXT:    cmpl 12(%ebp), %eax333; SSE-NEXT:    jl .LBB6_1334; SSE-NEXT:  # %bb.2:335; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero336; SSE-NEXT:    jmp .LBB6_3337; SSE-NEXT:  .LBB6_1:338; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]339; SSE-NEXT:  .LBB6_3:340; SSE-NEXT:    movsd %xmm0, (%esp)341; SSE-NEXT:    fldl (%esp)342; SSE-NEXT:    movl %ebp, %esp343; SSE-NEXT:    popl %ebp344; SSE-NEXT:    retl345;346; NOSSE-LABEL: test7:347; NOSSE:       # %bb.0:348; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)349; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax350; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax351; NOSSE-NEXT:    setl %al352; NOSSE-NEXT:    testb %al, %al353; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}354; NOSSE-NEXT:    fxch %st(1)355; NOSSE-NEXT:    fcmovne %st(1), %st356; NOSSE-NEXT:    fstp %st(1)357; NOSSE-NEXT:    retl358;359; NOCMOV-LABEL: test7:360; NOCMOV:       # %bb.0:361; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)362; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax363; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax364; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}365; NOCMOV-NEXT:    jl .LBB6_2366; NOCMOV-NEXT:  # %bb.1:367; NOCMOV-NEXT:    fstp %st(0)368; NOCMOV-NEXT:    fldz369; NOCMOV-NEXT:    fxch %st(1)370; NOCMOV-NEXT:  .LBB6_2:371; NOCMOV-NEXT:    fstp %st(1)372; NOCMOV-NEXT:    retl373  %cmp = icmp slt i32 %a, %b374  %sel = select i1 %cmp, double 99.0, double %x375  ret double %sel376}377 378define double @test8(i32 %a, i32 %b, double %x) nounwind {379; SSE-LABEL: test8:380; SSE:       # %bb.0:381; SSE-NEXT:    pushl %ebp382; SSE-NEXT:    movl %esp, %ebp383; SSE-NEXT:    andl $-8, %esp384; SSE-NEXT:    subl $8, %esp385; SSE-NEXT:    movl 8(%ebp), %eax386; SSE-NEXT:    cmpl 12(%ebp), %eax387; SSE-NEXT:    jle .LBB7_1388; SSE-NEXT:  # %bb.2:389; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero390; SSE-NEXT:    jmp .LBB7_3391; SSE-NEXT:  .LBB7_1:392; SSE-NEXT:    movsd {{.*#+}} xmm0 = [9.9E+1,0.0E+0]393; SSE-NEXT:  .LBB7_3:394; SSE-NEXT:    movsd %xmm0, (%esp)395; SSE-NEXT:    fldl (%esp)396; SSE-NEXT:    movl %ebp, %esp397; SSE-NEXT:    popl %ebp398; SSE-NEXT:    retl399;400; NOSSE-LABEL: test8:401; NOSSE:       # %bb.0:402; NOSSE-NEXT:    fldl {{[0-9]+}}(%esp)403; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax404; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax405; NOSSE-NEXT:    setle %al406; NOSSE-NEXT:    testb %al, %al407; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}408; NOSSE-NEXT:    fxch %st(1)409; NOSSE-NEXT:    fcmovne %st(1), %st410; NOSSE-NEXT:    fstp %st(1)411; NOSSE-NEXT:    retl412;413; NOCMOV-LABEL: test8:414; NOCMOV:       # %bb.0:415; NOCMOV-NEXT:    fldl {{[0-9]+}}(%esp)416; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax417; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax418; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}419; NOCMOV-NEXT:    jle .LBB7_2420; NOCMOV-NEXT:  # %bb.1:421; NOCMOV-NEXT:    fstp %st(0)422; NOCMOV-NEXT:    fldz423; NOCMOV-NEXT:    fxch %st(1)424; NOCMOV-NEXT:  .LBB7_2:425; NOCMOV-NEXT:    fstp %st(1)426; NOCMOV-NEXT:    retl427  %cmp = icmp sle i32 %a, %b428  %sel = select i1 %cmp, double 99.0, double %x429  ret double %sel430}431 432define float @test9(i32 %a, i32 %b, float %x) nounwind {433; SSE-LABEL: test9:434; SSE:       # %bb.0:435; SSE-NEXT:    pushl %eax436; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax437; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax438; SSE-NEXT:    ja .LBB8_1439; SSE-NEXT:  # %bb.2:440; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero441; SSE-NEXT:    jmp .LBB8_3442; SSE-NEXT:  .LBB8_1:443; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]444; SSE-NEXT:  .LBB8_3:445; SSE-NEXT:    movss %xmm0, (%esp)446; SSE-NEXT:    flds (%esp)447; SSE-NEXT:    popl %eax448; SSE-NEXT:    retl449;450; NOSSE2-LABEL: test9:451; NOSSE2:       # %bb.0:452; NOSSE2-NEXT:    pushl %eax453; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax454; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax455; NOSSE2-NEXT:    ja .LBB8_1456; NOSSE2-NEXT:  # %bb.2:457; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero458; NOSSE2-NEXT:    jmp .LBB8_3459; NOSSE2-NEXT:  .LBB8_1:460; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]461; NOSSE2-NEXT:  .LBB8_3:462; NOSSE2-NEXT:    movss %xmm0, (%esp)463; NOSSE2-NEXT:    flds (%esp)464; NOSSE2-NEXT:    popl %eax465; NOSSE2-NEXT:    retl466;467; NOSSE1-LABEL: test9:468; NOSSE1:       # %bb.0:469; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)470; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax471; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax472; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}473; NOSSE1-NEXT:    fxch %st(1)474; NOSSE1-NEXT:    fcmovnbe %st(1), %st475; NOSSE1-NEXT:    fstp %st(1)476; NOSSE1-NEXT:    retl477;478; NOCMOV-LABEL: test9:479; NOCMOV:       # %bb.0:480; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)481; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax482; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax483; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}484; NOCMOV-NEXT:    ja .LBB8_2485; NOCMOV-NEXT:  # %bb.1:486; NOCMOV-NEXT:    fstp %st(0)487; NOCMOV-NEXT:    fldz488; NOCMOV-NEXT:    fxch %st(1)489; NOCMOV-NEXT:  .LBB8_2:490; NOCMOV-NEXT:    fstp %st(1)491; NOCMOV-NEXT:    retl492  %cmp = icmp ugt i32 %a, %b493  %sel = select i1 %cmp, float 99.0, float %x494  ret float %sel495}496 497define float @test10(i32 %a, i32 %b, float %x) nounwind {498; SSE-LABEL: test10:499; SSE:       # %bb.0:500; SSE-NEXT:    pushl %eax501; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax502; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax503; SSE-NEXT:    jae .LBB9_1504; SSE-NEXT:  # %bb.2:505; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero506; SSE-NEXT:    jmp .LBB9_3507; SSE-NEXT:  .LBB9_1:508; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]509; SSE-NEXT:  .LBB9_3:510; SSE-NEXT:    movss %xmm0, (%esp)511; SSE-NEXT:    flds (%esp)512; SSE-NEXT:    popl %eax513; SSE-NEXT:    retl514;515; NOSSE2-LABEL: test10:516; NOSSE2:       # %bb.0:517; NOSSE2-NEXT:    pushl %eax518; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax519; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax520; NOSSE2-NEXT:    jae .LBB9_1521; NOSSE2-NEXT:  # %bb.2:522; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero523; NOSSE2-NEXT:    jmp .LBB9_3524; NOSSE2-NEXT:  .LBB9_1:525; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]526; NOSSE2-NEXT:  .LBB9_3:527; NOSSE2-NEXT:    movss %xmm0, (%esp)528; NOSSE2-NEXT:    flds (%esp)529; NOSSE2-NEXT:    popl %eax530; NOSSE2-NEXT:    retl531;532; NOSSE1-LABEL: test10:533; NOSSE1:       # %bb.0:534; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)535; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax536; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax537; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}538; NOSSE1-NEXT:    fxch %st(1)539; NOSSE1-NEXT:    fcmovnb %st(1), %st540; NOSSE1-NEXT:    fstp %st(1)541; NOSSE1-NEXT:    retl542;543; NOCMOV-LABEL: test10:544; NOCMOV:       # %bb.0:545; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)546; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax547; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax548; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}549; NOCMOV-NEXT:    jae .LBB9_2550; NOCMOV-NEXT:  # %bb.1:551; NOCMOV-NEXT:    fstp %st(0)552; NOCMOV-NEXT:    fldz553; NOCMOV-NEXT:    fxch %st(1)554; NOCMOV-NEXT:  .LBB9_2:555; NOCMOV-NEXT:    fstp %st(1)556; NOCMOV-NEXT:    retl557  %cmp = icmp uge i32 %a, %b558  %sel = select i1 %cmp, float 99.0, float %x559  ret float %sel560}561 562define float @test11(i32 %a, i32 %b, float %x) nounwind {563; SSE-LABEL: test11:564; SSE:       # %bb.0:565; SSE-NEXT:    pushl %eax566; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax567; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax568; SSE-NEXT:    jb .LBB10_1569; SSE-NEXT:  # %bb.2:570; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero571; SSE-NEXT:    jmp .LBB10_3572; SSE-NEXT:  .LBB10_1:573; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]574; SSE-NEXT:  .LBB10_3:575; SSE-NEXT:    movss %xmm0, (%esp)576; SSE-NEXT:    flds (%esp)577; SSE-NEXT:    popl %eax578; SSE-NEXT:    retl579;580; NOSSE2-LABEL: test11:581; NOSSE2:       # %bb.0:582; NOSSE2-NEXT:    pushl %eax583; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax584; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax585; NOSSE2-NEXT:    jb .LBB10_1586; NOSSE2-NEXT:  # %bb.2:587; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero588; NOSSE2-NEXT:    jmp .LBB10_3589; NOSSE2-NEXT:  .LBB10_1:590; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]591; NOSSE2-NEXT:  .LBB10_3:592; NOSSE2-NEXT:    movss %xmm0, (%esp)593; NOSSE2-NEXT:    flds (%esp)594; NOSSE2-NEXT:    popl %eax595; NOSSE2-NEXT:    retl596;597; NOSSE1-LABEL: test11:598; NOSSE1:       # %bb.0:599; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)600; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax601; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax602; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}603; NOSSE1-NEXT:    fxch %st(1)604; NOSSE1-NEXT:    fcmovb %st(1), %st605; NOSSE1-NEXT:    fstp %st(1)606; NOSSE1-NEXT:    retl607;608; NOCMOV-LABEL: test11:609; NOCMOV:       # %bb.0:610; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)611; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax612; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax613; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}614; NOCMOV-NEXT:    jb .LBB10_2615; NOCMOV-NEXT:  # %bb.1:616; NOCMOV-NEXT:    fstp %st(0)617; NOCMOV-NEXT:    fldz618; NOCMOV-NEXT:    fxch %st(1)619; NOCMOV-NEXT:  .LBB10_2:620; NOCMOV-NEXT:    fstp %st(1)621; NOCMOV-NEXT:    retl622  %cmp = icmp ult i32 %a, %b623  %sel = select i1 %cmp, float 99.0, float %x624  ret float %sel625}626 627define float @test12(i32 %a, i32 %b, float %x) nounwind {628; SSE-LABEL: test12:629; SSE:       # %bb.0:630; SSE-NEXT:    pushl %eax631; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax632; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax633; SSE-NEXT:    jbe .LBB11_1634; SSE-NEXT:  # %bb.2:635; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero636; SSE-NEXT:    jmp .LBB11_3637; SSE-NEXT:  .LBB11_1:638; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]639; SSE-NEXT:  .LBB11_3:640; SSE-NEXT:    movss %xmm0, (%esp)641; SSE-NEXT:    flds (%esp)642; SSE-NEXT:    popl %eax643; SSE-NEXT:    retl644;645; NOSSE2-LABEL: test12:646; NOSSE2:       # %bb.0:647; NOSSE2-NEXT:    pushl %eax648; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax649; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax650; NOSSE2-NEXT:    jbe .LBB11_1651; NOSSE2-NEXT:  # %bb.2:652; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero653; NOSSE2-NEXT:    jmp .LBB11_3654; NOSSE2-NEXT:  .LBB11_1:655; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]656; NOSSE2-NEXT:  .LBB11_3:657; NOSSE2-NEXT:    movss %xmm0, (%esp)658; NOSSE2-NEXT:    flds (%esp)659; NOSSE2-NEXT:    popl %eax660; NOSSE2-NEXT:    retl661;662; NOSSE1-LABEL: test12:663; NOSSE1:       # %bb.0:664; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)665; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax666; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax667; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}668; NOSSE1-NEXT:    fxch %st(1)669; NOSSE1-NEXT:    fcmovbe %st(1), %st670; NOSSE1-NEXT:    fstp %st(1)671; NOSSE1-NEXT:    retl672;673; NOCMOV-LABEL: test12:674; NOCMOV:       # %bb.0:675; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)676; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax677; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax678; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}679; NOCMOV-NEXT:    jbe .LBB11_2680; NOCMOV-NEXT:  # %bb.1:681; NOCMOV-NEXT:    fstp %st(0)682; NOCMOV-NEXT:    fldz683; NOCMOV-NEXT:    fxch %st(1)684; NOCMOV-NEXT:  .LBB11_2:685; NOCMOV-NEXT:    fstp %st(1)686; NOCMOV-NEXT:    retl687  %cmp = icmp ule i32 %a, %b688  %sel = select i1 %cmp, float 99.0, float %x689  ret float %sel690}691 692define float @test13(i32 %a, i32 %b, float %x) nounwind {693; SSE-LABEL: test13:694; SSE:       # %bb.0:695; SSE-NEXT:    pushl %eax696; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax697; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax698; SSE-NEXT:    jg .LBB12_1699; SSE-NEXT:  # %bb.2:700; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero701; SSE-NEXT:    jmp .LBB12_3702; SSE-NEXT:  .LBB12_1:703; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]704; SSE-NEXT:  .LBB12_3:705; SSE-NEXT:    movss %xmm0, (%esp)706; SSE-NEXT:    flds (%esp)707; SSE-NEXT:    popl %eax708; SSE-NEXT:    retl709;710; NOSSE2-LABEL: test13:711; NOSSE2:       # %bb.0:712; NOSSE2-NEXT:    pushl %eax713; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax714; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax715; NOSSE2-NEXT:    jg .LBB12_1716; NOSSE2-NEXT:  # %bb.2:717; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero718; NOSSE2-NEXT:    jmp .LBB12_3719; NOSSE2-NEXT:  .LBB12_1:720; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]721; NOSSE2-NEXT:  .LBB12_3:722; NOSSE2-NEXT:    movss %xmm0, (%esp)723; NOSSE2-NEXT:    flds (%esp)724; NOSSE2-NEXT:    popl %eax725; NOSSE2-NEXT:    retl726;727; NOSSE1-LABEL: test13:728; NOSSE1:       # %bb.0:729; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)730; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax731; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax732; NOSSE1-NEXT:    setg %al733; NOSSE1-NEXT:    testb %al, %al734; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}735; NOSSE1-NEXT:    fxch %st(1)736; NOSSE1-NEXT:    fcmovne %st(1), %st737; NOSSE1-NEXT:    fstp %st(1)738; NOSSE1-NEXT:    retl739;740; NOCMOV-LABEL: test13:741; NOCMOV:       # %bb.0:742; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)743; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax744; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax745; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}746; NOCMOV-NEXT:    jg .LBB12_2747; NOCMOV-NEXT:  # %bb.1:748; NOCMOV-NEXT:    fstp %st(0)749; NOCMOV-NEXT:    fldz750; NOCMOV-NEXT:    fxch %st(1)751; NOCMOV-NEXT:  .LBB12_2:752; NOCMOV-NEXT:    fstp %st(1)753; NOCMOV-NEXT:    retl754  %cmp = icmp sgt i32 %a, %b755  %sel = select i1 %cmp, float 99.0, float %x756  ret float %sel757}758 759define float @test14(i32 %a, i32 %b, float %x) nounwind {760; SSE-LABEL: test14:761; SSE:       # %bb.0:762; SSE-NEXT:    pushl %eax763; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax764; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax765; SSE-NEXT:    jge .LBB13_1766; SSE-NEXT:  # %bb.2:767; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero768; SSE-NEXT:    jmp .LBB13_3769; SSE-NEXT:  .LBB13_1:770; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]771; SSE-NEXT:  .LBB13_3:772; SSE-NEXT:    movss %xmm0, (%esp)773; SSE-NEXT:    flds (%esp)774; SSE-NEXT:    popl %eax775; SSE-NEXT:    retl776;777; NOSSE2-LABEL: test14:778; NOSSE2:       # %bb.0:779; NOSSE2-NEXT:    pushl %eax780; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax781; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax782; NOSSE2-NEXT:    jge .LBB13_1783; NOSSE2-NEXT:  # %bb.2:784; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero785; NOSSE2-NEXT:    jmp .LBB13_3786; NOSSE2-NEXT:  .LBB13_1:787; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]788; NOSSE2-NEXT:  .LBB13_3:789; NOSSE2-NEXT:    movss %xmm0, (%esp)790; NOSSE2-NEXT:    flds (%esp)791; NOSSE2-NEXT:    popl %eax792; NOSSE2-NEXT:    retl793;794; NOSSE1-LABEL: test14:795; NOSSE1:       # %bb.0:796; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)797; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax798; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax799; NOSSE1-NEXT:    setge %al800; NOSSE1-NEXT:    testb %al, %al801; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}802; NOSSE1-NEXT:    fxch %st(1)803; NOSSE1-NEXT:    fcmovne %st(1), %st804; NOSSE1-NEXT:    fstp %st(1)805; NOSSE1-NEXT:    retl806;807; NOCMOV-LABEL: test14:808; NOCMOV:       # %bb.0:809; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)810; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax811; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax812; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}813; NOCMOV-NEXT:    jge .LBB13_2814; NOCMOV-NEXT:  # %bb.1:815; NOCMOV-NEXT:    fstp %st(0)816; NOCMOV-NEXT:    fldz817; NOCMOV-NEXT:    fxch %st(1)818; NOCMOV-NEXT:  .LBB13_2:819; NOCMOV-NEXT:    fstp %st(1)820; NOCMOV-NEXT:    retl821  %cmp = icmp sge i32 %a, %b822  %sel = select i1 %cmp, float 99.0, float %x823  ret float %sel824}825 826define float @test15(i32 %a, i32 %b, float %x) nounwind {827; SSE-LABEL: test15:828; SSE:       # %bb.0:829; SSE-NEXT:    pushl %eax830; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax831; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax832; SSE-NEXT:    jl .LBB14_1833; SSE-NEXT:  # %bb.2:834; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero835; SSE-NEXT:    jmp .LBB14_3836; SSE-NEXT:  .LBB14_1:837; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]838; SSE-NEXT:  .LBB14_3:839; SSE-NEXT:    movss %xmm0, (%esp)840; SSE-NEXT:    flds (%esp)841; SSE-NEXT:    popl %eax842; SSE-NEXT:    retl843;844; NOSSE2-LABEL: test15:845; NOSSE2:       # %bb.0:846; NOSSE2-NEXT:    pushl %eax847; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax848; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax849; NOSSE2-NEXT:    jl .LBB14_1850; NOSSE2-NEXT:  # %bb.2:851; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero852; NOSSE2-NEXT:    jmp .LBB14_3853; NOSSE2-NEXT:  .LBB14_1:854; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]855; NOSSE2-NEXT:  .LBB14_3:856; NOSSE2-NEXT:    movss %xmm0, (%esp)857; NOSSE2-NEXT:    flds (%esp)858; NOSSE2-NEXT:    popl %eax859; NOSSE2-NEXT:    retl860;861; NOSSE1-LABEL: test15:862; NOSSE1:       # %bb.0:863; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)864; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax865; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax866; NOSSE1-NEXT:    setl %al867; NOSSE1-NEXT:    testb %al, %al868; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}869; NOSSE1-NEXT:    fxch %st(1)870; NOSSE1-NEXT:    fcmovne %st(1), %st871; NOSSE1-NEXT:    fstp %st(1)872; NOSSE1-NEXT:    retl873;874; NOCMOV-LABEL: test15:875; NOCMOV:       # %bb.0:876; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)877; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax878; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax879; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}880; NOCMOV-NEXT:    jl .LBB14_2881; NOCMOV-NEXT:  # %bb.1:882; NOCMOV-NEXT:    fstp %st(0)883; NOCMOV-NEXT:    fldz884; NOCMOV-NEXT:    fxch %st(1)885; NOCMOV-NEXT:  .LBB14_2:886; NOCMOV-NEXT:    fstp %st(1)887; NOCMOV-NEXT:    retl888  %cmp = icmp slt i32 %a, %b889  %sel = select i1 %cmp, float 99.0, float %x890  ret float %sel891}892 893define float @test16(i32 %a, i32 %b, float %x) nounwind {894; SSE-LABEL: test16:895; SSE:       # %bb.0:896; SSE-NEXT:    pushl %eax897; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax898; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax899; SSE-NEXT:    jle .LBB15_1900; SSE-NEXT:  # %bb.2:901; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero902; SSE-NEXT:    jmp .LBB15_3903; SSE-NEXT:  .LBB15_1:904; SSE-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]905; SSE-NEXT:  .LBB15_3:906; SSE-NEXT:    movss %xmm0, (%esp)907; SSE-NEXT:    flds (%esp)908; SSE-NEXT:    popl %eax909; SSE-NEXT:    retl910;911; NOSSE2-LABEL: test16:912; NOSSE2:       # %bb.0:913; NOSSE2-NEXT:    pushl %eax914; NOSSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax915; NOSSE2-NEXT:    cmpl {{[0-9]+}}(%esp), %eax916; NOSSE2-NEXT:    jle .LBB15_1917; NOSSE2-NEXT:  # %bb.2:918; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero919; NOSSE2-NEXT:    jmp .LBB15_3920; NOSSE2-NEXT:  .LBB15_1:921; NOSSE2-NEXT:    movss {{.*#+}} xmm0 = [9.9E+1,0.0E+0,0.0E+0,0.0E+0]922; NOSSE2-NEXT:  .LBB15_3:923; NOSSE2-NEXT:    movss %xmm0, (%esp)924; NOSSE2-NEXT:    flds (%esp)925; NOSSE2-NEXT:    popl %eax926; NOSSE2-NEXT:    retl927;928; NOSSE1-LABEL: test16:929; NOSSE1:       # %bb.0:930; NOSSE1-NEXT:    flds {{[0-9]+}}(%esp)931; NOSSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax932; NOSSE1-NEXT:    cmpl {{[0-9]+}}(%esp), %eax933; NOSSE1-NEXT:    setle %al934; NOSSE1-NEXT:    testb %al, %al935; NOSSE1-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}936; NOSSE1-NEXT:    fxch %st(1)937; NOSSE1-NEXT:    fcmovne %st(1), %st938; NOSSE1-NEXT:    fstp %st(1)939; NOSSE1-NEXT:    retl940;941; NOCMOV-LABEL: test16:942; NOCMOV:       # %bb.0:943; NOCMOV-NEXT:    flds {{[0-9]+}}(%esp)944; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax945; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax946; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}947; NOCMOV-NEXT:    jle .LBB15_2948; NOCMOV-NEXT:  # %bb.1:949; NOCMOV-NEXT:    fstp %st(0)950; NOCMOV-NEXT:    fldz951; NOCMOV-NEXT:    fxch %st(1)952; NOCMOV-NEXT:  .LBB15_2:953; NOCMOV-NEXT:    fstp %st(1)954; NOCMOV-NEXT:    retl955  %cmp = icmp sle i32 %a, %b956  %sel = select i1 %cmp, float 99.0, float %x957  ret float %sel958}959 960define x86_fp80 @test17(i32 %a, i32 %b, x86_fp80 %x) nounwind {961; SSE-LABEL: test17:962; SSE:       # %bb.0:963; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax964; SSE-NEXT:    fldt {{[0-9]+}}(%esp)965; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}966; SSE-NEXT:    fxch %st(1)967; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax968; SSE-NEXT:    fcmovnbe %st(1), %st969; SSE-NEXT:    fstp %st(1)970; SSE-NEXT:    retl971;972; NOSSE-LABEL: test17:973; NOSSE:       # %bb.0:974; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)975; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax976; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax977; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}978; NOSSE-NEXT:    fxch %st(1)979; NOSSE-NEXT:    fcmovnbe %st(1), %st980; NOSSE-NEXT:    fstp %st(1)981; NOSSE-NEXT:    retl982;983; NOCMOV-LABEL: test17:984; NOCMOV:       # %bb.0:985; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)986; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax987; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax988; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}989; NOCMOV-NEXT:    ja .LBB16_2990; NOCMOV-NEXT:  # %bb.1:991; NOCMOV-NEXT:    fstp %st(0)992; NOCMOV-NEXT:    fldz993; NOCMOV-NEXT:    fxch %st(1)994; NOCMOV-NEXT:  .LBB16_2:995; NOCMOV-NEXT:    fstp %st(1)996; NOCMOV-NEXT:    retl997  %cmp = icmp ugt i32 %a, %b998  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x999  ret x86_fp80 %sel1000}1001 1002define x86_fp80 @test18(i32 %a, i32 %b, x86_fp80 %x) nounwind {1003; SSE-LABEL: test18:1004; SSE:       # %bb.0:1005; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1006; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1007; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1008; SSE-NEXT:    fxch %st(1)1009; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1010; SSE-NEXT:    fcmovnb %st(1), %st1011; SSE-NEXT:    fstp %st(1)1012; SSE-NEXT:    retl1013;1014; NOSSE-LABEL: test18:1015; NOSSE:       # %bb.0:1016; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1017; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1018; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1019; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1020; NOSSE-NEXT:    fxch %st(1)1021; NOSSE-NEXT:    fcmovnb %st(1), %st1022; NOSSE-NEXT:    fstp %st(1)1023; NOSSE-NEXT:    retl1024;1025; NOCMOV-LABEL: test18:1026; NOCMOV:       # %bb.0:1027; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1028; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1029; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1030; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1031; NOCMOV-NEXT:    jae .LBB17_21032; NOCMOV-NEXT:  # %bb.1:1033; NOCMOV-NEXT:    fstp %st(0)1034; NOCMOV-NEXT:    fldz1035; NOCMOV-NEXT:    fxch %st(1)1036; NOCMOV-NEXT:  .LBB17_2:1037; NOCMOV-NEXT:    fstp %st(1)1038; NOCMOV-NEXT:    retl1039  %cmp = icmp uge i32 %a, %b1040  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1041  ret x86_fp80 %sel1042}1043 1044define x86_fp80 @test19(i32 %a, i32 %b, x86_fp80 %x) nounwind {1045; SSE-LABEL: test19:1046; SSE:       # %bb.0:1047; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1048; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1049; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1050; SSE-NEXT:    fxch %st(1)1051; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1052; SSE-NEXT:    fcmovb %st(1), %st1053; SSE-NEXT:    fstp %st(1)1054; SSE-NEXT:    retl1055;1056; NOSSE-LABEL: test19:1057; NOSSE:       # %bb.0:1058; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1059; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1060; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1061; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1062; NOSSE-NEXT:    fxch %st(1)1063; NOSSE-NEXT:    fcmovb %st(1), %st1064; NOSSE-NEXT:    fstp %st(1)1065; NOSSE-NEXT:    retl1066;1067; NOCMOV-LABEL: test19:1068; NOCMOV:       # %bb.0:1069; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1070; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1071; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1072; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1073; NOCMOV-NEXT:    jb .LBB18_21074; NOCMOV-NEXT:  # %bb.1:1075; NOCMOV-NEXT:    fstp %st(0)1076; NOCMOV-NEXT:    fldz1077; NOCMOV-NEXT:    fxch %st(1)1078; NOCMOV-NEXT:  .LBB18_2:1079; NOCMOV-NEXT:    fstp %st(1)1080; NOCMOV-NEXT:    retl1081  %cmp = icmp ult i32 %a, %b1082  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1083  ret x86_fp80 %sel1084}1085 1086define x86_fp80 @test20(i32 %a, i32 %b, x86_fp80 %x) nounwind {1087; SSE-LABEL: test20:1088; SSE:       # %bb.0:1089; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1090; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1091; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1092; SSE-NEXT:    fxch %st(1)1093; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1094; SSE-NEXT:    fcmovbe %st(1), %st1095; SSE-NEXT:    fstp %st(1)1096; SSE-NEXT:    retl1097;1098; NOSSE-LABEL: test20:1099; NOSSE:       # %bb.0:1100; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1101; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1102; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1103; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1104; NOSSE-NEXT:    fxch %st(1)1105; NOSSE-NEXT:    fcmovbe %st(1), %st1106; NOSSE-NEXT:    fstp %st(1)1107; NOSSE-NEXT:    retl1108;1109; NOCMOV-LABEL: test20:1110; NOCMOV:       # %bb.0:1111; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1112; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1113; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1114; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1115; NOCMOV-NEXT:    jbe .LBB19_21116; NOCMOV-NEXT:  # %bb.1:1117; NOCMOV-NEXT:    fstp %st(0)1118; NOCMOV-NEXT:    fldz1119; NOCMOV-NEXT:    fxch %st(1)1120; NOCMOV-NEXT:  .LBB19_2:1121; NOCMOV-NEXT:    fstp %st(1)1122; NOCMOV-NEXT:    retl1123  %cmp = icmp ule i32 %a, %b1124  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1125  ret x86_fp80 %sel1126}1127 1128define x86_fp80 @test21(i32 %a, i32 %b, x86_fp80 %x) nounwind {1129; SSE-LABEL: test21:1130; SSE:       # %bb.0:1131; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1132; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1133; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1134; SSE-NEXT:    fxch %st(1)1135; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1136; SSE-NEXT:    setg %al1137; SSE-NEXT:    testb %al, %al1138; SSE-NEXT:    fcmovne %st(1), %st1139; SSE-NEXT:    fstp %st(1)1140; SSE-NEXT:    retl1141;1142; NOSSE-LABEL: test21:1143; NOSSE:       # %bb.0:1144; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1145; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1146; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1147; NOSSE-NEXT:    setg %al1148; NOSSE-NEXT:    testb %al, %al1149; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1150; NOSSE-NEXT:    fxch %st(1)1151; NOSSE-NEXT:    fcmovne %st(1), %st1152; NOSSE-NEXT:    fstp %st(1)1153; NOSSE-NEXT:    retl1154;1155; NOCMOV-LABEL: test21:1156; NOCMOV:       # %bb.0:1157; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1158; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1159; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1160; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1161; NOCMOV-NEXT:    jg .LBB20_21162; NOCMOV-NEXT:  # %bb.1:1163; NOCMOV-NEXT:    fstp %st(0)1164; NOCMOV-NEXT:    fldz1165; NOCMOV-NEXT:    fxch %st(1)1166; NOCMOV-NEXT:  .LBB20_2:1167; NOCMOV-NEXT:    fstp %st(1)1168; NOCMOV-NEXT:    retl1169; We don't emit a branch for fp80, why?1170  %cmp = icmp sgt i32 %a, %b1171  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1172  ret x86_fp80 %sel1173}1174 1175define x86_fp80 @test22(i32 %a, i32 %b, x86_fp80 %x) nounwind {1176; SSE-LABEL: test22:1177; SSE:       # %bb.0:1178; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1179; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1180; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1181; SSE-NEXT:    fxch %st(1)1182; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1183; SSE-NEXT:    setge %al1184; SSE-NEXT:    testb %al, %al1185; SSE-NEXT:    fcmovne %st(1), %st1186; SSE-NEXT:    fstp %st(1)1187; SSE-NEXT:    retl1188;1189; NOSSE-LABEL: test22:1190; NOSSE:       # %bb.0:1191; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1192; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1193; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1194; NOSSE-NEXT:    setge %al1195; NOSSE-NEXT:    testb %al, %al1196; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1197; NOSSE-NEXT:    fxch %st(1)1198; NOSSE-NEXT:    fcmovne %st(1), %st1199; NOSSE-NEXT:    fstp %st(1)1200; NOSSE-NEXT:    retl1201;1202; NOCMOV-LABEL: test22:1203; NOCMOV:       # %bb.0:1204; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1205; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1206; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1207; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1208; NOCMOV-NEXT:    jge .LBB21_21209; NOCMOV-NEXT:  # %bb.1:1210; NOCMOV-NEXT:    fstp %st(0)1211; NOCMOV-NEXT:    fldz1212; NOCMOV-NEXT:    fxch %st(1)1213; NOCMOV-NEXT:  .LBB21_2:1214; NOCMOV-NEXT:    fstp %st(1)1215; NOCMOV-NEXT:    retl1216  %cmp = icmp sge i32 %a, %b1217  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1218  ret x86_fp80 %sel1219}1220 1221define x86_fp80 @test23(i32 %a, i32 %b, x86_fp80 %x) nounwind {1222; SSE-LABEL: test23:1223; SSE:       # %bb.0:1224; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1225; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1226; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1227; SSE-NEXT:    fxch %st(1)1228; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1229; SSE-NEXT:    setl %al1230; SSE-NEXT:    testb %al, %al1231; SSE-NEXT:    fcmovne %st(1), %st1232; SSE-NEXT:    fstp %st(1)1233; SSE-NEXT:    retl1234;1235; NOSSE-LABEL: test23:1236; NOSSE:       # %bb.0:1237; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1238; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1239; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1240; NOSSE-NEXT:    setl %al1241; NOSSE-NEXT:    testb %al, %al1242; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1243; NOSSE-NEXT:    fxch %st(1)1244; NOSSE-NEXT:    fcmovne %st(1), %st1245; NOSSE-NEXT:    fstp %st(1)1246; NOSSE-NEXT:    retl1247;1248; NOCMOV-LABEL: test23:1249; NOCMOV:       # %bb.0:1250; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1251; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1252; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1253; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1254; NOCMOV-NEXT:    jl .LBB22_21255; NOCMOV-NEXT:  # %bb.1:1256; NOCMOV-NEXT:    fstp %st(0)1257; NOCMOV-NEXT:    fldz1258; NOCMOV-NEXT:    fxch %st(1)1259; NOCMOV-NEXT:  .LBB22_2:1260; NOCMOV-NEXT:    fstp %st(1)1261; NOCMOV-NEXT:    retl1262  %cmp = icmp slt i32 %a, %b1263  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1264  ret x86_fp80 %sel1265}1266 1267define x86_fp80 @test24(i32 %a, i32 %b, x86_fp80 %x) nounwind {1268; SSE-LABEL: test24:1269; SSE:       # %bb.0:1270; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1271; SSE-NEXT:    fldt {{[0-9]+}}(%esp)1272; SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1273; SSE-NEXT:    fxch %st(1)1274; SSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1275; SSE-NEXT:    setle %al1276; SSE-NEXT:    testb %al, %al1277; SSE-NEXT:    fcmovne %st(1), %st1278; SSE-NEXT:    fstp %st(1)1279; SSE-NEXT:    retl1280;1281; NOSSE-LABEL: test24:1282; NOSSE:       # %bb.0:1283; NOSSE-NEXT:    fldt {{[0-9]+}}(%esp)1284; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1285; NOSSE-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1286; NOSSE-NEXT:    setle %al1287; NOSSE-NEXT:    testb %al, %al1288; NOSSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1289; NOSSE-NEXT:    fxch %st(1)1290; NOSSE-NEXT:    fcmovne %st(1), %st1291; NOSSE-NEXT:    fstp %st(1)1292; NOSSE-NEXT:    retl1293;1294; NOCMOV-LABEL: test24:1295; NOCMOV:       # %bb.0:1296; NOCMOV-NEXT:    fldt {{[0-9]+}}(%esp)1297; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax1298; NOCMOV-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1299; NOCMOV-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1300; NOCMOV-NEXT:    jle .LBB23_21301; NOCMOV-NEXT:  # %bb.1:1302; NOCMOV-NEXT:    fstp %st(0)1303; NOCMOV-NEXT:    fldz1304; NOCMOV-NEXT:    fxch %st(1)1305; NOCMOV-NEXT:  .LBB23_2:1306; NOCMOV-NEXT:    fstp %st(1)1307; NOCMOV-NEXT:    retl1308  %cmp = icmp sle i32 %a, %b1309  %sel = select i1 %cmp, x86_fp80 0xK4005C600000000000000, x86_fp80 %x1310  ret x86_fp80 %sel1311}1312