brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · a8a38d9 Raw
377 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512vldq-builtins.c6 7define <2 x double> @test_mm_cvtepi64_pd(<2 x i64> %__A) {8; CHECK-LABEL: test_mm_cvtepi64_pd:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    vcvtqq2pd %xmm0, %xmm011; CHECK-NEXT:    ret{{[l|q]}}12entry:13  %conv.i = sitofp <2 x i64> %__A to <2 x double>14  ret <2 x double> %conv.i15}16 17define <2 x double> @test_mm_mask_cvtepi64_pd(<2 x double> %__W, i8 zeroext %__U, <2 x i64> %__A) {18; X86-LABEL: test_mm_mask_cvtepi64_pd:19; X86:       # %bb.0: # %entry20; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k121; X86-NEXT:    vcvtqq2pd %xmm1, %xmm0 {%k1}22; X86-NEXT:    retl23;24; X64-LABEL: test_mm_mask_cvtepi64_pd:25; X64:       # %bb.0: # %entry26; X64-NEXT:    kmovw %edi, %k127; X64-NEXT:    vcvtqq2pd %xmm1, %xmm0 {%k1}28; X64-NEXT:    retq29entry:30  %conv.i.i = sitofp <2 x i64> %__A to <2 x double>31  %0 = bitcast i8 %__U to <8 x i1>32  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>33  %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> %__W34  ret <2 x double> %135}36 37define <2 x double> @test_mm_maskz_cvtepi64_pd(i8 zeroext %__U, <2 x i64> %__A) {38; X86-LABEL: test_mm_maskz_cvtepi64_pd:39; X86:       # %bb.0: # %entry40; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k141; X86-NEXT:    vcvtqq2pd %xmm0, %xmm0 {%k1} {z}42; X86-NEXT:    retl43;44; X64-LABEL: test_mm_maskz_cvtepi64_pd:45; X64:       # %bb.0: # %entry46; X64-NEXT:    kmovw %edi, %k147; X64-NEXT:    vcvtqq2pd %xmm0, %xmm0 {%k1} {z}48; X64-NEXT:    retq49entry:50  %conv.i.i = sitofp <2 x i64> %__A to <2 x double>51  %0 = bitcast i8 %__U to <8 x i1>52  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>53  %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> zeroinitializer54  ret <2 x double> %155}56 57define <4 x double> @test_mm256_cvtepi64_pd(<4 x i64> %__A) {58; CHECK-LABEL: test_mm256_cvtepi64_pd:59; CHECK:       # %bb.0: # %entry60; CHECK-NEXT:    vcvtqq2pd %ymm0, %ymm061; CHECK-NEXT:    ret{{[l|q]}}62entry:63  %conv.i = sitofp <4 x i64> %__A to <4 x double>64  ret <4 x double> %conv.i65}66 67define <4 x double> @test_mm256_mask_cvtepi64_pd(<4 x double> %__W, i8 zeroext %__U, <4 x i64> %__A) {68; X86-LABEL: test_mm256_mask_cvtepi64_pd:69; X86:       # %bb.0: # %entry70; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k171; X86-NEXT:    vcvtqq2pd %ymm1, %ymm0 {%k1}72; X86-NEXT:    retl73;74; X64-LABEL: test_mm256_mask_cvtepi64_pd:75; X64:       # %bb.0: # %entry76; X64-NEXT:    kmovw %edi, %k177; X64-NEXT:    vcvtqq2pd %ymm1, %ymm0 {%k1}78; X64-NEXT:    retq79entry:80  %conv.i.i = sitofp <4 x i64> %__A to <4 x double>81  %0 = bitcast i8 %__U to <8 x i1>82  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>83  %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> %__W84  ret <4 x double> %185}86 87define <4 x double> @test_mm256_maskz_cvtepi64_pd(i8 zeroext %__U, <4 x i64> %__A) {88; X86-LABEL: test_mm256_maskz_cvtepi64_pd:89; X86:       # %bb.0: # %entry90; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k191; X86-NEXT:    vcvtqq2pd %ymm0, %ymm0 {%k1} {z}92; X86-NEXT:    retl93;94; X64-LABEL: test_mm256_maskz_cvtepi64_pd:95; X64:       # %bb.0: # %entry96; X64-NEXT:    kmovw %edi, %k197; X64-NEXT:    vcvtqq2pd %ymm0, %ymm0 {%k1} {z}98; X64-NEXT:    retq99entry:100  %conv.i.i = sitofp <4 x i64> %__A to <4 x double>101  %0 = bitcast i8 %__U to <8 x i1>102  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>103  %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> zeroinitializer104  ret <4 x double> %1105}106 107define <2 x double> @test_mm_cvtepu64_pd(<2 x i64> %__A) {108; CHECK-LABEL: test_mm_cvtepu64_pd:109; CHECK:       # %bb.0: # %entry110; CHECK-NEXT:    vcvtuqq2pd %xmm0, %xmm0111; CHECK-NEXT:    ret{{[l|q]}}112entry:113  %conv.i = uitofp <2 x i64> %__A to <2 x double>114  ret <2 x double> %conv.i115}116 117define <2 x double> @test_mm_mask_cvtepu64_pd(<2 x double> %__W, i8 zeroext %__U, <2 x i64> %__A) {118; X86-LABEL: test_mm_mask_cvtepu64_pd:119; X86:       # %bb.0: # %entry120; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1121; X86-NEXT:    vcvtuqq2pd %xmm1, %xmm0 {%k1}122; X86-NEXT:    retl123;124; X64-LABEL: test_mm_mask_cvtepu64_pd:125; X64:       # %bb.0: # %entry126; X64-NEXT:    kmovw %edi, %k1127; X64-NEXT:    vcvtuqq2pd %xmm1, %xmm0 {%k1}128; X64-NEXT:    retq129entry:130  %conv.i.i = uitofp <2 x i64> %__A to <2 x double>131  %0 = bitcast i8 %__U to <8 x i1>132  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>133  %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> %__W134  ret <2 x double> %1135}136 137define <2 x double> @test_mm_maskz_cvtepu64_pd(i8 zeroext %__U, <2 x i64> %__A) {138; X86-LABEL: test_mm_maskz_cvtepu64_pd:139; X86:       # %bb.0: # %entry140; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1141; X86-NEXT:    vcvtuqq2pd %xmm0, %xmm0 {%k1} {z}142; X86-NEXT:    retl143;144; X64-LABEL: test_mm_maskz_cvtepu64_pd:145; X64:       # %bb.0: # %entry146; X64-NEXT:    kmovw %edi, %k1147; X64-NEXT:    vcvtuqq2pd %xmm0, %xmm0 {%k1} {z}148; X64-NEXT:    retq149entry:150  %conv.i.i = uitofp <2 x i64> %__A to <2 x double>151  %0 = bitcast i8 %__U to <8 x i1>152  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>153  %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> zeroinitializer154  ret <2 x double> %1155}156 157define <4 x double> @test_mm256_cvtepu64_pd(<4 x i64> %__A) {158; CHECK-LABEL: test_mm256_cvtepu64_pd:159; CHECK:       # %bb.0: # %entry160; CHECK-NEXT:    vcvtuqq2pd %ymm0, %ymm0161; CHECK-NEXT:    ret{{[l|q]}}162entry:163  %conv.i = uitofp <4 x i64> %__A to <4 x double>164  ret <4 x double> %conv.i165}166 167define <4 x double> @test_mm256_mask_cvtepu64_pd(<4 x double> %__W, i8 zeroext %__U, <4 x i64> %__A) {168; X86-LABEL: test_mm256_mask_cvtepu64_pd:169; X86:       # %bb.0: # %entry170; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1171; X86-NEXT:    vcvtuqq2pd %ymm1, %ymm0 {%k1}172; X86-NEXT:    retl173;174; X64-LABEL: test_mm256_mask_cvtepu64_pd:175; X64:       # %bb.0: # %entry176; X64-NEXT:    kmovw %edi, %k1177; X64-NEXT:    vcvtuqq2pd %ymm1, %ymm0 {%k1}178; X64-NEXT:    retq179entry:180  %conv.i.i = uitofp <4 x i64> %__A to <4 x double>181  %0 = bitcast i8 %__U to <8 x i1>182  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>183  %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> %__W184  ret <4 x double> %1185}186 187define <4 x double> @test_mm256_maskz_cvtepu64_pd(i8 zeroext %__U, <4 x i64> %__A) {188; X86-LABEL: test_mm256_maskz_cvtepu64_pd:189; X86:       # %bb.0: # %entry190; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1191; X86-NEXT:    vcvtuqq2pd %ymm0, %ymm0 {%k1} {z}192; X86-NEXT:    retl193;194; X64-LABEL: test_mm256_maskz_cvtepu64_pd:195; X64:       # %bb.0: # %entry196; X64-NEXT:    kmovw %edi, %k1197; X64-NEXT:    vcvtuqq2pd %ymm0, %ymm0 {%k1} {z}198; X64-NEXT:    retq199entry:200  %conv.i.i = uitofp <4 x i64> %__A to <4 x double>201  %0 = bitcast i8 %__U to <8 x i1>202  %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>203  %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> zeroinitializer204  ret <4 x double> %1205}206 207define zeroext i8 @test_mm_mask_fpclass_pd_mask(i8 zeroext %__U, <2 x double> %__A) {208; X86-LABEL: test_mm_mask_fpclass_pd_mask:209; X86:       # %bb.0: # %entry210; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1211; X86-NEXT:    vfpclasspd $2, %xmm0, %k0 {%k1}212; X86-NEXT:    kmovw %k0, %eax213; X86-NEXT:    # kill: def $al killed $al killed $eax214; X86-NEXT:    retl215;216; X64-LABEL: test_mm_mask_fpclass_pd_mask:217; X64:       # %bb.0: # %entry218; X64-NEXT:    kmovw %edi, %k1219; X64-NEXT:    vfpclasspd $2, %xmm0, %k0 {%k1}220; X64-NEXT:    kmovw %k0, %eax221; X64-NEXT:    # kill: def $al killed $al killed $eax222; X64-NEXT:    retq223entry:224  %0 = tail call <2 x i1> @llvm.x86.avx512.fpclass.pd.128(<2 x double> %__A, i32 2)225  %1 = bitcast i8 %__U to <8 x i1>226  %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>227  %2 = and <2 x i1> %0, %extract228  %3 = shufflevector <2 x i1> %2, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>229  %4 = bitcast <8 x i1> %3 to i8230  ret i8 %4231}232 233declare <2 x i1> @llvm.x86.avx512.fpclass.pd.128(<2 x double>, i32)234 235define zeroext i8 @test_mm_fpclass_pd_mask(<2 x double> %__A) {236; CHECK-LABEL: test_mm_fpclass_pd_mask:237; CHECK:       # %bb.0: # %entry238; CHECK-NEXT:    vfpclasspd $2, %xmm0, %k0 # k0 = isPositiveZero(xmm0)239; CHECK-NEXT:    kmovw %k0, %eax240; CHECK-NEXT:    # kill: def $al killed $al killed $eax241; CHECK-NEXT:    ret{{[l|q]}}242entry:243  %0 = tail call <2 x i1> @llvm.x86.avx512.fpclass.pd.128(<2 x double> %__A, i32 2)244  %1 = shufflevector <2 x i1> %0, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>245  %2 = bitcast <8 x i1> %1 to i8246  ret i8 %2247}248 249define zeroext i8 @test_mm256_mask_fpclass_pd_mask(i8 zeroext %__U, <4 x double> %__A) {250; X86-LABEL: test_mm256_mask_fpclass_pd_mask:251; X86:       # %bb.0: # %entry252; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1253; X86-NEXT:    vfpclasspd $2, %ymm0, %k0 {%k1}254; X86-NEXT:    kmovw %k0, %eax255; X86-NEXT:    # kill: def $al killed $al killed $eax256; X86-NEXT:    vzeroupper257; X86-NEXT:    retl258;259; X64-LABEL: test_mm256_mask_fpclass_pd_mask:260; X64:       # %bb.0: # %entry261; X64-NEXT:    kmovw %edi, %k1262; X64-NEXT:    vfpclasspd $2, %ymm0, %k0 {%k1}263; X64-NEXT:    kmovw %k0, %eax264; X64-NEXT:    # kill: def $al killed $al killed $eax265; X64-NEXT:    vzeroupper266; X64-NEXT:    retq267entry:268  %0 = tail call <4 x i1> @llvm.x86.avx512.fpclass.pd.256(<4 x double> %__A, i32 2)269  %1 = bitcast i8 %__U to <8 x i1>270  %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>271  %2 = and <4 x i1> %0, %extract272  %3 = shufflevector <4 x i1> %2, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>273  %4 = bitcast <8 x i1> %3 to i8274  ret i8 %4275}276 277declare <4 x i1> @llvm.x86.avx512.fpclass.pd.256(<4 x double>, i32)278 279define zeroext i8 @test_mm256_fpclass_pd_mask(<4 x double> %__A) {280; CHECK-LABEL: test_mm256_fpclass_pd_mask:281; CHECK:       # %bb.0: # %entry282; CHECK-NEXT:    vfpclasspd $2, %ymm0, %k0 # k0 = isPositiveZero(ymm0)283; CHECK-NEXT:    kmovw %k0, %eax284; CHECK-NEXT:    # kill: def $al killed $al killed $eax285; CHECK-NEXT:    vzeroupper286; CHECK-NEXT:    ret{{[l|q]}}287entry:288  %0 = tail call <4 x i1> @llvm.x86.avx512.fpclass.pd.256(<4 x double> %__A, i32 2)289  %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>290  %2 = bitcast <8 x i1> %1 to i8291  ret i8 %2292}293 294define zeroext i8 @test_mm_mask_fpclass_ps_mask(i8 zeroext %__U, <4 x float> %__A) {295; X86-LABEL: test_mm_mask_fpclass_ps_mask:296; X86:       # %bb.0: # %entry297; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1298; X86-NEXT:    vfpclassps $2, %xmm0, %k0 {%k1}299; X86-NEXT:    kmovw %k0, %eax300; X86-NEXT:    # kill: def $al killed $al killed $eax301; X86-NEXT:    retl302;303; X64-LABEL: test_mm_mask_fpclass_ps_mask:304; X64:       # %bb.0: # %entry305; X64-NEXT:    kmovw %edi, %k1306; X64-NEXT:    vfpclassps $2, %xmm0, %k0 {%k1}307; X64-NEXT:    kmovw %k0, %eax308; X64-NEXT:    # kill: def $al killed $al killed $eax309; X64-NEXT:    retq310entry:311  %0 = tail call <4 x i1> @llvm.x86.avx512.fpclass.ps.128(<4 x float> %__A, i32 2)312  %1 = bitcast i8 %__U to <8 x i1>313  %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>314  %2 = and <4 x i1> %0, %extract315  %3 = shufflevector <4 x i1> %2, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>316  %4 = bitcast <8 x i1> %3 to i8317  ret i8 %4318}319 320declare <4 x i1> @llvm.x86.avx512.fpclass.ps.128(<4 x float>, i32)321 322define zeroext i8 @test_mm_fpclass_ps_mask(<4 x float> %__A) {323; CHECK-LABEL: test_mm_fpclass_ps_mask:324; CHECK:       # %bb.0: # %entry325; CHECK-NEXT:    vfpclassps $2, %xmm0, %k0 # k0 = isPositiveZero(xmm0)326; CHECK-NEXT:    kmovw %k0, %eax327; CHECK-NEXT:    # kill: def $al killed $al killed $eax328; CHECK-NEXT:    ret{{[l|q]}}329entry:330  %0 = tail call <4 x i1> @llvm.x86.avx512.fpclass.ps.128(<4 x float> %__A, i32 2)331  %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>332  %2 = bitcast <8 x i1> %1 to i8333  ret i8 %2334}335 336define zeroext i8 @test_mm256_mask_fpclass_ps_mask(i8 zeroext %__U, <8 x float> %__A) {337; X86-LABEL: test_mm256_mask_fpclass_ps_mask:338; X86:       # %bb.0: # %entry339; X86-NEXT:    vfpclassps $2, %ymm0, %k0 # k0 = isPositiveZero(ymm0)340; X86-NEXT:    kmovw %k0, %eax341; X86-NEXT:    andb {{[0-9]+}}(%esp), %al342; X86-NEXT:    # kill: def $al killed $al killed $eax343; X86-NEXT:    vzeroupper344; X86-NEXT:    retl345;346; X64-LABEL: test_mm256_mask_fpclass_ps_mask:347; X64:       # %bb.0: # %entry348; X64-NEXT:    vfpclassps $2, %ymm0, %k0 # k0 = isPositiveZero(ymm0)349; X64-NEXT:    kmovw %k0, %eax350; X64-NEXT:    andb %dil, %al351; X64-NEXT:    # kill: def $al killed $al killed $eax352; X64-NEXT:    vzeroupper353; X64-NEXT:    retq354entry:355  %0 = tail call <8 x i1> @llvm.x86.avx512.fpclass.ps.256(<8 x float> %__A, i32 2)356  %1 = bitcast i8 %__U to <8 x i1>357  %2 = and <8 x i1> %0, %1358  %3 = bitcast <8 x i1> %2 to i8359  ret i8 %3360}361 362declare <8 x i1> @llvm.x86.avx512.fpclass.ps.256(<8 x float>, i32)363 364define zeroext i8 @test_mm256_fpclass_ps_mask(<8 x float> %__A) {365; CHECK-LABEL: test_mm256_fpclass_ps_mask:366; CHECK:       # %bb.0: # %entry367; CHECK-NEXT:    vfpclassps $2, %ymm0, %k0 # k0 = isPositiveZero(ymm0)368; CHECK-NEXT:    kmovw %k0, %eax369; CHECK-NEXT:    # kill: def $al killed $al killed $eax370; CHECK-NEXT:    vzeroupper371; CHECK-NEXT:    ret{{[l|q]}}372entry:373  %0 = tail call <8 x i1> @llvm.x86.avx512.fpclass.ps.256(<8 x float> %__A, i32 2)374  %1 = bitcast <8 x i1> %0 to i8375  ret i8 %1376}377