1194 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=SDAG3; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=FAST,FAST_NOAVX4; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx | FileCheck %s --check-prefixes=FAST,FAST_AVX5; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 -mattr=avx512f | FileCheck %s --check-prefixes=FAST,FAST_AVX6 7define zeroext i1 @fcmp_oeq(float %x, float %y) {8; SDAG-LABEL: fcmp_oeq:9; SDAG: ## %bb.0:10; SDAG-NEXT: cmpeqss %xmm1, %xmm011; SDAG-NEXT: movd %xmm0, %eax12; SDAG-NEXT: andl $1, %eax13; SDAG-NEXT: ## kill: def $al killed $al killed $eax14; SDAG-NEXT: retq15;16; FAST_NOAVX-LABEL: fcmp_oeq:17; FAST_NOAVX: ## %bb.0:18; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm019; FAST_NOAVX-NEXT: sete %cl20; FAST_NOAVX-NEXT: setnp %al21; FAST_NOAVX-NEXT: andb %cl, %al22; FAST_NOAVX-NEXT: andb $1, %al23; FAST_NOAVX-NEXT: retq24;25; FAST_AVX-LABEL: fcmp_oeq:26; FAST_AVX: ## %bb.0:27; FAST_AVX-NEXT: vucomiss %xmm1, %xmm028; FAST_AVX-NEXT: sete %cl29; FAST_AVX-NEXT: setnp %al30; FAST_AVX-NEXT: andb %cl, %al31; FAST_AVX-NEXT: andb $1, %al32; FAST_AVX-NEXT: retq33 %1 = fcmp oeq float %x, %y34 ret i1 %135}36 37define zeroext i1 @fcmp_ogt(float %x, float %y) {38; SDAG-LABEL: fcmp_ogt:39; SDAG: ## %bb.0:40; SDAG-NEXT: ucomiss %xmm1, %xmm041; SDAG-NEXT: seta %al42; SDAG-NEXT: retq43;44; FAST_NOAVX-LABEL: fcmp_ogt:45; FAST_NOAVX: ## %bb.0:46; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm047; FAST_NOAVX-NEXT: seta %al48; FAST_NOAVX-NEXT: andb $1, %al49; FAST_NOAVX-NEXT: retq50;51; FAST_AVX-LABEL: fcmp_ogt:52; FAST_AVX: ## %bb.0:53; FAST_AVX-NEXT: vucomiss %xmm1, %xmm054; FAST_AVX-NEXT: seta %al55; FAST_AVX-NEXT: andb $1, %al56; FAST_AVX-NEXT: retq57 %1 = fcmp ogt float %x, %y58 ret i1 %159}60 61define zeroext i1 @fcmp_oge(float %x, float %y) {62; SDAG-LABEL: fcmp_oge:63; SDAG: ## %bb.0:64; SDAG-NEXT: ucomiss %xmm1, %xmm065; SDAG-NEXT: setae %al66; SDAG-NEXT: retq67;68; FAST_NOAVX-LABEL: fcmp_oge:69; FAST_NOAVX: ## %bb.0:70; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm071; FAST_NOAVX-NEXT: setae %al72; FAST_NOAVX-NEXT: andb $1, %al73; FAST_NOAVX-NEXT: retq74;75; FAST_AVX-LABEL: fcmp_oge:76; FAST_AVX: ## %bb.0:77; FAST_AVX-NEXT: vucomiss %xmm1, %xmm078; FAST_AVX-NEXT: setae %al79; FAST_AVX-NEXT: andb $1, %al80; FAST_AVX-NEXT: retq81 %1 = fcmp oge float %x, %y82 ret i1 %183}84 85define zeroext i1 @fcmp_olt(float %x, float %y) {86; SDAG-LABEL: fcmp_olt:87; SDAG: ## %bb.0:88; SDAG-NEXT: ucomiss %xmm0, %xmm189; SDAG-NEXT: seta %al90; SDAG-NEXT: retq91;92; FAST_NOAVX-LABEL: fcmp_olt:93; FAST_NOAVX: ## %bb.0:94; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm195; FAST_NOAVX-NEXT: seta %al96; FAST_NOAVX-NEXT: andb $1, %al97; FAST_NOAVX-NEXT: retq98;99; FAST_AVX-LABEL: fcmp_olt:100; FAST_AVX: ## %bb.0:101; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1102; FAST_AVX-NEXT: seta %al103; FAST_AVX-NEXT: andb $1, %al104; FAST_AVX-NEXT: retq105 %1 = fcmp olt float %x, %y106 ret i1 %1107}108 109define zeroext i1 @fcmp_ole(float %x, float %y) {110; SDAG-LABEL: fcmp_ole:111; SDAG: ## %bb.0:112; SDAG-NEXT: ucomiss %xmm0, %xmm1113; SDAG-NEXT: setae %al114; SDAG-NEXT: retq115;116; FAST_NOAVX-LABEL: fcmp_ole:117; FAST_NOAVX: ## %bb.0:118; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1119; FAST_NOAVX-NEXT: setae %al120; FAST_NOAVX-NEXT: andb $1, %al121; FAST_NOAVX-NEXT: retq122;123; FAST_AVX-LABEL: fcmp_ole:124; FAST_AVX: ## %bb.0:125; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1126; FAST_AVX-NEXT: setae %al127; FAST_AVX-NEXT: andb $1, %al128; FAST_AVX-NEXT: retq129 %1 = fcmp ole float %x, %y130 ret i1 %1131}132 133define zeroext i1 @fcmp_one(float %x, float %y) {134; SDAG-LABEL: fcmp_one:135; SDAG: ## %bb.0:136; SDAG-NEXT: ucomiss %xmm1, %xmm0137; SDAG-NEXT: setne %al138; SDAG-NEXT: retq139;140; FAST_NOAVX-LABEL: fcmp_one:141; FAST_NOAVX: ## %bb.0:142; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0143; FAST_NOAVX-NEXT: setne %al144; FAST_NOAVX-NEXT: andb $1, %al145; FAST_NOAVX-NEXT: retq146;147; FAST_AVX-LABEL: fcmp_one:148; FAST_AVX: ## %bb.0:149; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0150; FAST_AVX-NEXT: setne %al151; FAST_AVX-NEXT: andb $1, %al152; FAST_AVX-NEXT: retq153 %1 = fcmp one float %x, %y154 ret i1 %1155}156 157define zeroext i1 @fcmp_ord(float %x, float %y) {158; SDAG-LABEL: fcmp_ord:159; SDAG: ## %bb.0:160; SDAG-NEXT: ucomiss %xmm1, %xmm0161; SDAG-NEXT: setnp %al162; SDAG-NEXT: retq163;164; FAST_NOAVX-LABEL: fcmp_ord:165; FAST_NOAVX: ## %bb.0:166; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0167; FAST_NOAVX-NEXT: setnp %al168; FAST_NOAVX-NEXT: andb $1, %al169; FAST_NOAVX-NEXT: retq170;171; FAST_AVX-LABEL: fcmp_ord:172; FAST_AVX: ## %bb.0:173; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0174; FAST_AVX-NEXT: setnp %al175; FAST_AVX-NEXT: andb $1, %al176; FAST_AVX-NEXT: retq177 %1 = fcmp ord float %x, %y178 ret i1 %1179}180 181define zeroext i1 @fcmp_uno(float %x, float %y) {182; SDAG-LABEL: fcmp_uno:183; SDAG: ## %bb.0:184; SDAG-NEXT: ucomiss %xmm1, %xmm0185; SDAG-NEXT: setp %al186; SDAG-NEXT: retq187;188; FAST_NOAVX-LABEL: fcmp_uno:189; FAST_NOAVX: ## %bb.0:190; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0191; FAST_NOAVX-NEXT: setp %al192; FAST_NOAVX-NEXT: andb $1, %al193; FAST_NOAVX-NEXT: retq194;195; FAST_AVX-LABEL: fcmp_uno:196; FAST_AVX: ## %bb.0:197; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0198; FAST_AVX-NEXT: setp %al199; FAST_AVX-NEXT: andb $1, %al200; FAST_AVX-NEXT: retq201 %1 = fcmp uno float %x, %y202 ret i1 %1203}204 205define zeroext i1 @fcmp_ueq(float %x, float %y) {206; SDAG-LABEL: fcmp_ueq:207; SDAG: ## %bb.0:208; SDAG-NEXT: ucomiss %xmm1, %xmm0209; SDAG-NEXT: sete %al210; SDAG-NEXT: retq211;212; FAST_NOAVX-LABEL: fcmp_ueq:213; FAST_NOAVX: ## %bb.0:214; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0215; FAST_NOAVX-NEXT: sete %al216; FAST_NOAVX-NEXT: andb $1, %al217; FAST_NOAVX-NEXT: retq218;219; FAST_AVX-LABEL: fcmp_ueq:220; FAST_AVX: ## %bb.0:221; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0222; FAST_AVX-NEXT: sete %al223; FAST_AVX-NEXT: andb $1, %al224; FAST_AVX-NEXT: retq225 %1 = fcmp ueq float %x, %y226 ret i1 %1227}228 229define zeroext i1 @fcmp_ugt(float %x, float %y) {230; SDAG-LABEL: fcmp_ugt:231; SDAG: ## %bb.0:232; SDAG-NEXT: ucomiss %xmm0, %xmm1233; SDAG-NEXT: setb %al234; SDAG-NEXT: retq235;236; FAST_NOAVX-LABEL: fcmp_ugt:237; FAST_NOAVX: ## %bb.0:238; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1239; FAST_NOAVX-NEXT: setb %al240; FAST_NOAVX-NEXT: andb $1, %al241; FAST_NOAVX-NEXT: retq242;243; FAST_AVX-LABEL: fcmp_ugt:244; FAST_AVX: ## %bb.0:245; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1246; FAST_AVX-NEXT: setb %al247; FAST_AVX-NEXT: andb $1, %al248; FAST_AVX-NEXT: retq249 %1 = fcmp ugt float %x, %y250 ret i1 %1251}252 253define zeroext i1 @fcmp_uge(float %x, float %y) {254; SDAG-LABEL: fcmp_uge:255; SDAG: ## %bb.0:256; SDAG-NEXT: ucomiss %xmm0, %xmm1257; SDAG-NEXT: setbe %al258; SDAG-NEXT: retq259;260; FAST_NOAVX-LABEL: fcmp_uge:261; FAST_NOAVX: ## %bb.0:262; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1263; FAST_NOAVX-NEXT: setbe %al264; FAST_NOAVX-NEXT: andb $1, %al265; FAST_NOAVX-NEXT: retq266;267; FAST_AVX-LABEL: fcmp_uge:268; FAST_AVX: ## %bb.0:269; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1270; FAST_AVX-NEXT: setbe %al271; FAST_AVX-NEXT: andb $1, %al272; FAST_AVX-NEXT: retq273 %1 = fcmp uge float %x, %y274 ret i1 %1275}276 277define zeroext i1 @fcmp_ult(float %x, float %y) {278; SDAG-LABEL: fcmp_ult:279; SDAG: ## %bb.0:280; SDAG-NEXT: ucomiss %xmm1, %xmm0281; SDAG-NEXT: setb %al282; SDAG-NEXT: retq283;284; FAST_NOAVX-LABEL: fcmp_ult:285; FAST_NOAVX: ## %bb.0:286; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0287; FAST_NOAVX-NEXT: setb %al288; FAST_NOAVX-NEXT: andb $1, %al289; FAST_NOAVX-NEXT: retq290;291; FAST_AVX-LABEL: fcmp_ult:292; FAST_AVX: ## %bb.0:293; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0294; FAST_AVX-NEXT: setb %al295; FAST_AVX-NEXT: andb $1, %al296; FAST_AVX-NEXT: retq297 %1 = fcmp ult float %x, %y298 ret i1 %1299}300 301define zeroext i1 @fcmp_ule(float %x, float %y) {302; SDAG-LABEL: fcmp_ule:303; SDAG: ## %bb.0:304; SDAG-NEXT: ucomiss %xmm1, %xmm0305; SDAG-NEXT: setbe %al306; SDAG-NEXT: retq307;308; FAST_NOAVX-LABEL: fcmp_ule:309; FAST_NOAVX: ## %bb.0:310; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0311; FAST_NOAVX-NEXT: setbe %al312; FAST_NOAVX-NEXT: andb $1, %al313; FAST_NOAVX-NEXT: retq314;315; FAST_AVX-LABEL: fcmp_ule:316; FAST_AVX: ## %bb.0:317; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0318; FAST_AVX-NEXT: setbe %al319; FAST_AVX-NEXT: andb $1, %al320; FAST_AVX-NEXT: retq321 %1 = fcmp ule float %x, %y322 ret i1 %1323}324 325define zeroext i1 @fcmp_une(float %x, float %y) {326; SDAG-LABEL: fcmp_une:327; SDAG: ## %bb.0:328; SDAG-NEXT: cmpneqss %xmm1, %xmm0329; SDAG-NEXT: movd %xmm0, %eax330; SDAG-NEXT: andl $1, %eax331; SDAG-NEXT: ## kill: def $al killed $al killed $eax332; SDAG-NEXT: retq333;334; FAST_NOAVX-LABEL: fcmp_une:335; FAST_NOAVX: ## %bb.0:336; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0337; FAST_NOAVX-NEXT: setne %cl338; FAST_NOAVX-NEXT: setp %al339; FAST_NOAVX-NEXT: orb %cl, %al340; FAST_NOAVX-NEXT: andb $1, %al341; FAST_NOAVX-NEXT: retq342;343; FAST_AVX-LABEL: fcmp_une:344; FAST_AVX: ## %bb.0:345; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0346; FAST_AVX-NEXT: setne %cl347; FAST_AVX-NEXT: setp %al348; FAST_AVX-NEXT: orb %cl, %al349; FAST_AVX-NEXT: andb $1, %al350; FAST_AVX-NEXT: retq351 %1 = fcmp une float %x, %y352 ret i1 %1353}354 355define zeroext i1 @icmp_eq(i32 %x, i32 %y) {356; SDAG-LABEL: icmp_eq:357; SDAG: ## %bb.0:358; SDAG-NEXT: cmpl %esi, %edi359; SDAG-NEXT: sete %al360; SDAG-NEXT: retq361;362; FAST-LABEL: icmp_eq:363; FAST: ## %bb.0:364; FAST-NEXT: cmpl %esi, %edi365; FAST-NEXT: sete %al366; FAST-NEXT: andb $1, %al367; FAST-NEXT: retq368 %1 = icmp eq i32 %x, %y369 ret i1 %1370}371 372define zeroext i1 @icmp_ne(i32 %x, i32 %y) {373; SDAG-LABEL: icmp_ne:374; SDAG: ## %bb.0:375; SDAG-NEXT: cmpl %esi, %edi376; SDAG-NEXT: setne %al377; SDAG-NEXT: retq378;379; FAST-LABEL: icmp_ne:380; FAST: ## %bb.0:381; FAST-NEXT: cmpl %esi, %edi382; FAST-NEXT: setne %al383; FAST-NEXT: andb $1, %al384; FAST-NEXT: retq385 %1 = icmp ne i32 %x, %y386 ret i1 %1387}388 389define zeroext i1 @icmp_ugt(i32 %x, i32 %y) {390; SDAG-LABEL: icmp_ugt:391; SDAG: ## %bb.0:392; SDAG-NEXT: cmpl %esi, %edi393; SDAG-NEXT: seta %al394; SDAG-NEXT: retq395;396; FAST-LABEL: icmp_ugt:397; FAST: ## %bb.0:398; FAST-NEXT: cmpl %esi, %edi399; FAST-NEXT: seta %al400; FAST-NEXT: andb $1, %al401; FAST-NEXT: retq402 %1 = icmp ugt i32 %x, %y403 ret i1 %1404}405 406define zeroext i1 @icmp_uge(i32 %x, i32 %y) {407; SDAG-LABEL: icmp_uge:408; SDAG: ## %bb.0:409; SDAG-NEXT: cmpl %esi, %edi410; SDAG-NEXT: setae %al411; SDAG-NEXT: retq412;413; FAST-LABEL: icmp_uge:414; FAST: ## %bb.0:415; FAST-NEXT: cmpl %esi, %edi416; FAST-NEXT: setae %al417; FAST-NEXT: andb $1, %al418; FAST-NEXT: retq419 %1 = icmp uge i32 %x, %y420 ret i1 %1421}422 423define zeroext i1 @icmp_ult(i32 %x, i32 %y) {424; SDAG-LABEL: icmp_ult:425; SDAG: ## %bb.0:426; SDAG-NEXT: cmpl %esi, %edi427; SDAG-NEXT: setb %al428; SDAG-NEXT: retq429;430; FAST-LABEL: icmp_ult:431; FAST: ## %bb.0:432; FAST-NEXT: cmpl %esi, %edi433; FAST-NEXT: setb %al434; FAST-NEXT: andb $1, %al435; FAST-NEXT: retq436 %1 = icmp ult i32 %x, %y437 ret i1 %1438}439 440define zeroext i1 @icmp_ule(i32 %x, i32 %y) {441; SDAG-LABEL: icmp_ule:442; SDAG: ## %bb.0:443; SDAG-NEXT: cmpl %esi, %edi444; SDAG-NEXT: setbe %al445; SDAG-NEXT: retq446;447; FAST-LABEL: icmp_ule:448; FAST: ## %bb.0:449; FAST-NEXT: cmpl %esi, %edi450; FAST-NEXT: setbe %al451; FAST-NEXT: andb $1, %al452; FAST-NEXT: retq453 %1 = icmp ule i32 %x, %y454 ret i1 %1455}456 457define zeroext i1 @icmp_sgt(i32 %x, i32 %y) {458; SDAG-LABEL: icmp_sgt:459; SDAG: ## %bb.0:460; SDAG-NEXT: cmpl %esi, %edi461; SDAG-NEXT: setg %al462; SDAG-NEXT: retq463;464; FAST-LABEL: icmp_sgt:465; FAST: ## %bb.0:466; FAST-NEXT: cmpl %esi, %edi467; FAST-NEXT: setg %al468; FAST-NEXT: andb $1, %al469; FAST-NEXT: retq470 %1 = icmp sgt i32 %x, %y471 ret i1 %1472}473 474define zeroext i1 @icmp_sge(i32 %x, i32 %y) {475; SDAG-LABEL: icmp_sge:476; SDAG: ## %bb.0:477; SDAG-NEXT: cmpl %esi, %edi478; SDAG-NEXT: setge %al479; SDAG-NEXT: retq480;481; FAST-LABEL: icmp_sge:482; FAST: ## %bb.0:483; FAST-NEXT: cmpl %esi, %edi484; FAST-NEXT: setge %al485; FAST-NEXT: andb $1, %al486; FAST-NEXT: retq487 %1 = icmp sge i32 %x, %y488 ret i1 %1489}490 491define zeroext i1 @icmp_slt(i32 %x, i32 %y) {492; SDAG-LABEL: icmp_slt:493; SDAG: ## %bb.0:494; SDAG-NEXT: cmpl %esi, %edi495; SDAG-NEXT: setl %al496; SDAG-NEXT: retq497;498; FAST-LABEL: icmp_slt:499; FAST: ## %bb.0:500; FAST-NEXT: cmpl %esi, %edi501; FAST-NEXT: setl %al502; FAST-NEXT: andb $1, %al503; FAST-NEXT: retq504 %1 = icmp slt i32 %x, %y505 ret i1 %1506}507 508define zeroext i1 @icmp_sle(i32 %x, i32 %y) {509; SDAG-LABEL: icmp_sle:510; SDAG: ## %bb.0:511; SDAG-NEXT: cmpl %esi, %edi512; SDAG-NEXT: setle %al513; SDAG-NEXT: retq514;515; FAST-LABEL: icmp_sle:516; FAST: ## %bb.0:517; FAST-NEXT: cmpl %esi, %edi518; FAST-NEXT: setle %al519; FAST-NEXT: andb $1, %al520; FAST-NEXT: retq521 %1 = icmp sle i32 %x, %y522 ret i1 %1523}524 525; Test cmp folding and condition optimization.526define zeroext i1 @fcmp_oeq2(float %x) {527; SDAG-LABEL: fcmp_oeq2:528; SDAG: ## %bb.0:529; SDAG-NEXT: ucomiss %xmm0, %xmm0530; SDAG-NEXT: setnp %al531; SDAG-NEXT: retq532;533; FAST_NOAVX-LABEL: fcmp_oeq2:534; FAST_NOAVX: ## %bb.0:535; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0536; FAST_NOAVX-NEXT: setnp %al537; FAST_NOAVX-NEXT: andb $1, %al538; FAST_NOAVX-NEXT: retq539;540; FAST_AVX-LABEL: fcmp_oeq2:541; FAST_AVX: ## %bb.0:542; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0543; FAST_AVX-NEXT: setnp %al544; FAST_AVX-NEXT: andb $1, %al545; FAST_AVX-NEXT: retq546 %1 = fcmp oeq float %x, %x547 ret i1 %1548}549 550define zeroext i1 @fcmp_oeq3(float %x) {551; SDAG-LABEL: fcmp_oeq3:552; SDAG: ## %bb.0:553; SDAG-NEXT: xorps %xmm1, %xmm1554; SDAG-NEXT: cmpeqss %xmm0, %xmm1555; SDAG-NEXT: movd %xmm1, %eax556; SDAG-NEXT: andl $1, %eax557; SDAG-NEXT: ## kill: def $al killed $al killed $eax558; SDAG-NEXT: retq559;560; FAST_NOAVX-LABEL: fcmp_oeq3:561; FAST_NOAVX: ## %bb.0:562; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1563; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0564; FAST_NOAVX-NEXT: sete %cl565; FAST_NOAVX-NEXT: setnp %al566; FAST_NOAVX-NEXT: andb %cl, %al567; FAST_NOAVX-NEXT: andb $1, %al568; FAST_NOAVX-NEXT: retq569;570; FAST_AVX-LABEL: fcmp_oeq3:571; FAST_AVX: ## %bb.0:572; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1573; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0574; FAST_AVX-NEXT: sete %cl575; FAST_AVX-NEXT: setnp %al576; FAST_AVX-NEXT: andb %cl, %al577; FAST_AVX-NEXT: andb $1, %al578; FAST_AVX-NEXT: retq579 %1 = fcmp oeq float %x, 0.000000e+00580 ret i1 %1581}582 583define zeroext i1 @fcmp_ogt2(float %x) {584; SDAG-LABEL: fcmp_ogt2:585; SDAG: ## %bb.0:586; SDAG-NEXT: xorl %eax, %eax587; SDAG-NEXT: retq588;589; FAST-LABEL: fcmp_ogt2:590; FAST: ## %bb.0:591; FAST-NEXT: xorl %eax, %eax592; FAST-NEXT: andb $1, %al593; FAST-NEXT: ## kill: def $al killed $al killed $eax594; FAST-NEXT: retq595 %1 = fcmp ogt float %x, %x596 ret i1 %1597}598 599define zeroext i1 @fcmp_ogt3(float %x) {600; SDAG-LABEL: fcmp_ogt3:601; SDAG: ## %bb.0:602; SDAG-NEXT: xorps %xmm1, %xmm1603; SDAG-NEXT: ucomiss %xmm1, %xmm0604; SDAG-NEXT: seta %al605; SDAG-NEXT: retq606;607; FAST_NOAVX-LABEL: fcmp_ogt3:608; FAST_NOAVX: ## %bb.0:609; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1610; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0611; FAST_NOAVX-NEXT: seta %al612; FAST_NOAVX-NEXT: andb $1, %al613; FAST_NOAVX-NEXT: retq614;615; FAST_AVX-LABEL: fcmp_ogt3:616; FAST_AVX: ## %bb.0:617; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1618; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0619; FAST_AVX-NEXT: seta %al620; FAST_AVX-NEXT: andb $1, %al621; FAST_AVX-NEXT: retq622 %1 = fcmp ogt float %x, 0.000000e+00623 ret i1 %1624}625 626define zeroext i1 @fcmp_oge2(float %x) {627; SDAG-LABEL: fcmp_oge2:628; SDAG: ## %bb.0:629; SDAG-NEXT: ucomiss %xmm0, %xmm0630; SDAG-NEXT: setnp %al631; SDAG-NEXT: retq632;633; FAST_NOAVX-LABEL: fcmp_oge2:634; FAST_NOAVX: ## %bb.0:635; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0636; FAST_NOAVX-NEXT: setnp %al637; FAST_NOAVX-NEXT: andb $1, %al638; FAST_NOAVX-NEXT: retq639;640; FAST_AVX-LABEL: fcmp_oge2:641; FAST_AVX: ## %bb.0:642; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0643; FAST_AVX-NEXT: setnp %al644; FAST_AVX-NEXT: andb $1, %al645; FAST_AVX-NEXT: retq646 %1 = fcmp oge float %x, %x647 ret i1 %1648}649 650define zeroext i1 @fcmp_oge3(float %x) {651; SDAG-LABEL: fcmp_oge3:652; SDAG: ## %bb.0:653; SDAG-NEXT: xorps %xmm1, %xmm1654; SDAG-NEXT: ucomiss %xmm1, %xmm0655; SDAG-NEXT: setae %al656; SDAG-NEXT: retq657;658; FAST_NOAVX-LABEL: fcmp_oge3:659; FAST_NOAVX: ## %bb.0:660; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1661; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0662; FAST_NOAVX-NEXT: setae %al663; FAST_NOAVX-NEXT: andb $1, %al664; FAST_NOAVX-NEXT: retq665;666; FAST_AVX-LABEL: fcmp_oge3:667; FAST_AVX: ## %bb.0:668; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1669; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0670; FAST_AVX-NEXT: setae %al671; FAST_AVX-NEXT: andb $1, %al672; FAST_AVX-NEXT: retq673 %1 = fcmp oge float %x, 0.000000e+00674 ret i1 %1675}676 677define zeroext i1 @fcmp_olt2(float %x) {678; SDAG-LABEL: fcmp_olt2:679; SDAG: ## %bb.0:680; SDAG-NEXT: xorl %eax, %eax681; SDAG-NEXT: retq682;683; FAST-LABEL: fcmp_olt2:684; FAST: ## %bb.0:685; FAST-NEXT: xorl %eax, %eax686; FAST-NEXT: andb $1, %al687; FAST-NEXT: ## kill: def $al killed $al killed $eax688; FAST-NEXT: retq689 %1 = fcmp olt float %x, %x690 ret i1 %1691}692 693define zeroext i1 @fcmp_olt3(float %x) {694; SDAG-LABEL: fcmp_olt3:695; SDAG: ## %bb.0:696; SDAG-NEXT: xorps %xmm1, %xmm1697; SDAG-NEXT: ucomiss %xmm0, %xmm1698; SDAG-NEXT: seta %al699; SDAG-NEXT: retq700;701; FAST_NOAVX-LABEL: fcmp_olt3:702; FAST_NOAVX: ## %bb.0:703; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1704; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1705; FAST_NOAVX-NEXT: seta %al706; FAST_NOAVX-NEXT: andb $1, %al707; FAST_NOAVX-NEXT: retq708;709; FAST_AVX-LABEL: fcmp_olt3:710; FAST_AVX: ## %bb.0:711; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1712; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1713; FAST_AVX-NEXT: seta %al714; FAST_AVX-NEXT: andb $1, %al715; FAST_AVX-NEXT: retq716 %1 = fcmp olt float %x, 0.000000e+00717 ret i1 %1718}719 720define zeroext i1 @fcmp_ole2(float %x) {721; SDAG-LABEL: fcmp_ole2:722; SDAG: ## %bb.0:723; SDAG-NEXT: ucomiss %xmm0, %xmm0724; SDAG-NEXT: setnp %al725; SDAG-NEXT: retq726;727; FAST_NOAVX-LABEL: fcmp_ole2:728; FAST_NOAVX: ## %bb.0:729; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0730; FAST_NOAVX-NEXT: setnp %al731; FAST_NOAVX-NEXT: andb $1, %al732; FAST_NOAVX-NEXT: retq733;734; FAST_AVX-LABEL: fcmp_ole2:735; FAST_AVX: ## %bb.0:736; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0737; FAST_AVX-NEXT: setnp %al738; FAST_AVX-NEXT: andb $1, %al739; FAST_AVX-NEXT: retq740 %1 = fcmp ole float %x, %x741 ret i1 %1742}743 744define zeroext i1 @fcmp_ole3(float %x) {745; SDAG-LABEL: fcmp_ole3:746; SDAG: ## %bb.0:747; SDAG-NEXT: xorps %xmm1, %xmm1748; SDAG-NEXT: ucomiss %xmm0, %xmm1749; SDAG-NEXT: setae %al750; SDAG-NEXT: retq751;752; FAST_NOAVX-LABEL: fcmp_ole3:753; FAST_NOAVX: ## %bb.0:754; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1755; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1756; FAST_NOAVX-NEXT: setae %al757; FAST_NOAVX-NEXT: andb $1, %al758; FAST_NOAVX-NEXT: retq759;760; FAST_AVX-LABEL: fcmp_ole3:761; FAST_AVX: ## %bb.0:762; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1763; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1764; FAST_AVX-NEXT: setae %al765; FAST_AVX-NEXT: andb $1, %al766; FAST_AVX-NEXT: retq767 %1 = fcmp ole float %x, 0.000000e+00768 ret i1 %1769}770 771define zeroext i1 @fcmp_one2(float %x) {772; SDAG-LABEL: fcmp_one2:773; SDAG: ## %bb.0:774; SDAG-NEXT: xorl %eax, %eax775; SDAG-NEXT: retq776;777; FAST-LABEL: fcmp_one2:778; FAST: ## %bb.0:779; FAST-NEXT: xorl %eax, %eax780; FAST-NEXT: andb $1, %al781; FAST-NEXT: ## kill: def $al killed $al killed $eax782; FAST-NEXT: retq783 %1 = fcmp one float %x, %x784 ret i1 %1785}786 787define zeroext i1 @fcmp_one3(float %x) {788; SDAG-LABEL: fcmp_one3:789; SDAG: ## %bb.0:790; SDAG-NEXT: xorps %xmm1, %xmm1791; SDAG-NEXT: ucomiss %xmm1, %xmm0792; SDAG-NEXT: setne %al793; SDAG-NEXT: retq794;795; FAST_NOAVX-LABEL: fcmp_one3:796; FAST_NOAVX: ## %bb.0:797; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1798; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0799; FAST_NOAVX-NEXT: setne %al800; FAST_NOAVX-NEXT: andb $1, %al801; FAST_NOAVX-NEXT: retq802;803; FAST_AVX-LABEL: fcmp_one3:804; FAST_AVX: ## %bb.0:805; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1806; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0807; FAST_AVX-NEXT: setne %al808; FAST_AVX-NEXT: andb $1, %al809; FAST_AVX-NEXT: retq810 %1 = fcmp one float %x, 0.000000e+00811 ret i1 %1812}813 814define zeroext i1 @fcmp_ord2(float %x) {815; SDAG-LABEL: fcmp_ord2:816; SDAG: ## %bb.0:817; SDAG-NEXT: ucomiss %xmm0, %xmm0818; SDAG-NEXT: setnp %al819; SDAG-NEXT: retq820;821; FAST_NOAVX-LABEL: fcmp_ord2:822; FAST_NOAVX: ## %bb.0:823; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0824; FAST_NOAVX-NEXT: setnp %al825; FAST_NOAVX-NEXT: andb $1, %al826; FAST_NOAVX-NEXT: retq827;828; FAST_AVX-LABEL: fcmp_ord2:829; FAST_AVX: ## %bb.0:830; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0831; FAST_AVX-NEXT: setnp %al832; FAST_AVX-NEXT: andb $1, %al833; FAST_AVX-NEXT: retq834 %1 = fcmp ord float %x, %x835 ret i1 %1836}837 838define zeroext i1 @fcmp_ord3(float %x) {839; SDAG-LABEL: fcmp_ord3:840; SDAG: ## %bb.0:841; SDAG-NEXT: ucomiss %xmm0, %xmm0842; SDAG-NEXT: setnp %al843; SDAG-NEXT: retq844;845; FAST_NOAVX-LABEL: fcmp_ord3:846; FAST_NOAVX: ## %bb.0:847; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0848; FAST_NOAVX-NEXT: setnp %al849; FAST_NOAVX-NEXT: andb $1, %al850; FAST_NOAVX-NEXT: retq851;852; FAST_AVX-LABEL: fcmp_ord3:853; FAST_AVX: ## %bb.0:854; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0855; FAST_AVX-NEXT: setnp %al856; FAST_AVX-NEXT: andb $1, %al857; FAST_AVX-NEXT: retq858 %1 = fcmp ord float %x, 0.000000e+00859 ret i1 %1860}861 862define zeroext i1 @fcmp_uno2(float %x) {863; SDAG-LABEL: fcmp_uno2:864; SDAG: ## %bb.0:865; SDAG-NEXT: ucomiss %xmm0, %xmm0866; SDAG-NEXT: setp %al867; SDAG-NEXT: retq868;869; FAST_NOAVX-LABEL: fcmp_uno2:870; FAST_NOAVX: ## %bb.0:871; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0872; FAST_NOAVX-NEXT: setp %al873; FAST_NOAVX-NEXT: andb $1, %al874; FAST_NOAVX-NEXT: retq875;876; FAST_AVX-LABEL: fcmp_uno2:877; FAST_AVX: ## %bb.0:878; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0879; FAST_AVX-NEXT: setp %al880; FAST_AVX-NEXT: andb $1, %al881; FAST_AVX-NEXT: retq882 %1 = fcmp uno float %x, %x883 ret i1 %1884}885 886define zeroext i1 @fcmp_uno3(float %x) {887; SDAG-LABEL: fcmp_uno3:888; SDAG: ## %bb.0:889; SDAG-NEXT: ucomiss %xmm0, %xmm0890; SDAG-NEXT: setp %al891; SDAG-NEXT: retq892;893; FAST_NOAVX-LABEL: fcmp_uno3:894; FAST_NOAVX: ## %bb.0:895; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0896; FAST_NOAVX-NEXT: setp %al897; FAST_NOAVX-NEXT: andb $1, %al898; FAST_NOAVX-NEXT: retq899;900; FAST_AVX-LABEL: fcmp_uno3:901; FAST_AVX: ## %bb.0:902; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0903; FAST_AVX-NEXT: setp %al904; FAST_AVX-NEXT: andb $1, %al905; FAST_AVX-NEXT: retq906 %1 = fcmp uno float %x, 0.000000e+00907 ret i1 %1908}909 910define zeroext i1 @fcmp_ueq2(float %x) {911; SDAG-LABEL: fcmp_ueq2:912; SDAG: ## %bb.0:913; SDAG-NEXT: movb $1, %al914; SDAG-NEXT: retq915;916; FAST-LABEL: fcmp_ueq2:917; FAST: ## %bb.0:918; FAST-NEXT: movb $1, %al919; FAST-NEXT: andb $1, %al920; FAST-NEXT: retq921 %1 = fcmp ueq float %x, %x922 ret i1 %1923}924 925define zeroext i1 @fcmp_ueq3(float %x) {926; SDAG-LABEL: fcmp_ueq3:927; SDAG: ## %bb.0:928; SDAG-NEXT: xorps %xmm1, %xmm1929; SDAG-NEXT: ucomiss %xmm1, %xmm0930; SDAG-NEXT: sete %al931; SDAG-NEXT: retq932;933; FAST_NOAVX-LABEL: fcmp_ueq3:934; FAST_NOAVX: ## %bb.0:935; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1936; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm0937; FAST_NOAVX-NEXT: sete %al938; FAST_NOAVX-NEXT: andb $1, %al939; FAST_NOAVX-NEXT: retq940;941; FAST_AVX-LABEL: fcmp_ueq3:942; FAST_AVX: ## %bb.0:943; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1944; FAST_AVX-NEXT: vucomiss %xmm1, %xmm0945; FAST_AVX-NEXT: sete %al946; FAST_AVX-NEXT: andb $1, %al947; FAST_AVX-NEXT: retq948 %1 = fcmp ueq float %x, 0.000000e+00949 ret i1 %1950}951 952define zeroext i1 @fcmp_ugt2(float %x) {953; SDAG-LABEL: fcmp_ugt2:954; SDAG: ## %bb.0:955; SDAG-NEXT: ucomiss %xmm0, %xmm0956; SDAG-NEXT: setp %al957; SDAG-NEXT: retq958;959; FAST_NOAVX-LABEL: fcmp_ugt2:960; FAST_NOAVX: ## %bb.0:961; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm0962; FAST_NOAVX-NEXT: setp %al963; FAST_NOAVX-NEXT: andb $1, %al964; FAST_NOAVX-NEXT: retq965;966; FAST_AVX-LABEL: fcmp_ugt2:967; FAST_AVX: ## %bb.0:968; FAST_AVX-NEXT: vucomiss %xmm0, %xmm0969; FAST_AVX-NEXT: setp %al970; FAST_AVX-NEXT: andb $1, %al971; FAST_AVX-NEXT: retq972 %1 = fcmp ugt float %x, %x973 ret i1 %1974}975 976define zeroext i1 @fcmp_ugt3(float %x) {977; SDAG-LABEL: fcmp_ugt3:978; SDAG: ## %bb.0:979; SDAG-NEXT: xorps %xmm1, %xmm1980; SDAG-NEXT: ucomiss %xmm0, %xmm1981; SDAG-NEXT: setb %al982; SDAG-NEXT: retq983;984; FAST_NOAVX-LABEL: fcmp_ugt3:985; FAST_NOAVX: ## %bb.0:986; FAST_NOAVX-NEXT: xorps %xmm1, %xmm1987; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm1988; FAST_NOAVX-NEXT: setb %al989; FAST_NOAVX-NEXT: andb $1, %al990; FAST_NOAVX-NEXT: retq991;992; FAST_AVX-LABEL: fcmp_ugt3:993; FAST_AVX: ## %bb.0:994; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1995; FAST_AVX-NEXT: vucomiss %xmm0, %xmm1996; FAST_AVX-NEXT: setb %al997; FAST_AVX-NEXT: andb $1, %al998; FAST_AVX-NEXT: retq999 %1 = fcmp ugt float %x, 0.000000e+001000 ret i1 %11001}1002 1003define zeroext i1 @fcmp_uge2(float %x) {1004; SDAG-LABEL: fcmp_uge2:1005; SDAG: ## %bb.0:1006; SDAG-NEXT: movb $1, %al1007; SDAG-NEXT: retq1008;1009; FAST-LABEL: fcmp_uge2:1010; FAST: ## %bb.0:1011; FAST-NEXT: movb $1, %al1012; FAST-NEXT: andb $1, %al1013; FAST-NEXT: retq1014 %1 = fcmp uge float %x, %x1015 ret i1 %11016}1017 1018define zeroext i1 @fcmp_uge3(float %x) {1019; SDAG-LABEL: fcmp_uge3:1020; SDAG: ## %bb.0:1021; SDAG-NEXT: xorps %xmm1, %xmm11022; SDAG-NEXT: ucomiss %xmm0, %xmm11023; SDAG-NEXT: setbe %al1024; SDAG-NEXT: retq1025;1026; FAST_NOAVX-LABEL: fcmp_uge3:1027; FAST_NOAVX: ## %bb.0:1028; FAST_NOAVX-NEXT: xorps %xmm1, %xmm11029; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm11030; FAST_NOAVX-NEXT: setbe %al1031; FAST_NOAVX-NEXT: andb $1, %al1032; FAST_NOAVX-NEXT: retq1033;1034; FAST_AVX-LABEL: fcmp_uge3:1035; FAST_AVX: ## %bb.0:1036; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm11037; FAST_AVX-NEXT: vucomiss %xmm0, %xmm11038; FAST_AVX-NEXT: setbe %al1039; FAST_AVX-NEXT: andb $1, %al1040; FAST_AVX-NEXT: retq1041 %1 = fcmp uge float %x, 0.000000e+001042 ret i1 %11043}1044 1045define zeroext i1 @fcmp_ult2(float %x) {1046; SDAG-LABEL: fcmp_ult2:1047; SDAG: ## %bb.0:1048; SDAG-NEXT: ucomiss %xmm0, %xmm01049; SDAG-NEXT: setp %al1050; SDAG-NEXT: retq1051;1052; FAST_NOAVX-LABEL: fcmp_ult2:1053; FAST_NOAVX: ## %bb.0:1054; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm01055; FAST_NOAVX-NEXT: setp %al1056; FAST_NOAVX-NEXT: andb $1, %al1057; FAST_NOAVX-NEXT: retq1058;1059; FAST_AVX-LABEL: fcmp_ult2:1060; FAST_AVX: ## %bb.0:1061; FAST_AVX-NEXT: vucomiss %xmm0, %xmm01062; FAST_AVX-NEXT: setp %al1063; FAST_AVX-NEXT: andb $1, %al1064; FAST_AVX-NEXT: retq1065 %1 = fcmp ult float %x, %x1066 ret i1 %11067}1068 1069define zeroext i1 @fcmp_ult3(float %x) {1070; SDAG-LABEL: fcmp_ult3:1071; SDAG: ## %bb.0:1072; SDAG-NEXT: xorps %xmm1, %xmm11073; SDAG-NEXT: ucomiss %xmm1, %xmm01074; SDAG-NEXT: setb %al1075; SDAG-NEXT: retq1076;1077; FAST_NOAVX-LABEL: fcmp_ult3:1078; FAST_NOAVX: ## %bb.0:1079; FAST_NOAVX-NEXT: xorps %xmm1, %xmm11080; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm01081; FAST_NOAVX-NEXT: setb %al1082; FAST_NOAVX-NEXT: andb $1, %al1083; FAST_NOAVX-NEXT: retq1084;1085; FAST_AVX-LABEL: fcmp_ult3:1086; FAST_AVX: ## %bb.0:1087; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm11088; FAST_AVX-NEXT: vucomiss %xmm1, %xmm01089; FAST_AVX-NEXT: setb %al1090; FAST_AVX-NEXT: andb $1, %al1091; FAST_AVX-NEXT: retq1092 %1 = fcmp ult float %x, 0.000000e+001093 ret i1 %11094}1095 1096define zeroext i1 @fcmp_ule2(float %x) {1097; SDAG-LABEL: fcmp_ule2:1098; SDAG: ## %bb.0:1099; SDAG-NEXT: movb $1, %al1100; SDAG-NEXT: retq1101;1102; FAST-LABEL: fcmp_ule2:1103; FAST: ## %bb.0:1104; FAST-NEXT: movb $1, %al1105; FAST-NEXT: andb $1, %al1106; FAST-NEXT: retq1107 %1 = fcmp ule float %x, %x1108 ret i1 %11109}1110 1111define zeroext i1 @fcmp_ule3(float %x) {1112; SDAG-LABEL: fcmp_ule3:1113; SDAG: ## %bb.0:1114; SDAG-NEXT: xorps %xmm1, %xmm11115; SDAG-NEXT: ucomiss %xmm1, %xmm01116; SDAG-NEXT: setbe %al1117; SDAG-NEXT: retq1118;1119; FAST_NOAVX-LABEL: fcmp_ule3:1120; FAST_NOAVX: ## %bb.0:1121; FAST_NOAVX-NEXT: xorps %xmm1, %xmm11122; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm01123; FAST_NOAVX-NEXT: setbe %al1124; FAST_NOAVX-NEXT: andb $1, %al1125; FAST_NOAVX-NEXT: retq1126;1127; FAST_AVX-LABEL: fcmp_ule3:1128; FAST_AVX: ## %bb.0:1129; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm11130; FAST_AVX-NEXT: vucomiss %xmm1, %xmm01131; FAST_AVX-NEXT: setbe %al1132; FAST_AVX-NEXT: andb $1, %al1133; FAST_AVX-NEXT: retq1134 %1 = fcmp ule float %x, 0.000000e+001135 ret i1 %11136}1137 1138define zeroext i1 @fcmp_une2(float %x) {1139; SDAG-LABEL: fcmp_une2:1140; SDAG: ## %bb.0:1141; SDAG-NEXT: ucomiss %xmm0, %xmm01142; SDAG-NEXT: setp %al1143; SDAG-NEXT: retq1144;1145; FAST_NOAVX-LABEL: fcmp_une2:1146; FAST_NOAVX: ## %bb.0:1147; FAST_NOAVX-NEXT: ucomiss %xmm0, %xmm01148; FAST_NOAVX-NEXT: setp %al1149; FAST_NOAVX-NEXT: andb $1, %al1150; FAST_NOAVX-NEXT: retq1151;1152; FAST_AVX-LABEL: fcmp_une2:1153; FAST_AVX: ## %bb.0:1154; FAST_AVX-NEXT: vucomiss %xmm0, %xmm01155; FAST_AVX-NEXT: setp %al1156; FAST_AVX-NEXT: andb $1, %al1157; FAST_AVX-NEXT: retq1158 %1 = fcmp une float %x, %x1159 ret i1 %11160}1161 1162define zeroext i1 @fcmp_une3(float %x) {1163; SDAG-LABEL: fcmp_une3:1164; SDAG: ## %bb.0:1165; SDAG-NEXT: xorps %xmm1, %xmm11166; SDAG-NEXT: cmpneqss %xmm0, %xmm11167; SDAG-NEXT: movd %xmm1, %eax1168; SDAG-NEXT: andl $1, %eax1169; SDAG-NEXT: ## kill: def $al killed $al killed $eax1170; SDAG-NEXT: retq1171;1172; FAST_NOAVX-LABEL: fcmp_une3:1173; FAST_NOAVX: ## %bb.0:1174; FAST_NOAVX-NEXT: xorps %xmm1, %xmm11175; FAST_NOAVX-NEXT: ucomiss %xmm1, %xmm01176; FAST_NOAVX-NEXT: setne %cl1177; FAST_NOAVX-NEXT: setp %al1178; FAST_NOAVX-NEXT: orb %cl, %al1179; FAST_NOAVX-NEXT: andb $1, %al1180; FAST_NOAVX-NEXT: retq1181;1182; FAST_AVX-LABEL: fcmp_une3:1183; FAST_AVX: ## %bb.0:1184; FAST_AVX-NEXT: vxorps %xmm1, %xmm1, %xmm11185; FAST_AVX-NEXT: vucomiss %xmm1, %xmm01186; FAST_AVX-NEXT: setne %cl1187; FAST_AVX-NEXT: setp %al1188; FAST_AVX-NEXT: orb %cl, %al1189; FAST_AVX-NEXT: andb $1, %al1190; FAST_AVX-NEXT: retq1191 %1 = fcmp une float %x, 0.000000e+001192 ret i1 %11193}1194