1433 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,SDAG-X643; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,FAST-X644; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X645; RUN: llc < %s -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,SDAG-X866; Allow fast-isel to fallback to selection dag on x867; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,FAST-X868; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=+x87,-sse,-sse2 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X869 10 define i1 @fcmp_x86_fp80_oeq(x86_fp80 %x, x86_fp80 %y) nounwind {11; X64-LABEL: fcmp_x86_fp80_oeq:12; X64: ## %bb.0:13; X64-NEXT: fldt {{[0-9]+}}(%rsp)14; X64-NEXT: fldt {{[0-9]+}}(%rsp)15; X64-NEXT: fucompi %st(1), %st16; X64-NEXT: fstp %st(0)17; X64-NEXT: setnp %cl18; X64-NEXT: sete %al19; X64-NEXT: andb %cl, %al20; X64-NEXT: retq21;22; GISEL-X64-LABEL: fcmp_x86_fp80_oeq:23; GISEL-X64: ## %bb.0:24; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)25; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)26; GISEL-X64-NEXT: fxch %st(1)27; GISEL-X64-NEXT: fucompi %st(1), %st28; GISEL-X64-NEXT: fstp %st(0)29; GISEL-X64-NEXT: sete %cl30; GISEL-X64-NEXT: setnp %al31; GISEL-X64-NEXT: andb %cl, %al32; GISEL-X64-NEXT: retq33;34; X86-LABEL: fcmp_x86_fp80_oeq:35; X86: ## %bb.0:36; X86-NEXT: fldt {{[0-9]+}}(%esp)37; X86-NEXT: fldt {{[0-9]+}}(%esp)38; X86-NEXT: fucompp39; X86-NEXT: fnstsw %ax40; X86-NEXT: ## kill: def $ah killed $ah killed $ax41; X86-NEXT: sahf42; X86-NEXT: setnp %cl43; X86-NEXT: sete %al44; X86-NEXT: andb %cl, %al45; X86-NEXT: retl46;47; GISEL-X86-LABEL: fcmp_x86_fp80_oeq:48; GISEL-X86: ## %bb.0:49; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)50; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)51; GISEL-X86-NEXT: fxch %st(1)52; GISEL-X86-NEXT: fucompi %st(1), %st53; GISEL-X86-NEXT: fstp %st(0)54; GISEL-X86-NEXT: sete %cl55; GISEL-X86-NEXT: setnp %al56; GISEL-X86-NEXT: andb %cl, %al57; GISEL-X86-NEXT: retl58 %1 = fcmp oeq x86_fp80 %x, %y59 ret i1 %160 }61 62 define i1 @fcmp_x86_fp80_ogt(x86_fp80 %x, x86_fp80 %y) nounwind {63; X64-LABEL: fcmp_x86_fp80_ogt:64; X64: ## %bb.0:65; X64-NEXT: fldt {{[0-9]+}}(%rsp)66; X64-NEXT: fldt {{[0-9]+}}(%rsp)67; X64-NEXT: fucompi %st(1), %st68; X64-NEXT: fstp %st(0)69; X64-NEXT: seta %al70; X64-NEXT: retq71;72; GISEL-X64-LABEL: fcmp_x86_fp80_ogt:73; GISEL-X64: ## %bb.0:74; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)75; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)76; GISEL-X64-NEXT: fxch %st(1)77; GISEL-X64-NEXT: fucompi %st(1), %st78; GISEL-X64-NEXT: fstp %st(0)79; GISEL-X64-NEXT: seta %al80; GISEL-X64-NEXT: retq81;82; X86-LABEL: fcmp_x86_fp80_ogt:83; X86: ## %bb.0:84; X86-NEXT: fldt {{[0-9]+}}(%esp)85; X86-NEXT: fldt {{[0-9]+}}(%esp)86; X86-NEXT: fucompp87; X86-NEXT: fnstsw %ax88; X86-NEXT: ## kill: def $ah killed $ah killed $ax89; X86-NEXT: sahf90; X86-NEXT: seta %al91; X86-NEXT: retl92;93; GISEL-X86-LABEL: fcmp_x86_fp80_ogt:94; GISEL-X86: ## %bb.0:95; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)96; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)97; GISEL-X86-NEXT: fxch %st(1)98; GISEL-X86-NEXT: fucompi %st(1), %st99; GISEL-X86-NEXT: fstp %st(0)100; GISEL-X86-NEXT: seta %al101; GISEL-X86-NEXT: retl102 %1 = fcmp ogt x86_fp80 %x, %y103 ret i1 %1104 }105 106 define i1 @fcmp_x86_fp80_oge(x86_fp80 %x, x86_fp80 %y) nounwind {107; X64-LABEL: fcmp_x86_fp80_oge:108; X64: ## %bb.0:109; X64-NEXT: fldt {{[0-9]+}}(%rsp)110; X64-NEXT: fldt {{[0-9]+}}(%rsp)111; X64-NEXT: fucompi %st(1), %st112; X64-NEXT: fstp %st(0)113; X64-NEXT: setae %al114; X64-NEXT: retq115;116; GISEL-X64-LABEL: fcmp_x86_fp80_oge:117; GISEL-X64: ## %bb.0:118; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)119; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)120; GISEL-X64-NEXT: fxch %st(1)121; GISEL-X64-NEXT: fucompi %st(1), %st122; GISEL-X64-NEXT: fstp %st(0)123; GISEL-X64-NEXT: setae %al124; GISEL-X64-NEXT: retq125;126; X86-LABEL: fcmp_x86_fp80_oge:127; X86: ## %bb.0:128; X86-NEXT: fldt {{[0-9]+}}(%esp)129; X86-NEXT: fldt {{[0-9]+}}(%esp)130; X86-NEXT: fucompp131; X86-NEXT: fnstsw %ax132; X86-NEXT: ## kill: def $ah killed $ah killed $ax133; X86-NEXT: sahf134; X86-NEXT: setae %al135; X86-NEXT: retl136;137; GISEL-X86-LABEL: fcmp_x86_fp80_oge:138; GISEL-X86: ## %bb.0:139; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)140; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)141; GISEL-X86-NEXT: fxch %st(1)142; GISEL-X86-NEXT: fucompi %st(1), %st143; GISEL-X86-NEXT: fstp %st(0)144; GISEL-X86-NEXT: setae %al145; GISEL-X86-NEXT: retl146 %1 = fcmp oge x86_fp80 %x, %y147 ret i1 %1148 }149 150 define i1 @fcmp_x86_fp80_olt(x86_fp80 %x, x86_fp80 %y) nounwind {151; SDAG-X64-LABEL: fcmp_x86_fp80_olt:152; SDAG-X64: ## %bb.0:153; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)154; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)155; SDAG-X64-NEXT: fucompi %st(1), %st156; SDAG-X64-NEXT: fstp %st(0)157; SDAG-X64-NEXT: seta %al158; SDAG-X64-NEXT: retq159;160; FAST-X64-LABEL: fcmp_x86_fp80_olt:161; FAST-X64: ## %bb.0:162; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)163; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)164; FAST-X64-NEXT: fxch %st(1)165; FAST-X64-NEXT: fucompi %st(1), %st166; FAST-X64-NEXT: fstp %st(0)167; FAST-X64-NEXT: seta %al168; FAST-X64-NEXT: retq169;170; GISEL-X64-LABEL: fcmp_x86_fp80_olt:171; GISEL-X64: ## %bb.0:172; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)173; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)174; GISEL-X64-NEXT: fucompi %st(1), %st175; GISEL-X64-NEXT: fstp %st(0)176; GISEL-X64-NEXT: seta %al177; GISEL-X64-NEXT: retq178;179; SDAG-X86-LABEL: fcmp_x86_fp80_olt:180; SDAG-X86: ## %bb.0:181; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)182; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)183; SDAG-X86-NEXT: fucompp184; SDAG-X86-NEXT: fnstsw %ax185; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax186; SDAG-X86-NEXT: sahf187; SDAG-X86-NEXT: seta %al188; SDAG-X86-NEXT: retl189;190; FAST-X86-LABEL: fcmp_x86_fp80_olt:191; FAST-X86: ## %bb.0:192; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)193; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)194; FAST-X86-NEXT: fxch %st(1)195; FAST-X86-NEXT: fucompp196; FAST-X86-NEXT: fnstsw %ax197; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax198; FAST-X86-NEXT: sahf199; FAST-X86-NEXT: seta %al200; FAST-X86-NEXT: retl201;202; GISEL-X86-LABEL: fcmp_x86_fp80_olt:203; GISEL-X86: ## %bb.0:204; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)205; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)206; GISEL-X86-NEXT: fucompi %st(1), %st207; GISEL-X86-NEXT: fstp %st(0)208; GISEL-X86-NEXT: seta %al209; GISEL-X86-NEXT: retl210 %1 = fcmp olt x86_fp80 %x, %y211 ret i1 %1212 }213 214 define i1 @fcmp_x86_fp80_ole(x86_fp80 %x, x86_fp80 %y) nounwind {215; SDAG-X64-LABEL: fcmp_x86_fp80_ole:216; SDAG-X64: ## %bb.0:217; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)218; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)219; SDAG-X64-NEXT: fucompi %st(1), %st220; SDAG-X64-NEXT: fstp %st(0)221; SDAG-X64-NEXT: setae %al222; SDAG-X64-NEXT: retq223;224; FAST-X64-LABEL: fcmp_x86_fp80_ole:225; FAST-X64: ## %bb.0:226; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)227; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)228; FAST-X64-NEXT: fxch %st(1)229; FAST-X64-NEXT: fucompi %st(1), %st230; FAST-X64-NEXT: fstp %st(0)231; FAST-X64-NEXT: setae %al232; FAST-X64-NEXT: retq233;234; GISEL-X64-LABEL: fcmp_x86_fp80_ole:235; GISEL-X64: ## %bb.0:236; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)237; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)238; GISEL-X64-NEXT: fucompi %st(1), %st239; GISEL-X64-NEXT: fstp %st(0)240; GISEL-X64-NEXT: setae %al241; GISEL-X64-NEXT: retq242;243; SDAG-X86-LABEL: fcmp_x86_fp80_ole:244; SDAG-X86: ## %bb.0:245; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)246; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)247; SDAG-X86-NEXT: fucompp248; SDAG-X86-NEXT: fnstsw %ax249; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax250; SDAG-X86-NEXT: sahf251; SDAG-X86-NEXT: setae %al252; SDAG-X86-NEXT: retl253;254; FAST-X86-LABEL: fcmp_x86_fp80_ole:255; FAST-X86: ## %bb.0:256; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)257; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)258; FAST-X86-NEXT: fxch %st(1)259; FAST-X86-NEXT: fucompp260; FAST-X86-NEXT: fnstsw %ax261; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax262; FAST-X86-NEXT: sahf263; FAST-X86-NEXT: setae %al264; FAST-X86-NEXT: retl265;266; GISEL-X86-LABEL: fcmp_x86_fp80_ole:267; GISEL-X86: ## %bb.0:268; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)269; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)270; GISEL-X86-NEXT: fucompi %st(1), %st271; GISEL-X86-NEXT: fstp %st(0)272; GISEL-X86-NEXT: setae %al273; GISEL-X86-NEXT: retl274 %1 = fcmp ole x86_fp80 %x, %y275 ret i1 %1276 }277 278 define i1 @fcmp_x86_fp80_one(x86_fp80 %x, x86_fp80 %y) nounwind {279; X64-LABEL: fcmp_x86_fp80_one:280; X64: ## %bb.0:281; X64-NEXT: fldt {{[0-9]+}}(%rsp)282; X64-NEXT: fldt {{[0-9]+}}(%rsp)283; X64-NEXT: fucompi %st(1), %st284; X64-NEXT: fstp %st(0)285; X64-NEXT: setne %al286; X64-NEXT: retq287;288; GISEL-X64-LABEL: fcmp_x86_fp80_one:289; GISEL-X64: ## %bb.0:290; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)291; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)292; GISEL-X64-NEXT: fxch %st(1)293; GISEL-X64-NEXT: fucompi %st(1), %st294; GISEL-X64-NEXT: fstp %st(0)295; GISEL-X64-NEXT: setne %al296; GISEL-X64-NEXT: retq297;298; X86-LABEL: fcmp_x86_fp80_one:299; X86: ## %bb.0:300; X86-NEXT: fldt {{[0-9]+}}(%esp)301; X86-NEXT: fldt {{[0-9]+}}(%esp)302; X86-NEXT: fucompp303; X86-NEXT: fnstsw %ax304; X86-NEXT: ## kill: def $ah killed $ah killed $ax305; X86-NEXT: sahf306; X86-NEXT: setne %al307; X86-NEXT: retl308;309; GISEL-X86-LABEL: fcmp_x86_fp80_one:310; GISEL-X86: ## %bb.0:311; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)312; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)313; GISEL-X86-NEXT: fxch %st(1)314; GISEL-X86-NEXT: fucompi %st(1), %st315; GISEL-X86-NEXT: fstp %st(0)316; GISEL-X86-NEXT: setne %al317; GISEL-X86-NEXT: retl318 %1 = fcmp one x86_fp80 %x, %y319 ret i1 %1320 }321 322 define i1 @fcmp_x86_fp80_ord(x86_fp80 %x, x86_fp80 %y) nounwind {323; X64-LABEL: fcmp_x86_fp80_ord:324; X64: ## %bb.0:325; 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: setnp %al330; X64-NEXT: retq331;332; GISEL-X64-LABEL: fcmp_x86_fp80_ord:333; GISEL-X64: ## %bb.0:334; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)335; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)336; GISEL-X64-NEXT: fxch %st(1)337; GISEL-X64-NEXT: fucompi %st(1), %st338; GISEL-X64-NEXT: fstp %st(0)339; GISEL-X64-NEXT: setnp %al340; GISEL-X64-NEXT: retq341;342; X86-LABEL: fcmp_x86_fp80_ord:343; X86: ## %bb.0:344; X86-NEXT: fldt {{[0-9]+}}(%esp)345; X86-NEXT: fldt {{[0-9]+}}(%esp)346; X86-NEXT: fucompp347; X86-NEXT: fnstsw %ax348; X86-NEXT: ## kill: def $ah killed $ah killed $ax349; X86-NEXT: sahf350; X86-NEXT: setnp %al351; X86-NEXT: retl352;353; GISEL-X86-LABEL: fcmp_x86_fp80_ord:354; GISEL-X86: ## %bb.0:355; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)356; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)357; GISEL-X86-NEXT: fxch %st(1)358; GISEL-X86-NEXT: fucompi %st(1), %st359; GISEL-X86-NEXT: fstp %st(0)360; GISEL-X86-NEXT: setnp %al361; GISEL-X86-NEXT: retl362 %1 = fcmp ord x86_fp80 %x, %y363 ret i1 %1364 }365 366 define i1 @fcmp_x86_fp80_uno(x86_fp80 %x, x86_fp80 %y) nounwind {367; X64-LABEL: fcmp_x86_fp80_uno:368; X64: ## %bb.0:369; X64-NEXT: fldt {{[0-9]+}}(%rsp)370; X64-NEXT: fldt {{[0-9]+}}(%rsp)371; X64-NEXT: fucompi %st(1), %st372; X64-NEXT: fstp %st(0)373; X64-NEXT: setp %al374; X64-NEXT: retq375;376; GISEL-X64-LABEL: fcmp_x86_fp80_uno:377; GISEL-X64: ## %bb.0:378; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)379; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)380; GISEL-X64-NEXT: fxch %st(1)381; GISEL-X64-NEXT: fucompi %st(1), %st382; GISEL-X64-NEXT: fstp %st(0)383; GISEL-X64-NEXT: setp %al384; GISEL-X64-NEXT: retq385;386; X86-LABEL: fcmp_x86_fp80_uno:387; X86: ## %bb.0:388; X86-NEXT: fldt {{[0-9]+}}(%esp)389; X86-NEXT: fldt {{[0-9]+}}(%esp)390; X86-NEXT: fucompp391; X86-NEXT: fnstsw %ax392; X86-NEXT: ## kill: def $ah killed $ah killed $ax393; X86-NEXT: sahf394; X86-NEXT: setp %al395; X86-NEXT: retl396;397; GISEL-X86-LABEL: fcmp_x86_fp80_uno:398; GISEL-X86: ## %bb.0:399; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)400; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)401; GISEL-X86-NEXT: fxch %st(1)402; GISEL-X86-NEXT: fucompi %st(1), %st403; GISEL-X86-NEXT: fstp %st(0)404; GISEL-X86-NEXT: setp %al405; GISEL-X86-NEXT: retl406 %1 = fcmp uno x86_fp80 %x, %y407 ret i1 %1408 }409 410 define i1 @fcmp_x86_fp80_ueq(x86_fp80 %x, x86_fp80 %y) nounwind {411; X64-LABEL: fcmp_x86_fp80_ueq:412; X64: ## %bb.0:413; X64-NEXT: fldt {{[0-9]+}}(%rsp)414; X64-NEXT: fldt {{[0-9]+}}(%rsp)415; X64-NEXT: fucompi %st(1), %st416; X64-NEXT: fstp %st(0)417; X64-NEXT: sete %al418; X64-NEXT: retq419;420; GISEL-X64-LABEL: fcmp_x86_fp80_ueq:421; GISEL-X64: ## %bb.0:422; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)423; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)424; GISEL-X64-NEXT: fxch %st(1)425; GISEL-X64-NEXT: fucompi %st(1), %st426; GISEL-X64-NEXT: fstp %st(0)427; GISEL-X64-NEXT: sete %al428; GISEL-X64-NEXT: retq429;430; X86-LABEL: fcmp_x86_fp80_ueq:431; X86: ## %bb.0:432; X86-NEXT: fldt {{[0-9]+}}(%esp)433; X86-NEXT: fldt {{[0-9]+}}(%esp)434; X86-NEXT: fucompp435; X86-NEXT: fnstsw %ax436; X86-NEXT: ## kill: def $ah killed $ah killed $ax437; X86-NEXT: sahf438; X86-NEXT: sete %al439; X86-NEXT: retl440;441; GISEL-X86-LABEL: fcmp_x86_fp80_ueq:442; GISEL-X86: ## %bb.0:443; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)444; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)445; GISEL-X86-NEXT: fxch %st(1)446; GISEL-X86-NEXT: fucompi %st(1), %st447; GISEL-X86-NEXT: fstp %st(0)448; GISEL-X86-NEXT: sete %al449; GISEL-X86-NEXT: retl450 %1 = fcmp ueq x86_fp80 %x, %y451 ret i1 %1452 }453 454 define i1 @fcmp_x86_fp80_ugt(x86_fp80 %x, x86_fp80 %y) nounwind {455; SDAG-X64-LABEL: fcmp_x86_fp80_ugt:456; SDAG-X64: ## %bb.0:457; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)458; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)459; SDAG-X64-NEXT: fucompi %st(1), %st460; SDAG-X64-NEXT: fstp %st(0)461; SDAG-X64-NEXT: setb %al462; SDAG-X64-NEXT: retq463;464; FAST-X64-LABEL: fcmp_x86_fp80_ugt:465; FAST-X64: ## %bb.0:466; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)467; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)468; FAST-X64-NEXT: fxch %st(1)469; FAST-X64-NEXT: fucompi %st(1), %st470; FAST-X64-NEXT: fstp %st(0)471; FAST-X64-NEXT: setb %al472; FAST-X64-NEXT: retq473;474; GISEL-X64-LABEL: fcmp_x86_fp80_ugt:475; GISEL-X64: ## %bb.0:476; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)477; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)478; GISEL-X64-NEXT: fucompi %st(1), %st479; GISEL-X64-NEXT: fstp %st(0)480; GISEL-X64-NEXT: setb %al481; GISEL-X64-NEXT: retq482;483; SDAG-X86-LABEL: fcmp_x86_fp80_ugt:484; SDAG-X86: ## %bb.0:485; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)486; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)487; SDAG-X86-NEXT: fucompp488; SDAG-X86-NEXT: fnstsw %ax489; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax490; SDAG-X86-NEXT: sahf491; SDAG-X86-NEXT: setb %al492; SDAG-X86-NEXT: retl493;494; FAST-X86-LABEL: fcmp_x86_fp80_ugt:495; FAST-X86: ## %bb.0:496; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)497; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)498; FAST-X86-NEXT: fxch %st(1)499; FAST-X86-NEXT: fucompp500; FAST-X86-NEXT: fnstsw %ax501; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax502; FAST-X86-NEXT: sahf503; FAST-X86-NEXT: setb %al504; FAST-X86-NEXT: retl505;506; GISEL-X86-LABEL: fcmp_x86_fp80_ugt:507; GISEL-X86: ## %bb.0:508; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)509; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)510; GISEL-X86-NEXT: fucompi %st(1), %st511; GISEL-X86-NEXT: fstp %st(0)512; GISEL-X86-NEXT: setb %al513; GISEL-X86-NEXT: retl514 %1 = fcmp ugt x86_fp80 %x, %y515 ret i1 %1516 }517 518 define i1 @fcmp_x86_fp80_uge(x86_fp80 %x, x86_fp80 %y) nounwind {519; SDAG-X64-LABEL: fcmp_x86_fp80_uge:520; SDAG-X64: ## %bb.0:521; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)522; SDAG-X64-NEXT: fldt {{[0-9]+}}(%rsp)523; SDAG-X64-NEXT: fucompi %st(1), %st524; SDAG-X64-NEXT: fstp %st(0)525; SDAG-X64-NEXT: setbe %al526; SDAG-X64-NEXT: retq527;528; FAST-X64-LABEL: fcmp_x86_fp80_uge:529; FAST-X64: ## %bb.0:530; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)531; FAST-X64-NEXT: fldt {{[0-9]+}}(%rsp)532; FAST-X64-NEXT: fxch %st(1)533; FAST-X64-NEXT: fucompi %st(1), %st534; FAST-X64-NEXT: fstp %st(0)535; FAST-X64-NEXT: setbe %al536; FAST-X64-NEXT: retq537;538; GISEL-X64-LABEL: fcmp_x86_fp80_uge:539; GISEL-X64: ## %bb.0:540; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)541; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)542; GISEL-X64-NEXT: fucompi %st(1), %st543; GISEL-X64-NEXT: fstp %st(0)544; GISEL-X64-NEXT: setbe %al545; GISEL-X64-NEXT: retq546;547; SDAG-X86-LABEL: fcmp_x86_fp80_uge:548; SDAG-X86: ## %bb.0:549; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)550; SDAG-X86-NEXT: fldt {{[0-9]+}}(%esp)551; SDAG-X86-NEXT: fucompp552; SDAG-X86-NEXT: fnstsw %ax553; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax554; SDAG-X86-NEXT: sahf555; SDAG-X86-NEXT: setbe %al556; SDAG-X86-NEXT: retl557;558; FAST-X86-LABEL: fcmp_x86_fp80_uge:559; FAST-X86: ## %bb.0:560; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)561; FAST-X86-NEXT: fldt {{[0-9]+}}(%esp)562; FAST-X86-NEXT: fxch %st(1)563; FAST-X86-NEXT: fucompp564; FAST-X86-NEXT: fnstsw %ax565; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax566; FAST-X86-NEXT: sahf567; FAST-X86-NEXT: setbe %al568; FAST-X86-NEXT: retl569;570; GISEL-X86-LABEL: fcmp_x86_fp80_uge:571; GISEL-X86: ## %bb.0:572; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)573; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)574; GISEL-X86-NEXT: fucompi %st(1), %st575; GISEL-X86-NEXT: fstp %st(0)576; GISEL-X86-NEXT: setbe %al577; GISEL-X86-NEXT: retl578 %1 = fcmp uge x86_fp80 %x, %y579 ret i1 %1580 }581 582 define i1 @fcmp_x86_fp80_ult(x86_fp80 %x, x86_fp80 %y) nounwind {583; X64-LABEL: fcmp_x86_fp80_ult:584; X64: ## %bb.0:585; X64-NEXT: fldt {{[0-9]+}}(%rsp)586; X64-NEXT: fldt {{[0-9]+}}(%rsp)587; X64-NEXT: fucompi %st(1), %st588; X64-NEXT: fstp %st(0)589; X64-NEXT: setb %al590; X64-NEXT: retq591;592; GISEL-X64-LABEL: fcmp_x86_fp80_ult:593; GISEL-X64: ## %bb.0:594; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)595; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)596; GISEL-X64-NEXT: fxch %st(1)597; GISEL-X64-NEXT: fucompi %st(1), %st598; GISEL-X64-NEXT: fstp %st(0)599; GISEL-X64-NEXT: setb %al600; GISEL-X64-NEXT: retq601;602; X86-LABEL: fcmp_x86_fp80_ult:603; X86: ## %bb.0:604; X86-NEXT: fldt {{[0-9]+}}(%esp)605; X86-NEXT: fldt {{[0-9]+}}(%esp)606; X86-NEXT: fucompp607; X86-NEXT: fnstsw %ax608; X86-NEXT: ## kill: def $ah killed $ah killed $ax609; X86-NEXT: sahf610; X86-NEXT: setb %al611; X86-NEXT: retl612;613; GISEL-X86-LABEL: fcmp_x86_fp80_ult:614; GISEL-X86: ## %bb.0:615; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)616; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)617; GISEL-X86-NEXT: fxch %st(1)618; GISEL-X86-NEXT: fucompi %st(1), %st619; GISEL-X86-NEXT: fstp %st(0)620; GISEL-X86-NEXT: setb %al621; GISEL-X86-NEXT: retl622 %1 = fcmp ult x86_fp80 %x, %y623 ret i1 %1624 }625 626 define i1 @fcmp_x86_fp80_ule(x86_fp80 %x, x86_fp80 %y) nounwind {627; X64-LABEL: fcmp_x86_fp80_ule:628; X64: ## %bb.0:629; X64-NEXT: fldt {{[0-9]+}}(%rsp)630; X64-NEXT: fldt {{[0-9]+}}(%rsp)631; X64-NEXT: fucompi %st(1), %st632; X64-NEXT: fstp %st(0)633; X64-NEXT: setbe %al634; X64-NEXT: retq635;636; GISEL-X64-LABEL: fcmp_x86_fp80_ule:637; GISEL-X64: ## %bb.0:638; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)639; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)640; GISEL-X64-NEXT: fxch %st(1)641; GISEL-X64-NEXT: fucompi %st(1), %st642; GISEL-X64-NEXT: fstp %st(0)643; GISEL-X64-NEXT: setbe %al644; GISEL-X64-NEXT: retq645;646; X86-LABEL: fcmp_x86_fp80_ule:647; X86: ## %bb.0:648; X86-NEXT: fldt {{[0-9]+}}(%esp)649; X86-NEXT: fldt {{[0-9]+}}(%esp)650; X86-NEXT: fucompp651; X86-NEXT: fnstsw %ax652; X86-NEXT: ## kill: def $ah killed $ah killed $ax653; X86-NEXT: sahf654; X86-NEXT: setbe %al655; X86-NEXT: retl656;657; GISEL-X86-LABEL: fcmp_x86_fp80_ule:658; GISEL-X86: ## %bb.0:659; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)660; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)661; GISEL-X86-NEXT: fxch %st(1)662; GISEL-X86-NEXT: fucompi %st(1), %st663; GISEL-X86-NEXT: fstp %st(0)664; GISEL-X86-NEXT: setbe %al665; GISEL-X86-NEXT: retl666 %1 = fcmp ule x86_fp80 %x, %y667 ret i1 %1668 }669 670 define i1 @fcmp_x86_fp80_une(x86_fp80 %x, x86_fp80 %y) nounwind {671; X64-LABEL: fcmp_x86_fp80_une:672; X64: ## %bb.0:673; X64-NEXT: fldt {{[0-9]+}}(%rsp)674; X64-NEXT: fldt {{[0-9]+}}(%rsp)675; X64-NEXT: fucompi %st(1), %st676; X64-NEXT: fstp %st(0)677; X64-NEXT: setp %cl678; X64-NEXT: setne %al679; X64-NEXT: orb %cl, %al680; X64-NEXT: retq681;682; GISEL-X64-LABEL: fcmp_x86_fp80_une:683; GISEL-X64: ## %bb.0:684; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)685; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)686; GISEL-X64-NEXT: fxch %st(1)687; GISEL-X64-NEXT: fucompi %st(1), %st688; GISEL-X64-NEXT: fstp %st(0)689; GISEL-X64-NEXT: setne %cl690; GISEL-X64-NEXT: setp %al691; GISEL-X64-NEXT: orb %cl, %al692; GISEL-X64-NEXT: retq693;694; X86-LABEL: fcmp_x86_fp80_une:695; X86: ## %bb.0:696; X86-NEXT: fldt {{[0-9]+}}(%esp)697; X86-NEXT: fldt {{[0-9]+}}(%esp)698; X86-NEXT: fucompp699; X86-NEXT: fnstsw %ax700; X86-NEXT: ## kill: def $ah killed $ah killed $ax701; X86-NEXT: sahf702; X86-NEXT: setp %cl703; X86-NEXT: setne %al704; X86-NEXT: orb %cl, %al705; X86-NEXT: retl706;707; GISEL-X86-LABEL: fcmp_x86_fp80_une:708; GISEL-X86: ## %bb.0:709; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)710; GISEL-X86-NEXT: fldt {{[0-9]+}}(%esp)711; GISEL-X86-NEXT: fxch %st(1)712; GISEL-X86-NEXT: fucompi %st(1), %st713; GISEL-X86-NEXT: fstp %st(0)714; GISEL-X86-NEXT: setne %cl715; GISEL-X86-NEXT: setp %al716; GISEL-X86-NEXT: orb %cl, %al717; GISEL-X86-NEXT: retl718 %1 = fcmp une x86_fp80 %x, %y719 ret i1 %1720 }721 722 define i1 @fcmp_float_oeq(float %x, float %y) {723; X64-LABEL: fcmp_float_oeq:724; X64: ## %bb.0:725; X64-NEXT: flds {{[0-9]+}}(%rsp)726; X64-NEXT: flds {{[0-9]+}}(%rsp)727; X64-NEXT: fucompi %st(1), %st728; X64-NEXT: fstp %st(0)729; X64-NEXT: setnp %cl730; X64-NEXT: sete %al731; X64-NEXT: andb %cl, %al732; X64-NEXT: retq733;734; GISEL-X64-LABEL: fcmp_float_oeq:735; GISEL-X64: ## %bb.0:736; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)737; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)738; GISEL-X64-NEXT: fxch %st(1)739; GISEL-X64-NEXT: fucompi %st(1), %st740; GISEL-X64-NEXT: fstp %st(0)741; GISEL-X64-NEXT: sete %cl742; GISEL-X64-NEXT: setnp %al743; GISEL-X64-NEXT: andb %cl, %al744; GISEL-X64-NEXT: retq745;746; X86-LABEL: fcmp_float_oeq:747; X86: ## %bb.0:748; X86-NEXT: flds {{[0-9]+}}(%esp)749; X86-NEXT: flds {{[0-9]+}}(%esp)750; X86-NEXT: fucompp751; X86-NEXT: fnstsw %ax752; X86-NEXT: ## kill: def $ah killed $ah killed $ax753; X86-NEXT: sahf754; X86-NEXT: setnp %cl755; X86-NEXT: sete %al756; X86-NEXT: andb %cl, %al757; X86-NEXT: retl758;759; GISEL-X86-LABEL: fcmp_float_oeq:760; GISEL-X86: ## %bb.0:761; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)762; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)763; GISEL-X86-NEXT: fxch %st(1)764; GISEL-X86-NEXT: fucompi %st(1), %st765; GISEL-X86-NEXT: fstp %st(0)766; GISEL-X86-NEXT: sete %cl767; GISEL-X86-NEXT: setnp %al768; GISEL-X86-NEXT: andb %cl, %al769; GISEL-X86-NEXT: retl770 %1 = fcmp oeq float %x, %y771 ret i1 %1772 }773 774 define i1 @fcmp_float_ogt(float %x, float %y) {775; X64-LABEL: fcmp_float_ogt:776; X64: ## %bb.0:777; X64-NEXT: flds {{[0-9]+}}(%rsp)778; X64-NEXT: flds {{[0-9]+}}(%rsp)779; X64-NEXT: fucompi %st(1), %st780; X64-NEXT: fstp %st(0)781; X64-NEXT: seta %al782; X64-NEXT: retq783;784; GISEL-X64-LABEL: fcmp_float_ogt:785; GISEL-X64: ## %bb.0:786; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)787; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)788; GISEL-X64-NEXT: fxch %st(1)789; GISEL-X64-NEXT: fucompi %st(1), %st790; GISEL-X64-NEXT: fstp %st(0)791; GISEL-X64-NEXT: seta %al792; GISEL-X64-NEXT: retq793;794; X86-LABEL: fcmp_float_ogt:795; X86: ## %bb.0:796; X86-NEXT: flds {{[0-9]+}}(%esp)797; X86-NEXT: flds {{[0-9]+}}(%esp)798; X86-NEXT: fucompp799; X86-NEXT: fnstsw %ax800; X86-NEXT: ## kill: def $ah killed $ah killed $ax801; X86-NEXT: sahf802; X86-NEXT: seta %al803; X86-NEXT: retl804;805; GISEL-X86-LABEL: fcmp_float_ogt:806; GISEL-X86: ## %bb.0:807; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)808; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)809; GISEL-X86-NEXT: fxch %st(1)810; GISEL-X86-NEXT: fucompi %st(1), %st811; GISEL-X86-NEXT: fstp %st(0)812; GISEL-X86-NEXT: seta %al813; GISEL-X86-NEXT: retl814 %1 = fcmp ogt float %x, %y815 ret i1 %1816 }817 818 define i1 @fcmp_float_oge(float %x, float %y) {819; X64-LABEL: fcmp_float_oge:820; X64: ## %bb.0:821; X64-NEXT: flds {{[0-9]+}}(%rsp)822; X64-NEXT: flds {{[0-9]+}}(%rsp)823; X64-NEXT: fucompi %st(1), %st824; X64-NEXT: fstp %st(0)825; X64-NEXT: setae %al826; X64-NEXT: retq827;828; GISEL-X64-LABEL: fcmp_float_oge:829; GISEL-X64: ## %bb.0:830; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)831; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)832; GISEL-X64-NEXT: fxch %st(1)833; GISEL-X64-NEXT: fucompi %st(1), %st834; GISEL-X64-NEXT: fstp %st(0)835; GISEL-X64-NEXT: setae %al836; GISEL-X64-NEXT: retq837;838; X86-LABEL: fcmp_float_oge:839; X86: ## %bb.0:840; X86-NEXT: flds {{[0-9]+}}(%esp)841; X86-NEXT: flds {{[0-9]+}}(%esp)842; X86-NEXT: fucompp843; X86-NEXT: fnstsw %ax844; X86-NEXT: ## kill: def $ah killed $ah killed $ax845; X86-NEXT: sahf846; X86-NEXT: setae %al847; X86-NEXT: retl848;849; GISEL-X86-LABEL: fcmp_float_oge:850; GISEL-X86: ## %bb.0:851; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)852; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)853; GISEL-X86-NEXT: fxch %st(1)854; GISEL-X86-NEXT: fucompi %st(1), %st855; GISEL-X86-NEXT: fstp %st(0)856; GISEL-X86-NEXT: setae %al857; GISEL-X86-NEXT: retl858 %1 = fcmp oge float %x, %y859 ret i1 %1860 }861 862 define i1 @fcmp_float_olt(float %x, float %y) {863; SDAG-X64-LABEL: fcmp_float_olt:864; SDAG-X64: ## %bb.0:865; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)866; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)867; SDAG-X64-NEXT: fucompi %st(1), %st868; SDAG-X64-NEXT: fstp %st(0)869; SDAG-X64-NEXT: seta %al870; SDAG-X64-NEXT: retq871;872; FAST-X64-LABEL: fcmp_float_olt:873; FAST-X64: ## %bb.0:874; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)875; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)876; FAST-X64-NEXT: fxch %st(1)877; FAST-X64-NEXT: fucompi %st(1), %st878; FAST-X64-NEXT: fstp %st(0)879; FAST-X64-NEXT: seta %al880; FAST-X64-NEXT: retq881;882; GISEL-X64-LABEL: fcmp_float_olt:883; GISEL-X64: ## %bb.0:884; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)885; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)886; GISEL-X64-NEXT: fucompi %st(1), %st887; GISEL-X64-NEXT: fstp %st(0)888; GISEL-X64-NEXT: seta %al889; GISEL-X64-NEXT: retq890;891; SDAG-X86-LABEL: fcmp_float_olt:892; SDAG-X86: ## %bb.0:893; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)894; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)895; SDAG-X86-NEXT: fucompp896; SDAG-X86-NEXT: fnstsw %ax897; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax898; SDAG-X86-NEXT: sahf899; SDAG-X86-NEXT: seta %al900; SDAG-X86-NEXT: retl901;902; FAST-X86-LABEL: fcmp_float_olt:903; FAST-X86: ## %bb.0:904; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)905; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)906; FAST-X86-NEXT: fxch %st(1)907; FAST-X86-NEXT: fucompp908; FAST-X86-NEXT: fnstsw %ax909; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax910; FAST-X86-NEXT: sahf911; FAST-X86-NEXT: seta %al912; FAST-X86-NEXT: retl913;914; GISEL-X86-LABEL: fcmp_float_olt:915; GISEL-X86: ## %bb.0:916; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)917; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)918; GISEL-X86-NEXT: fucompi %st(1), %st919; GISEL-X86-NEXT: fstp %st(0)920; GISEL-X86-NEXT: seta %al921; GISEL-X86-NEXT: retl922 %1 = fcmp olt float %x, %y923 ret i1 %1924 }925 926 define i1 @fcmp_float_ole(float %x, float %y) {927; SDAG-X64-LABEL: fcmp_float_ole:928; SDAG-X64: ## %bb.0:929; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)930; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)931; SDAG-X64-NEXT: fucompi %st(1), %st932; SDAG-X64-NEXT: fstp %st(0)933; SDAG-X64-NEXT: setae %al934; SDAG-X64-NEXT: retq935;936; FAST-X64-LABEL: fcmp_float_ole:937; FAST-X64: ## %bb.0:938; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)939; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)940; FAST-X64-NEXT: fxch %st(1)941; FAST-X64-NEXT: fucompi %st(1), %st942; FAST-X64-NEXT: fstp %st(0)943; FAST-X64-NEXT: setae %al944; FAST-X64-NEXT: retq945;946; GISEL-X64-LABEL: fcmp_float_ole:947; GISEL-X64: ## %bb.0:948; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)949; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)950; GISEL-X64-NEXT: fucompi %st(1), %st951; GISEL-X64-NEXT: fstp %st(0)952; GISEL-X64-NEXT: setae %al953; GISEL-X64-NEXT: retq954;955; SDAG-X86-LABEL: fcmp_float_ole:956; SDAG-X86: ## %bb.0:957; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)958; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)959; SDAG-X86-NEXT: fucompp960; SDAG-X86-NEXT: fnstsw %ax961; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax962; SDAG-X86-NEXT: sahf963; SDAG-X86-NEXT: setae %al964; SDAG-X86-NEXT: retl965;966; FAST-X86-LABEL: fcmp_float_ole:967; FAST-X86: ## %bb.0:968; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)969; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)970; FAST-X86-NEXT: fxch %st(1)971; FAST-X86-NEXT: fucompp972; FAST-X86-NEXT: fnstsw %ax973; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax974; FAST-X86-NEXT: sahf975; FAST-X86-NEXT: setae %al976; FAST-X86-NEXT: retl977;978; GISEL-X86-LABEL: fcmp_float_ole:979; GISEL-X86: ## %bb.0:980; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)981; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)982; GISEL-X86-NEXT: fucompi %st(1), %st983; GISEL-X86-NEXT: fstp %st(0)984; GISEL-X86-NEXT: setae %al985; GISEL-X86-NEXT: retl986 %1 = fcmp ole float %x, %y987 ret i1 %1988 }989 990 define i1 @fcmp_float_one(float %x, float %y) {991; X64-LABEL: fcmp_float_one:992; X64: ## %bb.0:993; X64-NEXT: flds {{[0-9]+}}(%rsp)994; X64-NEXT: flds {{[0-9]+}}(%rsp)995; X64-NEXT: fucompi %st(1), %st996; X64-NEXT: fstp %st(0)997; X64-NEXT: setne %al998; X64-NEXT: retq999;1000; GISEL-X64-LABEL: fcmp_float_one:1001; GISEL-X64: ## %bb.0:1002; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1003; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1004; GISEL-X64-NEXT: fxch %st(1)1005; GISEL-X64-NEXT: fucompi %st(1), %st1006; GISEL-X64-NEXT: fstp %st(0)1007; GISEL-X64-NEXT: setne %al1008; GISEL-X64-NEXT: retq1009;1010; X86-LABEL: fcmp_float_one:1011; X86: ## %bb.0:1012; X86-NEXT: flds {{[0-9]+}}(%esp)1013; X86-NEXT: flds {{[0-9]+}}(%esp)1014; X86-NEXT: fucompp1015; X86-NEXT: fnstsw %ax1016; X86-NEXT: ## kill: def $ah killed $ah killed $ax1017; X86-NEXT: sahf1018; X86-NEXT: setne %al1019; X86-NEXT: retl1020;1021; GISEL-X86-LABEL: fcmp_float_one:1022; GISEL-X86: ## %bb.0:1023; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1024; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1025; GISEL-X86-NEXT: fxch %st(1)1026; GISEL-X86-NEXT: fucompi %st(1), %st1027; GISEL-X86-NEXT: fstp %st(0)1028; GISEL-X86-NEXT: setne %al1029; GISEL-X86-NEXT: retl1030 %1 = fcmp one float %x, %y1031 ret i1 %11032 }1033 1034 define i1 @fcmp_float_ord(float %x, float %y) {1035; X64-LABEL: fcmp_float_ord:1036; X64: ## %bb.0:1037; X64-NEXT: flds {{[0-9]+}}(%rsp)1038; X64-NEXT: flds {{[0-9]+}}(%rsp)1039; X64-NEXT: fucompi %st(1), %st1040; X64-NEXT: fstp %st(0)1041; X64-NEXT: setnp %al1042; X64-NEXT: retq1043;1044; GISEL-X64-LABEL: fcmp_float_ord:1045; GISEL-X64: ## %bb.0:1046; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1047; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1048; GISEL-X64-NEXT: fxch %st(1)1049; GISEL-X64-NEXT: fucompi %st(1), %st1050; GISEL-X64-NEXT: fstp %st(0)1051; GISEL-X64-NEXT: setnp %al1052; GISEL-X64-NEXT: retq1053;1054; X86-LABEL: fcmp_float_ord:1055; X86: ## %bb.0:1056; X86-NEXT: flds {{[0-9]+}}(%esp)1057; X86-NEXT: flds {{[0-9]+}}(%esp)1058; X86-NEXT: fucompp1059; X86-NEXT: fnstsw %ax1060; X86-NEXT: ## kill: def $ah killed $ah killed $ax1061; X86-NEXT: sahf1062; X86-NEXT: setnp %al1063; X86-NEXT: retl1064;1065; GISEL-X86-LABEL: fcmp_float_ord:1066; GISEL-X86: ## %bb.0:1067; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1068; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1069; GISEL-X86-NEXT: fxch %st(1)1070; GISEL-X86-NEXT: fucompi %st(1), %st1071; GISEL-X86-NEXT: fstp %st(0)1072; GISEL-X86-NEXT: setnp %al1073; GISEL-X86-NEXT: retl1074 %1 = fcmp ord float %x, %y1075 ret i1 %11076 }1077 1078 define i1 @fcmp_float_uno(float %x, float %y) {1079; X64-LABEL: fcmp_float_uno:1080; X64: ## %bb.0:1081; X64-NEXT: flds {{[0-9]+}}(%rsp)1082; X64-NEXT: flds {{[0-9]+}}(%rsp)1083; X64-NEXT: fucompi %st(1), %st1084; X64-NEXT: fstp %st(0)1085; X64-NEXT: setp %al1086; X64-NEXT: retq1087;1088; GISEL-X64-LABEL: fcmp_float_uno:1089; GISEL-X64: ## %bb.0:1090; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1091; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1092; GISEL-X64-NEXT: fxch %st(1)1093; GISEL-X64-NEXT: fucompi %st(1), %st1094; GISEL-X64-NEXT: fstp %st(0)1095; GISEL-X64-NEXT: setp %al1096; GISEL-X64-NEXT: retq1097;1098; X86-LABEL: fcmp_float_uno:1099; X86: ## %bb.0:1100; X86-NEXT: flds {{[0-9]+}}(%esp)1101; X86-NEXT: flds {{[0-9]+}}(%esp)1102; X86-NEXT: fucompp1103; X86-NEXT: fnstsw %ax1104; X86-NEXT: ## kill: def $ah killed $ah killed $ax1105; X86-NEXT: sahf1106; X86-NEXT: setp %al1107; X86-NEXT: retl1108;1109; GISEL-X86-LABEL: fcmp_float_uno:1110; GISEL-X86: ## %bb.0:1111; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1112; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1113; GISEL-X86-NEXT: fxch %st(1)1114; GISEL-X86-NEXT: fucompi %st(1), %st1115; GISEL-X86-NEXT: fstp %st(0)1116; GISEL-X86-NEXT: setp %al1117; GISEL-X86-NEXT: retl1118 %1 = fcmp uno float %x, %y1119 ret i1 %11120 }1121 1122 define i1 @fcmp_float_ueq(float %x, float %y) {1123; X64-LABEL: fcmp_float_ueq:1124; X64: ## %bb.0:1125; X64-NEXT: flds {{[0-9]+}}(%rsp)1126; X64-NEXT: flds {{[0-9]+}}(%rsp)1127; X64-NEXT: fucompi %st(1), %st1128; X64-NEXT: fstp %st(0)1129; X64-NEXT: sete %al1130; X64-NEXT: retq1131;1132; GISEL-X64-LABEL: fcmp_float_ueq:1133; GISEL-X64: ## %bb.0:1134; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1135; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1136; GISEL-X64-NEXT: fxch %st(1)1137; GISEL-X64-NEXT: fucompi %st(1), %st1138; GISEL-X64-NEXT: fstp %st(0)1139; GISEL-X64-NEXT: sete %al1140; GISEL-X64-NEXT: retq1141;1142; X86-LABEL: fcmp_float_ueq:1143; X86: ## %bb.0:1144; X86-NEXT: flds {{[0-9]+}}(%esp)1145; X86-NEXT: flds {{[0-9]+}}(%esp)1146; X86-NEXT: fucompp1147; X86-NEXT: fnstsw %ax1148; X86-NEXT: ## kill: def $ah killed $ah killed $ax1149; X86-NEXT: sahf1150; X86-NEXT: sete %al1151; X86-NEXT: retl1152;1153; GISEL-X86-LABEL: fcmp_float_ueq:1154; GISEL-X86: ## %bb.0:1155; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1156; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1157; GISEL-X86-NEXT: fxch %st(1)1158; GISEL-X86-NEXT: fucompi %st(1), %st1159; GISEL-X86-NEXT: fstp %st(0)1160; GISEL-X86-NEXT: sete %al1161; GISEL-X86-NEXT: retl1162 %1 = fcmp ueq float %x, %y1163 ret i1 %11164 }1165 1166 define i1 @fcmp_float_ugt(float %x, float %y) {1167; SDAG-X64-LABEL: fcmp_float_ugt:1168; SDAG-X64: ## %bb.0:1169; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)1170; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)1171; SDAG-X64-NEXT: fucompi %st(1), %st1172; SDAG-X64-NEXT: fstp %st(0)1173; SDAG-X64-NEXT: setb %al1174; SDAG-X64-NEXT: retq1175;1176; FAST-X64-LABEL: fcmp_float_ugt:1177; FAST-X64: ## %bb.0:1178; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)1179; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)1180; FAST-X64-NEXT: fxch %st(1)1181; FAST-X64-NEXT: fucompi %st(1), %st1182; FAST-X64-NEXT: fstp %st(0)1183; FAST-X64-NEXT: setb %al1184; FAST-X64-NEXT: retq1185;1186; GISEL-X64-LABEL: fcmp_float_ugt:1187; GISEL-X64: ## %bb.0:1188; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1189; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1190; GISEL-X64-NEXT: fucompi %st(1), %st1191; GISEL-X64-NEXT: fstp %st(0)1192; GISEL-X64-NEXT: setb %al1193; GISEL-X64-NEXT: retq1194;1195; SDAG-X86-LABEL: fcmp_float_ugt:1196; SDAG-X86: ## %bb.0:1197; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)1198; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)1199; SDAG-X86-NEXT: fucompp1200; SDAG-X86-NEXT: fnstsw %ax1201; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax1202; SDAG-X86-NEXT: sahf1203; SDAG-X86-NEXT: setb %al1204; SDAG-X86-NEXT: retl1205;1206; FAST-X86-LABEL: fcmp_float_ugt:1207; FAST-X86: ## %bb.0:1208; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)1209; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)1210; FAST-X86-NEXT: fxch %st(1)1211; FAST-X86-NEXT: fucompp1212; FAST-X86-NEXT: fnstsw %ax1213; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax1214; FAST-X86-NEXT: sahf1215; FAST-X86-NEXT: setb %al1216; FAST-X86-NEXT: retl1217;1218; GISEL-X86-LABEL: fcmp_float_ugt:1219; GISEL-X86: ## %bb.0:1220; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1221; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1222; GISEL-X86-NEXT: fucompi %st(1), %st1223; GISEL-X86-NEXT: fstp %st(0)1224; GISEL-X86-NEXT: setb %al1225; GISEL-X86-NEXT: retl1226 %1 = fcmp ugt float %x, %y1227 ret i1 %11228 }1229 1230 define i1 @fcmp_float_uge(float %x, float %y) {1231; SDAG-X64-LABEL: fcmp_float_uge:1232; SDAG-X64: ## %bb.0:1233; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)1234; SDAG-X64-NEXT: flds {{[0-9]+}}(%rsp)1235; SDAG-X64-NEXT: fucompi %st(1), %st1236; SDAG-X64-NEXT: fstp %st(0)1237; SDAG-X64-NEXT: setbe %al1238; SDAG-X64-NEXT: retq1239;1240; FAST-X64-LABEL: fcmp_float_uge:1241; FAST-X64: ## %bb.0:1242; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)1243; FAST-X64-NEXT: flds {{[0-9]+}}(%rsp)1244; FAST-X64-NEXT: fxch %st(1)1245; FAST-X64-NEXT: fucompi %st(1), %st1246; FAST-X64-NEXT: fstp %st(0)1247; FAST-X64-NEXT: setbe %al1248; FAST-X64-NEXT: retq1249;1250; GISEL-X64-LABEL: fcmp_float_uge:1251; GISEL-X64: ## %bb.0:1252; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1253; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1254; GISEL-X64-NEXT: fucompi %st(1), %st1255; GISEL-X64-NEXT: fstp %st(0)1256; GISEL-X64-NEXT: setbe %al1257; GISEL-X64-NEXT: retq1258;1259; SDAG-X86-LABEL: fcmp_float_uge:1260; SDAG-X86: ## %bb.0:1261; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)1262; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)1263; SDAG-X86-NEXT: fucompp1264; SDAG-X86-NEXT: fnstsw %ax1265; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax1266; SDAG-X86-NEXT: sahf1267; SDAG-X86-NEXT: setbe %al1268; SDAG-X86-NEXT: retl1269;1270; FAST-X86-LABEL: fcmp_float_uge:1271; FAST-X86: ## %bb.0:1272; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)1273; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)1274; FAST-X86-NEXT: fxch %st(1)1275; FAST-X86-NEXT: fucompp1276; FAST-X86-NEXT: fnstsw %ax1277; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax1278; FAST-X86-NEXT: sahf1279; FAST-X86-NEXT: setbe %al1280; FAST-X86-NEXT: retl1281;1282; GISEL-X86-LABEL: fcmp_float_uge:1283; GISEL-X86: ## %bb.0:1284; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1285; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1286; GISEL-X86-NEXT: fucompi %st(1), %st1287; GISEL-X86-NEXT: fstp %st(0)1288; GISEL-X86-NEXT: setbe %al1289; GISEL-X86-NEXT: retl1290 %1 = fcmp uge float %x, %y1291 ret i1 %11292 }1293 1294 define i1 @fcmp_float_ult(float %x, float %y) {1295; X64-LABEL: fcmp_float_ult:1296; X64: ## %bb.0:1297; X64-NEXT: flds {{[0-9]+}}(%rsp)1298; X64-NEXT: flds {{[0-9]+}}(%rsp)1299; X64-NEXT: fucompi %st(1), %st1300; X64-NEXT: fstp %st(0)1301; X64-NEXT: setb %al1302; X64-NEXT: retq1303;1304; GISEL-X64-LABEL: fcmp_float_ult:1305; GISEL-X64: ## %bb.0:1306; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1307; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1308; GISEL-X64-NEXT: fxch %st(1)1309; GISEL-X64-NEXT: fucompi %st(1), %st1310; GISEL-X64-NEXT: fstp %st(0)1311; GISEL-X64-NEXT: setb %al1312; GISEL-X64-NEXT: retq1313;1314; X86-LABEL: fcmp_float_ult:1315; X86: ## %bb.0:1316; X86-NEXT: flds {{[0-9]+}}(%esp)1317; X86-NEXT: flds {{[0-9]+}}(%esp)1318; X86-NEXT: fucompp1319; X86-NEXT: fnstsw %ax1320; X86-NEXT: ## kill: def $ah killed $ah killed $ax1321; X86-NEXT: sahf1322; X86-NEXT: setb %al1323; X86-NEXT: retl1324;1325; GISEL-X86-LABEL: fcmp_float_ult:1326; GISEL-X86: ## %bb.0:1327; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1328; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1329; GISEL-X86-NEXT: fxch %st(1)1330; GISEL-X86-NEXT: fucompi %st(1), %st1331; GISEL-X86-NEXT: fstp %st(0)1332; GISEL-X86-NEXT: setb %al1333; GISEL-X86-NEXT: retl1334 %1 = fcmp ult float %x, %y1335 ret i1 %11336 }1337 1338 define i1 @fcmp_float_ule(float %x, float %y) {1339; X64-LABEL: fcmp_float_ule:1340; X64: ## %bb.0:1341; X64-NEXT: flds {{[0-9]+}}(%rsp)1342; X64-NEXT: flds {{[0-9]+}}(%rsp)1343; X64-NEXT: fucompi %st(1), %st1344; X64-NEXT: fstp %st(0)1345; X64-NEXT: setbe %al1346; X64-NEXT: retq1347;1348; GISEL-X64-LABEL: fcmp_float_ule:1349; GISEL-X64: ## %bb.0:1350; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1351; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1352; GISEL-X64-NEXT: fxch %st(1)1353; GISEL-X64-NEXT: fucompi %st(1), %st1354; GISEL-X64-NEXT: fstp %st(0)1355; GISEL-X64-NEXT: setbe %al1356; GISEL-X64-NEXT: retq1357;1358; X86-LABEL: fcmp_float_ule:1359; X86: ## %bb.0:1360; X86-NEXT: flds {{[0-9]+}}(%esp)1361; X86-NEXT: flds {{[0-9]+}}(%esp)1362; X86-NEXT: fucompp1363; X86-NEXT: fnstsw %ax1364; X86-NEXT: ## kill: def $ah killed $ah killed $ax1365; X86-NEXT: sahf1366; X86-NEXT: setbe %al1367; X86-NEXT: retl1368;1369; GISEL-X86-LABEL: fcmp_float_ule:1370; GISEL-X86: ## %bb.0:1371; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1372; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1373; GISEL-X86-NEXT: fxch %st(1)1374; GISEL-X86-NEXT: fucompi %st(1), %st1375; GISEL-X86-NEXT: fstp %st(0)1376; GISEL-X86-NEXT: setbe %al1377; GISEL-X86-NEXT: retl1378 %1 = fcmp ule float %x, %y1379 ret i1 %11380 }1381 1382 define i1 @fcmp_float_une(float %x, float %y) {1383; X64-LABEL: fcmp_float_une:1384; X64: ## %bb.0:1385; X64-NEXT: flds {{[0-9]+}}(%rsp)1386; X64-NEXT: flds {{[0-9]+}}(%rsp)1387; X64-NEXT: fucompi %st(1), %st1388; X64-NEXT: fstp %st(0)1389; X64-NEXT: setp %cl1390; X64-NEXT: setne %al1391; X64-NEXT: orb %cl, %al1392; X64-NEXT: retq1393;1394; GISEL-X64-LABEL: fcmp_float_une:1395; GISEL-X64: ## %bb.0:1396; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1397; GISEL-X64-NEXT: flds {{[0-9]+}}(%rsp)1398; GISEL-X64-NEXT: fxch %st(1)1399; GISEL-X64-NEXT: fucompi %st(1), %st1400; GISEL-X64-NEXT: fstp %st(0)1401; GISEL-X64-NEXT: setne %cl1402; GISEL-X64-NEXT: setp %al1403; GISEL-X64-NEXT: orb %cl, %al1404; GISEL-X64-NEXT: retq1405;1406; X86-LABEL: fcmp_float_une:1407; X86: ## %bb.0:1408; X86-NEXT: flds {{[0-9]+}}(%esp)1409; X86-NEXT: flds {{[0-9]+}}(%esp)1410; X86-NEXT: fucompp1411; X86-NEXT: fnstsw %ax1412; X86-NEXT: ## kill: def $ah killed $ah killed $ax1413; X86-NEXT: sahf1414; X86-NEXT: setp %cl1415; X86-NEXT: setne %al1416; X86-NEXT: orb %cl, %al1417; X86-NEXT: retl1418;1419; GISEL-X86-LABEL: fcmp_float_une:1420; GISEL-X86: ## %bb.0:1421; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1422; GISEL-X86-NEXT: flds {{[0-9]+}}(%esp)1423; GISEL-X86-NEXT: fxch %st(1)1424; GISEL-X86-NEXT: fucompi %st(1), %st1425; GISEL-X86-NEXT: fstp %st(0)1426; GISEL-X86-NEXT: setne %cl1427; GISEL-X86-NEXT: setp %al1428; GISEL-X86-NEXT: orb %cl, %al1429; GISEL-X86-NEXT: retl1430 %1 = fcmp une float %x, %y1431 ret i1 %11432 }1433