brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.2 KiB · 805b1b5 Raw
686 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefix=SSE3; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx  | FileCheck %s --check-prefixes=AVX,NO-AVX10_24; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx10.2 | FileCheck %s --check-prefixes=AVX,AVX10_25 6;7; SSE8;9 10define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {11; SSE-LABEL: test_x86_sse_comieq_ss:12; SSE:       # %bb.0:13; SSE-NEXT:    movl %edi, %eax14; SSE-NEXT:    comiss %xmm1, %xmm015; SSE-NEXT:    setnp %cl16; SSE-NEXT:    sete %dl17; SSE-NEXT:    testb %cl, %dl18; SSE-NEXT:    cmovnel %esi, %eax19; SSE-NEXT:    retq20;21; NO-AVX10_2-LABEL: test_x86_sse_comieq_ss:22; NO-AVX10_2:       # %bb.0:23; NO-AVX10_2-NEXT:    movl %edi, %eax24; NO-AVX10_2-NEXT:    vcomiss %xmm1, %xmm025; NO-AVX10_2-NEXT:    setnp %cl26; NO-AVX10_2-NEXT:    sete %dl27; NO-AVX10_2-NEXT:    testb %cl, %dl28; NO-AVX10_2-NEXT:    cmovnel %esi, %eax29; NO-AVX10_2-NEXT:    retq30;31; AVX10_2-LABEL: test_x86_sse_comieq_ss:32; AVX10_2:       # %bb.0:33; AVX10_2-NEXT:    movl %edi, %eax34; AVX10_2-NEXT:    vcomxss %xmm1, %xmm035; AVX10_2-NEXT:    cmovel %esi, %eax36; AVX10_2-NEXT:    retq37  %call = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)38  %cmp = icmp eq i32 %call, 039  %res = select i1 %cmp, i32 %a2, i32 %a340  ret i32 %res41}42declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone43 44define i32 @test_x86_sse_comige_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {45; SSE-LABEL: test_x86_sse_comige_ss:46; SSE:       # %bb.0:47; SSE-NEXT:    movl %edi, %eax48; SSE-NEXT:    comiss %xmm1, %xmm049; SSE-NEXT:    cmovbl %esi, %eax50; SSE-NEXT:    retq51;52; AVX-LABEL: test_x86_sse_comige_ss:53; AVX:       # %bb.0:54; AVX-NEXT:    movl %edi, %eax55; AVX-NEXT:    vcomiss %xmm1, %xmm056; AVX-NEXT:    cmovbl %esi, %eax57; AVX-NEXT:    retq58  %call = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1)59  %cmp = icmp ne i32 %call, 060  %res = select i1 %cmp, i32 %a2, i32 %a361  ret i32 %res62}63declare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone64 65define i32 @test_x86_sse_comigt_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {66; SSE-LABEL: test_x86_sse_comigt_ss:67; SSE:       # %bb.0:68; SSE-NEXT:    movl %edi, %eax69; SSE-NEXT:    comiss %xmm1, %xmm070; SSE-NEXT:    cmoval %esi, %eax71; SSE-NEXT:    retq72;73; AVX-LABEL: test_x86_sse_comigt_ss:74; AVX:       # %bb.0:75; AVX-NEXT:    movl %edi, %eax76; AVX-NEXT:    vcomiss %xmm1, %xmm077; AVX-NEXT:    cmoval %esi, %eax78; AVX-NEXT:    retq79  %call = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1)80  %cmp = icmp eq i32 %call, 081  %res = select i1 %cmp, i32 %a2, i32 %a382  ret i32 %res83}84declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone85 86define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {87; SSE-LABEL: test_x86_sse_comile_ss:88; SSE:       # %bb.0:89; SSE-NEXT:    movl %edi, %eax90; SSE-NEXT:    comiss %xmm0, %xmm191; SSE-NEXT:    cmovbl %esi, %eax92; SSE-NEXT:    retq93;94; AVX-LABEL: test_x86_sse_comile_ss:95; AVX:       # %bb.0:96; AVX-NEXT:    movl %edi, %eax97; AVX-NEXT:    vcomiss %xmm0, %xmm198; AVX-NEXT:    cmovbl %esi, %eax99; AVX-NEXT:    retq100  %call = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1)101  %cmp = icmp ne i32 %call, 0102  %res = select i1 %cmp, i32 %a2, i32 %a3103  ret i32 %res104}105declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone106 107define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {108; SSE-LABEL: test_x86_sse_comilt_ss:109; SSE:       # %bb.0:110; SSE-NEXT:    movl %edi, %eax111; SSE-NEXT:    comiss %xmm0, %xmm1112; SSE-NEXT:    cmoval %esi, %eax113; SSE-NEXT:    retq114;115; AVX-LABEL: test_x86_sse_comilt_ss:116; AVX:       # %bb.0:117; AVX-NEXT:    movl %edi, %eax118; AVX-NEXT:    vcomiss %xmm0, %xmm1119; AVX-NEXT:    cmoval %esi, %eax120; AVX-NEXT:    retq121  %call = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1)122  %cmp = icmp eq i32 %call, 0123  %res = select i1 %cmp, i32 %a2, i32 %a3124  ret i32 %res125}126declare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone127 128define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {129; SSE-LABEL: test_x86_sse_comineq_ss:130; SSE:       # %bb.0:131; SSE-NEXT:    movl %esi, %eax132; SSE-NEXT:    comiss %xmm1, %xmm0133; SSE-NEXT:    cmovnel %edi, %eax134; SSE-NEXT:    cmovpl %edi, %eax135; SSE-NEXT:    retq136;137; NO-AVX10_2-LABEL: test_x86_sse_comineq_ss:138; NO-AVX10_2:       # %bb.0:139; NO-AVX10_2-NEXT:    movl %esi, %eax140; NO-AVX10_2-NEXT:    vcomiss %xmm1, %xmm0141; NO-AVX10_2-NEXT:    cmovnel %edi, %eax142; NO-AVX10_2-NEXT:    cmovpl %edi, %eax143; NO-AVX10_2-NEXT:    retq144;145; AVX10_2-LABEL: test_x86_sse_comineq_ss:146; AVX10_2:       # %bb.0:147; AVX10_2-NEXT:    movl %edi, %eax148; AVX10_2-NEXT:    vcomxss %xmm1, %xmm0149; AVX10_2-NEXT:    cmovel %esi, %eax150; AVX10_2-NEXT:    retq151  %call = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1)152  %cmp = icmp ne i32 %call, 0153  %res = select i1 %cmp, i32 %a2, i32 %a3154  ret i32 %res155}156declare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone157 158define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {159; SSE-LABEL: test_x86_sse_ucomieq_ss:160; SSE:       # %bb.0:161; SSE-NEXT:    movl %edi, %eax162; SSE-NEXT:    ucomiss %xmm1, %xmm0163; SSE-NEXT:    setnp %cl164; SSE-NEXT:    sete %dl165; SSE-NEXT:    testb %cl, %dl166; SSE-NEXT:    cmovnel %esi, %eax167; SSE-NEXT:    retq168;169; NO-AVX10_2-LABEL: test_x86_sse_ucomieq_ss:170; NO-AVX10_2:       # %bb.0:171; NO-AVX10_2-NEXT:    movl %edi, %eax172; NO-AVX10_2-NEXT:    vucomiss %xmm1, %xmm0173; NO-AVX10_2-NEXT:    setnp %cl174; NO-AVX10_2-NEXT:    sete %dl175; NO-AVX10_2-NEXT:    testb %cl, %dl176; NO-AVX10_2-NEXT:    cmovnel %esi, %eax177; NO-AVX10_2-NEXT:    retq178;179; AVX10_2-LABEL: test_x86_sse_ucomieq_ss:180; AVX10_2:       # %bb.0:181; AVX10_2-NEXT:    movl %edi, %eax182; AVX10_2-NEXT:    vucomxss %xmm1, %xmm0183; AVX10_2-NEXT:    cmovel %esi, %eax184; AVX10_2-NEXT:    retq185  %call = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)186  %cmp = icmp eq i32 %call, 0187  %res = select i1 %cmp, i32 %a2, i32 %a3188  ret i32 %res189}190declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone191 192define i32 @test_x86_sse_ucomige_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {193; SSE-LABEL: test_x86_sse_ucomige_ss:194; SSE:       # %bb.0:195; SSE-NEXT:    movl %edi, %eax196; SSE-NEXT:    ucomiss %xmm1, %xmm0197; SSE-NEXT:    cmovbl %esi, %eax198; SSE-NEXT:    retq199;200; AVX-LABEL: test_x86_sse_ucomige_ss:201; AVX:       # %bb.0:202; AVX-NEXT:    movl %edi, %eax203; AVX-NEXT:    vucomiss %xmm1, %xmm0204; AVX-NEXT:    cmovbl %esi, %eax205; AVX-NEXT:    retq206  %call = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1)207  %cmp = icmp ne i32 %call, 0208  %res = select i1 %cmp, i32 %a2, i32 %a3209  ret i32 %res210}211declare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone212 213define i32 @test_x86_sse_ucomigt_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {214; SSE-LABEL: test_x86_sse_ucomigt_ss:215; SSE:       # %bb.0:216; SSE-NEXT:    movl %edi, %eax217; SSE-NEXT:    ucomiss %xmm1, %xmm0218; SSE-NEXT:    cmoval %esi, %eax219; SSE-NEXT:    retq220;221; AVX-LABEL: test_x86_sse_ucomigt_ss:222; AVX:       # %bb.0:223; AVX-NEXT:    movl %edi, %eax224; AVX-NEXT:    vucomiss %xmm1, %xmm0225; AVX-NEXT:    cmoval %esi, %eax226; AVX-NEXT:    retq227  %call = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1)228  %cmp = icmp eq i32 %call, 0229  %res = select i1 %cmp, i32 %a2, i32 %a3230  ret i32 %res231}232declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone233 234define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {235; SSE-LABEL: test_x86_sse_ucomile_ss:236; SSE:       # %bb.0:237; SSE-NEXT:    movl %edi, %eax238; SSE-NEXT:    ucomiss %xmm0, %xmm1239; SSE-NEXT:    cmovbl %esi, %eax240; SSE-NEXT:    retq241;242; AVX-LABEL: test_x86_sse_ucomile_ss:243; AVX:       # %bb.0:244; AVX-NEXT:    movl %edi, %eax245; AVX-NEXT:    vucomiss %xmm0, %xmm1246; AVX-NEXT:    cmovbl %esi, %eax247; AVX-NEXT:    retq248  %call = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1)249  %cmp = icmp ne i32 %call, 0250  %res = select i1 %cmp, i32 %a2, i32 %a3251  ret i32 %res252}253declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone254 255define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {256; SSE-LABEL: test_x86_sse_ucomilt_ss:257; SSE:       # %bb.0:258; SSE-NEXT:    movl %edi, %eax259; SSE-NEXT:    ucomiss %xmm0, %xmm1260; SSE-NEXT:    cmoval %esi, %eax261; SSE-NEXT:    retq262;263; AVX-LABEL: test_x86_sse_ucomilt_ss:264; AVX:       # %bb.0:265; AVX-NEXT:    movl %edi, %eax266; AVX-NEXT:    vucomiss %xmm0, %xmm1267; AVX-NEXT:    cmoval %esi, %eax268; AVX-NEXT:    retq269  %call = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1)270  %cmp = icmp eq i32 %call, 0271  %res = select i1 %cmp, i32 %a2, i32 %a3272  ret i32 %res273}274declare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone275 276define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1, i32 %a2, i32 %a3) {277; SSE-LABEL: test_x86_sse_ucomineq_ss:278; SSE:       # %bb.0:279; SSE-NEXT:    movl %esi, %eax280; SSE-NEXT:    ucomiss %xmm1, %xmm0281; SSE-NEXT:    cmovnel %edi, %eax282; SSE-NEXT:    cmovpl %edi, %eax283; SSE-NEXT:    retq284;285; NO-AVX10_2-LABEL: test_x86_sse_ucomineq_ss:286; NO-AVX10_2:       # %bb.0:287; NO-AVX10_2-NEXT:    movl %esi, %eax288; NO-AVX10_2-NEXT:    vucomiss %xmm1, %xmm0289; NO-AVX10_2-NEXT:    cmovnel %edi, %eax290; NO-AVX10_2-NEXT:    cmovpl %edi, %eax291; NO-AVX10_2-NEXT:    retq292;293; AVX10_2-LABEL: test_x86_sse_ucomineq_ss:294; AVX10_2:       # %bb.0:295; AVX10_2-NEXT:    movl %edi, %eax296; AVX10_2-NEXT:    vucomxss %xmm1, %xmm0297; AVX10_2-NEXT:    cmovel %esi, %eax298; AVX10_2-NEXT:    retq299  %call = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1)300  %cmp = icmp ne i32 %call, 0301  %res = select i1 %cmp, i32 %a2, i32 %a3302  ret i32 %res303}304declare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone305 306;307; SSE2308;309 310define i32 @test_x86_sse2_comieq_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {311; SSE-LABEL: test_x86_sse2_comieq_sd:312; SSE:       # %bb.0:313; SSE-NEXT:    movl %edi, %eax314; SSE-NEXT:    comisd %xmm1, %xmm0315; SSE-NEXT:    setnp %cl316; SSE-NEXT:    sete %dl317; SSE-NEXT:    testb %cl, %dl318; SSE-NEXT:    cmovnel %esi, %eax319; SSE-NEXT:    retq320;321; NO-AVX10_2-LABEL: test_x86_sse2_comieq_sd:322; NO-AVX10_2:       # %bb.0:323; NO-AVX10_2-NEXT:    movl %edi, %eax324; NO-AVX10_2-NEXT:    vcomisd %xmm1, %xmm0325; NO-AVX10_2-NEXT:    setnp %cl326; NO-AVX10_2-NEXT:    sete %dl327; NO-AVX10_2-NEXT:    testb %cl, %dl328; NO-AVX10_2-NEXT:    cmovnel %esi, %eax329; NO-AVX10_2-NEXT:    retq330;331; AVX10_2-LABEL: test_x86_sse2_comieq_sd:332; AVX10_2:       # %bb.0:333; AVX10_2-NEXT:    movl %edi, %eax334; AVX10_2-NEXT:    vcomxsd %xmm1, %xmm0335; AVX10_2-NEXT:    cmovel %esi, %eax336; AVX10_2-NEXT:    retq337  %call = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]338  %cmp = icmp eq i32 %call, 0339  %res = select i1 %cmp, i32 %a2, i32 %a3340  ret i32 %res341}342declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone343 344define i32 @test_x86_sse2_comige_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {345; SSE-LABEL: test_x86_sse2_comige_sd:346; SSE:       # %bb.0:347; SSE-NEXT:    movl %edi, %eax348; SSE-NEXT:    comisd %xmm1, %xmm0349; SSE-NEXT:    cmovbl %esi, %eax350; SSE-NEXT:    retq351;352; AVX-LABEL: test_x86_sse2_comige_sd:353; AVX:       # %bb.0:354; AVX-NEXT:    movl %edi, %eax355; AVX-NEXT:    vcomisd %xmm1, %xmm0356; AVX-NEXT:    cmovbl %esi, %eax357; AVX-NEXT:    retq358  %call = call i32 @llvm.x86.sse2.comige.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]359  %cmp = icmp ne i32 %call, 0360  %res = select i1 %cmp, i32 %a2, i32 %a3361  ret i32 %res362}363declare i32 @llvm.x86.sse2.comige.sd(<2 x double>, <2 x double>) nounwind readnone364 365define i32 @test_x86_sse2_comigt_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {366; SSE-LABEL: test_x86_sse2_comigt_sd:367; SSE:       # %bb.0:368; SSE-NEXT:    movl %edi, %eax369; SSE-NEXT:    comisd %xmm1, %xmm0370; SSE-NEXT:    cmoval %esi, %eax371; SSE-NEXT:    retq372;373; AVX-LABEL: test_x86_sse2_comigt_sd:374; AVX:       # %bb.0:375; AVX-NEXT:    movl %edi, %eax376; AVX-NEXT:    vcomisd %xmm1, %xmm0377; AVX-NEXT:    cmoval %esi, %eax378; AVX-NEXT:    retq379  %call = call i32 @llvm.x86.sse2.comigt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]380  %cmp = icmp eq i32 %call, 0381  %res = select i1 %cmp, i32 %a2, i32 %a3382  ret i32 %res383}384declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>) nounwind readnone385 386define i32 @test_x86_sse2_comile_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {387; SSE-LABEL: test_x86_sse2_comile_sd:388; SSE:       # %bb.0:389; SSE-NEXT:    movl %edi, %eax390; SSE-NEXT:    comisd %xmm0, %xmm1391; SSE-NEXT:    cmovbl %esi, %eax392; SSE-NEXT:    retq393;394; AVX-LABEL: test_x86_sse2_comile_sd:395; AVX:       # %bb.0:396; AVX-NEXT:    movl %edi, %eax397; AVX-NEXT:    vcomisd %xmm0, %xmm1398; AVX-NEXT:    cmovbl %esi, %eax399; AVX-NEXT:    retq400  %call = call i32 @llvm.x86.sse2.comile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]401  %cmp = icmp ne i32 %call, 0402  %res = select i1 %cmp, i32 %a2, i32 %a3403  ret i32 %res404}405declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>) nounwind readnone406 407define i32 @test_x86_sse2_comilt_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {408; SSE-LABEL: test_x86_sse2_comilt_sd:409; SSE:       # %bb.0:410; SSE-NEXT:    movl %edi, %eax411; SSE-NEXT:    comisd %xmm0, %xmm1412; SSE-NEXT:    cmoval %esi, %eax413; SSE-NEXT:    retq414;415; AVX-LABEL: test_x86_sse2_comilt_sd:416; AVX:       # %bb.0:417; AVX-NEXT:    movl %edi, %eax418; AVX-NEXT:    vcomisd %xmm0, %xmm1419; AVX-NEXT:    cmoval %esi, %eax420; AVX-NEXT:    retq421  %call = call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]422  %cmp = icmp eq i32 %call, 0423  %res = select i1 %cmp, i32 %a2, i32 %a3424  ret i32 %res425}426declare i32 @llvm.x86.sse2.comilt.sd(<2 x double>, <2 x double>) nounwind readnone427 428define i32 @test_x86_sse2_comineq_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {429; SSE-LABEL: test_x86_sse2_comineq_sd:430; SSE:       # %bb.0:431; SSE-NEXT:    movl %esi, %eax432; SSE-NEXT:    comisd %xmm1, %xmm0433; SSE-NEXT:    cmovnel %edi, %eax434; SSE-NEXT:    cmovpl %edi, %eax435; SSE-NEXT:    retq436;437; NO-AVX10_2-LABEL: test_x86_sse2_comineq_sd:438; NO-AVX10_2:       # %bb.0:439; NO-AVX10_2-NEXT:    movl %esi, %eax440; NO-AVX10_2-NEXT:    vcomisd %xmm1, %xmm0441; NO-AVX10_2-NEXT:    cmovnel %edi, %eax442; NO-AVX10_2-NEXT:    cmovpl %edi, %eax443; NO-AVX10_2-NEXT:    retq444;445; AVX10_2-LABEL: test_x86_sse2_comineq_sd:446; AVX10_2:       # %bb.0:447; AVX10_2-NEXT:    movl %edi, %eax448; AVX10_2-NEXT:    vcomxsd %xmm1, %xmm0449; AVX10_2-NEXT:    cmovel %esi, %eax450; AVX10_2-NEXT:    retq451  %call = call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]452  %cmp = icmp ne i32 %call, 0453  %res = select i1 %cmp, i32 %a2, i32 %a3454  ret i32 %res455}456declare i32 @llvm.x86.sse2.comineq.sd(<2 x double>, <2 x double>) nounwind readnone457 458define i32 @test_x86_sse2_ucomieq_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {459; SSE-LABEL: test_x86_sse2_ucomieq_sd:460; SSE:       # %bb.0:461; SSE-NEXT:    movl %edi, %eax462; SSE-NEXT:    ucomisd %xmm1, %xmm0463; SSE-NEXT:    setnp %cl464; SSE-NEXT:    sete %dl465; SSE-NEXT:    testb %cl, %dl466; SSE-NEXT:    cmovnel %esi, %eax467; SSE-NEXT:    retq468;469; NO-AVX10_2-LABEL: test_x86_sse2_ucomieq_sd:470; NO-AVX10_2:       # %bb.0:471; NO-AVX10_2-NEXT:    movl %edi, %eax472; NO-AVX10_2-NEXT:    vucomisd %xmm1, %xmm0473; NO-AVX10_2-NEXT:    setnp %cl474; NO-AVX10_2-NEXT:    sete %dl475; NO-AVX10_2-NEXT:    testb %cl, %dl476; NO-AVX10_2-NEXT:    cmovnel %esi, %eax477; NO-AVX10_2-NEXT:    retq478;479; AVX10_2-LABEL: test_x86_sse2_ucomieq_sd:480; AVX10_2:       # %bb.0:481; AVX10_2-NEXT:    movl %edi, %eax482; AVX10_2-NEXT:    vucomxsd %xmm1, %xmm0483; AVX10_2-NEXT:    cmovel %esi, %eax484; AVX10_2-NEXT:    retq485  %call = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]486  %cmp = icmp eq i32 %call, 0487  %res = select i1 %cmp, i32 %a2, i32 %a3488  ret i32 %res489}490declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) nounwind readnone491 492define i32 @test_x86_sse2_ucomige_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {493; SSE-LABEL: test_x86_sse2_ucomige_sd:494; SSE:       # %bb.0:495; SSE-NEXT:    movl %edi, %eax496; SSE-NEXT:    ucomisd %xmm1, %xmm0497; SSE-NEXT:    cmovbl %esi, %eax498; SSE-NEXT:    retq499;500; AVX-LABEL: test_x86_sse2_ucomige_sd:501; AVX:       # %bb.0:502; AVX-NEXT:    movl %edi, %eax503; AVX-NEXT:    vucomisd %xmm1, %xmm0504; AVX-NEXT:    cmovbl %esi, %eax505; AVX-NEXT:    retq506  %call = call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]507  %cmp = icmp ne i32 %call, 0508  %res = select i1 %cmp, i32 %a2, i32 %a3509  ret i32 %res510}511declare i32 @llvm.x86.sse2.ucomige.sd(<2 x double>, <2 x double>) nounwind readnone512 513define i32 @test_x86_sse2_ucomigt_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {514; SSE-LABEL: test_x86_sse2_ucomigt_sd:515; SSE:       # %bb.0:516; SSE-NEXT:    movl %edi, %eax517; SSE-NEXT:    ucomisd %xmm1, %xmm0518; SSE-NEXT:    cmoval %esi, %eax519; SSE-NEXT:    retq520;521; AVX-LABEL: test_x86_sse2_ucomigt_sd:522; AVX:       # %bb.0:523; AVX-NEXT:    movl %edi, %eax524; AVX-NEXT:    vucomisd %xmm1, %xmm0525; AVX-NEXT:    cmoval %esi, %eax526; AVX-NEXT:    retq527  %call = call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]528  %cmp = icmp eq i32 %call, 0529  %res = select i1 %cmp, i32 %a2, i32 %a3530  ret i32 %res531}532declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>) nounwind readnone533 534define i32 @test_x86_sse2_ucomile_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {535; SSE-LABEL: test_x86_sse2_ucomile_sd:536; SSE:       # %bb.0:537; SSE-NEXT:    movl %edi, %eax538; SSE-NEXT:    ucomisd %xmm0, %xmm1539; SSE-NEXT:    cmovbl %esi, %eax540; SSE-NEXT:    retq541;542; AVX-LABEL: test_x86_sse2_ucomile_sd:543; AVX:       # %bb.0:544; AVX-NEXT:    movl %edi, %eax545; AVX-NEXT:    vucomisd %xmm0, %xmm1546; AVX-NEXT:    cmovbl %esi, %eax547; AVX-NEXT:    retq548  %call = call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]549  %cmp = icmp ne i32 %call, 0550  %res = select i1 %cmp, i32 %a2, i32 %a3551  ret i32 %res552}553declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>) nounwind readnone554 555define i32 @test_x86_sse2_ucomilt_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {556; SSE-LABEL: test_x86_sse2_ucomilt_sd:557; SSE:       # %bb.0:558; SSE-NEXT:    movl %edi, %eax559; SSE-NEXT:    ucomisd %xmm0, %xmm1560; SSE-NEXT:    cmoval %esi, %eax561; SSE-NEXT:    retq562;563; AVX-LABEL: test_x86_sse2_ucomilt_sd:564; AVX:       # %bb.0:565; AVX-NEXT:    movl %edi, %eax566; AVX-NEXT:    vucomisd %xmm0, %xmm1567; AVX-NEXT:    cmoval %esi, %eax568; AVX-NEXT:    retq569  %call = call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]570  %cmp = icmp eq i32 %call, 0571  %res = select i1 %cmp, i32 %a2, i32 %a3572  ret i32 %res573}574declare i32 @llvm.x86.sse2.ucomilt.sd(<2 x double>, <2 x double>) nounwind readnone575 576define i32 @test_x86_sse2_ucomineq_sd(<2 x double> %a0, <2 x double> %a1, i32 %a2, i32 %a3) {577; SSE-LABEL: test_x86_sse2_ucomineq_sd:578; SSE:       # %bb.0:579; SSE-NEXT:    movl %esi, %eax580; SSE-NEXT:    ucomisd %xmm1, %xmm0581; SSE-NEXT:    cmovnel %edi, %eax582; SSE-NEXT:    cmovpl %edi, %eax583; SSE-NEXT:    retq584;585; NO-AVX10_2-LABEL: test_x86_sse2_ucomineq_sd:586; NO-AVX10_2:       # %bb.0:587; NO-AVX10_2-NEXT:    movl %esi, %eax588; NO-AVX10_2-NEXT:    vucomisd %xmm1, %xmm0589; NO-AVX10_2-NEXT:    cmovnel %edi, %eax590; NO-AVX10_2-NEXT:    cmovpl %edi, %eax591; NO-AVX10_2-NEXT:    retq592;593; AVX10_2-LABEL: test_x86_sse2_ucomineq_sd:594; AVX10_2:       # %bb.0:595; AVX10_2-NEXT:    movl %edi, %eax596; AVX10_2-NEXT:    vucomxsd %xmm1, %xmm0597; AVX10_2-NEXT:    cmovel %esi, %eax598; AVX10_2-NEXT:    retq599  %call = call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %a0, <2 x double> %a1) ; <i32> [#uses=1]600  %cmp = icmp ne i32 %call, 0601  %res = select i1 %cmp, i32 %a2, i32 %a3602  ret i32 %res603}604declare i32 @llvm.x86.sse2.ucomineq.sd(<2 x double>, <2 x double>) nounwind readnone605 606define void @PR38960_eq(<4 x float> %A, <4 x float> %B) {607; SSE-LABEL: PR38960_eq:608; SSE:       # %bb.0: # %entry609; SSE-NEXT:    comiss %xmm1, %xmm0610; SSE-NEXT:    setnp %al611; SSE-NEXT:    sete %cl612; SSE-NEXT:    testb %al, %cl613; SSE-NEXT:    jne foo@PLT # TAILCALL614; SSE-NEXT:  # %bb.1: # %if.end615; SSE-NEXT:    retq616;617; NO-AVX10_2-LABEL: PR38960_eq:618; NO-AVX10_2:       # %bb.0: # %entry619; NO-AVX10_2-NEXT:    vcomiss %xmm1, %xmm0620; NO-AVX10_2-NEXT:    setnp %al621; NO-AVX10_2-NEXT:    sete %cl622; NO-AVX10_2-NEXT:    testb %al, %cl623; NO-AVX10_2-NEXT:    jne foo@PLT # TAILCALL624; NO-AVX10_2-NEXT:  # %bb.1: # %if.end625; NO-AVX10_2-NEXT:    retq626;627; AVX10_2-LABEL: PR38960_eq:628; AVX10_2:       # %bb.0: # %entry629; AVX10_2-NEXT:    vcomxss %xmm1, %xmm0630; AVX10_2-NEXT:    je foo@PLT # TAILCALL631; AVX10_2-NEXT:  # %bb.1: # %if.end632; AVX10_2-NEXT:    retq633entry:634  %call = tail call i32 @llvm.x86.sse.comieq.ss(<4 x float> %A, <4 x float> %B) #3635  %cmp = icmp eq i32 %call, 0636  br i1 %cmp, label %if.end, label %if.then637 638if.then:639  tail call void @foo()640  br label %if.end641 642if.end:643  ret void644}645 646define void @PR38960_neq(<4 x float> %A, <4 x float> %B) {647; SSE-LABEL: PR38960_neq:648; SSE:       # %bb.0: # %entry649; SSE-NEXT:    comiss %xmm1, %xmm0650; SSE-NEXT:    setp %al651; SSE-NEXT:    setne %cl652; SSE-NEXT:    orb %al, %cl653; SSE-NEXT:    jne foo@PLT # TAILCALL654; SSE-NEXT:  # %bb.1: # %if.end655; SSE-NEXT:    retq656;657; NO-AVX10_2-LABEL: PR38960_neq:658; NO-AVX10_2:       # %bb.0: # %entry659; NO-AVX10_2-NEXT:    vcomiss %xmm1, %xmm0660; NO-AVX10_2-NEXT:    setp %al661; NO-AVX10_2-NEXT:    setne %cl662; NO-AVX10_2-NEXT:    orb %al, %cl663; NO-AVX10_2-NEXT:    jne foo@PLT # TAILCALL664; NO-AVX10_2-NEXT:  # %bb.1: # %if.end665; NO-AVX10_2-NEXT:    retq666;667; AVX10_2-LABEL: PR38960_neq:668; AVX10_2:       # %bb.0: # %entry669; AVX10_2-NEXT:    vcomxss %xmm1, %xmm0670; AVX10_2-NEXT:    jne foo@PLT # TAILCALL671; AVX10_2-NEXT:  # %bb.1: # %if.end672; AVX10_2-NEXT:    retq673entry:674  %call = tail call i32 @llvm.x86.sse.comineq.ss(<4 x float> %A, <4 x float> %B) #3675  %cmp = icmp eq i32 %call, 0676  br i1 %cmp, label %if.end, label %if.then677 678if.then:679  tail call void @foo()680  br label %if.end681 682if.end:683  ret void684}685declare void @foo()686