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