aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2011-08-09 22:39:53 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2011-08-09 22:39:53 +0000
commit18deb04e9c4285719972d10e92605e28f074614c (patch)
tree0f57c2241ed6e48779d9a55b68bd32cfbda61c94
parent6ff9aa2aa79d0f1927dc1a73b9d1ca1e08d2978b (diff)
Add v16i16 and v32i8 store patterns
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137166 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86InstrSSE.td8
-rw-r--r--test/CodeGen/X86/avx-load-store.ll24
2 files changed, 32 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td
index 56b05e17ac..d8239bc993 100644
--- a/lib/Target/X86/X86InstrSSE.td
+++ b/lib/Target/X86/X86InstrSSE.td
@@ -4063,10 +4063,18 @@ let Predicates = [HasAVX] in {
(VMOVAPSYmr addr:$dst, VR256:$src)>;
def : Pat<(alignedstore (v8i32 VR256:$src), addr:$dst),
(VMOVAPSYmr addr:$dst, VR256:$src)>;
+ def : Pat<(alignedstore (v16i16 VR256:$src), addr:$dst),
+ (VMOVAPSYmr addr:$dst, VR256:$src)>;
+ def : Pat<(alignedstore (v32i8 VR256:$src), addr:$dst),
+ (VMOVAPSYmr addr:$dst, VR256:$src)>;
def : Pat<(store (v4i64 VR256:$src), addr:$dst),
(VMOVUPSYmr addr:$dst, VR256:$src)>;
def : Pat<(store (v8i32 VR256:$src), addr:$dst),
(VMOVUPSYmr addr:$dst, VR256:$src)>;
+ def : Pat<(store (v16i16 VR256:$src), addr:$dst),
+ (VMOVUPSYmr addr:$dst, VR256:$src)>;
+ def : Pat<(store (v32i8 VR256:$src), addr:$dst),
+ (VMOVUPSYmr addr:$dst, VR256:$src)>;
}
//===----------------------------------------------------------------------===//
diff --git a/test/CodeGen/X86/avx-load-store.ll b/test/CodeGen/X86/avx-load-store.ll
index 0d591ec27f..d191af8863 100644
--- a/test/CodeGen/X86/avx-load-store.ll
+++ b/test/CodeGen/X86/avx-load-store.ll
@@ -40,3 +40,27 @@ define <4 x double> @mov01(<4 x double> %v, double * %ptr) nounwind {
ret <4 x double> %i0
}
+; CHECK: vmovaps %ymm
+define void @storev16i16(<16 x i16> %a) nounwind {
+ store <16 x i16> %a, <16 x i16>* undef, align 32
+ unreachable
+}
+
+; CHECK: vmovups %ymm
+define void @storev16i16_01(<16 x i16> %a) nounwind {
+ store <16 x i16> %a, <16 x i16>* undef, align 4
+ unreachable
+}
+
+; CHECK: vmovaps %ymm
+define void @storev32i8(<32 x i8> %a) nounwind {
+ store <32 x i8> %a, <32 x i8>* undef, align 32
+ unreachable
+}
+
+; CHECK: vmovups %ymm
+define void @storev32i8_01(<32 x i8> %a) nounwind {
+ store <32 x i8> %a, <32 x i8>* undef, align 4
+ unreachable
+}
+