X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FX86%2Favx512-intrinsics.ll;fp=test%2FCodeGen%2FX86%2Favx512-intrinsics.ll;h=764e136384854f416b1cc977ec8b4431313188ad;hb=199a1320b792c866ee6546dcbd157bebf54edaca;hp=0aed97d1e8f5ec88a006a98726c1f05201f25027;hpb=518acfca4462b5f42e526773ff329ee771033bd8;p=oota-llvm.git diff --git a/test/CodeGen/X86/avx512-intrinsics.ll b/test/CodeGen/X86/avx512-intrinsics.ll index 0aed97d1e8f..764e1363848 100644 --- a/test/CodeGen/X86/avx512-intrinsics.ll +++ b/test/CodeGen/X86/avx512-intrinsics.ll @@ -6343,3 +6343,79 @@ define <2 x double>@test_int_x86_avx512_mask_move_sd_rrk(<2 x double> %x0, <2 x ret <2 x double> %res } +declare <16 x float> @llvm.x86.avx512.mask.broadcastf32x4.512(<4 x float>, <16 x float>, i16) + +define <16 x float>@test_int_x86_avx512_mask_broadcastf32x4_512(<4 x float> %x0, <16 x float> %x2, i16 %mask) { +; CHECK-LABEL: test_int_x86_avx512_mask_broadcastf32x4_512: +; CHECK: kmovw %edi, %k1 +; CHECK: vshuff32x4 $0, %zmm0, %zmm0, %zmm2 {%k1} {z} +; CHECK: vshuff32x4 $0, %zmm0, %zmm0, %zmm1 {%k1} +; CHECK: vshuff32x4 $0, %zmm0, %zmm0, %zmm0 +; CHECK: vaddps %zmm1, %zmm0, %zmm0 +; CHECK: vaddps %zmm0, %zmm2, %zmm0 + + %res1 = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x4.512(<4 x float> %x0, <16 x float> %x2, i16 -1) + %res2 = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x4.512(<4 x float> %x0, <16 x float> %x2, i16 %mask) + %res3 = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x4.512(<4 x float> %x0, <16 x float> zeroinitializer, i16 %mask) + %res4 = fadd <16 x float> %res1, %res2 + %res5 = fadd <16 x float> %res3, %res4 + ret <16 x float> %res5 +} + +declare <8 x double> @llvm.x86.avx512.mask.broadcastf64x4.512(<4 x double>, <8 x double>, i8) + +define <8 x double>@test_int_x86_avx512_mask_broadcastf64x4_512(<4 x double> %x0, <8 x double> %x2, i8 %mask) { +; CHECK-LABEL: test_int_x86_avx512_mask_broadcastf64x4_512: +; CHECK: kmovw %eax, %k1 +; CHECK: vshuff64x2 $68, %zmm0, %zmm0, %zmm2 {%k1} {z} +; CHECK: vshuff64x2 $68, %zmm0, %zmm0, %zmm1 {%k1} +; CHECK: vshuff64x2 $68, %zmm0, %zmm0, %zmm0 +; CHECK: vaddpd %zmm1, %zmm0, %zmm0 +; CHECK: vaddpd %zmm0, %zmm2, %zmm0 + + %res1 = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x4.512(<4 x double> %x0, <8 x double> %x2, i8 -1) + %res2 = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x4.512(<4 x double> %x0, <8 x double> %x2, i8 %mask) + %res3 = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x4.512(<4 x double> %x0, <8 x double> zeroinitializer, i8 %mask) + %res4 = fadd <8 x double> %res1, %res2 + %res5 = fadd <8 x double> %res3, %res4 + ret <8 x double> %res5 +} + +declare <16 x i32> @llvm.x86.avx512.mask.broadcasti32x4.512(<4 x i32>, <16 x i32>, i16) + +define <16 x i32>@test_int_x86_avx512_mask_broadcasti32x4_512(<4 x i32> %x0, <16 x i32> %x2, i16 %mask) { +; CHECK-LABEL: test_int_x86_avx512_mask_broadcasti32x4_512: +; CHECK: kmovw %edi, %k1 +; CHECK: vshufi32x4 $0, %zmm0, %zmm0, %zmm2 {%k1} {z} +; CHECK: vshufi32x4 $0, %zmm0, %zmm0, %zmm1 {%k1} +; CHECK: vshufi32x4 $0, %zmm0, %zmm0, %zmm0 +; CHECK: vpaddd %zmm1, %zmm0, %zmm0 +; CHECK: vpaddd %zmm0, %zmm2, %zmm0 + + %res1 = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x4.512(<4 x i32> %x0, <16 x i32> %x2, i16 -1) + %res2 = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x4.512(<4 x i32> %x0, <16 x i32> %x2, i16 %mask) + %res3 = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x4.512(<4 x i32> %x0, <16 x i32> zeroinitializer, i16 %mask) + %res4 = add <16 x i32> %res1, %res2 + %res5 = add <16 x i32> %res3, %res4 + ret <16 x i32> %res5 +} + +declare <8 x i64> @llvm.x86.avx512.mask.broadcasti64x4.512(<4 x i64>, <8 x i64>, i8) + +define <8 x i64>@test_int_x86_avx512_mask_broadcasti64x4_512(<4 x i64> %x0, <8 x i64> %x2, i8 %mask) { +; CHECK-LABEL: test_int_x86_avx512_mask_broadcasti64x4_512: +; CHECK: kmovw %eax, %k1 +; CHECK: vshufi64x2 $68, %zmm0, %zmm0, %zmm2 {%k1} {z} +; CHECK: vshufi64x2 $68, %zmm0, %zmm0, %zmm1 {%k1} +; CHECK: vshufi64x2 $68, %zmm0, %zmm0, %zmm0 +; CHECK: vpaddq %zmm1, %zmm0, %zmm0 +; CHECK: vpaddq %zmm0, %zmm2, %zmm0 + + %res1 = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x4.512(<4 x i64> %x0, <8 x i64> %x2, i8 -1) + %res2 = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x4.512(<4 x i64> %x0, <8 x i64> %x2, i8 %mask) + %res3 = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x4.512(<4 x i64> %x0, <8 x i64> zeroinitializer, i8 %mask) + %res4 = add <8 x i64> %res1, %res2 + %res5 = add <8 x i64> %res3, %res4 + ret <8 x i64> %res5 +} +