889 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,SDAG-X643; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X64,FAST-X644; RUN: llc < %s -global-isel -global-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=+sse,+sse2,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X645; i686 with 64 bit store is issue.6; RUN: llc < %s -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,SDAG-X867; Allow fast-isel to fallback to selection dag on x868; RUN: llc < %s -fast-isel -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,FAST-X869; llc < %s -global-isel -global-isel-abort=1 -mtriple=i686-apple-darwin10 -mattr=-sse,-sse2,+x87 -verify-machineinstrs | FileCheck %s --check-prefixes=GISEL-X8610 11 define i1 @fcmp_float_oeq(float %x, float %y) nounwind {12; X64-LABEL: fcmp_float_oeq:13; X64: ## %bb.0:14; X64-NEXT: cmpeqss %xmm1, %xmm015; X64-NEXT: movd %xmm0, %eax16; X64-NEXT: andl $1, %eax17; X64-NEXT: ## kill: def $al killed $al killed $eax18; X64-NEXT: retq19;20; GISEL-X64-LABEL: fcmp_float_oeq:21; GISEL-X64: ## %bb.0:22; GISEL-X64-NEXT: ucomiss %xmm1, %xmm023; GISEL-X64-NEXT: sete %cl24; GISEL-X64-NEXT: setnp %al25; GISEL-X64-NEXT: andb %cl, %al26; GISEL-X64-NEXT: retq27;28; X86-LABEL: fcmp_float_oeq:29; X86: ## %bb.0:30; X86-NEXT: flds {{[0-9]+}}(%esp)31; X86-NEXT: flds {{[0-9]+}}(%esp)32; X86-NEXT: fucompp33; X86-NEXT: fnstsw %ax34; X86-NEXT: ## kill: def $ah killed $ah killed $ax35; X86-NEXT: sahf36; X86-NEXT: setnp %cl37; X86-NEXT: sete %al38; X86-NEXT: andb %cl, %al39; X86-NEXT: retl40 %1 = fcmp oeq float %x, %y41 ret i1 %142 }43 44 define i1 @fcmp_float_ogt(float %x, float %y) nounwind {45; X64-LABEL: fcmp_float_ogt:46; X64: ## %bb.0:47; X64-NEXT: ucomiss %xmm1, %xmm048; X64-NEXT: seta %al49; X64-NEXT: retq50;51; GISEL-X64-LABEL: fcmp_float_ogt:52; GISEL-X64: ## %bb.0:53; GISEL-X64-NEXT: ucomiss %xmm1, %xmm054; GISEL-X64-NEXT: seta %al55; GISEL-X64-NEXT: retq56;57; X86-LABEL: fcmp_float_ogt:58; X86: ## %bb.0:59; X86-NEXT: flds {{[0-9]+}}(%esp)60; X86-NEXT: flds {{[0-9]+}}(%esp)61; X86-NEXT: fucompp62; X86-NEXT: fnstsw %ax63; X86-NEXT: ## kill: def $ah killed $ah killed $ax64; X86-NEXT: sahf65; X86-NEXT: seta %al66; X86-NEXT: retl67 %1 = fcmp ogt float %x, %y68 ret i1 %169 }70 71 define i1 @fcmp_float_oge(float %x, float %y) nounwind {72; X64-LABEL: fcmp_float_oge:73; X64: ## %bb.0:74; X64-NEXT: ucomiss %xmm1, %xmm075; X64-NEXT: setae %al76; X64-NEXT: retq77;78; GISEL-X64-LABEL: fcmp_float_oge:79; GISEL-X64: ## %bb.0:80; GISEL-X64-NEXT: ucomiss %xmm1, %xmm081; GISEL-X64-NEXT: setae %al82; GISEL-X64-NEXT: retq83;84; X86-LABEL: fcmp_float_oge:85; X86: ## %bb.0:86; X86-NEXT: flds {{[0-9]+}}(%esp)87; X86-NEXT: flds {{[0-9]+}}(%esp)88; X86-NEXT: fucompp89; X86-NEXT: fnstsw %ax90; X86-NEXT: ## kill: def $ah killed $ah killed $ax91; X86-NEXT: sahf92; X86-NEXT: setae %al93; X86-NEXT: retl94 %1 = fcmp oge float %x, %y95 ret i1 %196 }97 98 define i1 @fcmp_float_olt(float %x, float %y) nounwind {99; X64-LABEL: fcmp_float_olt:100; X64: ## %bb.0:101; X64-NEXT: ucomiss %xmm0, %xmm1102; X64-NEXT: seta %al103; X64-NEXT: retq104;105; GISEL-X64-LABEL: fcmp_float_olt:106; GISEL-X64: ## %bb.0:107; GISEL-X64-NEXT: ucomiss %xmm0, %xmm1108; GISEL-X64-NEXT: seta %al109; GISEL-X64-NEXT: retq110;111; SDAG-X86-LABEL: fcmp_float_olt:112; SDAG-X86: ## %bb.0:113; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)114; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)115; SDAG-X86-NEXT: fucompp116; SDAG-X86-NEXT: fnstsw %ax117; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax118; SDAG-X86-NEXT: sahf119; SDAG-X86-NEXT: seta %al120; SDAG-X86-NEXT: retl121;122; FAST-X86-LABEL: fcmp_float_olt:123; FAST-X86: ## %bb.0:124; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)125; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)126; FAST-X86-NEXT: fxch %st(1)127; FAST-X86-NEXT: fucompp128; FAST-X86-NEXT: fnstsw %ax129; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax130; FAST-X86-NEXT: sahf131; FAST-X86-NEXT: seta %al132; FAST-X86-NEXT: retl133 %1 = fcmp olt float %x, %y134 ret i1 %1135 }136 137 define i1 @fcmp_float_ole(float %x, float %y) nounwind {138; X64-LABEL: fcmp_float_ole:139; X64: ## %bb.0:140; X64-NEXT: ucomiss %xmm0, %xmm1141; X64-NEXT: setae %al142; X64-NEXT: retq143;144; GISEL-X64-LABEL: fcmp_float_ole:145; GISEL-X64: ## %bb.0:146; GISEL-X64-NEXT: ucomiss %xmm0, %xmm1147; GISEL-X64-NEXT: setae %al148; GISEL-X64-NEXT: retq149;150; SDAG-X86-LABEL: fcmp_float_ole:151; SDAG-X86: ## %bb.0:152; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)153; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)154; SDAG-X86-NEXT: fucompp155; SDAG-X86-NEXT: fnstsw %ax156; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax157; SDAG-X86-NEXT: sahf158; SDAG-X86-NEXT: setae %al159; SDAG-X86-NEXT: retl160;161; FAST-X86-LABEL: fcmp_float_ole:162; FAST-X86: ## %bb.0:163; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)164; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)165; FAST-X86-NEXT: fxch %st(1)166; FAST-X86-NEXT: fucompp167; FAST-X86-NEXT: fnstsw %ax168; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax169; FAST-X86-NEXT: sahf170; FAST-X86-NEXT: setae %al171; FAST-X86-NEXT: retl172 %1 = fcmp ole float %x, %y173 ret i1 %1174 }175 176 define i1 @fcmp_float_one(float %x, float %y) nounwind {177; X64-LABEL: fcmp_float_one:178; X64: ## %bb.0:179; X64-NEXT: ucomiss %xmm1, %xmm0180; X64-NEXT: setne %al181; X64-NEXT: retq182;183; GISEL-X64-LABEL: fcmp_float_one:184; GISEL-X64: ## %bb.0:185; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0186; GISEL-X64-NEXT: setne %al187; GISEL-X64-NEXT: retq188;189; X86-LABEL: fcmp_float_one:190; X86: ## %bb.0:191; X86-NEXT: flds {{[0-9]+}}(%esp)192; X86-NEXT: flds {{[0-9]+}}(%esp)193; X86-NEXT: fucompp194; X86-NEXT: fnstsw %ax195; X86-NEXT: ## kill: def $ah killed $ah killed $ax196; X86-NEXT: sahf197; X86-NEXT: setne %al198; X86-NEXT: retl199 %1 = fcmp one float %x, %y200 ret i1 %1201 }202 203 define i1 @fcmp_float_ord(float %x, float %y) nounwind {204; X64-LABEL: fcmp_float_ord:205; X64: ## %bb.0:206; X64-NEXT: ucomiss %xmm1, %xmm0207; X64-NEXT: setnp %al208; X64-NEXT: retq209;210; GISEL-X64-LABEL: fcmp_float_ord:211; GISEL-X64: ## %bb.0:212; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0213; GISEL-X64-NEXT: setnp %al214; GISEL-X64-NEXT: retq215;216; X86-LABEL: fcmp_float_ord:217; X86: ## %bb.0:218; X86-NEXT: flds {{[0-9]+}}(%esp)219; X86-NEXT: flds {{[0-9]+}}(%esp)220; X86-NEXT: fucompp221; X86-NEXT: fnstsw %ax222; X86-NEXT: ## kill: def $ah killed $ah killed $ax223; X86-NEXT: sahf224; X86-NEXT: setnp %al225; X86-NEXT: retl226 %1 = fcmp ord float %x, %y227 ret i1 %1228 }229 230 define i1 @fcmp_float_uno(float %x, float %y) nounwind {231; X64-LABEL: fcmp_float_uno:232; X64: ## %bb.0:233; X64-NEXT: ucomiss %xmm1, %xmm0234; X64-NEXT: setp %al235; X64-NEXT: retq236;237; GISEL-X64-LABEL: fcmp_float_uno:238; GISEL-X64: ## %bb.0:239; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0240; GISEL-X64-NEXT: setp %al241; GISEL-X64-NEXT: retq242;243; X86-LABEL: fcmp_float_uno:244; X86: ## %bb.0:245; X86-NEXT: flds {{[0-9]+}}(%esp)246; X86-NEXT: flds {{[0-9]+}}(%esp)247; X86-NEXT: fucompp248; X86-NEXT: fnstsw %ax249; X86-NEXT: ## kill: def $ah killed $ah killed $ax250; X86-NEXT: sahf251; X86-NEXT: setp %al252; X86-NEXT: retl253 %1 = fcmp uno float %x, %y254 ret i1 %1255 }256 257 define i1 @fcmp_float_ueq(float %x, float %y) nounwind {258; X64-LABEL: fcmp_float_ueq:259; X64: ## %bb.0:260; X64-NEXT: ucomiss %xmm1, %xmm0261; X64-NEXT: sete %al262; X64-NEXT: retq263;264; GISEL-X64-LABEL: fcmp_float_ueq:265; GISEL-X64: ## %bb.0:266; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0267; GISEL-X64-NEXT: sete %al268; GISEL-X64-NEXT: retq269;270; X86-LABEL: fcmp_float_ueq:271; X86: ## %bb.0:272; X86-NEXT: flds {{[0-9]+}}(%esp)273; X86-NEXT: flds {{[0-9]+}}(%esp)274; X86-NEXT: fucompp275; X86-NEXT: fnstsw %ax276; X86-NEXT: ## kill: def $ah killed $ah killed $ax277; X86-NEXT: sahf278; X86-NEXT: sete %al279; X86-NEXT: retl280 %1 = fcmp ueq float %x, %y281 ret i1 %1282 }283 284 define i1 @fcmp_float_ugt(float %x, float %y) nounwind {285; X64-LABEL: fcmp_float_ugt:286; X64: ## %bb.0:287; X64-NEXT: ucomiss %xmm0, %xmm1288; X64-NEXT: setb %al289; X64-NEXT: retq290;291; GISEL-X64-LABEL: fcmp_float_ugt:292; GISEL-X64: ## %bb.0:293; GISEL-X64-NEXT: ucomiss %xmm0, %xmm1294; GISEL-X64-NEXT: setb %al295; GISEL-X64-NEXT: retq296;297; SDAG-X86-LABEL: fcmp_float_ugt:298; SDAG-X86: ## %bb.0:299; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)300; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)301; SDAG-X86-NEXT: fucompp302; SDAG-X86-NEXT: fnstsw %ax303; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax304; SDAG-X86-NEXT: sahf305; SDAG-X86-NEXT: setb %al306; SDAG-X86-NEXT: retl307;308; FAST-X86-LABEL: fcmp_float_ugt:309; FAST-X86: ## %bb.0:310; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)311; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)312; FAST-X86-NEXT: fxch %st(1)313; FAST-X86-NEXT: fucompp314; FAST-X86-NEXT: fnstsw %ax315; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax316; FAST-X86-NEXT: sahf317; FAST-X86-NEXT: setb %al318; FAST-X86-NEXT: retl319 %1 = fcmp ugt float %x, %y320 ret i1 %1321 }322 323 define i1 @fcmp_float_uge(float %x, float %y) nounwind {324; X64-LABEL: fcmp_float_uge:325; X64: ## %bb.0:326; X64-NEXT: ucomiss %xmm0, %xmm1327; X64-NEXT: setbe %al328; X64-NEXT: retq329;330; GISEL-X64-LABEL: fcmp_float_uge:331; GISEL-X64: ## %bb.0:332; GISEL-X64-NEXT: ucomiss %xmm0, %xmm1333; GISEL-X64-NEXT: setbe %al334; GISEL-X64-NEXT: retq335;336; SDAG-X86-LABEL: fcmp_float_uge:337; SDAG-X86: ## %bb.0:338; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)339; SDAG-X86-NEXT: flds {{[0-9]+}}(%esp)340; SDAG-X86-NEXT: fucompp341; SDAG-X86-NEXT: fnstsw %ax342; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax343; SDAG-X86-NEXT: sahf344; SDAG-X86-NEXT: setbe %al345; SDAG-X86-NEXT: retl346;347; FAST-X86-LABEL: fcmp_float_uge:348; FAST-X86: ## %bb.0:349; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)350; FAST-X86-NEXT: flds {{[0-9]+}}(%esp)351; FAST-X86-NEXT: fxch %st(1)352; FAST-X86-NEXT: fucompp353; FAST-X86-NEXT: fnstsw %ax354; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax355; FAST-X86-NEXT: sahf356; FAST-X86-NEXT: setbe %al357; FAST-X86-NEXT: retl358 %1 = fcmp uge float %x, %y359 ret i1 %1360 }361 362 define i1 @fcmp_float_ult(float %x, float %y) nounwind {363; X64-LABEL: fcmp_float_ult:364; X64: ## %bb.0:365; X64-NEXT: ucomiss %xmm1, %xmm0366; X64-NEXT: setb %al367; X64-NEXT: retq368;369; GISEL-X64-LABEL: fcmp_float_ult:370; GISEL-X64: ## %bb.0:371; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0372; GISEL-X64-NEXT: setb %al373; GISEL-X64-NEXT: retq374;375; X86-LABEL: fcmp_float_ult:376; X86: ## %bb.0:377; X86-NEXT: flds {{[0-9]+}}(%esp)378; X86-NEXT: flds {{[0-9]+}}(%esp)379; X86-NEXT: fucompp380; X86-NEXT: fnstsw %ax381; X86-NEXT: ## kill: def $ah killed $ah killed $ax382; X86-NEXT: sahf383; X86-NEXT: setb %al384; X86-NEXT: retl385 %1 = fcmp ult float %x, %y386 ret i1 %1387 }388 389 define i1 @fcmp_float_ule(float %x, float %y) nounwind {390; X64-LABEL: fcmp_float_ule:391; X64: ## %bb.0:392; X64-NEXT: ucomiss %xmm1, %xmm0393; X64-NEXT: setbe %al394; X64-NEXT: retq395;396; GISEL-X64-LABEL: fcmp_float_ule:397; GISEL-X64: ## %bb.0:398; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0399; GISEL-X64-NEXT: setbe %al400; GISEL-X64-NEXT: retq401;402; X86-LABEL: fcmp_float_ule:403; X86: ## %bb.0:404; X86-NEXT: flds {{[0-9]+}}(%esp)405; X86-NEXT: flds {{[0-9]+}}(%esp)406; X86-NEXT: fucompp407; X86-NEXT: fnstsw %ax408; X86-NEXT: ## kill: def $ah killed $ah killed $ax409; X86-NEXT: sahf410; X86-NEXT: setbe %al411; X86-NEXT: retl412 %1 = fcmp ule float %x, %y413 ret i1 %1414 }415 416 define i1 @fcmp_float_une(float %x, float %y) nounwind {417; X64-LABEL: fcmp_float_une:418; X64: ## %bb.0:419; X64-NEXT: cmpneqss %xmm1, %xmm0420; X64-NEXT: movd %xmm0, %eax421; X64-NEXT: andl $1, %eax422; X64-NEXT: ## kill: def $al killed $al killed $eax423; X64-NEXT: retq424;425; GISEL-X64-LABEL: fcmp_float_une:426; GISEL-X64: ## %bb.0:427; GISEL-X64-NEXT: ucomiss %xmm1, %xmm0428; GISEL-X64-NEXT: setne %cl429; GISEL-X64-NEXT: setp %al430; GISEL-X64-NEXT: orb %cl, %al431; GISEL-X64-NEXT: retq432;433; X86-LABEL: fcmp_float_une:434; X86: ## %bb.0:435; X86-NEXT: flds {{[0-9]+}}(%esp)436; X86-NEXT: flds {{[0-9]+}}(%esp)437; X86-NEXT: fucompp438; X86-NEXT: fnstsw %ax439; X86-NEXT: ## kill: def $ah killed $ah killed $ax440; X86-NEXT: sahf441; X86-NEXT: setp %cl442; X86-NEXT: setne %al443; X86-NEXT: orb %cl, %al444; X86-NEXT: retl445 %1 = fcmp une float %x, %y446 ret i1 %1447 }448 449 define i1 @fcmp_double_oeq(double %x, double %y) nounwind {450; X64-LABEL: fcmp_double_oeq:451; X64: ## %bb.0:452; X64-NEXT: cmpeqsd %xmm1, %xmm0453; X64-NEXT: movq %xmm0, %rax454; X64-NEXT: andl $1, %eax455; X64-NEXT: ## kill: def $al killed $al killed $rax456; X64-NEXT: retq457;458; GISEL-X64-LABEL: fcmp_double_oeq:459; GISEL-X64: ## %bb.0:460; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0461; GISEL-X64-NEXT: sete %cl462; GISEL-X64-NEXT: setnp %al463; GISEL-X64-NEXT: andb %cl, %al464; GISEL-X64-NEXT: retq465;466; X86-LABEL: fcmp_double_oeq:467; X86: ## %bb.0:468; X86-NEXT: fldl {{[0-9]+}}(%esp)469; X86-NEXT: fldl {{[0-9]+}}(%esp)470; X86-NEXT: fucompp471; X86-NEXT: fnstsw %ax472; X86-NEXT: ## kill: def $ah killed $ah killed $ax473; X86-NEXT: sahf474; X86-NEXT: setnp %cl475; X86-NEXT: sete %al476; X86-NEXT: andb %cl, %al477; X86-NEXT: retl478 %1 = fcmp oeq double %x, %y479 ret i1 %1480 }481 482 define i1 @fcmp_double_ogt(double %x, double %y) nounwind {483; X64-LABEL: fcmp_double_ogt:484; X64: ## %bb.0:485; X64-NEXT: ucomisd %xmm1, %xmm0486; X64-NEXT: seta %al487; X64-NEXT: retq488;489; GISEL-X64-LABEL: fcmp_double_ogt:490; GISEL-X64: ## %bb.0:491; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0492; GISEL-X64-NEXT: seta %al493; GISEL-X64-NEXT: retq494;495; X86-LABEL: fcmp_double_ogt:496; X86: ## %bb.0:497; X86-NEXT: fldl {{[0-9]+}}(%esp)498; X86-NEXT: fldl {{[0-9]+}}(%esp)499; X86-NEXT: fucompp500; X86-NEXT: fnstsw %ax501; X86-NEXT: ## kill: def $ah killed $ah killed $ax502; X86-NEXT: sahf503; X86-NEXT: seta %al504; X86-NEXT: retl505 %1 = fcmp ogt double %x, %y506 ret i1 %1507 }508 509 define i1 @fcmp_double_oge(double %x, double %y) nounwind {510; X64-LABEL: fcmp_double_oge:511; X64: ## %bb.0:512; X64-NEXT: ucomisd %xmm1, %xmm0513; X64-NEXT: setae %al514; X64-NEXT: retq515;516; GISEL-X64-LABEL: fcmp_double_oge:517; GISEL-X64: ## %bb.0:518; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0519; GISEL-X64-NEXT: setae %al520; GISEL-X64-NEXT: retq521;522; X86-LABEL: fcmp_double_oge:523; X86: ## %bb.0:524; X86-NEXT: fldl {{[0-9]+}}(%esp)525; X86-NEXT: fldl {{[0-9]+}}(%esp)526; X86-NEXT: fucompp527; X86-NEXT: fnstsw %ax528; X86-NEXT: ## kill: def $ah killed $ah killed $ax529; X86-NEXT: sahf530; X86-NEXT: setae %al531; X86-NEXT: retl532 %1 = fcmp oge double %x, %y533 ret i1 %1534 }535 536 define i1 @fcmp_double_olt(double %x, double %y) nounwind {537; X64-LABEL: fcmp_double_olt:538; X64: ## %bb.0:539; X64-NEXT: ucomisd %xmm0, %xmm1540; X64-NEXT: seta %al541; X64-NEXT: retq542;543; GISEL-X64-LABEL: fcmp_double_olt:544; GISEL-X64: ## %bb.0:545; GISEL-X64-NEXT: ucomisd %xmm0, %xmm1546; GISEL-X64-NEXT: seta %al547; GISEL-X64-NEXT: retq548;549; SDAG-X86-LABEL: fcmp_double_olt:550; SDAG-X86: ## %bb.0:551; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)552; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)553; SDAG-X86-NEXT: fucompp554; SDAG-X86-NEXT: fnstsw %ax555; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax556; SDAG-X86-NEXT: sahf557; SDAG-X86-NEXT: seta %al558; SDAG-X86-NEXT: retl559;560; FAST-X86-LABEL: fcmp_double_olt:561; FAST-X86: ## %bb.0:562; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)563; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)564; FAST-X86-NEXT: fxch %st(1)565; FAST-X86-NEXT: fucompp566; FAST-X86-NEXT: fnstsw %ax567; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax568; FAST-X86-NEXT: sahf569; FAST-X86-NEXT: seta %al570; FAST-X86-NEXT: retl571 %1 = fcmp olt double %x, %y572 ret i1 %1573 }574 575 define i1 @fcmp_double_ole(double %x, double %y) nounwind {576; X64-LABEL: fcmp_double_ole:577; X64: ## %bb.0:578; X64-NEXT: ucomisd %xmm0, %xmm1579; X64-NEXT: setae %al580; X64-NEXT: retq581;582; GISEL-X64-LABEL: fcmp_double_ole:583; GISEL-X64: ## %bb.0:584; GISEL-X64-NEXT: ucomisd %xmm0, %xmm1585; GISEL-X64-NEXT: setae %al586; GISEL-X64-NEXT: retq587;588; SDAG-X86-LABEL: fcmp_double_ole:589; SDAG-X86: ## %bb.0:590; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)591; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)592; SDAG-X86-NEXT: fucompp593; SDAG-X86-NEXT: fnstsw %ax594; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax595; SDAG-X86-NEXT: sahf596; SDAG-X86-NEXT: setae %al597; SDAG-X86-NEXT: retl598;599; FAST-X86-LABEL: fcmp_double_ole:600; FAST-X86: ## %bb.0:601; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)602; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)603; FAST-X86-NEXT: fxch %st(1)604; FAST-X86-NEXT: fucompp605; FAST-X86-NEXT: fnstsw %ax606; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax607; FAST-X86-NEXT: sahf608; FAST-X86-NEXT: setae %al609; FAST-X86-NEXT: retl610 %1 = fcmp ole double %x, %y611 ret i1 %1612 }613 614 define i1 @fcmp_double_one(double %x, double %y) nounwind {615; X64-LABEL: fcmp_double_one:616; X64: ## %bb.0:617; X64-NEXT: ucomisd %xmm1, %xmm0618; X64-NEXT: setne %al619; X64-NEXT: retq620;621; GISEL-X64-LABEL: fcmp_double_one:622; GISEL-X64: ## %bb.0:623; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0624; GISEL-X64-NEXT: setne %al625; GISEL-X64-NEXT: retq626;627; X86-LABEL: fcmp_double_one:628; X86: ## %bb.0:629; X86-NEXT: fldl {{[0-9]+}}(%esp)630; X86-NEXT: fldl {{[0-9]+}}(%esp)631; X86-NEXT: fucompp632; X86-NEXT: fnstsw %ax633; X86-NEXT: ## kill: def $ah killed $ah killed $ax634; X86-NEXT: sahf635; X86-NEXT: setne %al636; X86-NEXT: retl637 %1 = fcmp one double %x, %y638 ret i1 %1639 }640 641 define i1 @fcmp_double_ord(double %x, double %y) nounwind {642; X64-LABEL: fcmp_double_ord:643; X64: ## %bb.0:644; X64-NEXT: ucomisd %xmm1, %xmm0645; X64-NEXT: setnp %al646; X64-NEXT: retq647;648; GISEL-X64-LABEL: fcmp_double_ord:649; GISEL-X64: ## %bb.0:650; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0651; GISEL-X64-NEXT: setnp %al652; GISEL-X64-NEXT: retq653;654; X86-LABEL: fcmp_double_ord:655; X86: ## %bb.0:656; X86-NEXT: fldl {{[0-9]+}}(%esp)657; X86-NEXT: fldl {{[0-9]+}}(%esp)658; X86-NEXT: fucompp659; X86-NEXT: fnstsw %ax660; X86-NEXT: ## kill: def $ah killed $ah killed $ax661; X86-NEXT: sahf662; X86-NEXT: setnp %al663; X86-NEXT: retl664 %1 = fcmp ord double %x, %y665 ret i1 %1666 }667 668 define i1 @fcmp_double_uno(double %x, double %y) nounwind {669; X64-LABEL: fcmp_double_uno:670; X64: ## %bb.0:671; X64-NEXT: ucomisd %xmm1, %xmm0672; X64-NEXT: setp %al673; X64-NEXT: retq674;675; GISEL-X64-LABEL: fcmp_double_uno:676; GISEL-X64: ## %bb.0:677; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0678; GISEL-X64-NEXT: setp %al679; GISEL-X64-NEXT: retq680;681; X86-LABEL: fcmp_double_uno:682; X86: ## %bb.0:683; X86-NEXT: fldl {{[0-9]+}}(%esp)684; X86-NEXT: fldl {{[0-9]+}}(%esp)685; X86-NEXT: fucompp686; X86-NEXT: fnstsw %ax687; X86-NEXT: ## kill: def $ah killed $ah killed $ax688; X86-NEXT: sahf689; X86-NEXT: setp %al690; X86-NEXT: retl691 %1 = fcmp uno double %x, %y692 ret i1 %1693 }694 695 define i1 @fcmp_double_ueq(double %x, double %y) nounwind {696; X64-LABEL: fcmp_double_ueq:697; X64: ## %bb.0:698; X64-NEXT: ucomisd %xmm1, %xmm0699; X64-NEXT: sete %al700; X64-NEXT: retq701;702; GISEL-X64-LABEL: fcmp_double_ueq:703; GISEL-X64: ## %bb.0:704; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0705; GISEL-X64-NEXT: sete %al706; GISEL-X64-NEXT: retq707;708; X86-LABEL: fcmp_double_ueq:709; X86: ## %bb.0:710; X86-NEXT: fldl {{[0-9]+}}(%esp)711; X86-NEXT: fldl {{[0-9]+}}(%esp)712; X86-NEXT: fucompp713; X86-NEXT: fnstsw %ax714; X86-NEXT: ## kill: def $ah killed $ah killed $ax715; X86-NEXT: sahf716; X86-NEXT: sete %al717; X86-NEXT: retl718 %1 = fcmp ueq double %x, %y719 ret i1 %1720 }721 722 define i1 @fcmp_double_ugt(double %x, double %y) nounwind {723; X64-LABEL: fcmp_double_ugt:724; X64: ## %bb.0:725; X64-NEXT: ucomisd %xmm0, %xmm1726; X64-NEXT: setb %al727; X64-NEXT: retq728;729; GISEL-X64-LABEL: fcmp_double_ugt:730; GISEL-X64: ## %bb.0:731; GISEL-X64-NEXT: ucomisd %xmm0, %xmm1732; GISEL-X64-NEXT: setb %al733; GISEL-X64-NEXT: retq734;735; SDAG-X86-LABEL: fcmp_double_ugt:736; SDAG-X86: ## %bb.0:737; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)738; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)739; SDAG-X86-NEXT: fucompp740; SDAG-X86-NEXT: fnstsw %ax741; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax742; SDAG-X86-NEXT: sahf743; SDAG-X86-NEXT: setb %al744; SDAG-X86-NEXT: retl745;746; FAST-X86-LABEL: fcmp_double_ugt:747; FAST-X86: ## %bb.0:748; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)749; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)750; FAST-X86-NEXT: fxch %st(1)751; FAST-X86-NEXT: fucompp752; FAST-X86-NEXT: fnstsw %ax753; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax754; FAST-X86-NEXT: sahf755; FAST-X86-NEXT: setb %al756; FAST-X86-NEXT: retl757 %1 = fcmp ugt double %x, %y758 ret i1 %1759 }760 761 define i1 @fcmp_double_uge(double %x, double %y) nounwind {762; X64-LABEL: fcmp_double_uge:763; X64: ## %bb.0:764; X64-NEXT: ucomisd %xmm0, %xmm1765; X64-NEXT: setbe %al766; X64-NEXT: retq767;768; GISEL-X64-LABEL: fcmp_double_uge:769; GISEL-X64: ## %bb.0:770; GISEL-X64-NEXT: ucomisd %xmm0, %xmm1771; GISEL-X64-NEXT: setbe %al772; GISEL-X64-NEXT: retq773;774; SDAG-X86-LABEL: fcmp_double_uge:775; SDAG-X86: ## %bb.0:776; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)777; SDAG-X86-NEXT: fldl {{[0-9]+}}(%esp)778; SDAG-X86-NEXT: fucompp779; SDAG-X86-NEXT: fnstsw %ax780; SDAG-X86-NEXT: ## kill: def $ah killed $ah killed $ax781; SDAG-X86-NEXT: sahf782; SDAG-X86-NEXT: setbe %al783; SDAG-X86-NEXT: retl784;785; FAST-X86-LABEL: fcmp_double_uge:786; FAST-X86: ## %bb.0:787; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)788; FAST-X86-NEXT: fldl {{[0-9]+}}(%esp)789; FAST-X86-NEXT: fxch %st(1)790; FAST-X86-NEXT: fucompp791; FAST-X86-NEXT: fnstsw %ax792; FAST-X86-NEXT: ## kill: def $ah killed $ah killed $ax793; FAST-X86-NEXT: sahf794; FAST-X86-NEXT: setbe %al795; FAST-X86-NEXT: retl796 %1 = fcmp uge double %x, %y797 ret i1 %1798 }799 800 define i1 @fcmp_double_ult(double %x, double %y) nounwind {801; X64-LABEL: fcmp_double_ult:802; X64: ## %bb.0:803; X64-NEXT: ucomisd %xmm1, %xmm0804; X64-NEXT: setb %al805; X64-NEXT: retq806;807; GISEL-X64-LABEL: fcmp_double_ult:808; GISEL-X64: ## %bb.0:809; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0810; GISEL-X64-NEXT: setb %al811; GISEL-X64-NEXT: retq812;813; X86-LABEL: fcmp_double_ult:814; X86: ## %bb.0:815; X86-NEXT: fldl {{[0-9]+}}(%esp)816; X86-NEXT: fldl {{[0-9]+}}(%esp)817; X86-NEXT: fucompp818; X86-NEXT: fnstsw %ax819; X86-NEXT: ## kill: def $ah killed $ah killed $ax820; X86-NEXT: sahf821; X86-NEXT: setb %al822; X86-NEXT: retl823 %1 = fcmp ult double %x, %y824 ret i1 %1825 }826 827 define i1 @fcmp_double_ule(double %x, double %y) nounwind {828; X64-LABEL: fcmp_double_ule:829; X64: ## %bb.0:830; X64-NEXT: ucomisd %xmm1, %xmm0831; X64-NEXT: setbe %al832; X64-NEXT: retq833;834; GISEL-X64-LABEL: fcmp_double_ule:835; GISEL-X64: ## %bb.0:836; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0837; GISEL-X64-NEXT: setbe %al838; GISEL-X64-NEXT: retq839;840; X86-LABEL: fcmp_double_ule:841; X86: ## %bb.0:842; X86-NEXT: fldl {{[0-9]+}}(%esp)843; X86-NEXT: fldl {{[0-9]+}}(%esp)844; X86-NEXT: fucompp845; X86-NEXT: fnstsw %ax846; X86-NEXT: ## kill: def $ah killed $ah killed $ax847; X86-NEXT: sahf848; X86-NEXT: setbe %al849; X86-NEXT: retl850 %1 = fcmp ule double %x, %y851 ret i1 %1852 }853 854 define i1 @fcmp_double_une(double %x, double %y) nounwind {855; X64-LABEL: fcmp_double_une:856; X64: ## %bb.0:857; X64-NEXT: cmpneqsd %xmm1, %xmm0858; X64-NEXT: movq %xmm0, %rax859; X64-NEXT: andl $1, %eax860; X64-NEXT: ## kill: def $al killed $al killed $rax861; X64-NEXT: retq862;863; GISEL-X64-LABEL: fcmp_double_une:864; GISEL-X64: ## %bb.0:865; GISEL-X64-NEXT: ucomisd %xmm1, %xmm0866; GISEL-X64-NEXT: setne %cl867; GISEL-X64-NEXT: setp %al868; GISEL-X64-NEXT: orb %cl, %al869; GISEL-X64-NEXT: retq870;871; X86-LABEL: fcmp_double_une:872; X86: ## %bb.0:873; X86-NEXT: fldl {{[0-9]+}}(%esp)874; X86-NEXT: fldl {{[0-9]+}}(%esp)875; X86-NEXT: fucompp876; X86-NEXT: fnstsw %ax877; X86-NEXT: ## kill: def $ah killed $ah killed $ax878; X86-NEXT: sahf879; X86-NEXT: setp %cl880; X86-NEXT: setne %al881; X86-NEXT: orb %cl, %al882; X86-NEXT: retl883 %1 = fcmp une double %x, %y884 ret i1 %1885 }886;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:887; FAST-X64: {{.*}}888; SDAG-X64: {{.*}}889