brintos

brintos / llvm-project-archived public Read only

0
0
Text · 141.2 KiB · e3e2b62 Raw
4358 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefix=SSE-323; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefix=SSE-644; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-325; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-646; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX-327; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX-648; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse -O3 | FileCheck %s --check-prefix=X879; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse,+cmov -O3 | FileCheck %s --check-prefix=X87-CMOV10 11define i32 @test_f32_oeq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {12; SSE-32-LABEL: test_f32_oeq_q:13; SSE-32:       # %bb.0:14; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero15; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm016; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax17; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx18; SSE-32-NEXT:    cmovnel %eax, %ecx19; SSE-32-NEXT:    cmovpl %eax, %ecx20; SSE-32-NEXT:    movl (%ecx), %eax21; SSE-32-NEXT:    retl22;23; SSE-64-LABEL: test_f32_oeq_q:24; SSE-64:       # %bb.0:25; SSE-64-NEXT:    movl %edi, %eax26; SSE-64-NEXT:    ucomiss %xmm1, %xmm027; SSE-64-NEXT:    cmovnel %esi, %eax28; SSE-64-NEXT:    cmovpl %esi, %eax29; SSE-64-NEXT:    retq30;31; AVX-32-LABEL: test_f32_oeq_q:32; AVX-32:       # %bb.0:33; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero34; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm035; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax36; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx37; AVX-32-NEXT:    cmovnel %eax, %ecx38; AVX-32-NEXT:    cmovpl %eax, %ecx39; AVX-32-NEXT:    movl (%ecx), %eax40; AVX-32-NEXT:    retl41;42; AVX-64-LABEL: test_f32_oeq_q:43; AVX-64:       # %bb.0:44; AVX-64-NEXT:    movl %edi, %eax45; AVX-64-NEXT:    vucomiss %xmm1, %xmm046; AVX-64-NEXT:    cmovnel %esi, %eax47; AVX-64-NEXT:    cmovpl %esi, %eax48; AVX-64-NEXT:    retq49;50; X87-LABEL: test_f32_oeq_q:51; X87:       # %bb.0:52; X87-NEXT:    flds {{[0-9]+}}(%esp)53; X87-NEXT:    flds {{[0-9]+}}(%esp)54; X87-NEXT:    fucompp55; X87-NEXT:    wait56; X87-NEXT:    fnstsw %ax57; X87-NEXT:    # kill: def $ah killed $ah killed $ax58; X87-NEXT:    sahf59; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax60; X87-NEXT:    jne .LBB0_361; X87-NEXT:  # %bb.1:62; X87-NEXT:    jp .LBB0_363; X87-NEXT:  # %bb.2:64; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax65; X87-NEXT:  .LBB0_3:66; X87-NEXT:    movl (%eax), %eax67; X87-NEXT:    retl68;69; X87-CMOV-LABEL: test_f32_oeq_q:70; X87-CMOV:       # %bb.0:71; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)72; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)73; X87-CMOV-NEXT:    fucompi %st(1), %st74; X87-CMOV-NEXT:    fstp %st(0)75; X87-CMOV-NEXT:    wait76; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax77; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx78; X87-CMOV-NEXT:    cmovnel %eax, %ecx79; X87-CMOV-NEXT:    cmovpl %eax, %ecx80; X87-CMOV-NEXT:    movl (%ecx), %eax81; X87-CMOV-NEXT:    retl82  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(83                                               float %f1, float %f2, metadata !"oeq",84                                               metadata !"fpexcept.strict") #085  %res = select i1 %cond, i32 %a, i32 %b86  ret i32 %res87}88 89define i32 @test_f32_ogt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {90; SSE-32-LABEL: test_f32_ogt_q:91; SSE-32:       # %bb.0:92; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero93; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm094; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax95; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx96; SSE-32-NEXT:    cmoval %eax, %ecx97; SSE-32-NEXT:    movl (%ecx), %eax98; SSE-32-NEXT:    retl99;100; SSE-64-LABEL: test_f32_ogt_q:101; SSE-64:       # %bb.0:102; SSE-64-NEXT:    movl %edi, %eax103; SSE-64-NEXT:    ucomiss %xmm1, %xmm0104; SSE-64-NEXT:    cmovbel %esi, %eax105; SSE-64-NEXT:    retq106;107; AVX-32-LABEL: test_f32_ogt_q:108; AVX-32:       # %bb.0:109; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero110; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0111; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax112; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx113; AVX-32-NEXT:    cmoval %eax, %ecx114; AVX-32-NEXT:    movl (%ecx), %eax115; AVX-32-NEXT:    retl116;117; AVX-64-LABEL: test_f32_ogt_q:118; AVX-64:       # %bb.0:119; AVX-64-NEXT:    movl %edi, %eax120; AVX-64-NEXT:    vucomiss %xmm1, %xmm0121; AVX-64-NEXT:    cmovbel %esi, %eax122; AVX-64-NEXT:    retq123;124; X87-LABEL: test_f32_ogt_q:125; X87:       # %bb.0:126; X87-NEXT:    flds {{[0-9]+}}(%esp)127; X87-NEXT:    flds {{[0-9]+}}(%esp)128; X87-NEXT:    fucompp129; X87-NEXT:    wait130; X87-NEXT:    fnstsw %ax131; X87-NEXT:    # kill: def $ah killed $ah killed $ax132; X87-NEXT:    sahf133; X87-NEXT:    ja .LBB1_1134; X87-NEXT:  # %bb.2:135; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax136; X87-NEXT:    movl (%eax), %eax137; X87-NEXT:    retl138; X87-NEXT:  .LBB1_1:139; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax140; X87-NEXT:    movl (%eax), %eax141; X87-NEXT:    retl142;143; X87-CMOV-LABEL: test_f32_ogt_q:144; X87-CMOV:       # %bb.0:145; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)146; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)147; X87-CMOV-NEXT:    fucompi %st(1), %st148; X87-CMOV-NEXT:    fstp %st(0)149; X87-CMOV-NEXT:    wait150; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax151; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx152; X87-CMOV-NEXT:    cmoval %eax, %ecx153; X87-CMOV-NEXT:    movl (%ecx), %eax154; X87-CMOV-NEXT:    retl155  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(156                                               float %f1, float %f2, metadata !"ogt",157                                               metadata !"fpexcept.strict") #0158  %res = select i1 %cond, i32 %a, i32 %b159  ret i32 %res160}161 162define i32 @test_f32_oge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {163; SSE-32-LABEL: test_f32_oge_q:164; SSE-32:       # %bb.0:165; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero166; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0167; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax168; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx169; SSE-32-NEXT:    cmovael %eax, %ecx170; SSE-32-NEXT:    movl (%ecx), %eax171; SSE-32-NEXT:    retl172;173; SSE-64-LABEL: test_f32_oge_q:174; SSE-64:       # %bb.0:175; SSE-64-NEXT:    movl %edi, %eax176; SSE-64-NEXT:    ucomiss %xmm1, %xmm0177; SSE-64-NEXT:    cmovbl %esi, %eax178; SSE-64-NEXT:    retq179;180; AVX-32-LABEL: test_f32_oge_q:181; AVX-32:       # %bb.0:182; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero183; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0184; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax185; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx186; AVX-32-NEXT:    cmovael %eax, %ecx187; AVX-32-NEXT:    movl (%ecx), %eax188; AVX-32-NEXT:    retl189;190; AVX-64-LABEL: test_f32_oge_q:191; AVX-64:       # %bb.0:192; AVX-64-NEXT:    movl %edi, %eax193; AVX-64-NEXT:    vucomiss %xmm1, %xmm0194; AVX-64-NEXT:    cmovbl %esi, %eax195; AVX-64-NEXT:    retq196;197; X87-LABEL: test_f32_oge_q:198; X87:       # %bb.0:199; X87-NEXT:    flds {{[0-9]+}}(%esp)200; X87-NEXT:    flds {{[0-9]+}}(%esp)201; X87-NEXT:    fucompp202; X87-NEXT:    wait203; X87-NEXT:    fnstsw %ax204; X87-NEXT:    # kill: def $ah killed $ah killed $ax205; X87-NEXT:    sahf206; X87-NEXT:    jae .LBB2_1207; X87-NEXT:  # %bb.2:208; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax209; X87-NEXT:    movl (%eax), %eax210; X87-NEXT:    retl211; X87-NEXT:  .LBB2_1:212; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax213; X87-NEXT:    movl (%eax), %eax214; X87-NEXT:    retl215;216; X87-CMOV-LABEL: test_f32_oge_q:217; X87-CMOV:       # %bb.0:218; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)219; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)220; X87-CMOV-NEXT:    fucompi %st(1), %st221; X87-CMOV-NEXT:    fstp %st(0)222; X87-CMOV-NEXT:    wait223; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax224; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx225; X87-CMOV-NEXT:    cmovael %eax, %ecx226; X87-CMOV-NEXT:    movl (%ecx), %eax227; X87-CMOV-NEXT:    retl228  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(229                                               float %f1, float %f2, metadata !"oge",230                                               metadata !"fpexcept.strict") #0231  %res = select i1 %cond, i32 %a, i32 %b232  ret i32 %res233}234 235define i32 @test_f32_olt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {236; SSE-32-LABEL: test_f32_olt_q:237; SSE-32:       # %bb.0:238; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero239; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0240; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax241; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx242; SSE-32-NEXT:    cmoval %eax, %ecx243; SSE-32-NEXT:    movl (%ecx), %eax244; SSE-32-NEXT:    retl245;246; SSE-64-LABEL: test_f32_olt_q:247; SSE-64:       # %bb.0:248; SSE-64-NEXT:    movl %edi, %eax249; SSE-64-NEXT:    ucomiss %xmm0, %xmm1250; SSE-64-NEXT:    cmovbel %esi, %eax251; SSE-64-NEXT:    retq252;253; AVX-32-LABEL: test_f32_olt_q:254; AVX-32:       # %bb.0:255; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero256; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0257; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax258; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx259; AVX-32-NEXT:    cmoval %eax, %ecx260; AVX-32-NEXT:    movl (%ecx), %eax261; AVX-32-NEXT:    retl262;263; AVX-64-LABEL: test_f32_olt_q:264; AVX-64:       # %bb.0:265; AVX-64-NEXT:    movl %edi, %eax266; AVX-64-NEXT:    vucomiss %xmm0, %xmm1267; AVX-64-NEXT:    cmovbel %esi, %eax268; AVX-64-NEXT:    retq269;270; X87-LABEL: test_f32_olt_q:271; X87:       # %bb.0:272; X87-NEXT:    flds {{[0-9]+}}(%esp)273; X87-NEXT:    flds {{[0-9]+}}(%esp)274; X87-NEXT:    fucompp275; X87-NEXT:    wait276; X87-NEXT:    fnstsw %ax277; X87-NEXT:    # kill: def $ah killed $ah killed $ax278; X87-NEXT:    sahf279; X87-NEXT:    ja .LBB3_1280; X87-NEXT:  # %bb.2:281; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax282; X87-NEXT:    movl (%eax), %eax283; X87-NEXT:    retl284; X87-NEXT:  .LBB3_1:285; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax286; X87-NEXT:    movl (%eax), %eax287; X87-NEXT:    retl288;289; X87-CMOV-LABEL: test_f32_olt_q:290; X87-CMOV:       # %bb.0:291; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)292; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)293; X87-CMOV-NEXT:    fucompi %st(1), %st294; X87-CMOV-NEXT:    fstp %st(0)295; X87-CMOV-NEXT:    wait296; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax297; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx298; X87-CMOV-NEXT:    cmoval %eax, %ecx299; X87-CMOV-NEXT:    movl (%ecx), %eax300; X87-CMOV-NEXT:    retl301  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(302                                               float %f1, float %f2, metadata !"olt",303                                               metadata !"fpexcept.strict") #0304  %res = select i1 %cond, i32 %a, i32 %b305  ret i32 %res306}307 308define i32 @test_f32_ole_q(i32 %a, i32 %b, float %f1, float %f2) #0 {309; SSE-32-LABEL: test_f32_ole_q:310; SSE-32:       # %bb.0:311; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero312; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0313; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax314; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx315; SSE-32-NEXT:    cmovael %eax, %ecx316; SSE-32-NEXT:    movl (%ecx), %eax317; SSE-32-NEXT:    retl318;319; SSE-64-LABEL: test_f32_ole_q:320; SSE-64:       # %bb.0:321; SSE-64-NEXT:    movl %edi, %eax322; SSE-64-NEXT:    ucomiss %xmm0, %xmm1323; SSE-64-NEXT:    cmovbl %esi, %eax324; SSE-64-NEXT:    retq325;326; AVX-32-LABEL: test_f32_ole_q:327; AVX-32:       # %bb.0:328; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero329; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0330; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax331; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx332; AVX-32-NEXT:    cmovael %eax, %ecx333; AVX-32-NEXT:    movl (%ecx), %eax334; AVX-32-NEXT:    retl335;336; AVX-64-LABEL: test_f32_ole_q:337; AVX-64:       # %bb.0:338; AVX-64-NEXT:    movl %edi, %eax339; AVX-64-NEXT:    vucomiss %xmm0, %xmm1340; AVX-64-NEXT:    cmovbl %esi, %eax341; AVX-64-NEXT:    retq342;343; X87-LABEL: test_f32_ole_q:344; X87:       # %bb.0:345; X87-NEXT:    flds {{[0-9]+}}(%esp)346; X87-NEXT:    flds {{[0-9]+}}(%esp)347; X87-NEXT:    fucompp348; X87-NEXT:    wait349; X87-NEXT:    fnstsw %ax350; X87-NEXT:    # kill: def $ah killed $ah killed $ax351; X87-NEXT:    sahf352; X87-NEXT:    jae .LBB4_1353; X87-NEXT:  # %bb.2:354; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax355; X87-NEXT:    movl (%eax), %eax356; X87-NEXT:    retl357; X87-NEXT:  .LBB4_1:358; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax359; X87-NEXT:    movl (%eax), %eax360; X87-NEXT:    retl361;362; X87-CMOV-LABEL: test_f32_ole_q:363; X87-CMOV:       # %bb.0:364; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)365; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)366; X87-CMOV-NEXT:    fucompi %st(1), %st367; X87-CMOV-NEXT:    fstp %st(0)368; X87-CMOV-NEXT:    wait369; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax370; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx371; X87-CMOV-NEXT:    cmovael %eax, %ecx372; X87-CMOV-NEXT:    movl (%ecx), %eax373; X87-CMOV-NEXT:    retl374  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(375                                               float %f1, float %f2, metadata !"ole",376                                               metadata !"fpexcept.strict") #0377  %res = select i1 %cond, i32 %a, i32 %b378  ret i32 %res379}380 381define i32 @test_f32_one_q(i32 %a, i32 %b, float %f1, float %f2) #0 {382; SSE-32-LABEL: test_f32_one_q:383; SSE-32:       # %bb.0:384; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero385; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0386; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax387; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx388; SSE-32-NEXT:    cmovnel %eax, %ecx389; SSE-32-NEXT:    movl (%ecx), %eax390; SSE-32-NEXT:    retl391;392; SSE-64-LABEL: test_f32_one_q:393; SSE-64:       # %bb.0:394; SSE-64-NEXT:    movl %edi, %eax395; SSE-64-NEXT:    ucomiss %xmm1, %xmm0396; SSE-64-NEXT:    cmovel %esi, %eax397; SSE-64-NEXT:    retq398;399; AVX-32-LABEL: test_f32_one_q:400; AVX-32:       # %bb.0:401; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero402; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0403; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax404; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx405; AVX-32-NEXT:    cmovnel %eax, %ecx406; AVX-32-NEXT:    movl (%ecx), %eax407; AVX-32-NEXT:    retl408;409; AVX-64-LABEL: test_f32_one_q:410; AVX-64:       # %bb.0:411; AVX-64-NEXT:    movl %edi, %eax412; AVX-64-NEXT:    vucomiss %xmm1, %xmm0413; AVX-64-NEXT:    cmovel %esi, %eax414; AVX-64-NEXT:    retq415;416; X87-LABEL: test_f32_one_q:417; X87:       # %bb.0:418; X87-NEXT:    flds {{[0-9]+}}(%esp)419; X87-NEXT:    flds {{[0-9]+}}(%esp)420; X87-NEXT:    fucompp421; X87-NEXT:    wait422; X87-NEXT:    fnstsw %ax423; X87-NEXT:    # kill: def $ah killed $ah killed $ax424; X87-NEXT:    sahf425; X87-NEXT:    jne .LBB5_1426; X87-NEXT:  # %bb.2:427; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax428; X87-NEXT:    movl (%eax), %eax429; X87-NEXT:    retl430; X87-NEXT:  .LBB5_1:431; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax432; X87-NEXT:    movl (%eax), %eax433; X87-NEXT:    retl434;435; X87-CMOV-LABEL: test_f32_one_q:436; X87-CMOV:       # %bb.0:437; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)438; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)439; X87-CMOV-NEXT:    fucompi %st(1), %st440; X87-CMOV-NEXT:    fstp %st(0)441; X87-CMOV-NEXT:    wait442; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax443; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx444; X87-CMOV-NEXT:    cmovnel %eax, %ecx445; X87-CMOV-NEXT:    movl (%ecx), %eax446; X87-CMOV-NEXT:    retl447  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(448                                               float %f1, float %f2, metadata !"one",449                                               metadata !"fpexcept.strict") #0450  %res = select i1 %cond, i32 %a, i32 %b451  ret i32 %res452}453 454define i32 @test_f32_ord_q(i32 %a, i32 %b, float %f1, float %f2) #0 {455; SSE-32-LABEL: test_f32_ord_q:456; SSE-32:       # %bb.0:457; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero458; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0459; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax460; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx461; SSE-32-NEXT:    cmovnpl %eax, %ecx462; SSE-32-NEXT:    movl (%ecx), %eax463; SSE-32-NEXT:    retl464;465; SSE-64-LABEL: test_f32_ord_q:466; SSE-64:       # %bb.0:467; SSE-64-NEXT:    movl %edi, %eax468; SSE-64-NEXT:    ucomiss %xmm1, %xmm0469; SSE-64-NEXT:    cmovpl %esi, %eax470; SSE-64-NEXT:    retq471;472; AVX-32-LABEL: test_f32_ord_q:473; AVX-32:       # %bb.0:474; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero475; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0476; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax477; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx478; AVX-32-NEXT:    cmovnpl %eax, %ecx479; AVX-32-NEXT:    movl (%ecx), %eax480; AVX-32-NEXT:    retl481;482; AVX-64-LABEL: test_f32_ord_q:483; AVX-64:       # %bb.0:484; AVX-64-NEXT:    movl %edi, %eax485; AVX-64-NEXT:    vucomiss %xmm1, %xmm0486; AVX-64-NEXT:    cmovpl %esi, %eax487; AVX-64-NEXT:    retq488;489; X87-LABEL: test_f32_ord_q:490; X87:       # %bb.0:491; X87-NEXT:    flds {{[0-9]+}}(%esp)492; X87-NEXT:    flds {{[0-9]+}}(%esp)493; X87-NEXT:    fucompp494; X87-NEXT:    wait495; X87-NEXT:    fnstsw %ax496; X87-NEXT:    # kill: def $ah killed $ah killed $ax497; X87-NEXT:    sahf498; X87-NEXT:    jnp .LBB6_1499; X87-NEXT:  # %bb.2:500; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax501; X87-NEXT:    movl (%eax), %eax502; X87-NEXT:    retl503; X87-NEXT:  .LBB6_1:504; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax505; X87-NEXT:    movl (%eax), %eax506; X87-NEXT:    retl507;508; X87-CMOV-LABEL: test_f32_ord_q:509; X87-CMOV:       # %bb.0:510; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)511; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)512; X87-CMOV-NEXT:    fucompi %st(1), %st513; X87-CMOV-NEXT:    fstp %st(0)514; X87-CMOV-NEXT:    wait515; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax516; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx517; X87-CMOV-NEXT:    cmovnpl %eax, %ecx518; X87-CMOV-NEXT:    movl (%ecx), %eax519; X87-CMOV-NEXT:    retl520  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(521                                               float %f1, float %f2, metadata !"ord",522                                               metadata !"fpexcept.strict") #0523  %res = select i1 %cond, i32 %a, i32 %b524  ret i32 %res525}526 527define i32 @test_f32_ueq_q(i32 %a, i32 %b, float %f1, float %f2) #0 {528; SSE-32-LABEL: test_f32_ueq_q:529; SSE-32:       # %bb.0:530; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero531; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0532; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax533; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx534; SSE-32-NEXT:    cmovel %eax, %ecx535; SSE-32-NEXT:    movl (%ecx), %eax536; SSE-32-NEXT:    retl537;538; SSE-64-LABEL: test_f32_ueq_q:539; SSE-64:       # %bb.0:540; SSE-64-NEXT:    movl %edi, %eax541; SSE-64-NEXT:    ucomiss %xmm1, %xmm0542; SSE-64-NEXT:    cmovnel %esi, %eax543; SSE-64-NEXT:    retq544;545; AVX-32-LABEL: test_f32_ueq_q:546; AVX-32:       # %bb.0:547; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero548; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0549; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax550; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx551; AVX-32-NEXT:    cmovel %eax, %ecx552; AVX-32-NEXT:    movl (%ecx), %eax553; AVX-32-NEXT:    retl554;555; AVX-64-LABEL: test_f32_ueq_q:556; AVX-64:       # %bb.0:557; AVX-64-NEXT:    movl %edi, %eax558; AVX-64-NEXT:    vucomiss %xmm1, %xmm0559; AVX-64-NEXT:    cmovnel %esi, %eax560; AVX-64-NEXT:    retq561;562; X87-LABEL: test_f32_ueq_q:563; X87:       # %bb.0:564; X87-NEXT:    flds {{[0-9]+}}(%esp)565; X87-NEXT:    flds {{[0-9]+}}(%esp)566; X87-NEXT:    fucompp567; X87-NEXT:    wait568; X87-NEXT:    fnstsw %ax569; X87-NEXT:    # kill: def $ah killed $ah killed $ax570; X87-NEXT:    sahf571; X87-NEXT:    je .LBB7_1572; X87-NEXT:  # %bb.2:573; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax574; X87-NEXT:    movl (%eax), %eax575; X87-NEXT:    retl576; X87-NEXT:  .LBB7_1:577; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax578; X87-NEXT:    movl (%eax), %eax579; X87-NEXT:    retl580;581; X87-CMOV-LABEL: test_f32_ueq_q:582; X87-CMOV:       # %bb.0:583; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)584; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)585; X87-CMOV-NEXT:    fucompi %st(1), %st586; X87-CMOV-NEXT:    fstp %st(0)587; X87-CMOV-NEXT:    wait588; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax589; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx590; X87-CMOV-NEXT:    cmovel %eax, %ecx591; X87-CMOV-NEXT:    movl (%ecx), %eax592; X87-CMOV-NEXT:    retl593  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(594                                               float %f1, float %f2, metadata !"ueq",595                                               metadata !"fpexcept.strict") #0596  %res = select i1 %cond, i32 %a, i32 %b597  ret i32 %res598}599 600define i32 @test_f32_ugt_q(i32 %a, i32 %b, float %f1, float %f2) #0 {601; SSE-32-LABEL: test_f32_ugt_q:602; SSE-32:       # %bb.0:603; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero604; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0605; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax606; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx607; SSE-32-NEXT:    cmovbl %eax, %ecx608; SSE-32-NEXT:    movl (%ecx), %eax609; SSE-32-NEXT:    retl610;611; SSE-64-LABEL: test_f32_ugt_q:612; SSE-64:       # %bb.0:613; SSE-64-NEXT:    movl %edi, %eax614; SSE-64-NEXT:    ucomiss %xmm0, %xmm1615; SSE-64-NEXT:    cmovael %esi, %eax616; SSE-64-NEXT:    retq617;618; AVX-32-LABEL: test_f32_ugt_q:619; AVX-32:       # %bb.0:620; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero621; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0622; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax623; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx624; AVX-32-NEXT:    cmovbl %eax, %ecx625; AVX-32-NEXT:    movl (%ecx), %eax626; AVX-32-NEXT:    retl627;628; AVX-64-LABEL: test_f32_ugt_q:629; AVX-64:       # %bb.0:630; AVX-64-NEXT:    movl %edi, %eax631; AVX-64-NEXT:    vucomiss %xmm0, %xmm1632; AVX-64-NEXT:    cmovael %esi, %eax633; AVX-64-NEXT:    retq634;635; X87-LABEL: test_f32_ugt_q:636; X87:       # %bb.0:637; X87-NEXT:    flds {{[0-9]+}}(%esp)638; X87-NEXT:    flds {{[0-9]+}}(%esp)639; X87-NEXT:    fucompp640; X87-NEXT:    wait641; X87-NEXT:    fnstsw %ax642; X87-NEXT:    # kill: def $ah killed $ah killed $ax643; X87-NEXT:    sahf644; X87-NEXT:    jb .LBB8_1645; X87-NEXT:  # %bb.2:646; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax647; X87-NEXT:    movl (%eax), %eax648; X87-NEXT:    retl649; X87-NEXT:  .LBB8_1:650; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax651; X87-NEXT:    movl (%eax), %eax652; X87-NEXT:    retl653;654; X87-CMOV-LABEL: test_f32_ugt_q:655; X87-CMOV:       # %bb.0:656; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)657; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)658; X87-CMOV-NEXT:    fucompi %st(1), %st659; X87-CMOV-NEXT:    fstp %st(0)660; X87-CMOV-NEXT:    wait661; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax662; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx663; X87-CMOV-NEXT:    cmovbl %eax, %ecx664; X87-CMOV-NEXT:    movl (%ecx), %eax665; X87-CMOV-NEXT:    retl666  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(667                                               float %f1, float %f2, metadata !"ugt",668                                               metadata !"fpexcept.strict") #0669  %res = select i1 %cond, i32 %a, i32 %b670  ret i32 %res671}672 673define i32 @test_f32_uge_q(i32 %a, i32 %b, float %f1, float %f2) #0 {674; SSE-32-LABEL: test_f32_uge_q:675; SSE-32:       # %bb.0:676; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero677; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0678; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax679; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx680; SSE-32-NEXT:    cmovbel %eax, %ecx681; SSE-32-NEXT:    movl (%ecx), %eax682; SSE-32-NEXT:    retl683;684; SSE-64-LABEL: test_f32_uge_q:685; SSE-64:       # %bb.0:686; SSE-64-NEXT:    movl %edi, %eax687; SSE-64-NEXT:    ucomiss %xmm0, %xmm1688; SSE-64-NEXT:    cmoval %esi, %eax689; SSE-64-NEXT:    retq690;691; AVX-32-LABEL: test_f32_uge_q:692; AVX-32:       # %bb.0:693; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero694; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0695; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax696; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx697; AVX-32-NEXT:    cmovbel %eax, %ecx698; AVX-32-NEXT:    movl (%ecx), %eax699; AVX-32-NEXT:    retl700;701; AVX-64-LABEL: test_f32_uge_q:702; AVX-64:       # %bb.0:703; AVX-64-NEXT:    movl %edi, %eax704; AVX-64-NEXT:    vucomiss %xmm0, %xmm1705; AVX-64-NEXT:    cmoval %esi, %eax706; AVX-64-NEXT:    retq707;708; X87-LABEL: test_f32_uge_q:709; X87:       # %bb.0:710; X87-NEXT:    flds {{[0-9]+}}(%esp)711; X87-NEXT:    flds {{[0-9]+}}(%esp)712; X87-NEXT:    fucompp713; X87-NEXT:    wait714; X87-NEXT:    fnstsw %ax715; X87-NEXT:    # kill: def $ah killed $ah killed $ax716; X87-NEXT:    sahf717; X87-NEXT:    jbe .LBB9_1718; X87-NEXT:  # %bb.2:719; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax720; X87-NEXT:    movl (%eax), %eax721; X87-NEXT:    retl722; X87-NEXT:  .LBB9_1:723; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax724; X87-NEXT:    movl (%eax), %eax725; X87-NEXT:    retl726;727; X87-CMOV-LABEL: test_f32_uge_q:728; X87-CMOV:       # %bb.0:729; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)730; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)731; X87-CMOV-NEXT:    fucompi %st(1), %st732; X87-CMOV-NEXT:    fstp %st(0)733; X87-CMOV-NEXT:    wait734; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax735; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx736; X87-CMOV-NEXT:    cmovbel %eax, %ecx737; X87-CMOV-NEXT:    movl (%ecx), %eax738; X87-CMOV-NEXT:    retl739  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(740                                               float %f1, float %f2, metadata !"uge",741                                               metadata !"fpexcept.strict") #0742  %res = select i1 %cond, i32 %a, i32 %b743  ret i32 %res744}745 746define i32 @test_f32_ult_q(i32 %a, i32 %b, float %f1, float %f2) #0 {747; SSE-32-LABEL: test_f32_ult_q:748; SSE-32:       # %bb.0:749; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero750; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0751; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax752; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx753; SSE-32-NEXT:    cmovbl %eax, %ecx754; SSE-32-NEXT:    movl (%ecx), %eax755; SSE-32-NEXT:    retl756;757; SSE-64-LABEL: test_f32_ult_q:758; SSE-64:       # %bb.0:759; SSE-64-NEXT:    movl %edi, %eax760; SSE-64-NEXT:    ucomiss %xmm1, %xmm0761; SSE-64-NEXT:    cmovael %esi, %eax762; SSE-64-NEXT:    retq763;764; AVX-32-LABEL: test_f32_ult_q:765; AVX-32:       # %bb.0:766; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero767; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0768; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax769; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx770; AVX-32-NEXT:    cmovbl %eax, %ecx771; AVX-32-NEXT:    movl (%ecx), %eax772; AVX-32-NEXT:    retl773;774; AVX-64-LABEL: test_f32_ult_q:775; AVX-64:       # %bb.0:776; AVX-64-NEXT:    movl %edi, %eax777; AVX-64-NEXT:    vucomiss %xmm1, %xmm0778; AVX-64-NEXT:    cmovael %esi, %eax779; AVX-64-NEXT:    retq780;781; X87-LABEL: test_f32_ult_q:782; X87:       # %bb.0:783; X87-NEXT:    flds {{[0-9]+}}(%esp)784; X87-NEXT:    flds {{[0-9]+}}(%esp)785; X87-NEXT:    fucompp786; X87-NEXT:    wait787; X87-NEXT:    fnstsw %ax788; X87-NEXT:    # kill: def $ah killed $ah killed $ax789; X87-NEXT:    sahf790; X87-NEXT:    jb .LBB10_1791; X87-NEXT:  # %bb.2:792; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax793; X87-NEXT:    movl (%eax), %eax794; X87-NEXT:    retl795; X87-NEXT:  .LBB10_1:796; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax797; X87-NEXT:    movl (%eax), %eax798; X87-NEXT:    retl799;800; X87-CMOV-LABEL: test_f32_ult_q:801; X87-CMOV:       # %bb.0:802; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)803; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)804; X87-CMOV-NEXT:    fucompi %st(1), %st805; X87-CMOV-NEXT:    fstp %st(0)806; X87-CMOV-NEXT:    wait807; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax808; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx809; X87-CMOV-NEXT:    cmovbl %eax, %ecx810; X87-CMOV-NEXT:    movl (%ecx), %eax811; X87-CMOV-NEXT:    retl812  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(813                                               float %f1, float %f2, metadata !"ult",814                                               metadata !"fpexcept.strict") #0815  %res = select i1 %cond, i32 %a, i32 %b816  ret i32 %res817}818 819define i32 @test_f32_ule_q(i32 %a, i32 %b, float %f1, float %f2) #0 {820; SSE-32-LABEL: test_f32_ule_q:821; SSE-32:       # %bb.0:822; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero823; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0824; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax825; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx826; SSE-32-NEXT:    cmovbel %eax, %ecx827; SSE-32-NEXT:    movl (%ecx), %eax828; SSE-32-NEXT:    retl829;830; SSE-64-LABEL: test_f32_ule_q:831; SSE-64:       # %bb.0:832; SSE-64-NEXT:    movl %edi, %eax833; SSE-64-NEXT:    ucomiss %xmm1, %xmm0834; SSE-64-NEXT:    cmoval %esi, %eax835; SSE-64-NEXT:    retq836;837; AVX-32-LABEL: test_f32_ule_q:838; AVX-32:       # %bb.0:839; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero840; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0841; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax842; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx843; AVX-32-NEXT:    cmovbel %eax, %ecx844; AVX-32-NEXT:    movl (%ecx), %eax845; AVX-32-NEXT:    retl846;847; AVX-64-LABEL: test_f32_ule_q:848; AVX-64:       # %bb.0:849; AVX-64-NEXT:    movl %edi, %eax850; AVX-64-NEXT:    vucomiss %xmm1, %xmm0851; AVX-64-NEXT:    cmoval %esi, %eax852; AVX-64-NEXT:    retq853;854; X87-LABEL: test_f32_ule_q:855; X87:       # %bb.0:856; X87-NEXT:    flds {{[0-9]+}}(%esp)857; X87-NEXT:    flds {{[0-9]+}}(%esp)858; X87-NEXT:    fucompp859; X87-NEXT:    wait860; X87-NEXT:    fnstsw %ax861; X87-NEXT:    # kill: def $ah killed $ah killed $ax862; X87-NEXT:    sahf863; X87-NEXT:    jbe .LBB11_1864; X87-NEXT:  # %bb.2:865; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax866; X87-NEXT:    movl (%eax), %eax867; X87-NEXT:    retl868; X87-NEXT:  .LBB11_1:869; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax870; X87-NEXT:    movl (%eax), %eax871; X87-NEXT:    retl872;873; X87-CMOV-LABEL: test_f32_ule_q:874; X87-CMOV:       # %bb.0:875; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)876; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)877; X87-CMOV-NEXT:    fucompi %st(1), %st878; X87-CMOV-NEXT:    fstp %st(0)879; X87-CMOV-NEXT:    wait880; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax881; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx882; X87-CMOV-NEXT:    cmovbel %eax, %ecx883; X87-CMOV-NEXT:    movl (%ecx), %eax884; X87-CMOV-NEXT:    retl885  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(886                                               float %f1, float %f2, metadata !"ule",887                                               metadata !"fpexcept.strict") #0888  %res = select i1 %cond, i32 %a, i32 %b889  ret i32 %res890}891 892define i32 @test_f32_une_q(i32 %a, i32 %b, float %f1, float %f2) #0 {893; SSE-32-LABEL: test_f32_une_q:894; SSE-32:       # %bb.0:895; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero896; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0897; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax898; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx899; SSE-32-NEXT:    cmovnel %eax, %ecx900; SSE-32-NEXT:    cmovpl %eax, %ecx901; SSE-32-NEXT:    movl (%ecx), %eax902; SSE-32-NEXT:    retl903;904; SSE-64-LABEL: test_f32_une_q:905; SSE-64:       # %bb.0:906; SSE-64-NEXT:    movl %esi, %eax907; SSE-64-NEXT:    ucomiss %xmm1, %xmm0908; SSE-64-NEXT:    cmovnel %edi, %eax909; SSE-64-NEXT:    cmovpl %edi, %eax910; SSE-64-NEXT:    retq911;912; AVX-32-LABEL: test_f32_une_q:913; AVX-32:       # %bb.0:914; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero915; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0916; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax917; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx918; AVX-32-NEXT:    cmovnel %eax, %ecx919; AVX-32-NEXT:    cmovpl %eax, %ecx920; AVX-32-NEXT:    movl (%ecx), %eax921; AVX-32-NEXT:    retl922;923; AVX-64-LABEL: test_f32_une_q:924; AVX-64:       # %bb.0:925; AVX-64-NEXT:    movl %esi, %eax926; AVX-64-NEXT:    vucomiss %xmm1, %xmm0927; AVX-64-NEXT:    cmovnel %edi, %eax928; AVX-64-NEXT:    cmovpl %edi, %eax929; AVX-64-NEXT:    retq930;931; X87-LABEL: test_f32_une_q:932; X87:       # %bb.0:933; X87-NEXT:    flds {{[0-9]+}}(%esp)934; X87-NEXT:    flds {{[0-9]+}}(%esp)935; X87-NEXT:    fucompp936; X87-NEXT:    wait937; X87-NEXT:    fnstsw %ax938; X87-NEXT:    # kill: def $ah killed $ah killed $ax939; X87-NEXT:    sahf940; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax941; X87-NEXT:    jne .LBB12_3942; X87-NEXT:  # %bb.1:943; X87-NEXT:    jp .LBB12_3944; X87-NEXT:  # %bb.2:945; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax946; X87-NEXT:  .LBB12_3:947; X87-NEXT:    movl (%eax), %eax948; X87-NEXT:    retl949;950; X87-CMOV-LABEL: test_f32_une_q:951; X87-CMOV:       # %bb.0:952; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)953; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)954; X87-CMOV-NEXT:    fucompi %st(1), %st955; X87-CMOV-NEXT:    fstp %st(0)956; X87-CMOV-NEXT:    wait957; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax958; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx959; X87-CMOV-NEXT:    cmovnel %eax, %ecx960; X87-CMOV-NEXT:    cmovpl %eax, %ecx961; X87-CMOV-NEXT:    movl (%ecx), %eax962; X87-CMOV-NEXT:    retl963  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(964                                               float %f1, float %f2, metadata !"une",965                                               metadata !"fpexcept.strict") #0966  %res = select i1 %cond, i32 %a, i32 %b967  ret i32 %res968}969 970define i32 @test_f32_uno_q(i32 %a, i32 %b, float %f1, float %f2) #0 {971; SSE-32-LABEL: test_f32_uno_q:972; SSE-32:       # %bb.0:973; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero974; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm0975; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax976; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx977; SSE-32-NEXT:    cmovpl %eax, %ecx978; SSE-32-NEXT:    movl (%ecx), %eax979; SSE-32-NEXT:    retl980;981; SSE-64-LABEL: test_f32_uno_q:982; SSE-64:       # %bb.0:983; SSE-64-NEXT:    movl %edi, %eax984; SSE-64-NEXT:    ucomiss %xmm1, %xmm0985; SSE-64-NEXT:    cmovnpl %esi, %eax986; SSE-64-NEXT:    retq987;988; AVX-32-LABEL: test_f32_uno_q:989; AVX-32:       # %bb.0:990; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero991; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm0992; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax993; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx994; AVX-32-NEXT:    cmovpl %eax, %ecx995; AVX-32-NEXT:    movl (%ecx), %eax996; AVX-32-NEXT:    retl997;998; AVX-64-LABEL: test_f32_uno_q:999; AVX-64:       # %bb.0:1000; AVX-64-NEXT:    movl %edi, %eax1001; AVX-64-NEXT:    vucomiss %xmm1, %xmm01002; AVX-64-NEXT:    cmovnpl %esi, %eax1003; AVX-64-NEXT:    retq1004;1005; X87-LABEL: test_f32_uno_q:1006; X87:       # %bb.0:1007; X87-NEXT:    flds {{[0-9]+}}(%esp)1008; X87-NEXT:    flds {{[0-9]+}}(%esp)1009; X87-NEXT:    fucompp1010; X87-NEXT:    wait1011; X87-NEXT:    fnstsw %ax1012; X87-NEXT:    # kill: def $ah killed $ah killed $ax1013; X87-NEXT:    sahf1014; X87-NEXT:    jp .LBB13_11015; X87-NEXT:  # %bb.2:1016; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1017; X87-NEXT:    movl (%eax), %eax1018; X87-NEXT:    retl1019; X87-NEXT:  .LBB13_1:1020; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1021; X87-NEXT:    movl (%eax), %eax1022; X87-NEXT:    retl1023;1024; X87-CMOV-LABEL: test_f32_uno_q:1025; X87-CMOV:       # %bb.0:1026; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)1027; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)1028; X87-CMOV-NEXT:    fucompi %st(1), %st1029; X87-CMOV-NEXT:    fstp %st(0)1030; X87-CMOV-NEXT:    wait1031; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1032; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1033; X87-CMOV-NEXT:    cmovpl %eax, %ecx1034; X87-CMOV-NEXT:    movl (%ecx), %eax1035; X87-CMOV-NEXT:    retl1036  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(1037                                               float %f1, float %f2, metadata !"uno",1038                                               metadata !"fpexcept.strict") #01039  %res = select i1 %cond, i32 %a, i32 %b1040  ret i32 %res1041}1042 1043define i32 @test_f64_oeq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1044; SSE-32-LABEL: test_f64_oeq_q:1045; SSE-32:       # %bb.0:1046; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1047; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01048; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1049; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1050; SSE-32-NEXT:    cmovnel %eax, %ecx1051; SSE-32-NEXT:    cmovpl %eax, %ecx1052; SSE-32-NEXT:    movl (%ecx), %eax1053; SSE-32-NEXT:    retl1054;1055; SSE-64-LABEL: test_f64_oeq_q:1056; SSE-64:       # %bb.0:1057; SSE-64-NEXT:    movl %edi, %eax1058; SSE-64-NEXT:    ucomisd %xmm1, %xmm01059; SSE-64-NEXT:    cmovnel %esi, %eax1060; SSE-64-NEXT:    cmovpl %esi, %eax1061; SSE-64-NEXT:    retq1062;1063; AVX-32-LABEL: test_f64_oeq_q:1064; AVX-32:       # %bb.0:1065; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1066; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01067; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1068; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1069; AVX-32-NEXT:    cmovnel %eax, %ecx1070; AVX-32-NEXT:    cmovpl %eax, %ecx1071; AVX-32-NEXT:    movl (%ecx), %eax1072; AVX-32-NEXT:    retl1073;1074; AVX-64-LABEL: test_f64_oeq_q:1075; AVX-64:       # %bb.0:1076; AVX-64-NEXT:    movl %edi, %eax1077; AVX-64-NEXT:    vucomisd %xmm1, %xmm01078; AVX-64-NEXT:    cmovnel %esi, %eax1079; AVX-64-NEXT:    cmovpl %esi, %eax1080; AVX-64-NEXT:    retq1081;1082; X87-LABEL: test_f64_oeq_q:1083; X87:       # %bb.0:1084; X87-NEXT:    fldl {{[0-9]+}}(%esp)1085; X87-NEXT:    fldl {{[0-9]+}}(%esp)1086; X87-NEXT:    fucompp1087; X87-NEXT:    wait1088; X87-NEXT:    fnstsw %ax1089; X87-NEXT:    # kill: def $ah killed $ah killed $ax1090; X87-NEXT:    sahf1091; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1092; X87-NEXT:    jne .LBB14_31093; X87-NEXT:  # %bb.1:1094; X87-NEXT:    jp .LBB14_31095; X87-NEXT:  # %bb.2:1096; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1097; X87-NEXT:  .LBB14_3:1098; X87-NEXT:    movl (%eax), %eax1099; X87-NEXT:    retl1100;1101; X87-CMOV-LABEL: test_f64_oeq_q:1102; X87-CMOV:       # %bb.0:1103; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1104; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1105; X87-CMOV-NEXT:    fucompi %st(1), %st1106; X87-CMOV-NEXT:    fstp %st(0)1107; X87-CMOV-NEXT:    wait1108; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1109; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1110; X87-CMOV-NEXT:    cmovnel %eax, %ecx1111; X87-CMOV-NEXT:    cmovpl %eax, %ecx1112; X87-CMOV-NEXT:    movl (%ecx), %eax1113; X87-CMOV-NEXT:    retl1114  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1115                                               double %f1, double %f2, metadata !"oeq",1116                                               metadata !"fpexcept.strict") #01117  %res = select i1 %cond, i32 %a, i32 %b1118  ret i32 %res1119}1120 1121define i32 @test_f64_ogt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1122; SSE-32-LABEL: test_f64_ogt_q:1123; SSE-32:       # %bb.0:1124; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1125; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01126; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1127; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1128; SSE-32-NEXT:    cmoval %eax, %ecx1129; SSE-32-NEXT:    movl (%ecx), %eax1130; SSE-32-NEXT:    retl1131;1132; SSE-64-LABEL: test_f64_ogt_q:1133; SSE-64:       # %bb.0:1134; SSE-64-NEXT:    movl %edi, %eax1135; SSE-64-NEXT:    ucomisd %xmm1, %xmm01136; SSE-64-NEXT:    cmovbel %esi, %eax1137; SSE-64-NEXT:    retq1138;1139; AVX-32-LABEL: test_f64_ogt_q:1140; AVX-32:       # %bb.0:1141; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1142; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01143; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1144; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1145; AVX-32-NEXT:    cmoval %eax, %ecx1146; AVX-32-NEXT:    movl (%ecx), %eax1147; AVX-32-NEXT:    retl1148;1149; AVX-64-LABEL: test_f64_ogt_q:1150; AVX-64:       # %bb.0:1151; AVX-64-NEXT:    movl %edi, %eax1152; AVX-64-NEXT:    vucomisd %xmm1, %xmm01153; AVX-64-NEXT:    cmovbel %esi, %eax1154; AVX-64-NEXT:    retq1155;1156; X87-LABEL: test_f64_ogt_q:1157; X87:       # %bb.0:1158; X87-NEXT:    fldl {{[0-9]+}}(%esp)1159; X87-NEXT:    fldl {{[0-9]+}}(%esp)1160; X87-NEXT:    fucompp1161; X87-NEXT:    wait1162; X87-NEXT:    fnstsw %ax1163; X87-NEXT:    # kill: def $ah killed $ah killed $ax1164; X87-NEXT:    sahf1165; X87-NEXT:    ja .LBB15_11166; X87-NEXT:  # %bb.2:1167; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1168; X87-NEXT:    movl (%eax), %eax1169; X87-NEXT:    retl1170; X87-NEXT:  .LBB15_1:1171; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1172; X87-NEXT:    movl (%eax), %eax1173; X87-NEXT:    retl1174;1175; X87-CMOV-LABEL: test_f64_ogt_q:1176; X87-CMOV:       # %bb.0:1177; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1178; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1179; X87-CMOV-NEXT:    fucompi %st(1), %st1180; X87-CMOV-NEXT:    fstp %st(0)1181; X87-CMOV-NEXT:    wait1182; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1183; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1184; X87-CMOV-NEXT:    cmoval %eax, %ecx1185; X87-CMOV-NEXT:    movl (%ecx), %eax1186; X87-CMOV-NEXT:    retl1187  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1188                                               double %f1, double %f2, metadata !"ogt",1189                                               metadata !"fpexcept.strict") #01190  %res = select i1 %cond, i32 %a, i32 %b1191  ret i32 %res1192}1193 1194define i32 @test_f64_oge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1195; SSE-32-LABEL: test_f64_oge_q:1196; SSE-32:       # %bb.0:1197; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1198; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01199; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1200; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1201; SSE-32-NEXT:    cmovael %eax, %ecx1202; SSE-32-NEXT:    movl (%ecx), %eax1203; SSE-32-NEXT:    retl1204;1205; SSE-64-LABEL: test_f64_oge_q:1206; SSE-64:       # %bb.0:1207; SSE-64-NEXT:    movl %edi, %eax1208; SSE-64-NEXT:    ucomisd %xmm1, %xmm01209; SSE-64-NEXT:    cmovbl %esi, %eax1210; SSE-64-NEXT:    retq1211;1212; AVX-32-LABEL: test_f64_oge_q:1213; AVX-32:       # %bb.0:1214; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1215; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01216; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1217; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1218; AVX-32-NEXT:    cmovael %eax, %ecx1219; AVX-32-NEXT:    movl (%ecx), %eax1220; AVX-32-NEXT:    retl1221;1222; AVX-64-LABEL: test_f64_oge_q:1223; AVX-64:       # %bb.0:1224; AVX-64-NEXT:    movl %edi, %eax1225; AVX-64-NEXT:    vucomisd %xmm1, %xmm01226; AVX-64-NEXT:    cmovbl %esi, %eax1227; AVX-64-NEXT:    retq1228;1229; X87-LABEL: test_f64_oge_q:1230; X87:       # %bb.0:1231; X87-NEXT:    fldl {{[0-9]+}}(%esp)1232; X87-NEXT:    fldl {{[0-9]+}}(%esp)1233; X87-NEXT:    fucompp1234; X87-NEXT:    wait1235; X87-NEXT:    fnstsw %ax1236; X87-NEXT:    # kill: def $ah killed $ah killed $ax1237; X87-NEXT:    sahf1238; X87-NEXT:    jae .LBB16_11239; X87-NEXT:  # %bb.2:1240; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1241; X87-NEXT:    movl (%eax), %eax1242; X87-NEXT:    retl1243; X87-NEXT:  .LBB16_1:1244; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1245; X87-NEXT:    movl (%eax), %eax1246; X87-NEXT:    retl1247;1248; X87-CMOV-LABEL: test_f64_oge_q:1249; X87-CMOV:       # %bb.0:1250; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1251; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1252; X87-CMOV-NEXT:    fucompi %st(1), %st1253; X87-CMOV-NEXT:    fstp %st(0)1254; X87-CMOV-NEXT:    wait1255; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1256; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1257; X87-CMOV-NEXT:    cmovael %eax, %ecx1258; X87-CMOV-NEXT:    movl (%ecx), %eax1259; X87-CMOV-NEXT:    retl1260  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1261                                               double %f1, double %f2, metadata !"oge",1262                                               metadata !"fpexcept.strict") #01263  %res = select i1 %cond, i32 %a, i32 %b1264  ret i32 %res1265}1266 1267define i32 @test_f64_olt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1268; SSE-32-LABEL: test_f64_olt_q:1269; SSE-32:       # %bb.0:1270; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1271; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01272; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1273; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1274; SSE-32-NEXT:    cmoval %eax, %ecx1275; SSE-32-NEXT:    movl (%ecx), %eax1276; SSE-32-NEXT:    retl1277;1278; SSE-64-LABEL: test_f64_olt_q:1279; SSE-64:       # %bb.0:1280; SSE-64-NEXT:    movl %edi, %eax1281; SSE-64-NEXT:    ucomisd %xmm0, %xmm11282; SSE-64-NEXT:    cmovbel %esi, %eax1283; SSE-64-NEXT:    retq1284;1285; AVX-32-LABEL: test_f64_olt_q:1286; AVX-32:       # %bb.0:1287; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1288; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01289; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1290; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1291; AVX-32-NEXT:    cmoval %eax, %ecx1292; AVX-32-NEXT:    movl (%ecx), %eax1293; AVX-32-NEXT:    retl1294;1295; AVX-64-LABEL: test_f64_olt_q:1296; AVX-64:       # %bb.0:1297; AVX-64-NEXT:    movl %edi, %eax1298; AVX-64-NEXT:    vucomisd %xmm0, %xmm11299; AVX-64-NEXT:    cmovbel %esi, %eax1300; AVX-64-NEXT:    retq1301;1302; X87-LABEL: test_f64_olt_q:1303; X87:       # %bb.0:1304; X87-NEXT:    fldl {{[0-9]+}}(%esp)1305; X87-NEXT:    fldl {{[0-9]+}}(%esp)1306; X87-NEXT:    fucompp1307; X87-NEXT:    wait1308; X87-NEXT:    fnstsw %ax1309; X87-NEXT:    # kill: def $ah killed $ah killed $ax1310; X87-NEXT:    sahf1311; X87-NEXT:    ja .LBB17_11312; X87-NEXT:  # %bb.2:1313; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1314; X87-NEXT:    movl (%eax), %eax1315; X87-NEXT:    retl1316; X87-NEXT:  .LBB17_1:1317; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1318; X87-NEXT:    movl (%eax), %eax1319; X87-NEXT:    retl1320;1321; X87-CMOV-LABEL: test_f64_olt_q:1322; X87-CMOV:       # %bb.0:1323; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1324; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1325; X87-CMOV-NEXT:    fucompi %st(1), %st1326; X87-CMOV-NEXT:    fstp %st(0)1327; X87-CMOV-NEXT:    wait1328; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1329; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1330; X87-CMOV-NEXT:    cmoval %eax, %ecx1331; X87-CMOV-NEXT:    movl (%ecx), %eax1332; X87-CMOV-NEXT:    retl1333  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1334                                               double %f1, double %f2, metadata !"olt",1335                                               metadata !"fpexcept.strict") #01336  %res = select i1 %cond, i32 %a, i32 %b1337  ret i32 %res1338}1339 1340define i32 @test_f64_ole_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1341; SSE-32-LABEL: test_f64_ole_q:1342; SSE-32:       # %bb.0:1343; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1344; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01345; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1346; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1347; SSE-32-NEXT:    cmovael %eax, %ecx1348; SSE-32-NEXT:    movl (%ecx), %eax1349; SSE-32-NEXT:    retl1350;1351; SSE-64-LABEL: test_f64_ole_q:1352; SSE-64:       # %bb.0:1353; SSE-64-NEXT:    movl %edi, %eax1354; SSE-64-NEXT:    ucomisd %xmm0, %xmm11355; SSE-64-NEXT:    cmovbl %esi, %eax1356; SSE-64-NEXT:    retq1357;1358; AVX-32-LABEL: test_f64_ole_q:1359; AVX-32:       # %bb.0:1360; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1361; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01362; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1363; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1364; AVX-32-NEXT:    cmovael %eax, %ecx1365; AVX-32-NEXT:    movl (%ecx), %eax1366; AVX-32-NEXT:    retl1367;1368; AVX-64-LABEL: test_f64_ole_q:1369; AVX-64:       # %bb.0:1370; AVX-64-NEXT:    movl %edi, %eax1371; AVX-64-NEXT:    vucomisd %xmm0, %xmm11372; AVX-64-NEXT:    cmovbl %esi, %eax1373; AVX-64-NEXT:    retq1374;1375; X87-LABEL: test_f64_ole_q:1376; X87:       # %bb.0:1377; X87-NEXT:    fldl {{[0-9]+}}(%esp)1378; X87-NEXT:    fldl {{[0-9]+}}(%esp)1379; X87-NEXT:    fucompp1380; X87-NEXT:    wait1381; X87-NEXT:    fnstsw %ax1382; X87-NEXT:    # kill: def $ah killed $ah killed $ax1383; X87-NEXT:    sahf1384; X87-NEXT:    jae .LBB18_11385; X87-NEXT:  # %bb.2:1386; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1387; X87-NEXT:    movl (%eax), %eax1388; X87-NEXT:    retl1389; X87-NEXT:  .LBB18_1:1390; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1391; X87-NEXT:    movl (%eax), %eax1392; X87-NEXT:    retl1393;1394; X87-CMOV-LABEL: test_f64_ole_q:1395; X87-CMOV:       # %bb.0:1396; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1397; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1398; X87-CMOV-NEXT:    fucompi %st(1), %st1399; X87-CMOV-NEXT:    fstp %st(0)1400; X87-CMOV-NEXT:    wait1401; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1402; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1403; X87-CMOV-NEXT:    cmovael %eax, %ecx1404; X87-CMOV-NEXT:    movl (%ecx), %eax1405; X87-CMOV-NEXT:    retl1406  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1407                                               double %f1, double %f2, metadata !"ole",1408                                               metadata !"fpexcept.strict") #01409  %res = select i1 %cond, i32 %a, i32 %b1410  ret i32 %res1411}1412 1413define i32 @test_f64_one_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1414; SSE-32-LABEL: test_f64_one_q:1415; SSE-32:       # %bb.0:1416; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1417; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01418; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1419; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1420; SSE-32-NEXT:    cmovnel %eax, %ecx1421; SSE-32-NEXT:    movl (%ecx), %eax1422; SSE-32-NEXT:    retl1423;1424; SSE-64-LABEL: test_f64_one_q:1425; SSE-64:       # %bb.0:1426; SSE-64-NEXT:    movl %edi, %eax1427; SSE-64-NEXT:    ucomisd %xmm1, %xmm01428; SSE-64-NEXT:    cmovel %esi, %eax1429; SSE-64-NEXT:    retq1430;1431; AVX-32-LABEL: test_f64_one_q:1432; AVX-32:       # %bb.0:1433; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1434; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01435; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1436; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1437; AVX-32-NEXT:    cmovnel %eax, %ecx1438; AVX-32-NEXT:    movl (%ecx), %eax1439; AVX-32-NEXT:    retl1440;1441; AVX-64-LABEL: test_f64_one_q:1442; AVX-64:       # %bb.0:1443; AVX-64-NEXT:    movl %edi, %eax1444; AVX-64-NEXT:    vucomisd %xmm1, %xmm01445; AVX-64-NEXT:    cmovel %esi, %eax1446; AVX-64-NEXT:    retq1447;1448; X87-LABEL: test_f64_one_q:1449; X87:       # %bb.0:1450; X87-NEXT:    fldl {{[0-9]+}}(%esp)1451; X87-NEXT:    fldl {{[0-9]+}}(%esp)1452; X87-NEXT:    fucompp1453; X87-NEXT:    wait1454; X87-NEXT:    fnstsw %ax1455; X87-NEXT:    # kill: def $ah killed $ah killed $ax1456; X87-NEXT:    sahf1457; X87-NEXT:    jne .LBB19_11458; X87-NEXT:  # %bb.2:1459; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1460; X87-NEXT:    movl (%eax), %eax1461; X87-NEXT:    retl1462; X87-NEXT:  .LBB19_1:1463; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1464; X87-NEXT:    movl (%eax), %eax1465; X87-NEXT:    retl1466;1467; X87-CMOV-LABEL: test_f64_one_q:1468; X87-CMOV:       # %bb.0:1469; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1470; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1471; X87-CMOV-NEXT:    fucompi %st(1), %st1472; X87-CMOV-NEXT:    fstp %st(0)1473; X87-CMOV-NEXT:    wait1474; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1475; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1476; X87-CMOV-NEXT:    cmovnel %eax, %ecx1477; X87-CMOV-NEXT:    movl (%ecx), %eax1478; X87-CMOV-NEXT:    retl1479  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1480                                               double %f1, double %f2, metadata !"one",1481                                               metadata !"fpexcept.strict") #01482  %res = select i1 %cond, i32 %a, i32 %b1483  ret i32 %res1484}1485 1486define i32 @test_f64_ord_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1487; SSE-32-LABEL: test_f64_ord_q:1488; SSE-32:       # %bb.0:1489; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1490; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01491; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1492; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1493; SSE-32-NEXT:    cmovnpl %eax, %ecx1494; SSE-32-NEXT:    movl (%ecx), %eax1495; SSE-32-NEXT:    retl1496;1497; SSE-64-LABEL: test_f64_ord_q:1498; SSE-64:       # %bb.0:1499; SSE-64-NEXT:    movl %edi, %eax1500; SSE-64-NEXT:    ucomisd %xmm1, %xmm01501; SSE-64-NEXT:    cmovpl %esi, %eax1502; SSE-64-NEXT:    retq1503;1504; AVX-32-LABEL: test_f64_ord_q:1505; AVX-32:       # %bb.0:1506; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1507; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01508; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1509; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1510; AVX-32-NEXT:    cmovnpl %eax, %ecx1511; AVX-32-NEXT:    movl (%ecx), %eax1512; AVX-32-NEXT:    retl1513;1514; AVX-64-LABEL: test_f64_ord_q:1515; AVX-64:       # %bb.0:1516; AVX-64-NEXT:    movl %edi, %eax1517; AVX-64-NEXT:    vucomisd %xmm1, %xmm01518; AVX-64-NEXT:    cmovpl %esi, %eax1519; AVX-64-NEXT:    retq1520;1521; X87-LABEL: test_f64_ord_q:1522; X87:       # %bb.0:1523; X87-NEXT:    fldl {{[0-9]+}}(%esp)1524; X87-NEXT:    fldl {{[0-9]+}}(%esp)1525; X87-NEXT:    fucompp1526; X87-NEXT:    wait1527; X87-NEXT:    fnstsw %ax1528; X87-NEXT:    # kill: def $ah killed $ah killed $ax1529; X87-NEXT:    sahf1530; X87-NEXT:    jnp .LBB20_11531; X87-NEXT:  # %bb.2:1532; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1533; X87-NEXT:    movl (%eax), %eax1534; X87-NEXT:    retl1535; X87-NEXT:  .LBB20_1:1536; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1537; X87-NEXT:    movl (%eax), %eax1538; X87-NEXT:    retl1539;1540; X87-CMOV-LABEL: test_f64_ord_q:1541; X87-CMOV:       # %bb.0:1542; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1543; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1544; X87-CMOV-NEXT:    fucompi %st(1), %st1545; X87-CMOV-NEXT:    fstp %st(0)1546; X87-CMOV-NEXT:    wait1547; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1548; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1549; X87-CMOV-NEXT:    cmovnpl %eax, %ecx1550; X87-CMOV-NEXT:    movl (%ecx), %eax1551; X87-CMOV-NEXT:    retl1552  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1553                                               double %f1, double %f2, metadata !"ord",1554                                               metadata !"fpexcept.strict") #01555  %res = select i1 %cond, i32 %a, i32 %b1556  ret i32 %res1557}1558 1559define i32 @test_f64_ueq_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1560; SSE-32-LABEL: test_f64_ueq_q:1561; SSE-32:       # %bb.0:1562; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1563; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01564; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1565; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1566; SSE-32-NEXT:    cmovel %eax, %ecx1567; SSE-32-NEXT:    movl (%ecx), %eax1568; SSE-32-NEXT:    retl1569;1570; SSE-64-LABEL: test_f64_ueq_q:1571; SSE-64:       # %bb.0:1572; SSE-64-NEXT:    movl %edi, %eax1573; SSE-64-NEXT:    ucomisd %xmm1, %xmm01574; SSE-64-NEXT:    cmovnel %esi, %eax1575; SSE-64-NEXT:    retq1576;1577; AVX-32-LABEL: test_f64_ueq_q:1578; AVX-32:       # %bb.0:1579; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1580; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01581; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1582; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1583; AVX-32-NEXT:    cmovel %eax, %ecx1584; AVX-32-NEXT:    movl (%ecx), %eax1585; AVX-32-NEXT:    retl1586;1587; AVX-64-LABEL: test_f64_ueq_q:1588; AVX-64:       # %bb.0:1589; AVX-64-NEXT:    movl %edi, %eax1590; AVX-64-NEXT:    vucomisd %xmm1, %xmm01591; AVX-64-NEXT:    cmovnel %esi, %eax1592; AVX-64-NEXT:    retq1593;1594; X87-LABEL: test_f64_ueq_q:1595; X87:       # %bb.0:1596; X87-NEXT:    fldl {{[0-9]+}}(%esp)1597; X87-NEXT:    fldl {{[0-9]+}}(%esp)1598; X87-NEXT:    fucompp1599; X87-NEXT:    wait1600; X87-NEXT:    fnstsw %ax1601; X87-NEXT:    # kill: def $ah killed $ah killed $ax1602; X87-NEXT:    sahf1603; X87-NEXT:    je .LBB21_11604; X87-NEXT:  # %bb.2:1605; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1606; X87-NEXT:    movl (%eax), %eax1607; X87-NEXT:    retl1608; X87-NEXT:  .LBB21_1:1609; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1610; X87-NEXT:    movl (%eax), %eax1611; X87-NEXT:    retl1612;1613; X87-CMOV-LABEL: test_f64_ueq_q:1614; X87-CMOV:       # %bb.0:1615; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1616; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1617; X87-CMOV-NEXT:    fucompi %st(1), %st1618; X87-CMOV-NEXT:    fstp %st(0)1619; X87-CMOV-NEXT:    wait1620; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1621; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1622; X87-CMOV-NEXT:    cmovel %eax, %ecx1623; X87-CMOV-NEXT:    movl (%ecx), %eax1624; X87-CMOV-NEXT:    retl1625  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1626                                               double %f1, double %f2, metadata !"ueq",1627                                               metadata !"fpexcept.strict") #01628  %res = select i1 %cond, i32 %a, i32 %b1629  ret i32 %res1630}1631 1632define i32 @test_f64_ugt_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1633; SSE-32-LABEL: test_f64_ugt_q:1634; SSE-32:       # %bb.0:1635; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1636; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01637; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1638; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1639; SSE-32-NEXT:    cmovbl %eax, %ecx1640; SSE-32-NEXT:    movl (%ecx), %eax1641; SSE-32-NEXT:    retl1642;1643; SSE-64-LABEL: test_f64_ugt_q:1644; SSE-64:       # %bb.0:1645; SSE-64-NEXT:    movl %edi, %eax1646; SSE-64-NEXT:    ucomisd %xmm0, %xmm11647; SSE-64-NEXT:    cmovael %esi, %eax1648; SSE-64-NEXT:    retq1649;1650; AVX-32-LABEL: test_f64_ugt_q:1651; AVX-32:       # %bb.0:1652; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1653; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01654; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1655; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1656; AVX-32-NEXT:    cmovbl %eax, %ecx1657; AVX-32-NEXT:    movl (%ecx), %eax1658; AVX-32-NEXT:    retl1659;1660; AVX-64-LABEL: test_f64_ugt_q:1661; AVX-64:       # %bb.0:1662; AVX-64-NEXT:    movl %edi, %eax1663; AVX-64-NEXT:    vucomisd %xmm0, %xmm11664; AVX-64-NEXT:    cmovael %esi, %eax1665; AVX-64-NEXT:    retq1666;1667; X87-LABEL: test_f64_ugt_q:1668; X87:       # %bb.0:1669; X87-NEXT:    fldl {{[0-9]+}}(%esp)1670; X87-NEXT:    fldl {{[0-9]+}}(%esp)1671; X87-NEXT:    fucompp1672; X87-NEXT:    wait1673; X87-NEXT:    fnstsw %ax1674; X87-NEXT:    # kill: def $ah killed $ah killed $ax1675; X87-NEXT:    sahf1676; X87-NEXT:    jb .LBB22_11677; X87-NEXT:  # %bb.2:1678; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1679; X87-NEXT:    movl (%eax), %eax1680; X87-NEXT:    retl1681; X87-NEXT:  .LBB22_1:1682; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1683; X87-NEXT:    movl (%eax), %eax1684; X87-NEXT:    retl1685;1686; X87-CMOV-LABEL: test_f64_ugt_q:1687; X87-CMOV:       # %bb.0:1688; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1689; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1690; X87-CMOV-NEXT:    fucompi %st(1), %st1691; X87-CMOV-NEXT:    fstp %st(0)1692; X87-CMOV-NEXT:    wait1693; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1694; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1695; X87-CMOV-NEXT:    cmovbl %eax, %ecx1696; X87-CMOV-NEXT:    movl (%ecx), %eax1697; X87-CMOV-NEXT:    retl1698  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1699                                               double %f1, double %f2, metadata !"ugt",1700                                               metadata !"fpexcept.strict") #01701  %res = select i1 %cond, i32 %a, i32 %b1702  ret i32 %res1703}1704 1705define i32 @test_f64_uge_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1706; SSE-32-LABEL: test_f64_uge_q:1707; SSE-32:       # %bb.0:1708; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1709; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01710; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1711; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1712; SSE-32-NEXT:    cmovbel %eax, %ecx1713; SSE-32-NEXT:    movl (%ecx), %eax1714; SSE-32-NEXT:    retl1715;1716; SSE-64-LABEL: test_f64_uge_q:1717; SSE-64:       # %bb.0:1718; SSE-64-NEXT:    movl %edi, %eax1719; SSE-64-NEXT:    ucomisd %xmm0, %xmm11720; SSE-64-NEXT:    cmoval %esi, %eax1721; SSE-64-NEXT:    retq1722;1723; AVX-32-LABEL: test_f64_uge_q:1724; AVX-32:       # %bb.0:1725; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1726; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01727; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1728; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1729; AVX-32-NEXT:    cmovbel %eax, %ecx1730; AVX-32-NEXT:    movl (%ecx), %eax1731; AVX-32-NEXT:    retl1732;1733; AVX-64-LABEL: test_f64_uge_q:1734; AVX-64:       # %bb.0:1735; AVX-64-NEXT:    movl %edi, %eax1736; AVX-64-NEXT:    vucomisd %xmm0, %xmm11737; AVX-64-NEXT:    cmoval %esi, %eax1738; AVX-64-NEXT:    retq1739;1740; X87-LABEL: test_f64_uge_q:1741; X87:       # %bb.0:1742; X87-NEXT:    fldl {{[0-9]+}}(%esp)1743; X87-NEXT:    fldl {{[0-9]+}}(%esp)1744; X87-NEXT:    fucompp1745; X87-NEXT:    wait1746; X87-NEXT:    fnstsw %ax1747; X87-NEXT:    # kill: def $ah killed $ah killed $ax1748; X87-NEXT:    sahf1749; X87-NEXT:    jbe .LBB23_11750; X87-NEXT:  # %bb.2:1751; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1752; X87-NEXT:    movl (%eax), %eax1753; X87-NEXT:    retl1754; X87-NEXT:  .LBB23_1:1755; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1756; X87-NEXT:    movl (%eax), %eax1757; X87-NEXT:    retl1758;1759; X87-CMOV-LABEL: test_f64_uge_q:1760; X87-CMOV:       # %bb.0:1761; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1762; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1763; X87-CMOV-NEXT:    fucompi %st(1), %st1764; X87-CMOV-NEXT:    fstp %st(0)1765; X87-CMOV-NEXT:    wait1766; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1767; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1768; X87-CMOV-NEXT:    cmovbel %eax, %ecx1769; X87-CMOV-NEXT:    movl (%ecx), %eax1770; X87-CMOV-NEXT:    retl1771  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1772                                               double %f1, double %f2, metadata !"uge",1773                                               metadata !"fpexcept.strict") #01774  %res = select i1 %cond, i32 %a, i32 %b1775  ret i32 %res1776}1777 1778define i32 @test_f64_ult_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1779; SSE-32-LABEL: test_f64_ult_q:1780; SSE-32:       # %bb.0:1781; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1782; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01783; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1784; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1785; SSE-32-NEXT:    cmovbl %eax, %ecx1786; SSE-32-NEXT:    movl (%ecx), %eax1787; SSE-32-NEXT:    retl1788;1789; SSE-64-LABEL: test_f64_ult_q:1790; SSE-64:       # %bb.0:1791; SSE-64-NEXT:    movl %edi, %eax1792; SSE-64-NEXT:    ucomisd %xmm1, %xmm01793; SSE-64-NEXT:    cmovael %esi, %eax1794; SSE-64-NEXT:    retq1795;1796; AVX-32-LABEL: test_f64_ult_q:1797; AVX-32:       # %bb.0:1798; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1799; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01800; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1801; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1802; AVX-32-NEXT:    cmovbl %eax, %ecx1803; AVX-32-NEXT:    movl (%ecx), %eax1804; AVX-32-NEXT:    retl1805;1806; AVX-64-LABEL: test_f64_ult_q:1807; AVX-64:       # %bb.0:1808; AVX-64-NEXT:    movl %edi, %eax1809; AVX-64-NEXT:    vucomisd %xmm1, %xmm01810; AVX-64-NEXT:    cmovael %esi, %eax1811; AVX-64-NEXT:    retq1812;1813; X87-LABEL: test_f64_ult_q:1814; X87:       # %bb.0:1815; X87-NEXT:    fldl {{[0-9]+}}(%esp)1816; X87-NEXT:    fldl {{[0-9]+}}(%esp)1817; X87-NEXT:    fucompp1818; X87-NEXT:    wait1819; X87-NEXT:    fnstsw %ax1820; X87-NEXT:    # kill: def $ah killed $ah killed $ax1821; X87-NEXT:    sahf1822; X87-NEXT:    jb .LBB24_11823; X87-NEXT:  # %bb.2:1824; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1825; X87-NEXT:    movl (%eax), %eax1826; X87-NEXT:    retl1827; X87-NEXT:  .LBB24_1:1828; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1829; X87-NEXT:    movl (%eax), %eax1830; X87-NEXT:    retl1831;1832; X87-CMOV-LABEL: test_f64_ult_q:1833; X87-CMOV:       # %bb.0:1834; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1835; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1836; X87-CMOV-NEXT:    fucompi %st(1), %st1837; X87-CMOV-NEXT:    fstp %st(0)1838; X87-CMOV-NEXT:    wait1839; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1840; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1841; X87-CMOV-NEXT:    cmovbl %eax, %ecx1842; X87-CMOV-NEXT:    movl (%ecx), %eax1843; X87-CMOV-NEXT:    retl1844  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1845                                               double %f1, double %f2, metadata !"ult",1846                                               metadata !"fpexcept.strict") #01847  %res = select i1 %cond, i32 %a, i32 %b1848  ret i32 %res1849}1850 1851define i32 @test_f64_ule_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1852; SSE-32-LABEL: test_f64_ule_q:1853; SSE-32:       # %bb.0:1854; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1855; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01856; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1857; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1858; SSE-32-NEXT:    cmovbel %eax, %ecx1859; SSE-32-NEXT:    movl (%ecx), %eax1860; SSE-32-NEXT:    retl1861;1862; SSE-64-LABEL: test_f64_ule_q:1863; SSE-64:       # %bb.0:1864; SSE-64-NEXT:    movl %edi, %eax1865; SSE-64-NEXT:    ucomisd %xmm1, %xmm01866; SSE-64-NEXT:    cmoval %esi, %eax1867; SSE-64-NEXT:    retq1868;1869; AVX-32-LABEL: test_f64_ule_q:1870; AVX-32:       # %bb.0:1871; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1872; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01873; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1874; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1875; AVX-32-NEXT:    cmovbel %eax, %ecx1876; AVX-32-NEXT:    movl (%ecx), %eax1877; AVX-32-NEXT:    retl1878;1879; AVX-64-LABEL: test_f64_ule_q:1880; AVX-64:       # %bb.0:1881; AVX-64-NEXT:    movl %edi, %eax1882; AVX-64-NEXT:    vucomisd %xmm1, %xmm01883; AVX-64-NEXT:    cmoval %esi, %eax1884; AVX-64-NEXT:    retq1885;1886; X87-LABEL: test_f64_ule_q:1887; X87:       # %bb.0:1888; X87-NEXT:    fldl {{[0-9]+}}(%esp)1889; X87-NEXT:    fldl {{[0-9]+}}(%esp)1890; X87-NEXT:    fucompp1891; X87-NEXT:    wait1892; X87-NEXT:    fnstsw %ax1893; X87-NEXT:    # kill: def $ah killed $ah killed $ax1894; X87-NEXT:    sahf1895; X87-NEXT:    jbe .LBB25_11896; X87-NEXT:  # %bb.2:1897; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1898; X87-NEXT:    movl (%eax), %eax1899; X87-NEXT:    retl1900; X87-NEXT:  .LBB25_1:1901; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1902; X87-NEXT:    movl (%eax), %eax1903; X87-NEXT:    retl1904;1905; X87-CMOV-LABEL: test_f64_ule_q:1906; X87-CMOV:       # %bb.0:1907; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1908; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1909; X87-CMOV-NEXT:    fucompi %st(1), %st1910; X87-CMOV-NEXT:    fstp %st(0)1911; X87-CMOV-NEXT:    wait1912; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1913; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1914; X87-CMOV-NEXT:    cmovbel %eax, %ecx1915; X87-CMOV-NEXT:    movl (%ecx), %eax1916; X87-CMOV-NEXT:    retl1917  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1918                                               double %f1, double %f2, metadata !"ule",1919                                               metadata !"fpexcept.strict") #01920  %res = select i1 %cond, i32 %a, i32 %b1921  ret i32 %res1922}1923 1924define i32 @test_f64_une_q(i32 %a, i32 %b, double %f1, double %f2) #0 {1925; SSE-32-LABEL: test_f64_une_q:1926; SSE-32:       # %bb.0:1927; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero1928; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm01929; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1930; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1931; SSE-32-NEXT:    cmovnel %eax, %ecx1932; SSE-32-NEXT:    cmovpl %eax, %ecx1933; SSE-32-NEXT:    movl (%ecx), %eax1934; SSE-32-NEXT:    retl1935;1936; SSE-64-LABEL: test_f64_une_q:1937; SSE-64:       # %bb.0:1938; SSE-64-NEXT:    movl %esi, %eax1939; SSE-64-NEXT:    ucomisd %xmm1, %xmm01940; SSE-64-NEXT:    cmovnel %edi, %eax1941; SSE-64-NEXT:    cmovpl %edi, %eax1942; SSE-64-NEXT:    retq1943;1944; AVX-32-LABEL: test_f64_une_q:1945; AVX-32:       # %bb.0:1946; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1947; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm01948; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax1949; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx1950; AVX-32-NEXT:    cmovnel %eax, %ecx1951; AVX-32-NEXT:    cmovpl %eax, %ecx1952; AVX-32-NEXT:    movl (%ecx), %eax1953; AVX-32-NEXT:    retl1954;1955; AVX-64-LABEL: test_f64_une_q:1956; AVX-64:       # %bb.0:1957; AVX-64-NEXT:    movl %esi, %eax1958; AVX-64-NEXT:    vucomisd %xmm1, %xmm01959; AVX-64-NEXT:    cmovnel %edi, %eax1960; AVX-64-NEXT:    cmovpl %edi, %eax1961; AVX-64-NEXT:    retq1962;1963; X87-LABEL: test_f64_une_q:1964; X87:       # %bb.0:1965; X87-NEXT:    fldl {{[0-9]+}}(%esp)1966; X87-NEXT:    fldl {{[0-9]+}}(%esp)1967; X87-NEXT:    fucompp1968; X87-NEXT:    wait1969; X87-NEXT:    fnstsw %ax1970; X87-NEXT:    # kill: def $ah killed $ah killed $ax1971; X87-NEXT:    sahf1972; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1973; X87-NEXT:    jne .LBB26_31974; X87-NEXT:  # %bb.1:1975; X87-NEXT:    jp .LBB26_31976; X87-NEXT:  # %bb.2:1977; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax1978; X87-NEXT:  .LBB26_3:1979; X87-NEXT:    movl (%eax), %eax1980; X87-NEXT:    retl1981;1982; X87-CMOV-LABEL: test_f64_une_q:1983; X87-CMOV:       # %bb.0:1984; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1985; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)1986; X87-CMOV-NEXT:    fucompi %st(1), %st1987; X87-CMOV-NEXT:    fstp %st(0)1988; X87-CMOV-NEXT:    wait1989; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax1990; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx1991; X87-CMOV-NEXT:    cmovnel %eax, %ecx1992; X87-CMOV-NEXT:    cmovpl %eax, %ecx1993; X87-CMOV-NEXT:    movl (%ecx), %eax1994; X87-CMOV-NEXT:    retl1995  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(1996                                               double %f1, double %f2, metadata !"une",1997                                               metadata !"fpexcept.strict") #01998  %res = select i1 %cond, i32 %a, i32 %b1999  ret i32 %res2000}2001 2002define i32 @test_f64_uno_q(i32 %a, i32 %b, double %f1, double %f2) #0 {2003; SSE-32-LABEL: test_f64_uno_q:2004; SSE-32:       # %bb.0:2005; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero2006; SSE-32-NEXT:    ucomisd {{[0-9]+}}(%esp), %xmm02007; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2008; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2009; SSE-32-NEXT:    cmovpl %eax, %ecx2010; SSE-32-NEXT:    movl (%ecx), %eax2011; SSE-32-NEXT:    retl2012;2013; SSE-64-LABEL: test_f64_uno_q:2014; SSE-64:       # %bb.0:2015; SSE-64-NEXT:    movl %edi, %eax2016; SSE-64-NEXT:    ucomisd %xmm1, %xmm02017; SSE-64-NEXT:    cmovnpl %esi, %eax2018; SSE-64-NEXT:    retq2019;2020; AVX-32-LABEL: test_f64_uno_q:2021; AVX-32:       # %bb.0:2022; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2023; AVX-32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm02024; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2025; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2026; AVX-32-NEXT:    cmovpl %eax, %ecx2027; AVX-32-NEXT:    movl (%ecx), %eax2028; AVX-32-NEXT:    retl2029;2030; AVX-64-LABEL: test_f64_uno_q:2031; AVX-64:       # %bb.0:2032; AVX-64-NEXT:    movl %edi, %eax2033; AVX-64-NEXT:    vucomisd %xmm1, %xmm02034; AVX-64-NEXT:    cmovnpl %esi, %eax2035; AVX-64-NEXT:    retq2036;2037; X87-LABEL: test_f64_uno_q:2038; X87:       # %bb.0:2039; X87-NEXT:    fldl {{[0-9]+}}(%esp)2040; X87-NEXT:    fldl {{[0-9]+}}(%esp)2041; X87-NEXT:    fucompp2042; X87-NEXT:    wait2043; X87-NEXT:    fnstsw %ax2044; X87-NEXT:    # kill: def $ah killed $ah killed $ax2045; X87-NEXT:    sahf2046; X87-NEXT:    jp .LBB27_12047; X87-NEXT:  # %bb.2:2048; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2049; X87-NEXT:    movl (%eax), %eax2050; X87-NEXT:    retl2051; X87-NEXT:  .LBB27_1:2052; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2053; X87-NEXT:    movl (%eax), %eax2054; X87-NEXT:    retl2055;2056; X87-CMOV-LABEL: test_f64_uno_q:2057; X87-CMOV:       # %bb.0:2058; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)2059; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)2060; X87-CMOV-NEXT:    fucompi %st(1), %st2061; X87-CMOV-NEXT:    fstp %st(0)2062; X87-CMOV-NEXT:    wait2063; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2064; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2065; X87-CMOV-NEXT:    cmovpl %eax, %ecx2066; X87-CMOV-NEXT:    movl (%ecx), %eax2067; X87-CMOV-NEXT:    retl2068  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(2069                                               double %f1, double %f2, metadata !"uno",2070                                               metadata !"fpexcept.strict") #02071  %res = select i1 %cond, i32 %a, i32 %b2072  ret i32 %res2073}2074 2075define i32 @test_f32_oeq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2076; SSE-32-LABEL: test_f32_oeq_s:2077; SSE-32:       # %bb.0:2078; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2079; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02080; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2081; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2082; SSE-32-NEXT:    cmovnel %eax, %ecx2083; SSE-32-NEXT:    cmovpl %eax, %ecx2084; SSE-32-NEXT:    movl (%ecx), %eax2085; SSE-32-NEXT:    retl2086;2087; SSE-64-LABEL: test_f32_oeq_s:2088; SSE-64:       # %bb.0:2089; SSE-64-NEXT:    movl %edi, %eax2090; SSE-64-NEXT:    comiss %xmm1, %xmm02091; SSE-64-NEXT:    cmovnel %esi, %eax2092; SSE-64-NEXT:    cmovpl %esi, %eax2093; SSE-64-NEXT:    retq2094;2095; AVX-32-LABEL: test_f32_oeq_s:2096; AVX-32:       # %bb.0:2097; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2098; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02099; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2100; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2101; AVX-32-NEXT:    cmovnel %eax, %ecx2102; AVX-32-NEXT:    cmovpl %eax, %ecx2103; AVX-32-NEXT:    movl (%ecx), %eax2104; AVX-32-NEXT:    retl2105;2106; AVX-64-LABEL: test_f32_oeq_s:2107; AVX-64:       # %bb.0:2108; AVX-64-NEXT:    movl %edi, %eax2109; AVX-64-NEXT:    vcomiss %xmm1, %xmm02110; AVX-64-NEXT:    cmovnel %esi, %eax2111; AVX-64-NEXT:    cmovpl %esi, %eax2112; AVX-64-NEXT:    retq2113;2114; X87-LABEL: test_f32_oeq_s:2115; X87:       # %bb.0:2116; X87-NEXT:    flds {{[0-9]+}}(%esp)2117; X87-NEXT:    flds {{[0-9]+}}(%esp)2118; X87-NEXT:    fcompp2119; X87-NEXT:    wait2120; X87-NEXT:    fnstsw %ax2121; X87-NEXT:    # kill: def $ah killed $ah killed $ax2122; X87-NEXT:    sahf2123; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2124; X87-NEXT:    jne .LBB28_32125; X87-NEXT:  # %bb.1:2126; X87-NEXT:    jp .LBB28_32127; X87-NEXT:  # %bb.2:2128; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2129; X87-NEXT:  .LBB28_3:2130; X87-NEXT:    movl (%eax), %eax2131; X87-NEXT:    retl2132;2133; X87-CMOV-LABEL: test_f32_oeq_s:2134; X87-CMOV:       # %bb.0:2135; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2136; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2137; X87-CMOV-NEXT:    fcompi %st(1), %st2138; X87-CMOV-NEXT:    fstp %st(0)2139; X87-CMOV-NEXT:    wait2140; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2141; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2142; X87-CMOV-NEXT:    cmovnel %eax, %ecx2143; X87-CMOV-NEXT:    cmovpl %eax, %ecx2144; X87-CMOV-NEXT:    movl (%ecx), %eax2145; X87-CMOV-NEXT:    retl2146  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2147                                               float %f1, float %f2, metadata !"oeq",2148                                               metadata !"fpexcept.strict") #02149  %res = select i1 %cond, i32 %a, i32 %b2150  ret i32 %res2151}2152 2153define i32 @test_f32_ogt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2154; SSE-32-LABEL: test_f32_ogt_s:2155; SSE-32:       # %bb.0:2156; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2157; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02158; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2159; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2160; SSE-32-NEXT:    cmoval %eax, %ecx2161; SSE-32-NEXT:    movl (%ecx), %eax2162; SSE-32-NEXT:    retl2163;2164; SSE-64-LABEL: test_f32_ogt_s:2165; SSE-64:       # %bb.0:2166; SSE-64-NEXT:    movl %edi, %eax2167; SSE-64-NEXT:    comiss %xmm1, %xmm02168; SSE-64-NEXT:    cmovbel %esi, %eax2169; SSE-64-NEXT:    retq2170;2171; AVX-32-LABEL: test_f32_ogt_s:2172; AVX-32:       # %bb.0:2173; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2174; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02175; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2176; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2177; AVX-32-NEXT:    cmoval %eax, %ecx2178; AVX-32-NEXT:    movl (%ecx), %eax2179; AVX-32-NEXT:    retl2180;2181; AVX-64-LABEL: test_f32_ogt_s:2182; AVX-64:       # %bb.0:2183; AVX-64-NEXT:    movl %edi, %eax2184; AVX-64-NEXT:    vcomiss %xmm1, %xmm02185; AVX-64-NEXT:    cmovbel %esi, %eax2186; AVX-64-NEXT:    retq2187;2188; X87-LABEL: test_f32_ogt_s:2189; X87:       # %bb.0:2190; X87-NEXT:    flds {{[0-9]+}}(%esp)2191; X87-NEXT:    flds {{[0-9]+}}(%esp)2192; X87-NEXT:    fcompp2193; X87-NEXT:    wait2194; X87-NEXT:    fnstsw %ax2195; X87-NEXT:    # kill: def $ah killed $ah killed $ax2196; X87-NEXT:    sahf2197; X87-NEXT:    ja .LBB29_12198; X87-NEXT:  # %bb.2:2199; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2200; X87-NEXT:    movl (%eax), %eax2201; X87-NEXT:    retl2202; X87-NEXT:  .LBB29_1:2203; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2204; X87-NEXT:    movl (%eax), %eax2205; X87-NEXT:    retl2206;2207; X87-CMOV-LABEL: test_f32_ogt_s:2208; X87-CMOV:       # %bb.0:2209; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2210; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2211; X87-CMOV-NEXT:    fcompi %st(1), %st2212; X87-CMOV-NEXT:    fstp %st(0)2213; X87-CMOV-NEXT:    wait2214; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2215; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2216; X87-CMOV-NEXT:    cmoval %eax, %ecx2217; X87-CMOV-NEXT:    movl (%ecx), %eax2218; X87-CMOV-NEXT:    retl2219  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2220                                               float %f1, float %f2, metadata !"ogt",2221                                               metadata !"fpexcept.strict") #02222  %res = select i1 %cond, i32 %a, i32 %b2223  ret i32 %res2224}2225 2226define i32 @test_f32_oge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2227; SSE-32-LABEL: test_f32_oge_s:2228; SSE-32:       # %bb.0:2229; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2230; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02231; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2232; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2233; SSE-32-NEXT:    cmovael %eax, %ecx2234; SSE-32-NEXT:    movl (%ecx), %eax2235; SSE-32-NEXT:    retl2236;2237; SSE-64-LABEL: test_f32_oge_s:2238; SSE-64:       # %bb.0:2239; SSE-64-NEXT:    movl %edi, %eax2240; SSE-64-NEXT:    comiss %xmm1, %xmm02241; SSE-64-NEXT:    cmovbl %esi, %eax2242; SSE-64-NEXT:    retq2243;2244; AVX-32-LABEL: test_f32_oge_s:2245; AVX-32:       # %bb.0:2246; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2247; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02248; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2249; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2250; AVX-32-NEXT:    cmovael %eax, %ecx2251; AVX-32-NEXT:    movl (%ecx), %eax2252; AVX-32-NEXT:    retl2253;2254; AVX-64-LABEL: test_f32_oge_s:2255; AVX-64:       # %bb.0:2256; AVX-64-NEXT:    movl %edi, %eax2257; AVX-64-NEXT:    vcomiss %xmm1, %xmm02258; AVX-64-NEXT:    cmovbl %esi, %eax2259; AVX-64-NEXT:    retq2260;2261; X87-LABEL: test_f32_oge_s:2262; X87:       # %bb.0:2263; X87-NEXT:    flds {{[0-9]+}}(%esp)2264; X87-NEXT:    flds {{[0-9]+}}(%esp)2265; X87-NEXT:    fcompp2266; X87-NEXT:    wait2267; X87-NEXT:    fnstsw %ax2268; X87-NEXT:    # kill: def $ah killed $ah killed $ax2269; X87-NEXT:    sahf2270; X87-NEXT:    jae .LBB30_12271; X87-NEXT:  # %bb.2:2272; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2273; X87-NEXT:    movl (%eax), %eax2274; X87-NEXT:    retl2275; X87-NEXT:  .LBB30_1:2276; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2277; X87-NEXT:    movl (%eax), %eax2278; X87-NEXT:    retl2279;2280; X87-CMOV-LABEL: test_f32_oge_s:2281; X87-CMOV:       # %bb.0:2282; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2283; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2284; X87-CMOV-NEXT:    fcompi %st(1), %st2285; X87-CMOV-NEXT:    fstp %st(0)2286; X87-CMOV-NEXT:    wait2287; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2288; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2289; X87-CMOV-NEXT:    cmovael %eax, %ecx2290; X87-CMOV-NEXT:    movl (%ecx), %eax2291; X87-CMOV-NEXT:    retl2292  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2293                                               float %f1, float %f2, metadata !"oge",2294                                               metadata !"fpexcept.strict") #02295  %res = select i1 %cond, i32 %a, i32 %b2296  ret i32 %res2297}2298 2299define i32 @test_f32_olt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2300; SSE-32-LABEL: test_f32_olt_s:2301; SSE-32:       # %bb.0:2302; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2303; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02304; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2305; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2306; SSE-32-NEXT:    cmoval %eax, %ecx2307; SSE-32-NEXT:    movl (%ecx), %eax2308; SSE-32-NEXT:    retl2309;2310; SSE-64-LABEL: test_f32_olt_s:2311; SSE-64:       # %bb.0:2312; SSE-64-NEXT:    movl %edi, %eax2313; SSE-64-NEXT:    comiss %xmm0, %xmm12314; SSE-64-NEXT:    cmovbel %esi, %eax2315; SSE-64-NEXT:    retq2316;2317; AVX-32-LABEL: test_f32_olt_s:2318; AVX-32:       # %bb.0:2319; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2320; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02321; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2322; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2323; AVX-32-NEXT:    cmoval %eax, %ecx2324; AVX-32-NEXT:    movl (%ecx), %eax2325; AVX-32-NEXT:    retl2326;2327; AVX-64-LABEL: test_f32_olt_s:2328; AVX-64:       # %bb.0:2329; AVX-64-NEXT:    movl %edi, %eax2330; AVX-64-NEXT:    vcomiss %xmm0, %xmm12331; AVX-64-NEXT:    cmovbel %esi, %eax2332; AVX-64-NEXT:    retq2333;2334; X87-LABEL: test_f32_olt_s:2335; X87:       # %bb.0:2336; X87-NEXT:    flds {{[0-9]+}}(%esp)2337; X87-NEXT:    flds {{[0-9]+}}(%esp)2338; X87-NEXT:    fcompp2339; X87-NEXT:    wait2340; X87-NEXT:    fnstsw %ax2341; X87-NEXT:    # kill: def $ah killed $ah killed $ax2342; X87-NEXT:    sahf2343; X87-NEXT:    ja .LBB31_12344; X87-NEXT:  # %bb.2:2345; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2346; X87-NEXT:    movl (%eax), %eax2347; X87-NEXT:    retl2348; X87-NEXT:  .LBB31_1:2349; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2350; X87-NEXT:    movl (%eax), %eax2351; X87-NEXT:    retl2352;2353; X87-CMOV-LABEL: test_f32_olt_s:2354; X87-CMOV:       # %bb.0:2355; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2356; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2357; X87-CMOV-NEXT:    fcompi %st(1), %st2358; X87-CMOV-NEXT:    fstp %st(0)2359; X87-CMOV-NEXT:    wait2360; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2361; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2362; X87-CMOV-NEXT:    cmoval %eax, %ecx2363; X87-CMOV-NEXT:    movl (%ecx), %eax2364; X87-CMOV-NEXT:    retl2365  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2366                                               float %f1, float %f2, metadata !"olt",2367                                               metadata !"fpexcept.strict") #02368  %res = select i1 %cond, i32 %a, i32 %b2369  ret i32 %res2370}2371 2372define i32 @test_f32_ole_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2373; SSE-32-LABEL: test_f32_ole_s:2374; SSE-32:       # %bb.0:2375; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2376; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02377; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2378; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2379; SSE-32-NEXT:    cmovael %eax, %ecx2380; SSE-32-NEXT:    movl (%ecx), %eax2381; SSE-32-NEXT:    retl2382;2383; SSE-64-LABEL: test_f32_ole_s:2384; SSE-64:       # %bb.0:2385; SSE-64-NEXT:    movl %edi, %eax2386; SSE-64-NEXT:    comiss %xmm0, %xmm12387; SSE-64-NEXT:    cmovbl %esi, %eax2388; SSE-64-NEXT:    retq2389;2390; AVX-32-LABEL: test_f32_ole_s:2391; AVX-32:       # %bb.0:2392; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2393; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02394; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2395; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2396; AVX-32-NEXT:    cmovael %eax, %ecx2397; AVX-32-NEXT:    movl (%ecx), %eax2398; AVX-32-NEXT:    retl2399;2400; AVX-64-LABEL: test_f32_ole_s:2401; AVX-64:       # %bb.0:2402; AVX-64-NEXT:    movl %edi, %eax2403; AVX-64-NEXT:    vcomiss %xmm0, %xmm12404; AVX-64-NEXT:    cmovbl %esi, %eax2405; AVX-64-NEXT:    retq2406;2407; X87-LABEL: test_f32_ole_s:2408; X87:       # %bb.0:2409; X87-NEXT:    flds {{[0-9]+}}(%esp)2410; X87-NEXT:    flds {{[0-9]+}}(%esp)2411; X87-NEXT:    fcompp2412; X87-NEXT:    wait2413; X87-NEXT:    fnstsw %ax2414; X87-NEXT:    # kill: def $ah killed $ah killed $ax2415; X87-NEXT:    sahf2416; X87-NEXT:    jae .LBB32_12417; X87-NEXT:  # %bb.2:2418; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2419; X87-NEXT:    movl (%eax), %eax2420; X87-NEXT:    retl2421; X87-NEXT:  .LBB32_1:2422; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2423; X87-NEXT:    movl (%eax), %eax2424; X87-NEXT:    retl2425;2426; X87-CMOV-LABEL: test_f32_ole_s:2427; X87-CMOV:       # %bb.0:2428; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2429; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2430; X87-CMOV-NEXT:    fcompi %st(1), %st2431; X87-CMOV-NEXT:    fstp %st(0)2432; X87-CMOV-NEXT:    wait2433; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2434; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2435; X87-CMOV-NEXT:    cmovael %eax, %ecx2436; X87-CMOV-NEXT:    movl (%ecx), %eax2437; X87-CMOV-NEXT:    retl2438  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2439                                               float %f1, float %f2, metadata !"ole",2440                                               metadata !"fpexcept.strict") #02441  %res = select i1 %cond, i32 %a, i32 %b2442  ret i32 %res2443}2444 2445define i32 @test_f32_one_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2446; SSE-32-LABEL: test_f32_one_s:2447; SSE-32:       # %bb.0:2448; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2449; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02450; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2451; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2452; SSE-32-NEXT:    cmovnel %eax, %ecx2453; SSE-32-NEXT:    movl (%ecx), %eax2454; SSE-32-NEXT:    retl2455;2456; SSE-64-LABEL: test_f32_one_s:2457; SSE-64:       # %bb.0:2458; SSE-64-NEXT:    movl %edi, %eax2459; SSE-64-NEXT:    comiss %xmm1, %xmm02460; SSE-64-NEXT:    cmovel %esi, %eax2461; SSE-64-NEXT:    retq2462;2463; AVX-32-LABEL: test_f32_one_s:2464; AVX-32:       # %bb.0:2465; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2466; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02467; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2468; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2469; AVX-32-NEXT:    cmovnel %eax, %ecx2470; AVX-32-NEXT:    movl (%ecx), %eax2471; AVX-32-NEXT:    retl2472;2473; AVX-64-LABEL: test_f32_one_s:2474; AVX-64:       # %bb.0:2475; AVX-64-NEXT:    movl %edi, %eax2476; AVX-64-NEXT:    vcomiss %xmm1, %xmm02477; AVX-64-NEXT:    cmovel %esi, %eax2478; AVX-64-NEXT:    retq2479;2480; X87-LABEL: test_f32_one_s:2481; X87:       # %bb.0:2482; X87-NEXT:    flds {{[0-9]+}}(%esp)2483; X87-NEXT:    flds {{[0-9]+}}(%esp)2484; X87-NEXT:    fcompp2485; X87-NEXT:    wait2486; X87-NEXT:    fnstsw %ax2487; X87-NEXT:    # kill: def $ah killed $ah killed $ax2488; X87-NEXT:    sahf2489; X87-NEXT:    jne .LBB33_12490; X87-NEXT:  # %bb.2:2491; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2492; X87-NEXT:    movl (%eax), %eax2493; X87-NEXT:    retl2494; X87-NEXT:  .LBB33_1:2495; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2496; X87-NEXT:    movl (%eax), %eax2497; X87-NEXT:    retl2498;2499; X87-CMOV-LABEL: test_f32_one_s:2500; X87-CMOV:       # %bb.0:2501; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2502; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2503; X87-CMOV-NEXT:    fcompi %st(1), %st2504; X87-CMOV-NEXT:    fstp %st(0)2505; X87-CMOV-NEXT:    wait2506; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2507; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2508; X87-CMOV-NEXT:    cmovnel %eax, %ecx2509; X87-CMOV-NEXT:    movl (%ecx), %eax2510; X87-CMOV-NEXT:    retl2511  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2512                                               float %f1, float %f2, metadata !"one",2513                                               metadata !"fpexcept.strict") #02514  %res = select i1 %cond, i32 %a, i32 %b2515  ret i32 %res2516}2517 2518define i32 @test_f32_ord_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2519; SSE-32-LABEL: test_f32_ord_s:2520; SSE-32:       # %bb.0:2521; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2522; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02523; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2524; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2525; SSE-32-NEXT:    cmovnpl %eax, %ecx2526; SSE-32-NEXT:    movl (%ecx), %eax2527; SSE-32-NEXT:    retl2528;2529; SSE-64-LABEL: test_f32_ord_s:2530; SSE-64:       # %bb.0:2531; SSE-64-NEXT:    movl %edi, %eax2532; SSE-64-NEXT:    comiss %xmm1, %xmm02533; SSE-64-NEXT:    cmovpl %esi, %eax2534; SSE-64-NEXT:    retq2535;2536; AVX-32-LABEL: test_f32_ord_s:2537; AVX-32:       # %bb.0:2538; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2539; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02540; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2541; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2542; AVX-32-NEXT:    cmovnpl %eax, %ecx2543; AVX-32-NEXT:    movl (%ecx), %eax2544; AVX-32-NEXT:    retl2545;2546; AVX-64-LABEL: test_f32_ord_s:2547; AVX-64:       # %bb.0:2548; AVX-64-NEXT:    movl %edi, %eax2549; AVX-64-NEXT:    vcomiss %xmm1, %xmm02550; AVX-64-NEXT:    cmovpl %esi, %eax2551; AVX-64-NEXT:    retq2552;2553; X87-LABEL: test_f32_ord_s:2554; X87:       # %bb.0:2555; X87-NEXT:    flds {{[0-9]+}}(%esp)2556; X87-NEXT:    flds {{[0-9]+}}(%esp)2557; X87-NEXT:    fcompp2558; X87-NEXT:    wait2559; X87-NEXT:    fnstsw %ax2560; X87-NEXT:    # kill: def $ah killed $ah killed $ax2561; X87-NEXT:    sahf2562; X87-NEXT:    jnp .LBB34_12563; X87-NEXT:  # %bb.2:2564; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2565; X87-NEXT:    movl (%eax), %eax2566; X87-NEXT:    retl2567; X87-NEXT:  .LBB34_1:2568; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2569; X87-NEXT:    movl (%eax), %eax2570; X87-NEXT:    retl2571;2572; X87-CMOV-LABEL: test_f32_ord_s:2573; X87-CMOV:       # %bb.0:2574; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2575; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2576; X87-CMOV-NEXT:    fcompi %st(1), %st2577; X87-CMOV-NEXT:    fstp %st(0)2578; X87-CMOV-NEXT:    wait2579; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2580; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2581; X87-CMOV-NEXT:    cmovnpl %eax, %ecx2582; X87-CMOV-NEXT:    movl (%ecx), %eax2583; X87-CMOV-NEXT:    retl2584  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2585                                               float %f1, float %f2, metadata !"ord",2586                                               metadata !"fpexcept.strict") #02587  %res = select i1 %cond, i32 %a, i32 %b2588  ret i32 %res2589}2590 2591define i32 @test_f32_ueq_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2592; SSE-32-LABEL: test_f32_ueq_s:2593; SSE-32:       # %bb.0:2594; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2595; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02596; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2597; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2598; SSE-32-NEXT:    cmovel %eax, %ecx2599; SSE-32-NEXT:    movl (%ecx), %eax2600; SSE-32-NEXT:    retl2601;2602; SSE-64-LABEL: test_f32_ueq_s:2603; SSE-64:       # %bb.0:2604; SSE-64-NEXT:    movl %edi, %eax2605; SSE-64-NEXT:    comiss %xmm1, %xmm02606; SSE-64-NEXT:    cmovnel %esi, %eax2607; SSE-64-NEXT:    retq2608;2609; AVX-32-LABEL: test_f32_ueq_s:2610; AVX-32:       # %bb.0:2611; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2612; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02613; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2614; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2615; AVX-32-NEXT:    cmovel %eax, %ecx2616; AVX-32-NEXT:    movl (%ecx), %eax2617; AVX-32-NEXT:    retl2618;2619; AVX-64-LABEL: test_f32_ueq_s:2620; AVX-64:       # %bb.0:2621; AVX-64-NEXT:    movl %edi, %eax2622; AVX-64-NEXT:    vcomiss %xmm1, %xmm02623; AVX-64-NEXT:    cmovnel %esi, %eax2624; AVX-64-NEXT:    retq2625;2626; X87-LABEL: test_f32_ueq_s:2627; X87:       # %bb.0:2628; X87-NEXT:    flds {{[0-9]+}}(%esp)2629; X87-NEXT:    flds {{[0-9]+}}(%esp)2630; X87-NEXT:    fcompp2631; X87-NEXT:    wait2632; X87-NEXT:    fnstsw %ax2633; X87-NEXT:    # kill: def $ah killed $ah killed $ax2634; X87-NEXT:    sahf2635; X87-NEXT:    je .LBB35_12636; X87-NEXT:  # %bb.2:2637; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2638; X87-NEXT:    movl (%eax), %eax2639; X87-NEXT:    retl2640; X87-NEXT:  .LBB35_1:2641; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2642; X87-NEXT:    movl (%eax), %eax2643; X87-NEXT:    retl2644;2645; X87-CMOV-LABEL: test_f32_ueq_s:2646; X87-CMOV:       # %bb.0:2647; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2648; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2649; X87-CMOV-NEXT:    fcompi %st(1), %st2650; X87-CMOV-NEXT:    fstp %st(0)2651; X87-CMOV-NEXT:    wait2652; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2653; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2654; X87-CMOV-NEXT:    cmovel %eax, %ecx2655; X87-CMOV-NEXT:    movl (%ecx), %eax2656; X87-CMOV-NEXT:    retl2657  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2658                                               float %f1, float %f2, metadata !"ueq",2659                                               metadata !"fpexcept.strict") #02660  %res = select i1 %cond, i32 %a, i32 %b2661  ret i32 %res2662}2663 2664define i32 @test_f32_ugt_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2665; SSE-32-LABEL: test_f32_ugt_s:2666; SSE-32:       # %bb.0:2667; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2668; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02669; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2670; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2671; SSE-32-NEXT:    cmovbl %eax, %ecx2672; SSE-32-NEXT:    movl (%ecx), %eax2673; SSE-32-NEXT:    retl2674;2675; SSE-64-LABEL: test_f32_ugt_s:2676; SSE-64:       # %bb.0:2677; SSE-64-NEXT:    movl %edi, %eax2678; SSE-64-NEXT:    comiss %xmm0, %xmm12679; SSE-64-NEXT:    cmovael %esi, %eax2680; SSE-64-NEXT:    retq2681;2682; AVX-32-LABEL: test_f32_ugt_s:2683; AVX-32:       # %bb.0:2684; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2685; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02686; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2687; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2688; AVX-32-NEXT:    cmovbl %eax, %ecx2689; AVX-32-NEXT:    movl (%ecx), %eax2690; AVX-32-NEXT:    retl2691;2692; AVX-64-LABEL: test_f32_ugt_s:2693; AVX-64:       # %bb.0:2694; AVX-64-NEXT:    movl %edi, %eax2695; AVX-64-NEXT:    vcomiss %xmm0, %xmm12696; AVX-64-NEXT:    cmovael %esi, %eax2697; AVX-64-NEXT:    retq2698;2699; X87-LABEL: test_f32_ugt_s:2700; X87:       # %bb.0:2701; X87-NEXT:    flds {{[0-9]+}}(%esp)2702; X87-NEXT:    flds {{[0-9]+}}(%esp)2703; X87-NEXT:    fcompp2704; X87-NEXT:    wait2705; X87-NEXT:    fnstsw %ax2706; X87-NEXT:    # kill: def $ah killed $ah killed $ax2707; X87-NEXT:    sahf2708; X87-NEXT:    jb .LBB36_12709; X87-NEXT:  # %bb.2:2710; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2711; X87-NEXT:    movl (%eax), %eax2712; X87-NEXT:    retl2713; X87-NEXT:  .LBB36_1:2714; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2715; X87-NEXT:    movl (%eax), %eax2716; X87-NEXT:    retl2717;2718; X87-CMOV-LABEL: test_f32_ugt_s:2719; X87-CMOV:       # %bb.0:2720; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2721; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2722; X87-CMOV-NEXT:    fcompi %st(1), %st2723; X87-CMOV-NEXT:    fstp %st(0)2724; X87-CMOV-NEXT:    wait2725; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2726; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2727; X87-CMOV-NEXT:    cmovbl %eax, %ecx2728; X87-CMOV-NEXT:    movl (%ecx), %eax2729; X87-CMOV-NEXT:    retl2730  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2731                                               float %f1, float %f2, metadata !"ugt",2732                                               metadata !"fpexcept.strict") #02733  %res = select i1 %cond, i32 %a, i32 %b2734  ret i32 %res2735}2736 2737define i32 @test_f32_uge_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2738; SSE-32-LABEL: test_f32_uge_s:2739; SSE-32:       # %bb.0:2740; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2741; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02742; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2743; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2744; SSE-32-NEXT:    cmovbel %eax, %ecx2745; SSE-32-NEXT:    movl (%ecx), %eax2746; SSE-32-NEXT:    retl2747;2748; SSE-64-LABEL: test_f32_uge_s:2749; SSE-64:       # %bb.0:2750; SSE-64-NEXT:    movl %edi, %eax2751; SSE-64-NEXT:    comiss %xmm0, %xmm12752; SSE-64-NEXT:    cmoval %esi, %eax2753; SSE-64-NEXT:    retq2754;2755; AVX-32-LABEL: test_f32_uge_s:2756; AVX-32:       # %bb.0:2757; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2758; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02759; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2760; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2761; AVX-32-NEXT:    cmovbel %eax, %ecx2762; AVX-32-NEXT:    movl (%ecx), %eax2763; AVX-32-NEXT:    retl2764;2765; AVX-64-LABEL: test_f32_uge_s:2766; AVX-64:       # %bb.0:2767; AVX-64-NEXT:    movl %edi, %eax2768; AVX-64-NEXT:    vcomiss %xmm0, %xmm12769; AVX-64-NEXT:    cmoval %esi, %eax2770; AVX-64-NEXT:    retq2771;2772; X87-LABEL: test_f32_uge_s:2773; X87:       # %bb.0:2774; X87-NEXT:    flds {{[0-9]+}}(%esp)2775; X87-NEXT:    flds {{[0-9]+}}(%esp)2776; X87-NEXT:    fcompp2777; X87-NEXT:    wait2778; X87-NEXT:    fnstsw %ax2779; X87-NEXT:    # kill: def $ah killed $ah killed $ax2780; X87-NEXT:    sahf2781; X87-NEXT:    jbe .LBB37_12782; X87-NEXT:  # %bb.2:2783; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2784; X87-NEXT:    movl (%eax), %eax2785; X87-NEXT:    retl2786; X87-NEXT:  .LBB37_1:2787; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2788; X87-NEXT:    movl (%eax), %eax2789; X87-NEXT:    retl2790;2791; X87-CMOV-LABEL: test_f32_uge_s:2792; X87-CMOV:       # %bb.0:2793; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2794; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2795; X87-CMOV-NEXT:    fcompi %st(1), %st2796; X87-CMOV-NEXT:    fstp %st(0)2797; X87-CMOV-NEXT:    wait2798; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2799; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2800; X87-CMOV-NEXT:    cmovbel %eax, %ecx2801; X87-CMOV-NEXT:    movl (%ecx), %eax2802; X87-CMOV-NEXT:    retl2803  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2804                                               float %f1, float %f2, metadata !"uge",2805                                               metadata !"fpexcept.strict") #02806  %res = select i1 %cond, i32 %a, i32 %b2807  ret i32 %res2808}2809 2810define i32 @test_f32_ult_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2811; SSE-32-LABEL: test_f32_ult_s:2812; SSE-32:       # %bb.0:2813; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2814; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02815; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2816; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2817; SSE-32-NEXT:    cmovbl %eax, %ecx2818; SSE-32-NEXT:    movl (%ecx), %eax2819; SSE-32-NEXT:    retl2820;2821; SSE-64-LABEL: test_f32_ult_s:2822; SSE-64:       # %bb.0:2823; SSE-64-NEXT:    movl %edi, %eax2824; SSE-64-NEXT:    comiss %xmm1, %xmm02825; SSE-64-NEXT:    cmovael %esi, %eax2826; SSE-64-NEXT:    retq2827;2828; AVX-32-LABEL: test_f32_ult_s:2829; AVX-32:       # %bb.0:2830; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2831; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02832; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2833; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2834; AVX-32-NEXT:    cmovbl %eax, %ecx2835; AVX-32-NEXT:    movl (%ecx), %eax2836; AVX-32-NEXT:    retl2837;2838; AVX-64-LABEL: test_f32_ult_s:2839; AVX-64:       # %bb.0:2840; AVX-64-NEXT:    movl %edi, %eax2841; AVX-64-NEXT:    vcomiss %xmm1, %xmm02842; AVX-64-NEXT:    cmovael %esi, %eax2843; AVX-64-NEXT:    retq2844;2845; X87-LABEL: test_f32_ult_s:2846; X87:       # %bb.0:2847; X87-NEXT:    flds {{[0-9]+}}(%esp)2848; X87-NEXT:    flds {{[0-9]+}}(%esp)2849; X87-NEXT:    fcompp2850; X87-NEXT:    wait2851; X87-NEXT:    fnstsw %ax2852; X87-NEXT:    # kill: def $ah killed $ah killed $ax2853; X87-NEXT:    sahf2854; X87-NEXT:    jb .LBB38_12855; X87-NEXT:  # %bb.2:2856; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2857; X87-NEXT:    movl (%eax), %eax2858; X87-NEXT:    retl2859; X87-NEXT:  .LBB38_1:2860; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2861; X87-NEXT:    movl (%eax), %eax2862; X87-NEXT:    retl2863;2864; X87-CMOV-LABEL: test_f32_ult_s:2865; X87-CMOV:       # %bb.0:2866; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2867; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2868; X87-CMOV-NEXT:    fcompi %st(1), %st2869; X87-CMOV-NEXT:    fstp %st(0)2870; X87-CMOV-NEXT:    wait2871; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2872; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2873; X87-CMOV-NEXT:    cmovbl %eax, %ecx2874; X87-CMOV-NEXT:    movl (%ecx), %eax2875; X87-CMOV-NEXT:    retl2876  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2877                                               float %f1, float %f2, metadata !"ult",2878                                               metadata !"fpexcept.strict") #02879  %res = select i1 %cond, i32 %a, i32 %b2880  ret i32 %res2881}2882 2883define i32 @test_f32_ule_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2884; SSE-32-LABEL: test_f32_ule_s:2885; SSE-32:       # %bb.0:2886; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2887; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02888; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2889; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2890; SSE-32-NEXT:    cmovbel %eax, %ecx2891; SSE-32-NEXT:    movl (%ecx), %eax2892; SSE-32-NEXT:    retl2893;2894; SSE-64-LABEL: test_f32_ule_s:2895; SSE-64:       # %bb.0:2896; SSE-64-NEXT:    movl %edi, %eax2897; SSE-64-NEXT:    comiss %xmm1, %xmm02898; SSE-64-NEXT:    cmoval %esi, %eax2899; SSE-64-NEXT:    retq2900;2901; AVX-32-LABEL: test_f32_ule_s:2902; AVX-32:       # %bb.0:2903; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2904; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02905; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2906; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2907; AVX-32-NEXT:    cmovbel %eax, %ecx2908; AVX-32-NEXT:    movl (%ecx), %eax2909; AVX-32-NEXT:    retl2910;2911; AVX-64-LABEL: test_f32_ule_s:2912; AVX-64:       # %bb.0:2913; AVX-64-NEXT:    movl %edi, %eax2914; AVX-64-NEXT:    vcomiss %xmm1, %xmm02915; AVX-64-NEXT:    cmoval %esi, %eax2916; AVX-64-NEXT:    retq2917;2918; X87-LABEL: test_f32_ule_s:2919; X87:       # %bb.0:2920; X87-NEXT:    flds {{[0-9]+}}(%esp)2921; X87-NEXT:    flds {{[0-9]+}}(%esp)2922; X87-NEXT:    fcompp2923; X87-NEXT:    wait2924; X87-NEXT:    fnstsw %ax2925; X87-NEXT:    # kill: def $ah killed $ah killed $ax2926; X87-NEXT:    sahf2927; X87-NEXT:    jbe .LBB39_12928; X87-NEXT:  # %bb.2:2929; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2930; X87-NEXT:    movl (%eax), %eax2931; X87-NEXT:    retl2932; X87-NEXT:  .LBB39_1:2933; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax2934; X87-NEXT:    movl (%eax), %eax2935; X87-NEXT:    retl2936;2937; X87-CMOV-LABEL: test_f32_ule_s:2938; X87-CMOV:       # %bb.0:2939; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2940; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)2941; X87-CMOV-NEXT:    fcompi %st(1), %st2942; X87-CMOV-NEXT:    fstp %st(0)2943; X87-CMOV-NEXT:    wait2944; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax2945; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx2946; X87-CMOV-NEXT:    cmovbel %eax, %ecx2947; X87-CMOV-NEXT:    movl (%ecx), %eax2948; X87-CMOV-NEXT:    retl2949  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(2950                                               float %f1, float %f2, metadata !"ule",2951                                               metadata !"fpexcept.strict") #02952  %res = select i1 %cond, i32 %a, i32 %b2953  ret i32 %res2954}2955 2956define i32 @test_f32_une_s(i32 %a, i32 %b, float %f1, float %f2) #0 {2957; SSE-32-LABEL: test_f32_une_s:2958; SSE-32:       # %bb.0:2959; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2960; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm02961; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2962; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2963; SSE-32-NEXT:    cmovnel %eax, %ecx2964; SSE-32-NEXT:    cmovpl %eax, %ecx2965; SSE-32-NEXT:    movl (%ecx), %eax2966; SSE-32-NEXT:    retl2967;2968; SSE-64-LABEL: test_f32_une_s:2969; SSE-64:       # %bb.0:2970; SSE-64-NEXT:    movl %esi, %eax2971; SSE-64-NEXT:    comiss %xmm1, %xmm02972; SSE-64-NEXT:    cmovnel %edi, %eax2973; SSE-64-NEXT:    cmovpl %edi, %eax2974; SSE-64-NEXT:    retq2975;2976; AVX-32-LABEL: test_f32_une_s:2977; AVX-32:       # %bb.0:2978; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero2979; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm02980; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax2981; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx2982; AVX-32-NEXT:    cmovnel %eax, %ecx2983; AVX-32-NEXT:    cmovpl %eax, %ecx2984; AVX-32-NEXT:    movl (%ecx), %eax2985; AVX-32-NEXT:    retl2986;2987; AVX-64-LABEL: test_f32_une_s:2988; AVX-64:       # %bb.0:2989; AVX-64-NEXT:    movl %esi, %eax2990; AVX-64-NEXT:    vcomiss %xmm1, %xmm02991; AVX-64-NEXT:    cmovnel %edi, %eax2992; AVX-64-NEXT:    cmovpl %edi, %eax2993; AVX-64-NEXT:    retq2994;2995; X87-LABEL: test_f32_une_s:2996; X87:       # %bb.0:2997; X87-NEXT:    flds {{[0-9]+}}(%esp)2998; X87-NEXT:    flds {{[0-9]+}}(%esp)2999; X87-NEXT:    fcompp3000; X87-NEXT:    wait3001; X87-NEXT:    fnstsw %ax3002; X87-NEXT:    # kill: def $ah killed $ah killed $ax3003; X87-NEXT:    sahf3004; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3005; X87-NEXT:    jne .LBB40_33006; X87-NEXT:  # %bb.1:3007; X87-NEXT:    jp .LBB40_33008; X87-NEXT:  # %bb.2:3009; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3010; X87-NEXT:  .LBB40_3:3011; X87-NEXT:    movl (%eax), %eax3012; X87-NEXT:    retl3013;3014; X87-CMOV-LABEL: test_f32_une_s:3015; X87-CMOV:       # %bb.0:3016; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)3017; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)3018; X87-CMOV-NEXT:    fcompi %st(1), %st3019; X87-CMOV-NEXT:    fstp %st(0)3020; X87-CMOV-NEXT:    wait3021; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3022; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3023; X87-CMOV-NEXT:    cmovnel %eax, %ecx3024; X87-CMOV-NEXT:    cmovpl %eax, %ecx3025; X87-CMOV-NEXT:    movl (%ecx), %eax3026; X87-CMOV-NEXT:    retl3027  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(3028                                               float %f1, float %f2, metadata !"une",3029                                               metadata !"fpexcept.strict") #03030  %res = select i1 %cond, i32 %a, i32 %b3031  ret i32 %res3032}3033 3034define i32 @test_f32_uno_s(i32 %a, i32 %b, float %f1, float %f2) #0 {3035; SSE-32-LABEL: test_f32_uno_s:3036; SSE-32:       # %bb.0:3037; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero3038; SSE-32-NEXT:    comiss {{[0-9]+}}(%esp), %xmm03039; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3040; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3041; SSE-32-NEXT:    cmovpl %eax, %ecx3042; SSE-32-NEXT:    movl (%ecx), %eax3043; SSE-32-NEXT:    retl3044;3045; SSE-64-LABEL: test_f32_uno_s:3046; SSE-64:       # %bb.0:3047; SSE-64-NEXT:    movl %edi, %eax3048; SSE-64-NEXT:    comiss %xmm1, %xmm03049; SSE-64-NEXT:    cmovnpl %esi, %eax3050; SSE-64-NEXT:    retq3051;3052; AVX-32-LABEL: test_f32_uno_s:3053; AVX-32:       # %bb.0:3054; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero3055; AVX-32-NEXT:    vcomiss {{[0-9]+}}(%esp), %xmm03056; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3057; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3058; AVX-32-NEXT:    cmovpl %eax, %ecx3059; AVX-32-NEXT:    movl (%ecx), %eax3060; AVX-32-NEXT:    retl3061;3062; AVX-64-LABEL: test_f32_uno_s:3063; AVX-64:       # %bb.0:3064; AVX-64-NEXT:    movl %edi, %eax3065; AVX-64-NEXT:    vcomiss %xmm1, %xmm03066; AVX-64-NEXT:    cmovnpl %esi, %eax3067; AVX-64-NEXT:    retq3068;3069; X87-LABEL: test_f32_uno_s:3070; X87:       # %bb.0:3071; X87-NEXT:    flds {{[0-9]+}}(%esp)3072; X87-NEXT:    flds {{[0-9]+}}(%esp)3073; X87-NEXT:    fcompp3074; X87-NEXT:    wait3075; X87-NEXT:    fnstsw %ax3076; X87-NEXT:    # kill: def $ah killed $ah killed $ax3077; X87-NEXT:    sahf3078; X87-NEXT:    jp .LBB41_13079; X87-NEXT:  # %bb.2:3080; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3081; X87-NEXT:    movl (%eax), %eax3082; X87-NEXT:    retl3083; X87-NEXT:  .LBB41_1:3084; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3085; X87-NEXT:    movl (%eax), %eax3086; X87-NEXT:    retl3087;3088; X87-CMOV-LABEL: test_f32_uno_s:3089; X87-CMOV:       # %bb.0:3090; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)3091; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)3092; X87-CMOV-NEXT:    fcompi %st(1), %st3093; X87-CMOV-NEXT:    fstp %st(0)3094; X87-CMOV-NEXT:    wait3095; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3096; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3097; X87-CMOV-NEXT:    cmovpl %eax, %ecx3098; X87-CMOV-NEXT:    movl (%ecx), %eax3099; X87-CMOV-NEXT:    retl3100  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(3101                                               float %f1, float %f2, metadata !"uno",3102                                               metadata !"fpexcept.strict") #03103  %res = select i1 %cond, i32 %a, i32 %b3104  ret i32 %res3105}3106 3107define i32 @test_f64_oeq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3108; SSE-32-LABEL: test_f64_oeq_s:3109; SSE-32:       # %bb.0:3110; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3111; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03112; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3113; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3114; SSE-32-NEXT:    cmovnel %eax, %ecx3115; SSE-32-NEXT:    cmovpl %eax, %ecx3116; SSE-32-NEXT:    movl (%ecx), %eax3117; SSE-32-NEXT:    retl3118;3119; SSE-64-LABEL: test_f64_oeq_s:3120; SSE-64:       # %bb.0:3121; SSE-64-NEXT:    movl %edi, %eax3122; SSE-64-NEXT:    comisd %xmm1, %xmm03123; SSE-64-NEXT:    cmovnel %esi, %eax3124; SSE-64-NEXT:    cmovpl %esi, %eax3125; SSE-64-NEXT:    retq3126;3127; AVX-32-LABEL: test_f64_oeq_s:3128; AVX-32:       # %bb.0:3129; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3130; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03131; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3132; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3133; AVX-32-NEXT:    cmovnel %eax, %ecx3134; AVX-32-NEXT:    cmovpl %eax, %ecx3135; AVX-32-NEXT:    movl (%ecx), %eax3136; AVX-32-NEXT:    retl3137;3138; AVX-64-LABEL: test_f64_oeq_s:3139; AVX-64:       # %bb.0:3140; AVX-64-NEXT:    movl %edi, %eax3141; AVX-64-NEXT:    vcomisd %xmm1, %xmm03142; AVX-64-NEXT:    cmovnel %esi, %eax3143; AVX-64-NEXT:    cmovpl %esi, %eax3144; AVX-64-NEXT:    retq3145;3146; X87-LABEL: test_f64_oeq_s:3147; X87:       # %bb.0:3148; X87-NEXT:    fldl {{[0-9]+}}(%esp)3149; X87-NEXT:    fldl {{[0-9]+}}(%esp)3150; X87-NEXT:    fcompp3151; X87-NEXT:    wait3152; X87-NEXT:    fnstsw %ax3153; X87-NEXT:    # kill: def $ah killed $ah killed $ax3154; X87-NEXT:    sahf3155; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3156; X87-NEXT:    jne .LBB42_33157; X87-NEXT:  # %bb.1:3158; X87-NEXT:    jp .LBB42_33159; X87-NEXT:  # %bb.2:3160; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3161; X87-NEXT:  .LBB42_3:3162; X87-NEXT:    movl (%eax), %eax3163; X87-NEXT:    retl3164;3165; X87-CMOV-LABEL: test_f64_oeq_s:3166; X87-CMOV:       # %bb.0:3167; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3168; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3169; X87-CMOV-NEXT:    fcompi %st(1), %st3170; X87-CMOV-NEXT:    fstp %st(0)3171; X87-CMOV-NEXT:    wait3172; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3173; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3174; X87-CMOV-NEXT:    cmovnel %eax, %ecx3175; X87-CMOV-NEXT:    cmovpl %eax, %ecx3176; X87-CMOV-NEXT:    movl (%ecx), %eax3177; X87-CMOV-NEXT:    retl3178  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3179                                               double %f1, double %f2, metadata !"oeq",3180                                               metadata !"fpexcept.strict") #03181  %res = select i1 %cond, i32 %a, i32 %b3182  ret i32 %res3183}3184 3185define i32 @test_f64_ogt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3186; SSE-32-LABEL: test_f64_ogt_s:3187; SSE-32:       # %bb.0:3188; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3189; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03190; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3191; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3192; SSE-32-NEXT:    cmoval %eax, %ecx3193; SSE-32-NEXT:    movl (%ecx), %eax3194; SSE-32-NEXT:    retl3195;3196; SSE-64-LABEL: test_f64_ogt_s:3197; SSE-64:       # %bb.0:3198; SSE-64-NEXT:    movl %edi, %eax3199; SSE-64-NEXT:    comisd %xmm1, %xmm03200; SSE-64-NEXT:    cmovbel %esi, %eax3201; SSE-64-NEXT:    retq3202;3203; AVX-32-LABEL: test_f64_ogt_s:3204; AVX-32:       # %bb.0:3205; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3206; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03207; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3208; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3209; AVX-32-NEXT:    cmoval %eax, %ecx3210; AVX-32-NEXT:    movl (%ecx), %eax3211; AVX-32-NEXT:    retl3212;3213; AVX-64-LABEL: test_f64_ogt_s:3214; AVX-64:       # %bb.0:3215; AVX-64-NEXT:    movl %edi, %eax3216; AVX-64-NEXT:    vcomisd %xmm1, %xmm03217; AVX-64-NEXT:    cmovbel %esi, %eax3218; AVX-64-NEXT:    retq3219;3220; X87-LABEL: test_f64_ogt_s:3221; X87:       # %bb.0:3222; X87-NEXT:    fldl {{[0-9]+}}(%esp)3223; X87-NEXT:    fldl {{[0-9]+}}(%esp)3224; X87-NEXT:    fcompp3225; X87-NEXT:    wait3226; X87-NEXT:    fnstsw %ax3227; X87-NEXT:    # kill: def $ah killed $ah killed $ax3228; X87-NEXT:    sahf3229; X87-NEXT:    ja .LBB43_13230; X87-NEXT:  # %bb.2:3231; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3232; X87-NEXT:    movl (%eax), %eax3233; X87-NEXT:    retl3234; X87-NEXT:  .LBB43_1:3235; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3236; X87-NEXT:    movl (%eax), %eax3237; X87-NEXT:    retl3238;3239; X87-CMOV-LABEL: test_f64_ogt_s:3240; X87-CMOV:       # %bb.0:3241; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3242; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3243; X87-CMOV-NEXT:    fcompi %st(1), %st3244; X87-CMOV-NEXT:    fstp %st(0)3245; X87-CMOV-NEXT:    wait3246; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3247; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3248; X87-CMOV-NEXT:    cmoval %eax, %ecx3249; X87-CMOV-NEXT:    movl (%ecx), %eax3250; X87-CMOV-NEXT:    retl3251  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3252                                               double %f1, double %f2, metadata !"ogt",3253                                               metadata !"fpexcept.strict") #03254  %res = select i1 %cond, i32 %a, i32 %b3255  ret i32 %res3256}3257 3258define i32 @test_f64_oge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3259; SSE-32-LABEL: test_f64_oge_s:3260; SSE-32:       # %bb.0:3261; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3262; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03263; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3264; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3265; SSE-32-NEXT:    cmovael %eax, %ecx3266; SSE-32-NEXT:    movl (%ecx), %eax3267; SSE-32-NEXT:    retl3268;3269; SSE-64-LABEL: test_f64_oge_s:3270; SSE-64:       # %bb.0:3271; SSE-64-NEXT:    movl %edi, %eax3272; SSE-64-NEXT:    comisd %xmm1, %xmm03273; SSE-64-NEXT:    cmovbl %esi, %eax3274; SSE-64-NEXT:    retq3275;3276; AVX-32-LABEL: test_f64_oge_s:3277; AVX-32:       # %bb.0:3278; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3279; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03280; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3281; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3282; AVX-32-NEXT:    cmovael %eax, %ecx3283; AVX-32-NEXT:    movl (%ecx), %eax3284; AVX-32-NEXT:    retl3285;3286; AVX-64-LABEL: test_f64_oge_s:3287; AVX-64:       # %bb.0:3288; AVX-64-NEXT:    movl %edi, %eax3289; AVX-64-NEXT:    vcomisd %xmm1, %xmm03290; AVX-64-NEXT:    cmovbl %esi, %eax3291; AVX-64-NEXT:    retq3292;3293; X87-LABEL: test_f64_oge_s:3294; X87:       # %bb.0:3295; X87-NEXT:    fldl {{[0-9]+}}(%esp)3296; X87-NEXT:    fldl {{[0-9]+}}(%esp)3297; X87-NEXT:    fcompp3298; X87-NEXT:    wait3299; X87-NEXT:    fnstsw %ax3300; X87-NEXT:    # kill: def $ah killed $ah killed $ax3301; X87-NEXT:    sahf3302; X87-NEXT:    jae .LBB44_13303; X87-NEXT:  # %bb.2:3304; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3305; X87-NEXT:    movl (%eax), %eax3306; X87-NEXT:    retl3307; X87-NEXT:  .LBB44_1:3308; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3309; X87-NEXT:    movl (%eax), %eax3310; X87-NEXT:    retl3311;3312; X87-CMOV-LABEL: test_f64_oge_s:3313; X87-CMOV:       # %bb.0:3314; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3315; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3316; X87-CMOV-NEXT:    fcompi %st(1), %st3317; X87-CMOV-NEXT:    fstp %st(0)3318; X87-CMOV-NEXT:    wait3319; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3320; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3321; X87-CMOV-NEXT:    cmovael %eax, %ecx3322; X87-CMOV-NEXT:    movl (%ecx), %eax3323; X87-CMOV-NEXT:    retl3324  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3325                                               double %f1, double %f2, metadata !"oge",3326                                               metadata !"fpexcept.strict") #03327  %res = select i1 %cond, i32 %a, i32 %b3328  ret i32 %res3329}3330 3331define i32 @test_f64_olt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3332; SSE-32-LABEL: test_f64_olt_s:3333; SSE-32:       # %bb.0:3334; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3335; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03336; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3337; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3338; SSE-32-NEXT:    cmoval %eax, %ecx3339; SSE-32-NEXT:    movl (%ecx), %eax3340; SSE-32-NEXT:    retl3341;3342; SSE-64-LABEL: test_f64_olt_s:3343; SSE-64:       # %bb.0:3344; SSE-64-NEXT:    movl %edi, %eax3345; SSE-64-NEXT:    comisd %xmm0, %xmm13346; SSE-64-NEXT:    cmovbel %esi, %eax3347; SSE-64-NEXT:    retq3348;3349; AVX-32-LABEL: test_f64_olt_s:3350; AVX-32:       # %bb.0:3351; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3352; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03353; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3354; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3355; AVX-32-NEXT:    cmoval %eax, %ecx3356; AVX-32-NEXT:    movl (%ecx), %eax3357; AVX-32-NEXT:    retl3358;3359; AVX-64-LABEL: test_f64_olt_s:3360; AVX-64:       # %bb.0:3361; AVX-64-NEXT:    movl %edi, %eax3362; AVX-64-NEXT:    vcomisd %xmm0, %xmm13363; AVX-64-NEXT:    cmovbel %esi, %eax3364; AVX-64-NEXT:    retq3365;3366; X87-LABEL: test_f64_olt_s:3367; X87:       # %bb.0:3368; X87-NEXT:    fldl {{[0-9]+}}(%esp)3369; X87-NEXT:    fldl {{[0-9]+}}(%esp)3370; X87-NEXT:    fcompp3371; X87-NEXT:    wait3372; X87-NEXT:    fnstsw %ax3373; X87-NEXT:    # kill: def $ah killed $ah killed $ax3374; X87-NEXT:    sahf3375; X87-NEXT:    ja .LBB45_13376; X87-NEXT:  # %bb.2:3377; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3378; X87-NEXT:    movl (%eax), %eax3379; X87-NEXT:    retl3380; X87-NEXT:  .LBB45_1:3381; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3382; X87-NEXT:    movl (%eax), %eax3383; X87-NEXT:    retl3384;3385; X87-CMOV-LABEL: test_f64_olt_s:3386; X87-CMOV:       # %bb.0:3387; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3388; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3389; X87-CMOV-NEXT:    fcompi %st(1), %st3390; X87-CMOV-NEXT:    fstp %st(0)3391; X87-CMOV-NEXT:    wait3392; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3393; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3394; X87-CMOV-NEXT:    cmoval %eax, %ecx3395; X87-CMOV-NEXT:    movl (%ecx), %eax3396; X87-CMOV-NEXT:    retl3397  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3398                                               double %f1, double %f2, metadata !"olt",3399                                               metadata !"fpexcept.strict") #03400  %res = select i1 %cond, i32 %a, i32 %b3401  ret i32 %res3402}3403 3404define i32 @test_f64_ole_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3405; SSE-32-LABEL: test_f64_ole_s:3406; SSE-32:       # %bb.0:3407; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3408; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03409; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3410; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3411; SSE-32-NEXT:    cmovael %eax, %ecx3412; SSE-32-NEXT:    movl (%ecx), %eax3413; SSE-32-NEXT:    retl3414;3415; SSE-64-LABEL: test_f64_ole_s:3416; SSE-64:       # %bb.0:3417; SSE-64-NEXT:    movl %edi, %eax3418; SSE-64-NEXT:    comisd %xmm0, %xmm13419; SSE-64-NEXT:    cmovbl %esi, %eax3420; SSE-64-NEXT:    retq3421;3422; AVX-32-LABEL: test_f64_ole_s:3423; AVX-32:       # %bb.0:3424; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3425; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03426; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3427; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3428; AVX-32-NEXT:    cmovael %eax, %ecx3429; AVX-32-NEXT:    movl (%ecx), %eax3430; AVX-32-NEXT:    retl3431;3432; AVX-64-LABEL: test_f64_ole_s:3433; AVX-64:       # %bb.0:3434; AVX-64-NEXT:    movl %edi, %eax3435; AVX-64-NEXT:    vcomisd %xmm0, %xmm13436; AVX-64-NEXT:    cmovbl %esi, %eax3437; AVX-64-NEXT:    retq3438;3439; X87-LABEL: test_f64_ole_s:3440; X87:       # %bb.0:3441; X87-NEXT:    fldl {{[0-9]+}}(%esp)3442; X87-NEXT:    fldl {{[0-9]+}}(%esp)3443; X87-NEXT:    fcompp3444; X87-NEXT:    wait3445; X87-NEXT:    fnstsw %ax3446; X87-NEXT:    # kill: def $ah killed $ah killed $ax3447; X87-NEXT:    sahf3448; X87-NEXT:    jae .LBB46_13449; X87-NEXT:  # %bb.2:3450; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3451; X87-NEXT:    movl (%eax), %eax3452; X87-NEXT:    retl3453; X87-NEXT:  .LBB46_1:3454; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3455; X87-NEXT:    movl (%eax), %eax3456; X87-NEXT:    retl3457;3458; X87-CMOV-LABEL: test_f64_ole_s:3459; X87-CMOV:       # %bb.0:3460; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3461; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3462; X87-CMOV-NEXT:    fcompi %st(1), %st3463; X87-CMOV-NEXT:    fstp %st(0)3464; X87-CMOV-NEXT:    wait3465; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3466; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3467; X87-CMOV-NEXT:    cmovael %eax, %ecx3468; X87-CMOV-NEXT:    movl (%ecx), %eax3469; X87-CMOV-NEXT:    retl3470  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3471                                               double %f1, double %f2, metadata !"ole",3472                                               metadata !"fpexcept.strict") #03473  %res = select i1 %cond, i32 %a, i32 %b3474  ret i32 %res3475}3476 3477define i32 @test_f64_one_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3478; SSE-32-LABEL: test_f64_one_s:3479; SSE-32:       # %bb.0:3480; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3481; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03482; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3483; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3484; SSE-32-NEXT:    cmovnel %eax, %ecx3485; SSE-32-NEXT:    movl (%ecx), %eax3486; SSE-32-NEXT:    retl3487;3488; SSE-64-LABEL: test_f64_one_s:3489; SSE-64:       # %bb.0:3490; SSE-64-NEXT:    movl %edi, %eax3491; SSE-64-NEXT:    comisd %xmm1, %xmm03492; SSE-64-NEXT:    cmovel %esi, %eax3493; SSE-64-NEXT:    retq3494;3495; AVX-32-LABEL: test_f64_one_s:3496; AVX-32:       # %bb.0:3497; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3498; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03499; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3500; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3501; AVX-32-NEXT:    cmovnel %eax, %ecx3502; AVX-32-NEXT:    movl (%ecx), %eax3503; AVX-32-NEXT:    retl3504;3505; AVX-64-LABEL: test_f64_one_s:3506; AVX-64:       # %bb.0:3507; AVX-64-NEXT:    movl %edi, %eax3508; AVX-64-NEXT:    vcomisd %xmm1, %xmm03509; AVX-64-NEXT:    cmovel %esi, %eax3510; AVX-64-NEXT:    retq3511;3512; X87-LABEL: test_f64_one_s:3513; X87:       # %bb.0:3514; X87-NEXT:    fldl {{[0-9]+}}(%esp)3515; X87-NEXT:    fldl {{[0-9]+}}(%esp)3516; X87-NEXT:    fcompp3517; X87-NEXT:    wait3518; X87-NEXT:    fnstsw %ax3519; X87-NEXT:    # kill: def $ah killed $ah killed $ax3520; X87-NEXT:    sahf3521; X87-NEXT:    jne .LBB47_13522; X87-NEXT:  # %bb.2:3523; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3524; X87-NEXT:    movl (%eax), %eax3525; X87-NEXT:    retl3526; X87-NEXT:  .LBB47_1:3527; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3528; X87-NEXT:    movl (%eax), %eax3529; X87-NEXT:    retl3530;3531; X87-CMOV-LABEL: test_f64_one_s:3532; X87-CMOV:       # %bb.0:3533; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3534; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3535; X87-CMOV-NEXT:    fcompi %st(1), %st3536; X87-CMOV-NEXT:    fstp %st(0)3537; X87-CMOV-NEXT:    wait3538; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3539; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3540; X87-CMOV-NEXT:    cmovnel %eax, %ecx3541; X87-CMOV-NEXT:    movl (%ecx), %eax3542; X87-CMOV-NEXT:    retl3543  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3544                                               double %f1, double %f2, metadata !"one",3545                                               metadata !"fpexcept.strict") #03546  %res = select i1 %cond, i32 %a, i32 %b3547  ret i32 %res3548}3549 3550define i32 @test_f64_ord_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3551; SSE-32-LABEL: test_f64_ord_s:3552; SSE-32:       # %bb.0:3553; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3554; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03555; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3556; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3557; SSE-32-NEXT:    cmovnpl %eax, %ecx3558; SSE-32-NEXT:    movl (%ecx), %eax3559; SSE-32-NEXT:    retl3560;3561; SSE-64-LABEL: test_f64_ord_s:3562; SSE-64:       # %bb.0:3563; SSE-64-NEXT:    movl %edi, %eax3564; SSE-64-NEXT:    comisd %xmm1, %xmm03565; SSE-64-NEXT:    cmovpl %esi, %eax3566; SSE-64-NEXT:    retq3567;3568; AVX-32-LABEL: test_f64_ord_s:3569; AVX-32:       # %bb.0:3570; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3571; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03572; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3573; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3574; AVX-32-NEXT:    cmovnpl %eax, %ecx3575; AVX-32-NEXT:    movl (%ecx), %eax3576; AVX-32-NEXT:    retl3577;3578; AVX-64-LABEL: test_f64_ord_s:3579; AVX-64:       # %bb.0:3580; AVX-64-NEXT:    movl %edi, %eax3581; AVX-64-NEXT:    vcomisd %xmm1, %xmm03582; AVX-64-NEXT:    cmovpl %esi, %eax3583; AVX-64-NEXT:    retq3584;3585; X87-LABEL: test_f64_ord_s:3586; X87:       # %bb.0:3587; X87-NEXT:    fldl {{[0-9]+}}(%esp)3588; X87-NEXT:    fldl {{[0-9]+}}(%esp)3589; X87-NEXT:    fcompp3590; X87-NEXT:    wait3591; X87-NEXT:    fnstsw %ax3592; X87-NEXT:    # kill: def $ah killed $ah killed $ax3593; X87-NEXT:    sahf3594; X87-NEXT:    jnp .LBB48_13595; X87-NEXT:  # %bb.2:3596; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3597; X87-NEXT:    movl (%eax), %eax3598; X87-NEXT:    retl3599; X87-NEXT:  .LBB48_1:3600; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3601; X87-NEXT:    movl (%eax), %eax3602; X87-NEXT:    retl3603;3604; X87-CMOV-LABEL: test_f64_ord_s:3605; X87-CMOV:       # %bb.0:3606; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3607; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3608; X87-CMOV-NEXT:    fcompi %st(1), %st3609; X87-CMOV-NEXT:    fstp %st(0)3610; X87-CMOV-NEXT:    wait3611; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3612; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3613; X87-CMOV-NEXT:    cmovnpl %eax, %ecx3614; X87-CMOV-NEXT:    movl (%ecx), %eax3615; X87-CMOV-NEXT:    retl3616  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3617                                               double %f1, double %f2, metadata !"ord",3618                                               metadata !"fpexcept.strict") #03619  %res = select i1 %cond, i32 %a, i32 %b3620  ret i32 %res3621}3622 3623define i32 @test_f64_ueq_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3624; SSE-32-LABEL: test_f64_ueq_s:3625; SSE-32:       # %bb.0:3626; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3627; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03628; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3629; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3630; SSE-32-NEXT:    cmovel %eax, %ecx3631; SSE-32-NEXT:    movl (%ecx), %eax3632; SSE-32-NEXT:    retl3633;3634; SSE-64-LABEL: test_f64_ueq_s:3635; SSE-64:       # %bb.0:3636; SSE-64-NEXT:    movl %edi, %eax3637; SSE-64-NEXT:    comisd %xmm1, %xmm03638; SSE-64-NEXT:    cmovnel %esi, %eax3639; SSE-64-NEXT:    retq3640;3641; AVX-32-LABEL: test_f64_ueq_s:3642; AVX-32:       # %bb.0:3643; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3644; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03645; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3646; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3647; AVX-32-NEXT:    cmovel %eax, %ecx3648; AVX-32-NEXT:    movl (%ecx), %eax3649; AVX-32-NEXT:    retl3650;3651; AVX-64-LABEL: test_f64_ueq_s:3652; AVX-64:       # %bb.0:3653; AVX-64-NEXT:    movl %edi, %eax3654; AVX-64-NEXT:    vcomisd %xmm1, %xmm03655; AVX-64-NEXT:    cmovnel %esi, %eax3656; AVX-64-NEXT:    retq3657;3658; X87-LABEL: test_f64_ueq_s:3659; X87:       # %bb.0:3660; X87-NEXT:    fldl {{[0-9]+}}(%esp)3661; X87-NEXT:    fldl {{[0-9]+}}(%esp)3662; X87-NEXT:    fcompp3663; X87-NEXT:    wait3664; X87-NEXT:    fnstsw %ax3665; X87-NEXT:    # kill: def $ah killed $ah killed $ax3666; X87-NEXT:    sahf3667; X87-NEXT:    je .LBB49_13668; X87-NEXT:  # %bb.2:3669; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3670; X87-NEXT:    movl (%eax), %eax3671; X87-NEXT:    retl3672; X87-NEXT:  .LBB49_1:3673; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3674; X87-NEXT:    movl (%eax), %eax3675; X87-NEXT:    retl3676;3677; X87-CMOV-LABEL: test_f64_ueq_s:3678; X87-CMOV:       # %bb.0:3679; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3680; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3681; X87-CMOV-NEXT:    fcompi %st(1), %st3682; X87-CMOV-NEXT:    fstp %st(0)3683; X87-CMOV-NEXT:    wait3684; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3685; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3686; X87-CMOV-NEXT:    cmovel %eax, %ecx3687; X87-CMOV-NEXT:    movl (%ecx), %eax3688; X87-CMOV-NEXT:    retl3689  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3690                                               double %f1, double %f2, metadata !"ueq",3691                                               metadata !"fpexcept.strict") #03692  %res = select i1 %cond, i32 %a, i32 %b3693  ret i32 %res3694}3695 3696define i32 @test_f64_ugt_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3697; SSE-32-LABEL: test_f64_ugt_s:3698; SSE-32:       # %bb.0:3699; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3700; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03701; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3702; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3703; SSE-32-NEXT:    cmovbl %eax, %ecx3704; SSE-32-NEXT:    movl (%ecx), %eax3705; SSE-32-NEXT:    retl3706;3707; SSE-64-LABEL: test_f64_ugt_s:3708; SSE-64:       # %bb.0:3709; SSE-64-NEXT:    movl %edi, %eax3710; SSE-64-NEXT:    comisd %xmm0, %xmm13711; SSE-64-NEXT:    cmovael %esi, %eax3712; SSE-64-NEXT:    retq3713;3714; AVX-32-LABEL: test_f64_ugt_s:3715; AVX-32:       # %bb.0:3716; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3717; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03718; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3719; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3720; AVX-32-NEXT:    cmovbl %eax, %ecx3721; AVX-32-NEXT:    movl (%ecx), %eax3722; AVX-32-NEXT:    retl3723;3724; AVX-64-LABEL: test_f64_ugt_s:3725; AVX-64:       # %bb.0:3726; AVX-64-NEXT:    movl %edi, %eax3727; AVX-64-NEXT:    vcomisd %xmm0, %xmm13728; AVX-64-NEXT:    cmovael %esi, %eax3729; AVX-64-NEXT:    retq3730;3731; X87-LABEL: test_f64_ugt_s:3732; X87:       # %bb.0:3733; X87-NEXT:    fldl {{[0-9]+}}(%esp)3734; X87-NEXT:    fldl {{[0-9]+}}(%esp)3735; X87-NEXT:    fcompp3736; X87-NEXT:    wait3737; X87-NEXT:    fnstsw %ax3738; X87-NEXT:    # kill: def $ah killed $ah killed $ax3739; X87-NEXT:    sahf3740; X87-NEXT:    jb .LBB50_13741; X87-NEXT:  # %bb.2:3742; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3743; X87-NEXT:    movl (%eax), %eax3744; X87-NEXT:    retl3745; X87-NEXT:  .LBB50_1:3746; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3747; X87-NEXT:    movl (%eax), %eax3748; X87-NEXT:    retl3749;3750; X87-CMOV-LABEL: test_f64_ugt_s:3751; X87-CMOV:       # %bb.0:3752; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3753; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3754; X87-CMOV-NEXT:    fcompi %st(1), %st3755; X87-CMOV-NEXT:    fstp %st(0)3756; X87-CMOV-NEXT:    wait3757; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3758; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3759; X87-CMOV-NEXT:    cmovbl %eax, %ecx3760; X87-CMOV-NEXT:    movl (%ecx), %eax3761; X87-CMOV-NEXT:    retl3762  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3763                                               double %f1, double %f2, metadata !"ugt",3764                                               metadata !"fpexcept.strict") #03765  %res = select i1 %cond, i32 %a, i32 %b3766  ret i32 %res3767}3768 3769define i32 @test_f64_uge_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3770; SSE-32-LABEL: test_f64_uge_s:3771; SSE-32:       # %bb.0:3772; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3773; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03774; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3775; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3776; SSE-32-NEXT:    cmovbel %eax, %ecx3777; SSE-32-NEXT:    movl (%ecx), %eax3778; SSE-32-NEXT:    retl3779;3780; SSE-64-LABEL: test_f64_uge_s:3781; SSE-64:       # %bb.0:3782; SSE-64-NEXT:    movl %edi, %eax3783; SSE-64-NEXT:    comisd %xmm0, %xmm13784; SSE-64-NEXT:    cmoval %esi, %eax3785; SSE-64-NEXT:    retq3786;3787; AVX-32-LABEL: test_f64_uge_s:3788; AVX-32:       # %bb.0:3789; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3790; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03791; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3792; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3793; AVX-32-NEXT:    cmovbel %eax, %ecx3794; AVX-32-NEXT:    movl (%ecx), %eax3795; AVX-32-NEXT:    retl3796;3797; AVX-64-LABEL: test_f64_uge_s:3798; AVX-64:       # %bb.0:3799; AVX-64-NEXT:    movl %edi, %eax3800; AVX-64-NEXT:    vcomisd %xmm0, %xmm13801; AVX-64-NEXT:    cmoval %esi, %eax3802; AVX-64-NEXT:    retq3803;3804; X87-LABEL: test_f64_uge_s:3805; X87:       # %bb.0:3806; X87-NEXT:    fldl {{[0-9]+}}(%esp)3807; X87-NEXT:    fldl {{[0-9]+}}(%esp)3808; X87-NEXT:    fcompp3809; X87-NEXT:    wait3810; X87-NEXT:    fnstsw %ax3811; X87-NEXT:    # kill: def $ah killed $ah killed $ax3812; X87-NEXT:    sahf3813; X87-NEXT:    jbe .LBB51_13814; X87-NEXT:  # %bb.2:3815; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3816; X87-NEXT:    movl (%eax), %eax3817; X87-NEXT:    retl3818; X87-NEXT:  .LBB51_1:3819; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3820; X87-NEXT:    movl (%eax), %eax3821; X87-NEXT:    retl3822;3823; X87-CMOV-LABEL: test_f64_uge_s:3824; X87-CMOV:       # %bb.0:3825; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3826; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3827; X87-CMOV-NEXT:    fcompi %st(1), %st3828; X87-CMOV-NEXT:    fstp %st(0)3829; X87-CMOV-NEXT:    wait3830; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3831; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3832; X87-CMOV-NEXT:    cmovbel %eax, %ecx3833; X87-CMOV-NEXT:    movl (%ecx), %eax3834; X87-CMOV-NEXT:    retl3835  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3836                                               double %f1, double %f2, metadata !"uge",3837                                               metadata !"fpexcept.strict") #03838  %res = select i1 %cond, i32 %a, i32 %b3839  ret i32 %res3840}3841 3842define i32 @test_f64_ult_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3843; SSE-32-LABEL: test_f64_ult_s:3844; SSE-32:       # %bb.0:3845; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3846; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03847; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3848; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3849; SSE-32-NEXT:    cmovbl %eax, %ecx3850; SSE-32-NEXT:    movl (%ecx), %eax3851; SSE-32-NEXT:    retl3852;3853; SSE-64-LABEL: test_f64_ult_s:3854; SSE-64:       # %bb.0:3855; SSE-64-NEXT:    movl %edi, %eax3856; SSE-64-NEXT:    comisd %xmm1, %xmm03857; SSE-64-NEXT:    cmovael %esi, %eax3858; SSE-64-NEXT:    retq3859;3860; AVX-32-LABEL: test_f64_ult_s:3861; AVX-32:       # %bb.0:3862; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3863; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03864; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3865; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3866; AVX-32-NEXT:    cmovbl %eax, %ecx3867; AVX-32-NEXT:    movl (%ecx), %eax3868; AVX-32-NEXT:    retl3869;3870; AVX-64-LABEL: test_f64_ult_s:3871; AVX-64:       # %bb.0:3872; AVX-64-NEXT:    movl %edi, %eax3873; AVX-64-NEXT:    vcomisd %xmm1, %xmm03874; AVX-64-NEXT:    cmovael %esi, %eax3875; AVX-64-NEXT:    retq3876;3877; X87-LABEL: test_f64_ult_s:3878; X87:       # %bb.0:3879; X87-NEXT:    fldl {{[0-9]+}}(%esp)3880; X87-NEXT:    fldl {{[0-9]+}}(%esp)3881; X87-NEXT:    fcompp3882; X87-NEXT:    wait3883; X87-NEXT:    fnstsw %ax3884; X87-NEXT:    # kill: def $ah killed $ah killed $ax3885; X87-NEXT:    sahf3886; X87-NEXT:    jb .LBB52_13887; X87-NEXT:  # %bb.2:3888; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3889; X87-NEXT:    movl (%eax), %eax3890; X87-NEXT:    retl3891; X87-NEXT:  .LBB52_1:3892; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3893; X87-NEXT:    movl (%eax), %eax3894; X87-NEXT:    retl3895;3896; X87-CMOV-LABEL: test_f64_ult_s:3897; X87-CMOV:       # %bb.0:3898; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3899; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3900; X87-CMOV-NEXT:    fcompi %st(1), %st3901; X87-CMOV-NEXT:    fstp %st(0)3902; X87-CMOV-NEXT:    wait3903; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3904; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3905; X87-CMOV-NEXT:    cmovbl %eax, %ecx3906; X87-CMOV-NEXT:    movl (%ecx), %eax3907; X87-CMOV-NEXT:    retl3908  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3909                                               double %f1, double %f2, metadata !"ult",3910                                               metadata !"fpexcept.strict") #03911  %res = select i1 %cond, i32 %a, i32 %b3912  ret i32 %res3913}3914 3915define i32 @test_f64_ule_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3916; SSE-32-LABEL: test_f64_ule_s:3917; SSE-32:       # %bb.0:3918; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3919; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03920; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3921; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3922; SSE-32-NEXT:    cmovbel %eax, %ecx3923; SSE-32-NEXT:    movl (%ecx), %eax3924; SSE-32-NEXT:    retl3925;3926; SSE-64-LABEL: test_f64_ule_s:3927; SSE-64:       # %bb.0:3928; SSE-64-NEXT:    movl %edi, %eax3929; SSE-64-NEXT:    comisd %xmm1, %xmm03930; SSE-64-NEXT:    cmoval %esi, %eax3931; SSE-64-NEXT:    retq3932;3933; AVX-32-LABEL: test_f64_ule_s:3934; AVX-32:       # %bb.0:3935; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3936; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm03937; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3938; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3939; AVX-32-NEXT:    cmovbel %eax, %ecx3940; AVX-32-NEXT:    movl (%ecx), %eax3941; AVX-32-NEXT:    retl3942;3943; AVX-64-LABEL: test_f64_ule_s:3944; AVX-64:       # %bb.0:3945; AVX-64-NEXT:    movl %edi, %eax3946; AVX-64-NEXT:    vcomisd %xmm1, %xmm03947; AVX-64-NEXT:    cmoval %esi, %eax3948; AVX-64-NEXT:    retq3949;3950; X87-LABEL: test_f64_ule_s:3951; X87:       # %bb.0:3952; X87-NEXT:    fldl {{[0-9]+}}(%esp)3953; X87-NEXT:    fldl {{[0-9]+}}(%esp)3954; X87-NEXT:    fcompp3955; X87-NEXT:    wait3956; X87-NEXT:    fnstsw %ax3957; X87-NEXT:    # kill: def $ah killed $ah killed $ax3958; X87-NEXT:    sahf3959; X87-NEXT:    jbe .LBB53_13960; X87-NEXT:  # %bb.2:3961; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3962; X87-NEXT:    movl (%eax), %eax3963; X87-NEXT:    retl3964; X87-NEXT:  .LBB53_1:3965; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax3966; X87-NEXT:    movl (%eax), %eax3967; X87-NEXT:    retl3968;3969; X87-CMOV-LABEL: test_f64_ule_s:3970; X87-CMOV:       # %bb.0:3971; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3972; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)3973; X87-CMOV-NEXT:    fcompi %st(1), %st3974; X87-CMOV-NEXT:    fstp %st(0)3975; X87-CMOV-NEXT:    wait3976; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax3977; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx3978; X87-CMOV-NEXT:    cmovbel %eax, %ecx3979; X87-CMOV-NEXT:    movl (%ecx), %eax3980; X87-CMOV-NEXT:    retl3981  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(3982                                               double %f1, double %f2, metadata !"ule",3983                                               metadata !"fpexcept.strict") #03984  %res = select i1 %cond, i32 %a, i32 %b3985  ret i32 %res3986}3987 3988define i32 @test_f64_une_s(i32 %a, i32 %b, double %f1, double %f2) #0 {3989; SSE-32-LABEL: test_f64_une_s:3990; SSE-32:       # %bb.0:3991; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3992; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm03993; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax3994; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx3995; SSE-32-NEXT:    cmovnel %eax, %ecx3996; SSE-32-NEXT:    cmovpl %eax, %ecx3997; SSE-32-NEXT:    movl (%ecx), %eax3998; SSE-32-NEXT:    retl3999;4000; SSE-64-LABEL: test_f64_une_s:4001; SSE-64:       # %bb.0:4002; SSE-64-NEXT:    movl %esi, %eax4003; SSE-64-NEXT:    comisd %xmm1, %xmm04004; SSE-64-NEXT:    cmovnel %edi, %eax4005; SSE-64-NEXT:    cmovpl %edi, %eax4006; SSE-64-NEXT:    retq4007;4008; AVX-32-LABEL: test_f64_une_s:4009; AVX-32:       # %bb.0:4010; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero4011; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm04012; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax4013; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx4014; AVX-32-NEXT:    cmovnel %eax, %ecx4015; AVX-32-NEXT:    cmovpl %eax, %ecx4016; AVX-32-NEXT:    movl (%ecx), %eax4017; AVX-32-NEXT:    retl4018;4019; AVX-64-LABEL: test_f64_une_s:4020; AVX-64:       # %bb.0:4021; AVX-64-NEXT:    movl %esi, %eax4022; AVX-64-NEXT:    vcomisd %xmm1, %xmm04023; AVX-64-NEXT:    cmovnel %edi, %eax4024; AVX-64-NEXT:    cmovpl %edi, %eax4025; AVX-64-NEXT:    retq4026;4027; X87-LABEL: test_f64_une_s:4028; X87:       # %bb.0:4029; X87-NEXT:    fldl {{[0-9]+}}(%esp)4030; X87-NEXT:    fldl {{[0-9]+}}(%esp)4031; X87-NEXT:    fcompp4032; X87-NEXT:    wait4033; X87-NEXT:    fnstsw %ax4034; X87-NEXT:    # kill: def $ah killed $ah killed $ax4035; X87-NEXT:    sahf4036; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4037; X87-NEXT:    jne .LBB54_34038; X87-NEXT:  # %bb.1:4039; X87-NEXT:    jp .LBB54_34040; X87-NEXT:  # %bb.2:4041; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4042; X87-NEXT:  .LBB54_3:4043; X87-NEXT:    movl (%eax), %eax4044; X87-NEXT:    retl4045;4046; X87-CMOV-LABEL: test_f64_une_s:4047; X87-CMOV:       # %bb.0:4048; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4049; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4050; X87-CMOV-NEXT:    fcompi %st(1), %st4051; X87-CMOV-NEXT:    fstp %st(0)4052; X87-CMOV-NEXT:    wait4053; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax4054; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx4055; X87-CMOV-NEXT:    cmovnel %eax, %ecx4056; X87-CMOV-NEXT:    cmovpl %eax, %ecx4057; X87-CMOV-NEXT:    movl (%ecx), %eax4058; X87-CMOV-NEXT:    retl4059  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(4060                                               double %f1, double %f2, metadata !"une",4061                                               metadata !"fpexcept.strict") #04062  %res = select i1 %cond, i32 %a, i32 %b4063  ret i32 %res4064}4065 4066define i32 @test_f64_uno_s(i32 %a, i32 %b, double %f1, double %f2) #0 {4067; SSE-32-LABEL: test_f64_uno_s:4068; SSE-32:       # %bb.0:4069; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero4070; SSE-32-NEXT:    comisd {{[0-9]+}}(%esp), %xmm04071; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %eax4072; SSE-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx4073; SSE-32-NEXT:    cmovpl %eax, %ecx4074; SSE-32-NEXT:    movl (%ecx), %eax4075; SSE-32-NEXT:    retl4076;4077; SSE-64-LABEL: test_f64_uno_s:4078; SSE-64:       # %bb.0:4079; SSE-64-NEXT:    movl %edi, %eax4080; SSE-64-NEXT:    comisd %xmm1, %xmm04081; SSE-64-NEXT:    cmovnpl %esi, %eax4082; SSE-64-NEXT:    retq4083;4084; AVX-32-LABEL: test_f64_uno_s:4085; AVX-32:       # %bb.0:4086; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero4087; AVX-32-NEXT:    vcomisd {{[0-9]+}}(%esp), %xmm04088; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %eax4089; AVX-32-NEXT:    leal {{[0-9]+}}(%esp), %ecx4090; AVX-32-NEXT:    cmovpl %eax, %ecx4091; AVX-32-NEXT:    movl (%ecx), %eax4092; AVX-32-NEXT:    retl4093;4094; AVX-64-LABEL: test_f64_uno_s:4095; AVX-64:       # %bb.0:4096; AVX-64-NEXT:    movl %edi, %eax4097; AVX-64-NEXT:    vcomisd %xmm1, %xmm04098; AVX-64-NEXT:    cmovnpl %esi, %eax4099; AVX-64-NEXT:    retq4100;4101; X87-LABEL: test_f64_uno_s:4102; X87:       # %bb.0:4103; X87-NEXT:    fldl {{[0-9]+}}(%esp)4104; X87-NEXT:    fldl {{[0-9]+}}(%esp)4105; X87-NEXT:    fcompp4106; X87-NEXT:    wait4107; X87-NEXT:    fnstsw %ax4108; X87-NEXT:    # kill: def $ah killed $ah killed $ax4109; X87-NEXT:    sahf4110; X87-NEXT:    jp .LBB55_14111; X87-NEXT:  # %bb.2:4112; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4113; X87-NEXT:    movl (%eax), %eax4114; X87-NEXT:    retl4115; X87-NEXT:  .LBB55_1:4116; X87-NEXT:    leal {{[0-9]+}}(%esp), %eax4117; X87-NEXT:    movl (%eax), %eax4118; X87-NEXT:    retl4119;4120; X87-CMOV-LABEL: test_f64_uno_s:4121; X87-CMOV:       # %bb.0:4122; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4123; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4124; X87-CMOV-NEXT:    fcompi %st(1), %st4125; X87-CMOV-NEXT:    fstp %st(0)4126; X87-CMOV-NEXT:    wait4127; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %eax4128; X87-CMOV-NEXT:    leal {{[0-9]+}}(%esp), %ecx4129; X87-CMOV-NEXT:    cmovpl %eax, %ecx4130; X87-CMOV-NEXT:    movl (%ecx), %eax4131; X87-CMOV-NEXT:    retl4132  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(4133                                               double %f1, double %f2, metadata !"uno",4134                                               metadata !"fpexcept.strict") #04135  %res = select i1 %cond, i32 %a, i32 %b4136  ret i32 %res4137}4138 4139define void @foo(float %0, float %1) #0 {4140; SSE-32-LABEL: foo:4141; SSE-32:       # %bb.0:4142; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero4143; SSE-32-NEXT:    ucomiss {{[0-9]+}}(%esp), %xmm04144; SSE-32-NEXT:    ja bar # TAILCALL4145; SSE-32-NEXT:  # %bb.1:4146; SSE-32-NEXT:    retl4147;4148; SSE-64-LABEL: foo:4149; SSE-64:       # %bb.0:4150; SSE-64-NEXT:    ucomiss %xmm1, %xmm04151; SSE-64-NEXT:    ja bar # TAILCALL4152; SSE-64-NEXT:  # %bb.1:4153; SSE-64-NEXT:    retq4154;4155; AVX-32-LABEL: foo:4156; AVX-32:       # %bb.0:4157; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero4158; AVX-32-NEXT:    vucomiss {{[0-9]+}}(%esp), %xmm04159; AVX-32-NEXT:    ja bar # TAILCALL4160; AVX-32-NEXT:  # %bb.1:4161; AVX-32-NEXT:    retl4162;4163; AVX-64-LABEL: foo:4164; AVX-64:       # %bb.0:4165; AVX-64-NEXT:    vucomiss %xmm1, %xmm04166; AVX-64-NEXT:    ja bar # TAILCALL4167; AVX-64-NEXT:  # %bb.1:4168; AVX-64-NEXT:    retq4169;4170; X87-LABEL: foo:4171; X87:       # %bb.0:4172; X87-NEXT:    flds {{[0-9]+}}(%esp)4173; X87-NEXT:    flds {{[0-9]+}}(%esp)4174; X87-NEXT:    fucompp4175; X87-NEXT:    wait4176; X87-NEXT:    fnstsw %ax4177; X87-NEXT:    # kill: def $ah killed $ah killed $ax4178; X87-NEXT:    sahf4179; X87-NEXT:    ja bar # TAILCALL4180; X87-NEXT:  # %bb.1:4181; X87-NEXT:    retl4182;4183; X87-CMOV-LABEL: foo:4184; X87-CMOV:       # %bb.0:4185; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)4186; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)4187; X87-CMOV-NEXT:    fucompi %st(1), %st4188; X87-CMOV-NEXT:    fstp %st(0)4189; X87-CMOV-NEXT:    wait4190; X87-CMOV-NEXT:    ja bar # TAILCALL4191; X87-CMOV-NEXT:  # %bb.1:4192; X87-CMOV-NEXT:    retl4193  %3 = call i1 @llvm.experimental.constrained.fcmp.f32( float %0, float %1, metadata !"ogt", metadata !"fpexcept.strict") #04194  br i1 %3, label %4, label %54195 41964:                                                ; preds = %24197  tail call void @bar() #04198  br label %54199 42005:                                                ; preds = %4, %24201  ret void4202}4203declare dso_local void @bar()4204 4205define float @fcmp_select_ogt(float %f1, float %f2) #0 {4206; SSE-32-LABEL: fcmp_select_ogt:4207; SSE-32:       # %bb.0:4208; SSE-32-NEXT:    pushl %eax4209; SSE-32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero4210; SSE-32-NEXT:    maxss {{[0-9]+}}(%esp), %xmm04211; SSE-32-NEXT:    movss %xmm0, (%esp)4212; SSE-32-NEXT:    flds (%esp)4213; SSE-32-NEXT:    wait4214; SSE-32-NEXT:    popl %eax4215; SSE-32-NEXT:    retl4216;4217; SSE-64-LABEL: fcmp_select_ogt:4218; SSE-64:       # %bb.0:4219; SSE-64-NEXT:    maxss %xmm1, %xmm04220; SSE-64-NEXT:    retq4221;4222; AVX-32-LABEL: fcmp_select_ogt:4223; AVX-32:       # %bb.0:4224; AVX-32-NEXT:    pushl %eax4225; AVX-32-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero4226; AVX-32-NEXT:    vmaxss {{[0-9]+}}(%esp), %xmm0, %xmm04227; AVX-32-NEXT:    vmovss %xmm0, (%esp)4228; AVX-32-NEXT:    flds (%esp)4229; AVX-32-NEXT:    wait4230; AVX-32-NEXT:    popl %eax4231; AVX-32-NEXT:    retl4232;4233; AVX-64-LABEL: fcmp_select_ogt:4234; AVX-64:       # %bb.0:4235; AVX-64-NEXT:    vmaxss %xmm1, %xmm0, %xmm04236; AVX-64-NEXT:    retq4237;4238; X87-LABEL: fcmp_select_ogt:4239; X87:       # %bb.0:4240; X87-NEXT:    flds {{[0-9]+}}(%esp)4241; X87-NEXT:    flds {{[0-9]+}}(%esp)4242; X87-NEXT:    fcom %st(1)4243; X87-NEXT:    wait4244; X87-NEXT:    fnstsw %ax4245; X87-NEXT:    # kill: def $ah killed $ah killed $ax4246; X87-NEXT:    sahf4247; X87-NEXT:    ja .LBB57_24248; X87-NEXT:  # %bb.1:4249; X87-NEXT:    fstp %st(0)4250; X87-NEXT:    fldz4251; X87-NEXT:    fxch %st(1)4252; X87-NEXT:  .LBB57_2:4253; X87-NEXT:    fstp %st(1)4254; X87-NEXT:    wait4255; X87-NEXT:    retl4256;4257; X87-CMOV-LABEL: fcmp_select_ogt:4258; X87-CMOV:       # %bb.0:4259; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)4260; X87-CMOV-NEXT:    flds {{[0-9]+}}(%esp)4261; X87-CMOV-NEXT:    fcomi %st(1), %st4262; X87-CMOV-NEXT:    fxch %st(1)4263; X87-CMOV-NEXT:    fcmovnbe %st(1), %st4264; X87-CMOV-NEXT:    fstp %st(1)4265; X87-CMOV-NEXT:    wait4266; X87-CMOV-NEXT:    retl4267  %cond = call i1 @llvm.experimental.constrained.fcmps.f32(4268                                               float %f1, float %f2, metadata !"ogt",4269                                               metadata !"fpexcept.strict")4270  %res = select i1 %cond, float %f1, float %f24271  ret float %res4272}4273 4274define double @fcmp_select_ule(double %f1, double %f2) #0 {4275; SSE-32-LABEL: fcmp_select_ule:4276; SSE-32:       # %bb.0:4277; SSE-32-NEXT:    pushl %ebp4278; SSE-32-NEXT:    movl %esp, %ebp4279; SSE-32-NEXT:    andl $-8, %esp4280; SSE-32-NEXT:    subl $8, %esp4281; SSE-32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero4282; SSE-32-NEXT:    minsd 8(%ebp), %xmm04283; SSE-32-NEXT:    movsd %xmm0, (%esp)4284; SSE-32-NEXT:    fldl (%esp)4285; SSE-32-NEXT:    wait4286; SSE-32-NEXT:    movl %ebp, %esp4287; SSE-32-NEXT:    popl %ebp4288; SSE-32-NEXT:    retl4289;4290; SSE-64-LABEL: fcmp_select_ule:4291; SSE-64:       # %bb.0:4292; SSE-64-NEXT:    minsd %xmm0, %xmm14293; SSE-64-NEXT:    movapd %xmm1, %xmm04294; SSE-64-NEXT:    retq4295;4296; AVX-32-LABEL: fcmp_select_ule:4297; AVX-32:       # %bb.0:4298; AVX-32-NEXT:    pushl %ebp4299; AVX-32-NEXT:    movl %esp, %ebp4300; AVX-32-NEXT:    andl $-8, %esp4301; AVX-32-NEXT:    subl $8, %esp4302; AVX-32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero4303; AVX-32-NEXT:    vminsd 8(%ebp), %xmm0, %xmm04304; AVX-32-NEXT:    vmovsd %xmm0, (%esp)4305; AVX-32-NEXT:    fldl (%esp)4306; AVX-32-NEXT:    wait4307; AVX-32-NEXT:    movl %ebp, %esp4308; AVX-32-NEXT:    popl %ebp4309; AVX-32-NEXT:    retl4310;4311; AVX-64-LABEL: fcmp_select_ule:4312; AVX-64:       # %bb.0:4313; AVX-64-NEXT:    vminsd %xmm0, %xmm1, %xmm04314; AVX-64-NEXT:    retq4315;4316; X87-LABEL: fcmp_select_ule:4317; X87:       # %bb.0:4318; X87-NEXT:    fldl {{[0-9]+}}(%esp)4319; X87-NEXT:    fldl {{[0-9]+}}(%esp)4320; X87-NEXT:    fcom %st(1)4321; X87-NEXT:    wait4322; X87-NEXT:    fnstsw %ax4323; X87-NEXT:    # kill: def $ah killed $ah killed $ax4324; X87-NEXT:    sahf4325; X87-NEXT:    jbe .LBB58_24326; X87-NEXT:  # %bb.1:4327; X87-NEXT:    fstp %st(0)4328; X87-NEXT:    fldz4329; X87-NEXT:    fxch %st(1)4330; X87-NEXT:  .LBB58_2:4331; X87-NEXT:    fstp %st(1)4332; X87-NEXT:    wait4333; X87-NEXT:    retl4334;4335; X87-CMOV-LABEL: fcmp_select_ule:4336; X87-CMOV:       # %bb.0:4337; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4338; X87-CMOV-NEXT:    fldl {{[0-9]+}}(%esp)4339; X87-CMOV-NEXT:    fcomi %st(1), %st4340; X87-CMOV-NEXT:    fxch %st(1)4341; X87-CMOV-NEXT:    fcmovbe %st(1), %st4342; X87-CMOV-NEXT:    fstp %st(1)4343; X87-CMOV-NEXT:    wait4344; X87-CMOV-NEXT:    retl4345  %cond = call i1 @llvm.experimental.constrained.fcmps.f64(4346                                               double %f1, double %f2, metadata !"ule",4347                                               metadata !"fpexcept.strict")4348  %res = select i1 %cond, double %f1, double %f24349  ret double %res4350}4351 4352attributes #0 = { nounwind strictfp }4353 4354declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)4355declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)4356declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)4357declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)4358