From 9b7aaafc6af558e8cd01d1bd79fd73ea3fe1ed05 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 14 Mar 2016 00:18:26 +0000 Subject: [PATCH] [X86][XOP] Added target shuffle combine tests for XOP's VPPERM 2-op shuffle Actual combing support will be added in a future patch llvm-svn: 263402 --- .../CodeGen/X86/vector-shuffle-combining-xop.ll | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 llvm/test/CodeGen/X86/vector-shuffle-combining-xop.ll diff --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-xop.ll b/llvm/test/CodeGen/X86/vector-shuffle-combining-xop.ll new file mode 100644 index 0000000..6d7439b --- /dev/null +++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-xop.ll @@ -0,0 +1,31 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s + +declare <2 x double> @llvm.x86.xop.vpermil2pd(<2 x double>, <2 x double>, <2 x double>, i8) nounwind readnone +declare <4 x double> @llvm.x86.xop.vpermil2pd.256(<4 x double>, <4 x double>, <4 x double>, i8) nounwind readnone + +declare <4 x float> @llvm.x86.xop.vpermil2ps(<4 x float>, <4 x float>, <4 x float>, i8) nounwind readnone +declare <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float>, <8 x float>, <8 x float>, i8) nounwind readnone + +declare <16 x i8> @llvm.x86.xop.vpperm(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone + +define <16 x i8> @combine_vpperm_identity(<16 x i8> %a0, <16 x i8> %a1) { +; CHECK-LABEL: combine_vpperm_identity: +; CHECK: # BB#0: +; CHECK-NEXT: vpperm {{.*}}(%rip), %xmm1, %xmm0, %xmm0 +; CHECK-NEXT: vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0 +; CHECK-NEXT: retq + %res0 = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> ) + %res1 = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %res0, <16 x i8> undef, <16 x i8> ) + ret <16 x i8> %res1 +} + +define <16 x i8> @combine_vpperm_as_unpckhwd(<16 x i8> %a0, <16 x i8> %a1) { +; CHECK-LABEL: combine_vpperm_as_unpckhwd: +; CHECK: # BB#0: +; CHECK-NEXT: vpperm {{.*}}(%rip), %xmm0, %xmm0, %xmm0 +; CHECK-NEXT: retq + %res0 = call <16 x i8> @llvm.x86.xop.vpperm(<16 x i8> %a0, <16 x i8> %a0, <16 x i8> ) + ret <16 x i8> %res0 +} -- 2.7.4