From db983b8c6bec611d873e2ecbf01dbecfb816a6b7 Mon Sep 17 00:00:00 2001 From: Adam Nemet Date: Tue, 10 Jun 2014 16:39:53 +0000 Subject: [PATCH] [X86] AVX512: Add vmovntdqa Along with the corresponding intrinsic and tests. llvm-svn: 210543 --- include/llvm/IR/IntrinsicsX86.td | 2 ++ lib/Target/X86/X86InstrAVX512.td | 11 +++++++++++ test/CodeGen/X86/avx512-intrinsics.ll | 9 +++++++++ test/MC/X86/avx512-encodings.s | 8 ++++++++ 4 files changed, 30 insertions(+) diff --git a/include/llvm/IR/IntrinsicsX86.td b/include/llvm/IR/IntrinsicsX86.td index 88ee1cec2d5..0d224fe40db 100644 --- a/include/llvm/IR/IntrinsicsX86.td +++ b/include/llvm/IR/IntrinsicsX86.td @@ -1939,6 +1939,8 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". llvm_i32_ty], [IntrNoMem, Commutative]>; def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">, Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>; + def int_x86_avx512_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa512">, + Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>; } //===----------------------------------------------------------------------===// diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 37bcc5235e4..d18c7ec6313 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -1787,6 +1787,17 @@ def : Pat<(v16i32 (X86Vinsert undef, GR32:$src2, (iPTR 0))), def : Pat<(v8i64 (X86Vinsert undef, GR64:$src2, (iPTR 0))), (SUBREG_TO_REG (i32 0), (VMOV64toPQIZrr GR64:$src2), sub_xmm)>; +//===----------------------------------------------------------------------===// +// AVX-512 - Non-temporals +//===----------------------------------------------------------------------===// + +def VMOVNTDQAZrm : AVX5128I<0x2A, MRMSrcMem, (outs VR512:$dst), + (ins i512mem:$src), + "vmovntdqa\t{$src, $dst|$dst, $src}", + [(set VR512:$dst, + (int_x86_avx512_movntdqa addr:$src))]>, + EVEX, EVEX_V512; + //===----------------------------------------------------------------------===// // AVX-512 - Integer arithmetic // diff --git a/test/CodeGen/X86/avx512-intrinsics.ll b/test/CodeGen/X86/avx512-intrinsics.ll index e19841a6f9a..297fef50936 100644 --- a/test/CodeGen/X86/avx512-intrinsics.ll +++ b/test/CodeGen/X86/avx512-intrinsics.ll @@ -545,3 +545,12 @@ define <16 x float> @test_vpermt2ps(<16 x float>%x, <16 x float>%y, <16 x i32>%p } declare <16 x float> @llvm.x86.avx512.mask.vpermt.ps.512(<16 x i32>, <16 x float>, <16 x float>, i16) + +define <8 x i64> @test_vmovntdqa(i8 *%x) { +; CHECK-LABEL: test_vmovntdqa: +; CHECK: vmovntdqa (%rdi), %zmm0 ## encoding: [0x62,0xf2,0x7d,0x48,0x2a,0x07] + %res = call <8 x i64> @llvm.x86.avx512.movntdqa(i8* %x) + ret <8 x i64> %res +} + +declare <8 x i64> @llvm.x86.avx512.movntdqa(i8*) diff --git a/test/MC/X86/avx512-encodings.s b/test/MC/X86/avx512-encodings.s index 2915b7a4d0a..f38eaf5402f 100644 --- a/test/MC/X86/avx512-encodings.s +++ b/test/MC/X86/avx512-encodings.s @@ -3151,3 +3151,11 @@ vaddpd 512(%rdi, %rsi, 8) {1to8}, %zmm20, %zmm30 // CHECK: vaddps {{.*}}{1to16} // CHECK: encoding: [0x62,0x61,0x5c,0x50,0x58,0xb4,0xf7,0x00,0x02,0x00,0x00] vaddps 512(%rdi, %rsi, 8) {1to16}, %zmm20, %zmm30 + +// CHECK: vmovntdqa +// CHECK: encoding: [0x62,0x72,0x7d,0x48,0x2a,0xab,0x78,0x56,0x34,0x12] +vmovntdqa 0x12345678(%rbx), %zmm13 + +// CHECK: vmovntdqa +// CHECK: encoding: [0x62,0xc2,0x7d,0x48,0x2a,0x14,0x56] +vmovntdqa (%r14,%rdx,2), %zmm18