1049 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse -O3 | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -O3 | FileCheck %s --check-prefixes=X644 5define i32 @test_oeq_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {6; X86-LABEL: test_oeq_q:7; X86: # %bb.0:8; X86-NEXT: fldt {{[0-9]+}}(%esp)9; X86-NEXT: fldt {{[0-9]+}}(%esp)10; X86-NEXT: fucompp11; X86-NEXT: wait12; X86-NEXT: fnstsw %ax13; X86-NEXT: # kill: def $ah killed $ah killed $ax14; X86-NEXT: sahf15; X86-NEXT: leal {{[0-9]+}}(%esp), %eax16; X86-NEXT: jne .LBB0_317; X86-NEXT: # %bb.1:18; X86-NEXT: jp .LBB0_319; X86-NEXT: # %bb.2:20; X86-NEXT: leal {{[0-9]+}}(%esp), %eax21; X86-NEXT: .LBB0_3:22; X86-NEXT: movl (%eax), %eax23; X86-NEXT: retl24;25; X64-LABEL: test_oeq_q:26; X64: # %bb.0:27; X64-NEXT: movl %edi, %eax28; X64-NEXT: fldt {{[0-9]+}}(%rsp)29; X64-NEXT: fldt {{[0-9]+}}(%rsp)30; X64-NEXT: fucompi %st(1), %st31; X64-NEXT: fstp %st(0)32; X64-NEXT: wait33; X64-NEXT: cmovnel %esi, %eax34; X64-NEXT: cmovpl %esi, %eax35; X64-NEXT: retq36 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(37 x86_fp80 %f1, x86_fp80 %f2, metadata !"oeq",38 metadata !"fpexcept.strict") #039 %res = select i1 %cond, i32 %a, i32 %b40 ret i32 %res41}42 43define i32 @test_ogt_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {44; X86-LABEL: test_ogt_q:45; X86: # %bb.0:46; X86-NEXT: fldt {{[0-9]+}}(%esp)47; X86-NEXT: fldt {{[0-9]+}}(%esp)48; X86-NEXT: fucompp49; X86-NEXT: wait50; X86-NEXT: fnstsw %ax51; X86-NEXT: # kill: def $ah killed $ah killed $ax52; X86-NEXT: sahf53; X86-NEXT: ja .LBB1_154; X86-NEXT: # %bb.2:55; X86-NEXT: leal {{[0-9]+}}(%esp), %eax56; X86-NEXT: movl (%eax), %eax57; X86-NEXT: retl58; X86-NEXT: .LBB1_1:59; X86-NEXT: leal {{[0-9]+}}(%esp), %eax60; X86-NEXT: movl (%eax), %eax61; X86-NEXT: retl62;63; X64-LABEL: test_ogt_q:64; X64: # %bb.0:65; X64-NEXT: movl %edi, %eax66; X64-NEXT: fldt {{[0-9]+}}(%rsp)67; X64-NEXT: fldt {{[0-9]+}}(%rsp)68; X64-NEXT: fucompi %st(1), %st69; X64-NEXT: fstp %st(0)70; X64-NEXT: wait71; X64-NEXT: cmovbel %esi, %eax72; X64-NEXT: retq73 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(74 x86_fp80 %f1, x86_fp80 %f2, metadata !"ogt",75 metadata !"fpexcept.strict") #076 %res = select i1 %cond, i32 %a, i32 %b77 ret i32 %res78}79 80define i32 @test_oge_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {81; X86-LABEL: test_oge_q:82; X86: # %bb.0:83; X86-NEXT: fldt {{[0-9]+}}(%esp)84; X86-NEXT: fldt {{[0-9]+}}(%esp)85; X86-NEXT: fucompp86; X86-NEXT: wait87; X86-NEXT: fnstsw %ax88; X86-NEXT: # kill: def $ah killed $ah killed $ax89; X86-NEXT: sahf90; X86-NEXT: jae .LBB2_191; X86-NEXT: # %bb.2:92; X86-NEXT: leal {{[0-9]+}}(%esp), %eax93; X86-NEXT: movl (%eax), %eax94; X86-NEXT: retl95; X86-NEXT: .LBB2_1:96; X86-NEXT: leal {{[0-9]+}}(%esp), %eax97; X86-NEXT: movl (%eax), %eax98; X86-NEXT: retl99;100; X64-LABEL: test_oge_q:101; X64: # %bb.0:102; X64-NEXT: movl %edi, %eax103; X64-NEXT: fldt {{[0-9]+}}(%rsp)104; X64-NEXT: fldt {{[0-9]+}}(%rsp)105; X64-NEXT: fucompi %st(1), %st106; X64-NEXT: fstp %st(0)107; X64-NEXT: wait108; X64-NEXT: cmovbl %esi, %eax109; X64-NEXT: retq110 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(111 x86_fp80 %f1, x86_fp80 %f2, metadata !"oge",112 metadata !"fpexcept.strict") #0113 %res = select i1 %cond, i32 %a, i32 %b114 ret i32 %res115}116 117define i32 @test_olt_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {118; X86-LABEL: test_olt_q:119; X86: # %bb.0:120; X86-NEXT: fldt {{[0-9]+}}(%esp)121; X86-NEXT: fldt {{[0-9]+}}(%esp)122; X86-NEXT: fucompp123; X86-NEXT: wait124; X86-NEXT: fnstsw %ax125; X86-NEXT: # kill: def $ah killed $ah killed $ax126; X86-NEXT: sahf127; X86-NEXT: ja .LBB3_1128; X86-NEXT: # %bb.2:129; X86-NEXT: leal {{[0-9]+}}(%esp), %eax130; X86-NEXT: movl (%eax), %eax131; X86-NEXT: retl132; X86-NEXT: .LBB3_1:133; X86-NEXT: leal {{[0-9]+}}(%esp), %eax134; X86-NEXT: movl (%eax), %eax135; X86-NEXT: retl136;137; X64-LABEL: test_olt_q:138; X64: # %bb.0:139; X64-NEXT: movl %edi, %eax140; X64-NEXT: fldt {{[0-9]+}}(%rsp)141; X64-NEXT: fldt {{[0-9]+}}(%rsp)142; X64-NEXT: fucompi %st(1), %st143; X64-NEXT: fstp %st(0)144; X64-NEXT: wait145; X64-NEXT: cmovbel %esi, %eax146; X64-NEXT: retq147 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(148 x86_fp80 %f1, x86_fp80 %f2, metadata !"olt",149 metadata !"fpexcept.strict") #0150 %res = select i1 %cond, i32 %a, i32 %b151 ret i32 %res152}153 154define i32 @test_ole_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {155; X86-LABEL: test_ole_q:156; X86: # %bb.0:157; X86-NEXT: fldt {{[0-9]+}}(%esp)158; X86-NEXT: fldt {{[0-9]+}}(%esp)159; X86-NEXT: fucompp160; X86-NEXT: wait161; X86-NEXT: fnstsw %ax162; X86-NEXT: # kill: def $ah killed $ah killed $ax163; X86-NEXT: sahf164; X86-NEXT: jae .LBB4_1165; X86-NEXT: # %bb.2:166; X86-NEXT: leal {{[0-9]+}}(%esp), %eax167; X86-NEXT: movl (%eax), %eax168; X86-NEXT: retl169; X86-NEXT: .LBB4_1:170; X86-NEXT: leal {{[0-9]+}}(%esp), %eax171; X86-NEXT: movl (%eax), %eax172; X86-NEXT: retl173;174; X64-LABEL: test_ole_q:175; X64: # %bb.0:176; X64-NEXT: movl %edi, %eax177; X64-NEXT: fldt {{[0-9]+}}(%rsp)178; X64-NEXT: fldt {{[0-9]+}}(%rsp)179; X64-NEXT: fucompi %st(1), %st180; X64-NEXT: fstp %st(0)181; X64-NEXT: wait182; X64-NEXT: cmovbl %esi, %eax183; X64-NEXT: retq184 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(185 x86_fp80 %f1, x86_fp80 %f2, metadata !"ole",186 metadata !"fpexcept.strict") #0187 %res = select i1 %cond, i32 %a, i32 %b188 ret i32 %res189}190 191define i32 @test_one_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {192; X86-LABEL: test_one_q:193; X86: # %bb.0:194; X86-NEXT: fldt {{[0-9]+}}(%esp)195; X86-NEXT: fldt {{[0-9]+}}(%esp)196; X86-NEXT: fucompp197; X86-NEXT: wait198; X86-NEXT: fnstsw %ax199; X86-NEXT: # kill: def $ah killed $ah killed $ax200; X86-NEXT: sahf201; X86-NEXT: jne .LBB5_1202; X86-NEXT: # %bb.2:203; X86-NEXT: leal {{[0-9]+}}(%esp), %eax204; X86-NEXT: movl (%eax), %eax205; X86-NEXT: retl206; X86-NEXT: .LBB5_1:207; X86-NEXT: leal {{[0-9]+}}(%esp), %eax208; X86-NEXT: movl (%eax), %eax209; X86-NEXT: retl210;211; X64-LABEL: test_one_q:212; X64: # %bb.0:213; X64-NEXT: movl %edi, %eax214; X64-NEXT: fldt {{[0-9]+}}(%rsp)215; X64-NEXT: fldt {{[0-9]+}}(%rsp)216; X64-NEXT: fucompi %st(1), %st217; X64-NEXT: fstp %st(0)218; X64-NEXT: wait219; X64-NEXT: cmovel %esi, %eax220; X64-NEXT: retq221 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(222 x86_fp80 %f1, x86_fp80 %f2, metadata !"one",223 metadata !"fpexcept.strict") #0224 %res = select i1 %cond, i32 %a, i32 %b225 ret i32 %res226}227 228define i32 @test_ord_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {229; X86-LABEL: test_ord_q:230; X86: # %bb.0:231; X86-NEXT: fldt {{[0-9]+}}(%esp)232; X86-NEXT: fldt {{[0-9]+}}(%esp)233; X86-NEXT: fucompp234; X86-NEXT: wait235; X86-NEXT: fnstsw %ax236; X86-NEXT: # kill: def $ah killed $ah killed $ax237; X86-NEXT: sahf238; X86-NEXT: jnp .LBB6_1239; X86-NEXT: # %bb.2:240; X86-NEXT: leal {{[0-9]+}}(%esp), %eax241; X86-NEXT: movl (%eax), %eax242; X86-NEXT: retl243; X86-NEXT: .LBB6_1:244; X86-NEXT: leal {{[0-9]+}}(%esp), %eax245; X86-NEXT: movl (%eax), %eax246; X86-NEXT: retl247;248; X64-LABEL: test_ord_q:249; X64: # %bb.0:250; X64-NEXT: movl %edi, %eax251; X64-NEXT: fldt {{[0-9]+}}(%rsp)252; X64-NEXT: fldt {{[0-9]+}}(%rsp)253; X64-NEXT: fucompi %st(1), %st254; X64-NEXT: fstp %st(0)255; X64-NEXT: wait256; X64-NEXT: cmovpl %esi, %eax257; X64-NEXT: retq258 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(259 x86_fp80 %f1, x86_fp80 %f2, metadata !"ord",260 metadata !"fpexcept.strict") #0261 %res = select i1 %cond, i32 %a, i32 %b262 ret i32 %res263}264 265define i32 @test_ueq_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {266; X86-LABEL: test_ueq_q:267; X86: # %bb.0:268; X86-NEXT: fldt {{[0-9]+}}(%esp)269; X86-NEXT: fldt {{[0-9]+}}(%esp)270; X86-NEXT: fucompp271; X86-NEXT: wait272; X86-NEXT: fnstsw %ax273; X86-NEXT: # kill: def $ah killed $ah killed $ax274; X86-NEXT: sahf275; X86-NEXT: je .LBB7_1276; X86-NEXT: # %bb.2:277; X86-NEXT: leal {{[0-9]+}}(%esp), %eax278; X86-NEXT: movl (%eax), %eax279; X86-NEXT: retl280; X86-NEXT: .LBB7_1:281; X86-NEXT: leal {{[0-9]+}}(%esp), %eax282; X86-NEXT: movl (%eax), %eax283; X86-NEXT: retl284;285; X64-LABEL: test_ueq_q:286; X64: # %bb.0:287; X64-NEXT: movl %edi, %eax288; X64-NEXT: fldt {{[0-9]+}}(%rsp)289; X64-NEXT: fldt {{[0-9]+}}(%rsp)290; X64-NEXT: fucompi %st(1), %st291; X64-NEXT: fstp %st(0)292; X64-NEXT: wait293; X64-NEXT: cmovnel %esi, %eax294; X64-NEXT: retq295 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(296 x86_fp80 %f1, x86_fp80 %f2, metadata !"ueq",297 metadata !"fpexcept.strict") #0298 %res = select i1 %cond, i32 %a, i32 %b299 ret i32 %res300}301 302define i32 @test_ugt_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {303; X86-LABEL: test_ugt_q:304; X86: # %bb.0:305; X86-NEXT: fldt {{[0-9]+}}(%esp)306; X86-NEXT: fldt {{[0-9]+}}(%esp)307; X86-NEXT: fucompp308; X86-NEXT: wait309; X86-NEXT: fnstsw %ax310; X86-NEXT: # kill: def $ah killed $ah killed $ax311; X86-NEXT: sahf312; X86-NEXT: jb .LBB8_1313; X86-NEXT: # %bb.2:314; X86-NEXT: leal {{[0-9]+}}(%esp), %eax315; X86-NEXT: movl (%eax), %eax316; X86-NEXT: retl317; X86-NEXT: .LBB8_1:318; X86-NEXT: leal {{[0-9]+}}(%esp), %eax319; X86-NEXT: movl (%eax), %eax320; X86-NEXT: retl321;322; X64-LABEL: test_ugt_q:323; X64: # %bb.0:324; X64-NEXT: movl %edi, %eax325; X64-NEXT: fldt {{[0-9]+}}(%rsp)326; X64-NEXT: fldt {{[0-9]+}}(%rsp)327; X64-NEXT: fucompi %st(1), %st328; X64-NEXT: fstp %st(0)329; X64-NEXT: wait330; X64-NEXT: cmovael %esi, %eax331; X64-NEXT: retq332 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(333 x86_fp80 %f1, x86_fp80 %f2, metadata !"ugt",334 metadata !"fpexcept.strict") #0335 %res = select i1 %cond, i32 %a, i32 %b336 ret i32 %res337}338 339define i32 @test_uge_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {340; X86-LABEL: test_uge_q:341; X86: # %bb.0:342; X86-NEXT: fldt {{[0-9]+}}(%esp)343; X86-NEXT: fldt {{[0-9]+}}(%esp)344; X86-NEXT: fucompp345; X86-NEXT: wait346; X86-NEXT: fnstsw %ax347; X86-NEXT: # kill: def $ah killed $ah killed $ax348; X86-NEXT: sahf349; X86-NEXT: jbe .LBB9_1350; X86-NEXT: # %bb.2:351; X86-NEXT: leal {{[0-9]+}}(%esp), %eax352; X86-NEXT: movl (%eax), %eax353; X86-NEXT: retl354; X86-NEXT: .LBB9_1:355; X86-NEXT: leal {{[0-9]+}}(%esp), %eax356; X86-NEXT: movl (%eax), %eax357; X86-NEXT: retl358;359; X64-LABEL: test_uge_q:360; X64: # %bb.0:361; X64-NEXT: movl %edi, %eax362; X64-NEXT: fldt {{[0-9]+}}(%rsp)363; X64-NEXT: fldt {{[0-9]+}}(%rsp)364; X64-NEXT: fucompi %st(1), %st365; X64-NEXT: fstp %st(0)366; X64-NEXT: wait367; X64-NEXT: cmoval %esi, %eax368; X64-NEXT: retq369 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(370 x86_fp80 %f1, x86_fp80 %f2, metadata !"uge",371 metadata !"fpexcept.strict") #0372 %res = select i1 %cond, i32 %a, i32 %b373 ret i32 %res374}375 376define i32 @test_ult_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {377; X86-LABEL: test_ult_q:378; X86: # %bb.0:379; X86-NEXT: fldt {{[0-9]+}}(%esp)380; X86-NEXT: fldt {{[0-9]+}}(%esp)381; X86-NEXT: fucompp382; X86-NEXT: wait383; X86-NEXT: fnstsw %ax384; X86-NEXT: # kill: def $ah killed $ah killed $ax385; X86-NEXT: sahf386; X86-NEXT: jb .LBB10_1387; X86-NEXT: # %bb.2:388; X86-NEXT: leal {{[0-9]+}}(%esp), %eax389; X86-NEXT: movl (%eax), %eax390; X86-NEXT: retl391; X86-NEXT: .LBB10_1:392; X86-NEXT: leal {{[0-9]+}}(%esp), %eax393; X86-NEXT: movl (%eax), %eax394; X86-NEXT: retl395;396; X64-LABEL: test_ult_q:397; X64: # %bb.0:398; X64-NEXT: movl %edi, %eax399; X64-NEXT: fldt {{[0-9]+}}(%rsp)400; X64-NEXT: fldt {{[0-9]+}}(%rsp)401; X64-NEXT: fucompi %st(1), %st402; X64-NEXT: fstp %st(0)403; X64-NEXT: wait404; X64-NEXT: cmovael %esi, %eax405; X64-NEXT: retq406 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(407 x86_fp80 %f1, x86_fp80 %f2, metadata !"ult",408 metadata !"fpexcept.strict") #0409 %res = select i1 %cond, i32 %a, i32 %b410 ret i32 %res411}412 413define i32 @test_ule_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {414; X86-LABEL: test_ule_q:415; X86: # %bb.0:416; X86-NEXT: fldt {{[0-9]+}}(%esp)417; X86-NEXT: fldt {{[0-9]+}}(%esp)418; X86-NEXT: fucompp419; X86-NEXT: wait420; X86-NEXT: fnstsw %ax421; X86-NEXT: # kill: def $ah killed $ah killed $ax422; X86-NEXT: sahf423; X86-NEXT: jbe .LBB11_1424; X86-NEXT: # %bb.2:425; X86-NEXT: leal {{[0-9]+}}(%esp), %eax426; X86-NEXT: movl (%eax), %eax427; X86-NEXT: retl428; X86-NEXT: .LBB11_1:429; X86-NEXT: leal {{[0-9]+}}(%esp), %eax430; X86-NEXT: movl (%eax), %eax431; X86-NEXT: retl432;433; X64-LABEL: test_ule_q:434; X64: # %bb.0:435; X64-NEXT: movl %edi, %eax436; X64-NEXT: fldt {{[0-9]+}}(%rsp)437; X64-NEXT: fldt {{[0-9]+}}(%rsp)438; X64-NEXT: fucompi %st(1), %st439; X64-NEXT: fstp %st(0)440; X64-NEXT: wait441; X64-NEXT: cmoval %esi, %eax442; X64-NEXT: retq443 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(444 x86_fp80 %f1, x86_fp80 %f2, metadata !"ule",445 metadata !"fpexcept.strict") #0446 %res = select i1 %cond, i32 %a, i32 %b447 ret i32 %res448}449 450define i32 @test_une_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {451; X86-LABEL: test_une_q:452; X86: # %bb.0:453; X86-NEXT: fldt {{[0-9]+}}(%esp)454; X86-NEXT: fldt {{[0-9]+}}(%esp)455; X86-NEXT: fucompp456; X86-NEXT: wait457; X86-NEXT: fnstsw %ax458; X86-NEXT: # kill: def $ah killed $ah killed $ax459; X86-NEXT: sahf460; X86-NEXT: leal {{[0-9]+}}(%esp), %eax461; X86-NEXT: jne .LBB12_3462; X86-NEXT: # %bb.1:463; X86-NEXT: jp .LBB12_3464; X86-NEXT: # %bb.2:465; X86-NEXT: leal {{[0-9]+}}(%esp), %eax466; X86-NEXT: .LBB12_3:467; X86-NEXT: movl (%eax), %eax468; X86-NEXT: retl469;470; X64-LABEL: test_une_q:471; X64: # %bb.0:472; X64-NEXT: movl %esi, %eax473; X64-NEXT: fldt {{[0-9]+}}(%rsp)474; X64-NEXT: fldt {{[0-9]+}}(%rsp)475; X64-NEXT: fucompi %st(1), %st476; X64-NEXT: fstp %st(0)477; X64-NEXT: wait478; X64-NEXT: cmovnel %edi, %eax479; X64-NEXT: cmovpl %edi, %eax480; X64-NEXT: retq481 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(482 x86_fp80 %f1, x86_fp80 %f2, metadata !"une",483 metadata !"fpexcept.strict") #0484 %res = select i1 %cond, i32 %a, i32 %b485 ret i32 %res486}487 488define i32 @test_uno_q(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {489; X86-LABEL: test_uno_q:490; X86: # %bb.0:491; X86-NEXT: fldt {{[0-9]+}}(%esp)492; X86-NEXT: fldt {{[0-9]+}}(%esp)493; X86-NEXT: fucompp494; X86-NEXT: wait495; X86-NEXT: fnstsw %ax496; X86-NEXT: # kill: def $ah killed $ah killed $ax497; X86-NEXT: sahf498; X86-NEXT: jp .LBB13_1499; X86-NEXT: # %bb.2:500; X86-NEXT: leal {{[0-9]+}}(%esp), %eax501; X86-NEXT: movl (%eax), %eax502; X86-NEXT: retl503; X86-NEXT: .LBB13_1:504; X86-NEXT: leal {{[0-9]+}}(%esp), %eax505; X86-NEXT: movl (%eax), %eax506; X86-NEXT: retl507;508; X64-LABEL: test_uno_q:509; X64: # %bb.0:510; X64-NEXT: movl %edi, %eax511; X64-NEXT: fldt {{[0-9]+}}(%rsp)512; X64-NEXT: fldt {{[0-9]+}}(%rsp)513; X64-NEXT: fucompi %st(1), %st514; X64-NEXT: fstp %st(0)515; X64-NEXT: wait516; X64-NEXT: cmovnpl %esi, %eax517; X64-NEXT: retq518 %cond = call i1 @llvm.experimental.constrained.fcmp.f80(519 x86_fp80 %f1, x86_fp80 %f2, metadata !"uno",520 metadata !"fpexcept.strict") #0521 %res = select i1 %cond, i32 %a, i32 %b522 ret i32 %res523}524 525define i32 @test_oeq_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {526; X86-LABEL: test_oeq_s:527; X86: # %bb.0:528; X86-NEXT: fldt {{[0-9]+}}(%esp)529; X86-NEXT: fldt {{[0-9]+}}(%esp)530; X86-NEXT: fcompp531; X86-NEXT: wait532; X86-NEXT: fnstsw %ax533; X86-NEXT: # kill: def $ah killed $ah killed $ax534; X86-NEXT: sahf535; X86-NEXT: leal {{[0-9]+}}(%esp), %eax536; X86-NEXT: jne .LBB14_3537; X86-NEXT: # %bb.1:538; X86-NEXT: jp .LBB14_3539; X86-NEXT: # %bb.2:540; X86-NEXT: leal {{[0-9]+}}(%esp), %eax541; X86-NEXT: .LBB14_3:542; X86-NEXT: movl (%eax), %eax543; X86-NEXT: retl544;545; X64-LABEL: test_oeq_s:546; X64: # %bb.0:547; X64-NEXT: movl %edi, %eax548; X64-NEXT: fldt {{[0-9]+}}(%rsp)549; X64-NEXT: fldt {{[0-9]+}}(%rsp)550; X64-NEXT: fcompi %st(1), %st551; X64-NEXT: fstp %st(0)552; X64-NEXT: wait553; X64-NEXT: cmovnel %esi, %eax554; X64-NEXT: cmovpl %esi, %eax555; X64-NEXT: retq556 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(557 x86_fp80 %f1, x86_fp80 %f2, metadata !"oeq",558 metadata !"fpexcept.strict") #0559 %res = select i1 %cond, i32 %a, i32 %b560 ret i32 %res561}562 563define i32 @test_ogt_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {564; X86-LABEL: test_ogt_s:565; X86: # %bb.0:566; X86-NEXT: fldt {{[0-9]+}}(%esp)567; X86-NEXT: fldt {{[0-9]+}}(%esp)568; X86-NEXT: fcompp569; X86-NEXT: wait570; X86-NEXT: fnstsw %ax571; X86-NEXT: # kill: def $ah killed $ah killed $ax572; X86-NEXT: sahf573; X86-NEXT: ja .LBB15_1574; X86-NEXT: # %bb.2:575; X86-NEXT: leal {{[0-9]+}}(%esp), %eax576; X86-NEXT: movl (%eax), %eax577; X86-NEXT: retl578; X86-NEXT: .LBB15_1:579; X86-NEXT: leal {{[0-9]+}}(%esp), %eax580; X86-NEXT: movl (%eax), %eax581; X86-NEXT: retl582;583; X64-LABEL: test_ogt_s:584; X64: # %bb.0:585; X64-NEXT: movl %edi, %eax586; X64-NEXT: fldt {{[0-9]+}}(%rsp)587; X64-NEXT: fldt {{[0-9]+}}(%rsp)588; X64-NEXT: fcompi %st(1), %st589; X64-NEXT: fstp %st(0)590; X64-NEXT: wait591; X64-NEXT: cmovbel %esi, %eax592; X64-NEXT: retq593 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(594 x86_fp80 %f1, x86_fp80 %f2, metadata !"ogt",595 metadata !"fpexcept.strict") #0596 %res = select i1 %cond, i32 %a, i32 %b597 ret i32 %res598}599 600define i32 @test_oge_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {601; X86-LABEL: test_oge_s:602; X86: # %bb.0:603; X86-NEXT: fldt {{[0-9]+}}(%esp)604; X86-NEXT: fldt {{[0-9]+}}(%esp)605; X86-NEXT: fcompp606; X86-NEXT: wait607; X86-NEXT: fnstsw %ax608; X86-NEXT: # kill: def $ah killed $ah killed $ax609; X86-NEXT: sahf610; X86-NEXT: jae .LBB16_1611; X86-NEXT: # %bb.2:612; X86-NEXT: leal {{[0-9]+}}(%esp), %eax613; X86-NEXT: movl (%eax), %eax614; X86-NEXT: retl615; X86-NEXT: .LBB16_1:616; X86-NEXT: leal {{[0-9]+}}(%esp), %eax617; X86-NEXT: movl (%eax), %eax618; X86-NEXT: retl619;620; X64-LABEL: test_oge_s:621; X64: # %bb.0:622; X64-NEXT: movl %edi, %eax623; X64-NEXT: fldt {{[0-9]+}}(%rsp)624; X64-NEXT: fldt {{[0-9]+}}(%rsp)625; X64-NEXT: fcompi %st(1), %st626; X64-NEXT: fstp %st(0)627; X64-NEXT: wait628; X64-NEXT: cmovbl %esi, %eax629; X64-NEXT: retq630 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(631 x86_fp80 %f1, x86_fp80 %f2, metadata !"oge",632 metadata !"fpexcept.strict") #0633 %res = select i1 %cond, i32 %a, i32 %b634 ret i32 %res635}636 637define i32 @test_olt_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {638; X86-LABEL: test_olt_s:639; X86: # %bb.0:640; X86-NEXT: fldt {{[0-9]+}}(%esp)641; X86-NEXT: fldt {{[0-9]+}}(%esp)642; X86-NEXT: fcompp643; X86-NEXT: wait644; X86-NEXT: fnstsw %ax645; X86-NEXT: # kill: def $ah killed $ah killed $ax646; X86-NEXT: sahf647; X86-NEXT: ja .LBB17_1648; X86-NEXT: # %bb.2:649; X86-NEXT: leal {{[0-9]+}}(%esp), %eax650; X86-NEXT: movl (%eax), %eax651; X86-NEXT: retl652; X86-NEXT: .LBB17_1:653; X86-NEXT: leal {{[0-9]+}}(%esp), %eax654; X86-NEXT: movl (%eax), %eax655; X86-NEXT: retl656;657; X64-LABEL: test_olt_s:658; X64: # %bb.0:659; X64-NEXT: movl %edi, %eax660; X64-NEXT: fldt {{[0-9]+}}(%rsp)661; X64-NEXT: fldt {{[0-9]+}}(%rsp)662; X64-NEXT: fcompi %st(1), %st663; X64-NEXT: fstp %st(0)664; X64-NEXT: wait665; X64-NEXT: cmovbel %esi, %eax666; X64-NEXT: retq667 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(668 x86_fp80 %f1, x86_fp80 %f2, metadata !"olt",669 metadata !"fpexcept.strict") #0670 %res = select i1 %cond, i32 %a, i32 %b671 ret i32 %res672}673 674define i32 @test_ole_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {675; X86-LABEL: test_ole_s:676; X86: # %bb.0:677; X86-NEXT: fldt {{[0-9]+}}(%esp)678; X86-NEXT: fldt {{[0-9]+}}(%esp)679; X86-NEXT: fcompp680; X86-NEXT: wait681; X86-NEXT: fnstsw %ax682; X86-NEXT: # kill: def $ah killed $ah killed $ax683; X86-NEXT: sahf684; X86-NEXT: jae .LBB18_1685; X86-NEXT: # %bb.2:686; X86-NEXT: leal {{[0-9]+}}(%esp), %eax687; X86-NEXT: movl (%eax), %eax688; X86-NEXT: retl689; X86-NEXT: .LBB18_1:690; X86-NEXT: leal {{[0-9]+}}(%esp), %eax691; X86-NEXT: movl (%eax), %eax692; X86-NEXT: retl693;694; X64-LABEL: test_ole_s:695; X64: # %bb.0:696; X64-NEXT: movl %edi, %eax697; X64-NEXT: fldt {{[0-9]+}}(%rsp)698; X64-NEXT: fldt {{[0-9]+}}(%rsp)699; X64-NEXT: fcompi %st(1), %st700; X64-NEXT: fstp %st(0)701; X64-NEXT: wait702; X64-NEXT: cmovbl %esi, %eax703; X64-NEXT: retq704 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(705 x86_fp80 %f1, x86_fp80 %f2, metadata !"ole",706 metadata !"fpexcept.strict") #0707 %res = select i1 %cond, i32 %a, i32 %b708 ret i32 %res709}710 711define i32 @test_one_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {712; X86-LABEL: test_one_s:713; X86: # %bb.0:714; X86-NEXT: fldt {{[0-9]+}}(%esp)715; X86-NEXT: fldt {{[0-9]+}}(%esp)716; X86-NEXT: fcompp717; X86-NEXT: wait718; X86-NEXT: fnstsw %ax719; X86-NEXT: # kill: def $ah killed $ah killed $ax720; X86-NEXT: sahf721; X86-NEXT: jne .LBB19_1722; X86-NEXT: # %bb.2:723; X86-NEXT: leal {{[0-9]+}}(%esp), %eax724; X86-NEXT: movl (%eax), %eax725; X86-NEXT: retl726; X86-NEXT: .LBB19_1:727; X86-NEXT: leal {{[0-9]+}}(%esp), %eax728; X86-NEXT: movl (%eax), %eax729; X86-NEXT: retl730;731; X64-LABEL: test_one_s:732; X64: # %bb.0:733; X64-NEXT: movl %edi, %eax734; X64-NEXT: fldt {{[0-9]+}}(%rsp)735; X64-NEXT: fldt {{[0-9]+}}(%rsp)736; X64-NEXT: fcompi %st(1), %st737; X64-NEXT: fstp %st(0)738; X64-NEXT: wait739; X64-NEXT: cmovel %esi, %eax740; X64-NEXT: retq741 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(742 x86_fp80 %f1, x86_fp80 %f2, metadata !"one",743 metadata !"fpexcept.strict") #0744 %res = select i1 %cond, i32 %a, i32 %b745 ret i32 %res746}747 748define i32 @test_ord_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {749; X86-LABEL: test_ord_s:750; X86: # %bb.0:751; X86-NEXT: fldt {{[0-9]+}}(%esp)752; X86-NEXT: fldt {{[0-9]+}}(%esp)753; X86-NEXT: fcompp754; X86-NEXT: wait755; X86-NEXT: fnstsw %ax756; X86-NEXT: # kill: def $ah killed $ah killed $ax757; X86-NEXT: sahf758; X86-NEXT: jnp .LBB20_1759; X86-NEXT: # %bb.2:760; X86-NEXT: leal {{[0-9]+}}(%esp), %eax761; X86-NEXT: movl (%eax), %eax762; X86-NEXT: retl763; X86-NEXT: .LBB20_1:764; X86-NEXT: leal {{[0-9]+}}(%esp), %eax765; X86-NEXT: movl (%eax), %eax766; X86-NEXT: retl767;768; X64-LABEL: test_ord_s:769; X64: # %bb.0:770; X64-NEXT: movl %edi, %eax771; X64-NEXT: fldt {{[0-9]+}}(%rsp)772; X64-NEXT: fldt {{[0-9]+}}(%rsp)773; X64-NEXT: fcompi %st(1), %st774; X64-NEXT: fstp %st(0)775; X64-NEXT: wait776; X64-NEXT: cmovpl %esi, %eax777; X64-NEXT: retq778 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(779 x86_fp80 %f1, x86_fp80 %f2, metadata !"ord",780 metadata !"fpexcept.strict") #0781 %res = select i1 %cond, i32 %a, i32 %b782 ret i32 %res783}784 785define i32 @test_ueq_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {786; X86-LABEL: test_ueq_s:787; X86: # %bb.0:788; X86-NEXT: fldt {{[0-9]+}}(%esp)789; X86-NEXT: fldt {{[0-9]+}}(%esp)790; X86-NEXT: fcompp791; X86-NEXT: wait792; X86-NEXT: fnstsw %ax793; X86-NEXT: # kill: def $ah killed $ah killed $ax794; X86-NEXT: sahf795; X86-NEXT: je .LBB21_1796; X86-NEXT: # %bb.2:797; X86-NEXT: leal {{[0-9]+}}(%esp), %eax798; X86-NEXT: movl (%eax), %eax799; X86-NEXT: retl800; X86-NEXT: .LBB21_1:801; X86-NEXT: leal {{[0-9]+}}(%esp), %eax802; X86-NEXT: movl (%eax), %eax803; X86-NEXT: retl804;805; X64-LABEL: test_ueq_s:806; X64: # %bb.0:807; X64-NEXT: movl %edi, %eax808; X64-NEXT: fldt {{[0-9]+}}(%rsp)809; X64-NEXT: fldt {{[0-9]+}}(%rsp)810; X64-NEXT: fcompi %st(1), %st811; X64-NEXT: fstp %st(0)812; X64-NEXT: wait813; X64-NEXT: cmovnel %esi, %eax814; X64-NEXT: retq815 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(816 x86_fp80 %f1, x86_fp80 %f2, metadata !"ueq",817 metadata !"fpexcept.strict") #0818 %res = select i1 %cond, i32 %a, i32 %b819 ret i32 %res820}821 822define i32 @test_ugt_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {823; X86-LABEL: test_ugt_s:824; X86: # %bb.0:825; X86-NEXT: fldt {{[0-9]+}}(%esp)826; X86-NEXT: fldt {{[0-9]+}}(%esp)827; X86-NEXT: fcompp828; X86-NEXT: wait829; X86-NEXT: fnstsw %ax830; X86-NEXT: # kill: def $ah killed $ah killed $ax831; X86-NEXT: sahf832; X86-NEXT: jb .LBB22_1833; X86-NEXT: # %bb.2:834; X86-NEXT: leal {{[0-9]+}}(%esp), %eax835; X86-NEXT: movl (%eax), %eax836; X86-NEXT: retl837; X86-NEXT: .LBB22_1:838; X86-NEXT: leal {{[0-9]+}}(%esp), %eax839; X86-NEXT: movl (%eax), %eax840; X86-NEXT: retl841;842; X64-LABEL: test_ugt_s:843; X64: # %bb.0:844; X64-NEXT: movl %edi, %eax845; X64-NEXT: fldt {{[0-9]+}}(%rsp)846; X64-NEXT: fldt {{[0-9]+}}(%rsp)847; X64-NEXT: fcompi %st(1), %st848; X64-NEXT: fstp %st(0)849; X64-NEXT: wait850; X64-NEXT: cmovael %esi, %eax851; X64-NEXT: retq852 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(853 x86_fp80 %f1, x86_fp80 %f2, metadata !"ugt",854 metadata !"fpexcept.strict") #0855 %res = select i1 %cond, i32 %a, i32 %b856 ret i32 %res857}858 859define i32 @test_uge_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {860; X86-LABEL: test_uge_s:861; X86: # %bb.0:862; X86-NEXT: fldt {{[0-9]+}}(%esp)863; X86-NEXT: fldt {{[0-9]+}}(%esp)864; X86-NEXT: fcompp865; X86-NEXT: wait866; X86-NEXT: fnstsw %ax867; X86-NEXT: # kill: def $ah killed $ah killed $ax868; X86-NEXT: sahf869; X86-NEXT: jbe .LBB23_1870; X86-NEXT: # %bb.2:871; X86-NEXT: leal {{[0-9]+}}(%esp), %eax872; X86-NEXT: movl (%eax), %eax873; X86-NEXT: retl874; X86-NEXT: .LBB23_1:875; X86-NEXT: leal {{[0-9]+}}(%esp), %eax876; X86-NEXT: movl (%eax), %eax877; X86-NEXT: retl878;879; X64-LABEL: test_uge_s:880; X64: # %bb.0:881; X64-NEXT: movl %edi, %eax882; X64-NEXT: fldt {{[0-9]+}}(%rsp)883; X64-NEXT: fldt {{[0-9]+}}(%rsp)884; X64-NEXT: fcompi %st(1), %st885; X64-NEXT: fstp %st(0)886; X64-NEXT: wait887; X64-NEXT: cmoval %esi, %eax888; X64-NEXT: retq889 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(890 x86_fp80 %f1, x86_fp80 %f2, metadata !"uge",891 metadata !"fpexcept.strict") #0892 %res = select i1 %cond, i32 %a, i32 %b893 ret i32 %res894}895 896define i32 @test_ult_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {897; X86-LABEL: test_ult_s:898; X86: # %bb.0:899; X86-NEXT: fldt {{[0-9]+}}(%esp)900; X86-NEXT: fldt {{[0-9]+}}(%esp)901; X86-NEXT: fcompp902; X86-NEXT: wait903; X86-NEXT: fnstsw %ax904; X86-NEXT: # kill: def $ah killed $ah killed $ax905; X86-NEXT: sahf906; X86-NEXT: jb .LBB24_1907; X86-NEXT: # %bb.2:908; X86-NEXT: leal {{[0-9]+}}(%esp), %eax909; X86-NEXT: movl (%eax), %eax910; X86-NEXT: retl911; X86-NEXT: .LBB24_1:912; X86-NEXT: leal {{[0-9]+}}(%esp), %eax913; X86-NEXT: movl (%eax), %eax914; X86-NEXT: retl915;916; X64-LABEL: test_ult_s:917; X64: # %bb.0:918; X64-NEXT: movl %edi, %eax919; X64-NEXT: fldt {{[0-9]+}}(%rsp)920; X64-NEXT: fldt {{[0-9]+}}(%rsp)921; X64-NEXT: fcompi %st(1), %st922; X64-NEXT: fstp %st(0)923; X64-NEXT: wait924; X64-NEXT: cmovael %esi, %eax925; X64-NEXT: retq926 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(927 x86_fp80 %f1, x86_fp80 %f2, metadata !"ult",928 metadata !"fpexcept.strict") #0929 %res = select i1 %cond, i32 %a, i32 %b930 ret i32 %res931}932 933define i32 @test_ule_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {934; X86-LABEL: test_ule_s:935; X86: # %bb.0:936; X86-NEXT: fldt {{[0-9]+}}(%esp)937; X86-NEXT: fldt {{[0-9]+}}(%esp)938; X86-NEXT: fcompp939; X86-NEXT: wait940; X86-NEXT: fnstsw %ax941; X86-NEXT: # kill: def $ah killed $ah killed $ax942; X86-NEXT: sahf943; X86-NEXT: jbe .LBB25_1944; X86-NEXT: # %bb.2:945; X86-NEXT: leal {{[0-9]+}}(%esp), %eax946; X86-NEXT: movl (%eax), %eax947; X86-NEXT: retl948; X86-NEXT: .LBB25_1:949; X86-NEXT: leal {{[0-9]+}}(%esp), %eax950; X86-NEXT: movl (%eax), %eax951; X86-NEXT: retl952;953; X64-LABEL: test_ule_s:954; X64: # %bb.0:955; X64-NEXT: movl %edi, %eax956; X64-NEXT: fldt {{[0-9]+}}(%rsp)957; X64-NEXT: fldt {{[0-9]+}}(%rsp)958; X64-NEXT: fcompi %st(1), %st959; X64-NEXT: fstp %st(0)960; X64-NEXT: wait961; X64-NEXT: cmoval %esi, %eax962; X64-NEXT: retq963 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(964 x86_fp80 %f1, x86_fp80 %f2, metadata !"ule",965 metadata !"fpexcept.strict") #0966 %res = select i1 %cond, i32 %a, i32 %b967 ret i32 %res968}969 970define i32 @test_une_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {971; X86-LABEL: test_une_s:972; X86: # %bb.0:973; X86-NEXT: fldt {{[0-9]+}}(%esp)974; X86-NEXT: fldt {{[0-9]+}}(%esp)975; X86-NEXT: fcompp976; X86-NEXT: wait977; X86-NEXT: fnstsw %ax978; X86-NEXT: # kill: def $ah killed $ah killed $ax979; X86-NEXT: sahf980; X86-NEXT: leal {{[0-9]+}}(%esp), %eax981; X86-NEXT: jne .LBB26_3982; X86-NEXT: # %bb.1:983; X86-NEXT: jp .LBB26_3984; X86-NEXT: # %bb.2:985; X86-NEXT: leal {{[0-9]+}}(%esp), %eax986; X86-NEXT: .LBB26_3:987; X86-NEXT: movl (%eax), %eax988; X86-NEXT: retl989;990; X64-LABEL: test_une_s:991; X64: # %bb.0:992; X64-NEXT: movl %esi, %eax993; X64-NEXT: fldt {{[0-9]+}}(%rsp)994; X64-NEXT: fldt {{[0-9]+}}(%rsp)995; X64-NEXT: fcompi %st(1), %st996; X64-NEXT: fstp %st(0)997; X64-NEXT: wait998; X64-NEXT: cmovnel %edi, %eax999; X64-NEXT: cmovpl %edi, %eax1000; X64-NEXT: retq1001 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(1002 x86_fp80 %f1, x86_fp80 %f2, metadata !"une",1003 metadata !"fpexcept.strict") #01004 %res = select i1 %cond, i32 %a, i32 %b1005 ret i32 %res1006}1007 1008define i32 @test_uno_s(i32 %a, i32 %b, x86_fp80 %f1, x86_fp80 %f2) #0 {1009; X86-LABEL: test_uno_s:1010; X86: # %bb.0:1011; X86-NEXT: fldt {{[0-9]+}}(%esp)1012; X86-NEXT: fldt {{[0-9]+}}(%esp)1013; X86-NEXT: fcompp1014; X86-NEXT: wait1015; X86-NEXT: fnstsw %ax1016; X86-NEXT: # kill: def $ah killed $ah killed $ax1017; X86-NEXT: sahf1018; X86-NEXT: jp .LBB27_11019; X86-NEXT: # %bb.2:1020; X86-NEXT: leal {{[0-9]+}}(%esp), %eax1021; X86-NEXT: movl (%eax), %eax1022; X86-NEXT: retl1023; X86-NEXT: .LBB27_1:1024; X86-NEXT: leal {{[0-9]+}}(%esp), %eax1025; X86-NEXT: movl (%eax), %eax1026; X86-NEXT: retl1027;1028; X64-LABEL: test_uno_s:1029; X64: # %bb.0:1030; X64-NEXT: movl %edi, %eax1031; X64-NEXT: fldt {{[0-9]+}}(%rsp)1032; X64-NEXT: fldt {{[0-9]+}}(%rsp)1033; X64-NEXT: fcompi %st(1), %st1034; X64-NEXT: fstp %st(0)1035; X64-NEXT: wait1036; X64-NEXT: cmovnpl %esi, %eax1037; X64-NEXT: retq1038 %cond = call i1 @llvm.experimental.constrained.fcmps.f80(1039 x86_fp80 %f1, x86_fp80 %f2, metadata !"uno",1040 metadata !"fpexcept.strict") #01041 %res = select i1 %cond, i32 %a, i32 %b1042 ret i32 %res1043}1044 1045attributes #0 = { strictfp }1046 1047declare i1 @llvm.experimental.constrained.fcmp.f80(x86_fp80, x86_fp80, metadata, metadata)1048declare i1 @llvm.experimental.constrained.fcmps.f80(x86_fp80, x86_fp80, metadata, metadata)1049