From db960eddfaa07705448f44f3301cf1526eee10e0 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sat, 21 May 2016 22:50:14 +0000 Subject: [AVX512] Add patterns for extracting subvectors and storing to memory. llvm-svn: 270334 --- llvm/test/CodeGen/X86/avx512-extract-subvector.ll | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'llvm/test/CodeGen/X86/avx512-extract-subvector.ll') diff --git a/llvm/test/CodeGen/X86/avx512-extract-subvector.ll b/llvm/test/CodeGen/X86/avx512-extract-subvector.ll index 703f7832588..eb1f49a8fd3 100644 --- a/llvm/test/CodeGen/X86/avx512-extract-subvector.ll +++ b/llvm/test/CodeGen/X86/avx512-extract-subvector.ll @@ -54,3 +54,75 @@ define <32 x i8> @extract_subvector256_v64i8(<64 x i8> %x) nounwind { %r1 = shufflevector <64 x i8> %x, <64 x i8> undef, <32 x i32> ret <32 x i8> %r1 } + +define void @extract_subvector256_v8f64_store(double* nocapture %addr, <4 x double> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v8f64_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextractf64x2 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <4 x double> %a, <4 x double> undef, <2 x i32> + %1 = bitcast double* %addr to <2 x double>* + store <2 x double> %0, <2 x double>* %1, align 1 + ret void +} + +define void @extract_subvector256_v8f32_store(float* nocapture %addr, <8 x float> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v8f32_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextractf32x4 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> + %1 = bitcast float* %addr to <4 x float>* + store <4 x float> %0, <4 x float>* %1, align 1 + ret void +} + +define void @extract_subvector256_v4i64_store(i64* nocapture %addr, <4 x i64> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v4i64_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextracti64x2 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <4 x i64> %a, <4 x i64> undef, <2 x i32> + %1 = bitcast i64* %addr to <2 x i64>* + store <2 x i64> %0, <2 x i64>* %1, align 1 + ret void +} + +define void @extract_subvector256_v8i32_store(i32* nocapture %addr, <8 x i32> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v8i32_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextracti32x4 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <8 x i32> %a, <8 x i32> undef, <4 x i32> + %1 = bitcast i32* %addr to <4 x i32>* + store <4 x i32> %0, <4 x i32>* %1, align 1 + ret void +} + +define void @extract_subvector256_v16i16_store(i16* nocapture %addr, <16 x i16> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v16i16_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextracti32x4 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <16 x i16> %a, <16 x i16> undef, <8 x i32> + %1 = bitcast i16* %addr to <8 x i16>* + store <8 x i16> %0, <8 x i16>* %1, align 1 + ret void +} + +define void @extract_subvector256_v32i8_store(i8* nocapture %addr, <32 x i8> %a) nounwind uwtable ssp { +; SKX-LABEL: extract_subvector256_v32i8_store: +; SKX: ## BB#0: ## %entry +; SKX-NEXT: vextracti32x4 $1, %ymm0, (%rdi) +; SKX-NEXT: retq +entry: + %0 = shufflevector <32 x i8> %a, <32 x i8> undef, <16 x i32> + %1 = bitcast i8* %addr to <16 x i8>* + store <16 x i8> %0, <16 x i8>* %1, align 1 + ret void +} -- cgit v1.2.3