From: Simon Pilgrim Date: Sun, 17 Jul 2016 17:44:18 +0000 (+0000) Subject: [X86][AVX] Added VBROADCASTF128/VBROADCASTI128 tests X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5bf69d80fb95832cd92f37342a1e63cef81705e4;p=llvm [X86][AVX] Added VBROADCASTF128/VBROADCASTI128 tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275713 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/avx-vbroadcastf128.ll b/test/CodeGen/X86/avx-vbroadcastf128.ll new file mode 100644 index 00000000000..176246b093e --- /dev/null +++ b/test/CodeGen/X86/avx-vbroadcastf128.ll @@ -0,0 +1,111 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=X32 +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=X64 + +define <4 x double> @test_broadcast_2f64_4f64(<2 x double> *%p) nounwind { +; X32-LABEL: test_broadcast_2f64_4f64: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_2f64_4f64: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <2 x double>, <2 x double> *%p + %2 = shufflevector <2 x double> %1, <2 x double> undef, <4 x i32> + ret <4 x double> %2 +} + +define <4 x i64> @test_broadcast_2i64_4i64(<2 x i64> *%p) nounwind { +; X32-LABEL: test_broadcast_2i64_4i64: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_2i64_4i64: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <2 x i64>, <2 x i64> *%p + %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <4 x i32> + ret <4 x i64> %2 +} + +define <8 x float> @test_broadcast_4f32_8f32(<4 x float> *%p) nounwind { +; X32-LABEL: test_broadcast_4f32_8f32: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_4f32_8f32: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <4 x float>, <4 x float> *%p + %2 = shufflevector <4 x float> %1, <4 x float> undef, <8 x i32> + ret <8 x float> %2 +} + +define <8 x i32> @test_broadcast_4i32_8i32(<4 x i32> *%p) nounwind { +; X32-LABEL: test_broadcast_4i32_8i32: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_4i32_8i32: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <4 x i32>, <4 x i32> *%p + %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <8 x i32> + ret <8 x i32> %2 +} + +define <16 x i16> @test_broadcast_8i16_16i16(<8 x i16> *%p) nounwind { +; X32-LABEL: test_broadcast_8i16_16i16: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_8i16_16i16: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <8 x i16>, <8 x i16> *%p + %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <16 x i32> + ret <16 x i16> %2 +} + +define <32 x i8> @test_broadcast_16i8_32i7(<16 x i8> *%p) nounwind { +; X32-LABEL: test_broadcast_16i8_32i7: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_16i8_32i7: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <16 x i8>, <16 x i8> *%p + %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <32 x i32> + ret <32 x i8> %2 +} diff --git a/test/CodeGen/X86/avx2-vbroadcasti128.ll b/test/CodeGen/X86/avx2-vbroadcasti128.ll new file mode 100644 index 00000000000..2f11735af04 --- /dev/null +++ b/test/CodeGen/X86/avx2-vbroadcasti128.ll @@ -0,0 +1,129 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X32 +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X64 + +define <4 x double> @test_broadcast_2f64_4f64(<2 x double> *%p) nounwind { +; X32-LABEL: test_broadcast_2f64_4f64: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovapd (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vaddpd LCPI0_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_2f64_4f64: +; X64: ## BB#0: +; X64-NEXT: vmovapd (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vaddpd {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <2 x double>, <2 x double> *%p + %2 = shufflevector <2 x double> %1, <2 x double> undef, <4 x i32> + %3 = fadd <4 x double> %2, + ret <4 x double> %3 +} + +define <4 x i64> @test_broadcast_2i64_4i64(<2 x i64> *%p) nounwind { +; X32-LABEL: test_broadcast_2i64_4i64: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovdqa (%eax), %xmm0 +; X32-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vpaddq LCPI1_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_2i64_4i64: +; X64: ## BB#0: +; X64-NEXT: vmovdqa (%rdi), %xmm0 +; X64-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <2 x i64>, <2 x i64> *%p + %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <4 x i32> + %3 = add <4 x i64> %2, + ret <4 x i64> %3 +} + +define <8 x float> @test_broadcast_4f32_8f32(<4 x float> *%p) nounwind { +; X32-LABEL: test_broadcast_4f32_8f32: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovaps (%eax), %xmm0 +; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vaddps LCPI2_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_4f32_8f32: +; X64: ## BB#0: +; X64-NEXT: vmovaps (%rdi), %xmm0 +; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vaddps {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <4 x float>, <4 x float> *%p + %2 = shufflevector <4 x float> %1, <4 x float> undef, <8 x i32> + %3 = fadd <8 x float> %2, + ret <8 x float> %3 +} + +define <8 x i32> @test_broadcast_4i32_8i32(<4 x i32> *%p) nounwind { +; X32-LABEL: test_broadcast_4i32_8i32: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovdqa (%eax), %xmm0 +; X32-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vpaddd LCPI3_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_4i32_8i32: +; X64: ## BB#0: +; X64-NEXT: vmovdqa (%rdi), %xmm0 +; X64-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <4 x i32>, <4 x i32> *%p + %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <8 x i32> + %3 = add <8 x i32> %2, + ret <8 x i32> %3 +} + +define <16 x i16> @test_broadcast_8i16_16i16(<8 x i16> *%p) nounwind { +; X32-LABEL: test_broadcast_8i16_16i16: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovdqa (%eax), %xmm0 +; X32-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vpaddw LCPI4_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_8i16_16i16: +; X64: ## BB#0: +; X64-NEXT: vmovdqa (%rdi), %xmm0 +; X64-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vpaddw {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <8 x i16>, <8 x i16> *%p + %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <16 x i32> + %3 = add <16 x i16> %2, + ret <16 x i16> %3 +} + +define <32 x i8> @test_broadcast_16i8_32i7(<16 x i8> *%p) nounwind { +; X32-LABEL: test_broadcast_16i8_32i7: +; X32: ## BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: vmovdqa (%eax), %xmm0 +; X32-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X32-NEXT: vpaddb LCPI5_0, %ymm0, %ymm0 +; X32-NEXT: retl +; +; X64-LABEL: test_broadcast_16i8_32i7: +; X64: ## BB#0: +; X64-NEXT: vmovdqa (%rdi), %xmm0 +; X64-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0 +; X64-NEXT: vpaddb {{.*}}(%rip), %ymm0, %ymm0 +; X64-NEXT: retq + %1 = load <16 x i8>, <16 x i8> *%p + %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <32 x i32> + %3 = add <32 x i8> %2, + ret <32 x i8> %3 +}