[llvm] r318740 - [x86][icelake]VAES introduction

Coby Tayree via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 21 01:11:41 PST 2017


Author: coby
Date: Tue Nov 21 01:11:41 2017
New Revision: 318740

URL: http://llvm.org/viewvc/llvm-project?rev=318740&view=rev
Log:
[x86][icelake]VAES introduction
an icelake promotion of AES
Differential Revision: https://reviews.llvm.org/D40078

Added:
    llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx-x86.ll
    llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512-x86.ll
    llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512vl-x86.ll
    llvm/trunk/test/MC/X86/avx512vaes-encoding.s
    llvm/trunk/test/MC/X86/avx512vl_vaes-encoding.s
    llvm/trunk/test/MC/X86/avx_vaes-encoding.s
Modified:
    llvm/trunk/include/llvm/IR/IntrinsicsX86.td
    llvm/trunk/lib/Support/Host.cpp
    llvm/trunk/lib/Target/X86/X86.td
    llvm/trunk/lib/Target/X86/X86InstrAVX512.td
    llvm/trunk/lib/Target/X86/X86InstrInfo.td
    llvm/trunk/lib/Target/X86/X86InstrSSE.td
    llvm/trunk/lib/Target/X86/X86Subtarget.cpp
    llvm/trunk/lib/Target/X86/X86Subtarget.h

Modified: llvm/trunk/include/llvm/IR/IntrinsicsX86.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicsX86.td?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/IntrinsicsX86.td (original)
+++ llvm/trunk/include/llvm/IR/IntrinsicsX86.td Tue Nov 21 01:11:41 2017
@@ -697,18 +697,51 @@ let TargetPrefix = "x86" in {  // All in
   def int_x86_aesni_aesimc          : GCCBuiltin<"__builtin_ia32_aesimc128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty],
                         [IntrNoMem]>;
+
   def int_x86_aesni_aesenc          : GCCBuiltin<"__builtin_ia32_aesenc128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
                         [IntrNoMem]>;
+  def int_x86_aesni_aesenc_256      : GCCBuiltin<"__builtin_ia32_aesenc256">,
+              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
+                        [IntrNoMem]>;
+  def int_x86_aesni_aesenc_512      : GCCBuiltin<"__builtin_ia32_aesenc512">,
+              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
+                        [IntrNoMem]>;
+
   def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
                         [IntrNoMem]>;
+  def int_x86_aesni_aesenclast_256 :
+    GCCBuiltin<"__builtin_ia32_aesenclast256">,
+    Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
+              [IntrNoMem]>;
+  def int_x86_aesni_aesenclast_512 :
+    GCCBuiltin<"__builtin_ia32_aesenclast512">,
+    Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
+              [IntrNoMem]>;
+
   def int_x86_aesni_aesdec          : GCCBuiltin<"__builtin_ia32_aesdec128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
                         [IntrNoMem]>;
+  def int_x86_aesni_aesdec_256      : GCCBuiltin<"__builtin_ia32_aesdec256">,
+              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
+                        [IntrNoMem]>;
+  def int_x86_aesni_aesdec_512      : GCCBuiltin<"__builtin_ia32_aesdec512">,
+              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
+                        [IntrNoMem]>;
+
   def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
                         [IntrNoMem]>;
+  def int_x86_aesni_aesdeclast_256 :
+    GCCBuiltin<"__builtin_ia32_aesdeclast256">,
+    Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
+              [IntrNoMem]>;
+  def int_x86_aesni_aesdeclast_512 :
+    GCCBuiltin<"__builtin_ia32_aesdeclast512">,
+    Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
+              [IntrNoMem]>;
+
   def int_x86_aesni_aeskeygenassist :
               GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],

Modified: llvm/trunk/lib/Support/Host.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Host.cpp (original)
+++ llvm/trunk/lib/Support/Host.cpp Tue Nov 21 01:11:41 2017
@@ -1260,6 +1260,7 @@ bool sys::getHostCPUFeatures(StringMap<b
   Features["avx512vbmi"]      = HasLeaf7 && ((ECX >>  1) & 1) && HasAVX512Save;
   Features["avx512vpopcntdq"] = HasLeaf7 && ((ECX >> 14) & 1) && HasAVX512Save;
   Features["pku"]             = HasLeaf7 && ((ECX >> 4) & 1);
+  Features["vaes"] = HasLeaf7 && ((ECX >> 9) & 1) && HasAVXSave;
 
   bool HasLeafD = MaxLevel >= 0xd &&
                   !getX86CpuIDAndInfoEx(0xd, 0x1, &EAX, &EBX, &ECX, &EDX);

Modified: llvm/trunk/lib/Target/X86/X86.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86.td (original)
+++ llvm/trunk/lib/Target/X86/X86.td Tue Nov 21 01:11:41 2017
@@ -172,6 +172,9 @@ def FeatureSSEUnalignedMem : SubtargetFe
 def FeatureAES     : SubtargetFeature<"aes", "HasAES", "true",
                                       "Enable AES instructions",
                                       [FeatureSSE2]>;
+def FeatureVAES    : SubtargetFeature<"vaes", "HasVAES", "true",
+                       "Promote selected AES instructions to AVX512/AVX registers",
+                        [FeatureAVX, FeatureAES]>;
 def FeatureTBM     : SubtargetFeature<"tbm", "HasTBM", "true",
                                       "Enable TBM instructions">;
 def FeatureLWP     : SubtargetFeature<"lwp", "HasLWP", "true",

Modified: llvm/trunk/lib/Target/X86/X86InstrAVX512.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrAVX512.td?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrAVX512.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrAVX512.td Tue Nov 21 01:11:41 2017
@@ -10013,3 +10013,30 @@ defm : AVX512_scalar_math_f64_patterns<f
 defm : AVX512_scalar_math_f64_patterns<fsub, "SUB">;
 defm : AVX512_scalar_math_f64_patterns<fmul, "MUL">;
 defm : AVX512_scalar_math_f64_patterns<fdiv, "DIV">;
+
+//===----------------------------------------------------------------------===//
+// AES instructions
+//===----------------------------------------------------------------------===//
+multiclass avx512_vaes<bits<8> Op, string OpStr, string IntPrefix> {
+  let Predicates = [HasVLX, HasVAES] in {
+    defm Z128 : AESI_binop_rm_int<Op, OpStr,
+                                  !cast<Intrinsic>(IntPrefix),
+                                  loadv2i64, 0, VR128X, i128mem>,
+                  EVEX_4V, EVEX_CD8<64, CD8VF>, EVEX_V128, VEX_WIG;
+    defm Z256 : AESI_binop_rm_int<Op, OpStr,
+                                  !cast<Intrinsic>(IntPrefix##"_256"),
+                                  loadv4i64, 0, VR256X, i256mem>,
+                  EVEX_4V, EVEX_CD8<64, CD8VF>, EVEX_V256, VEX_WIG;
+    }
+    let Predicates = [HasAVX512, HasVAES] in
+    defm Z    : AESI_binop_rm_int<Op, OpStr,
+                                  !cast<Intrinsic>(IntPrefix##"_512"),
+                                  loadv8i64, 0, VR512, i512mem>,
+                  EVEX_4V, EVEX_CD8<64, CD8VF>, EVEX_V512, VEX_WIG;
+}
+
+defm VAESENC      : avx512_vaes<0xDC, "vaesenc", "int_x86_aesni_aesenc">;
+defm VAESENCLAST  : avx512_vaes<0xDD, "vaesenclast", "int_x86_aesni_aesenclast">;
+defm VAESDEC      : avx512_vaes<0xDE, "vaesdec", "int_x86_aesni_aesdec">;
+defm VAESDECLAST  : avx512_vaes<0xDF, "vaesdeclast", "int_x86_aesni_aesdeclast">;
+

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Nov 21 01:11:41 2017
@@ -835,6 +835,8 @@ def PKU        : Predicate<"Subtarget->h
 
 def HasPOPCNT    : Predicate<"Subtarget->hasPOPCNT()">;
 def HasAES       : Predicate<"Subtarget->hasAES()">;
+def HasVAES      : Predicate<"Subtarget->hasVAES()">;
+def NoVLX_Or_NoVAES : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVAES()">;
 def HasFXSR      : Predicate<"Subtarget->hasFXSR()">;
 def HasXSAVE     : Predicate<"Subtarget->hasXSAVE()">;
 def HasXSAVEOPT  : Predicate<"Subtarget->hasXSAVEOPT()">;

Modified: llvm/trunk/lib/Target/X86/X86InstrSSE.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrSSE.td?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrSSE.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrSSE.td Tue Nov 21 01:11:41 2017
@@ -7129,46 +7129,60 @@ def : InstAlias<"sha256rnds2\t{$src2, $d
 // AES-NI Instructions
 //===----------------------------------------------------------------------===//
 
-multiclass AESI_binop_rm_int<bits<8> opc, string OpcodeStr, Intrinsic IntId128,
-                             PatFrag ld_frag, bit Is2Addr = 1> {
-  def rr : AES8I<opc, MRMSrcReg, (outs VR128:$dst),
-       (ins VR128:$src1, VR128:$src2),
-       !if(Is2Addr,
-           !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"),
-           !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
-       [(set VR128:$dst, (IntId128 VR128:$src1, VR128:$src2))]>,
-       Sched<[WriteAESDecEnc]>;
-  def rm : AES8I<opc, MRMSrcMem, (outs VR128:$dst),
-       (ins VR128:$src1, i128mem:$src2),
-       !if(Is2Addr,
-           !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"),
-           !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
-       [(set VR128:$dst,
-         (IntId128 VR128:$src1, (ld_frag addr:$src2)))]>,
-       Sched<[WriteAESDecEncLd, ReadAfterLd]>;
+multiclass AESI_binop_rm_int<bits<8> opc, string OpcodeStr,
+                             Intrinsic IntId, PatFrag ld_frag,
+                             bit Is2Addr = 0, RegisterClass RC = VR128,
+                             X86MemOperand MemOp = i128mem> {
+  let AsmString = OpcodeStr##
+                  !if(Is2Addr, "\t{$src2, $dst|$dst, $src2}",
+                               "\t{$src2, $src1, $dst|$dst, $src1, $src2}") in {
+    def rr : AES8I<opc, MRMSrcReg, (outs RC:$dst),
+                   (ins RC:$src1, RC:$src2), "",
+                   [(set RC:$dst, (IntId RC:$src1, RC:$src2))]>,
+                   Sched<[WriteAESDecEnc]>;
+    def rm : AES8I<opc, MRMSrcMem, (outs RC:$dst),
+                   (ins RC:$src1, MemOp:$src2), "",
+                   [(set RC:$dst, (IntId RC:$src1, (ld_frag addr:$src2)))]>,
+                   Sched<[WriteAESDecEncLd, ReadAfterLd]>;
+  }
 }
 
 // Perform One Round of an AES Encryption/Decryption Flow
-let Predicates = [HasAVX, HasAES] in {
+let Predicates = [HasAVX, NoVLX_Or_NoVAES, HasAES] in {
   defm VAESENC          : AESI_binop_rm_int<0xDC, "vaesenc",
-                         int_x86_aesni_aesenc, loadv2i64, 0>, VEX_4V, VEX_WIG;
+                         int_x86_aesni_aesenc, loadv2i64>, VEX_4V, VEX_WIG;
   defm VAESENCLAST      : AESI_binop_rm_int<0xDD, "vaesenclast",
-                         int_x86_aesni_aesenclast, loadv2i64, 0>, VEX_4V, VEX_WIG;
+                         int_x86_aesni_aesenclast, loadv2i64>, VEX_4V, VEX_WIG;
   defm VAESDEC          : AESI_binop_rm_int<0xDE, "vaesdec",
-                         int_x86_aesni_aesdec, loadv2i64, 0>, VEX_4V, VEX_WIG;
+                         int_x86_aesni_aesdec, loadv2i64>, VEX_4V, VEX_WIG;
   defm VAESDECLAST      : AESI_binop_rm_int<0xDF, "vaesdeclast",
-                         int_x86_aesni_aesdeclast, loadv2i64, 0>, VEX_4V, VEX_WIG;
+                         int_x86_aesni_aesdeclast, loadv2i64>, VEX_4V, VEX_WIG;
+}
+
+let Predicates = [NoVLX, HasVAES] in {
+  defm VAESENCY         : AESI_binop_rm_int<0xDC, "vaesenc",
+                         int_x86_aesni_aesenc_256, loadv4i64, 0, VR256,
+                         i256mem>, VEX_4V, VEX_L, VEX_WIG;
+  defm VAESENCLASTY     : AESI_binop_rm_int<0xDD, "vaesenclast",
+                         int_x86_aesni_aesenclast_256, loadv4i64, 0, VR256,
+                         i256mem>, VEX_4V, VEX_L, VEX_WIG;
+  defm VAESDECY         : AESI_binop_rm_int<0xDE, "vaesdec",
+                         int_x86_aesni_aesdec_256, loadv4i64, 0, VR256,
+                         i256mem>, VEX_4V, VEX_L, VEX_WIG;
+  defm VAESDECLASTY     : AESI_binop_rm_int<0xDF, "vaesdeclast",
+                         int_x86_aesni_aesdeclast_256, loadv4i64, 0, VR256,
+                         i256mem>, VEX_4V, VEX_L, VEX_WIG;
 }
 
 let Constraints = "$src1 = $dst" in {
   defm AESENC          : AESI_binop_rm_int<0xDC, "aesenc",
-                         int_x86_aesni_aesenc, memopv2i64>;
+                         int_x86_aesni_aesenc, memopv2i64, 1>;
   defm AESENCLAST      : AESI_binop_rm_int<0xDD, "aesenclast",
-                         int_x86_aesni_aesenclast, memopv2i64>;
+                         int_x86_aesni_aesenclast, memopv2i64, 1>;
   defm AESDEC          : AESI_binop_rm_int<0xDE, "aesdec",
-                         int_x86_aesni_aesdec, memopv2i64>;
+                         int_x86_aesni_aesdec, memopv2i64, 1>;
   defm AESDECLAST      : AESI_binop_rm_int<0xDF, "aesdeclast",
-                         int_x86_aesni_aesdeclast, memopv2i64>;
+                         int_x86_aesni_aesdeclast, memopv2i64, 1>;
 }
 
 // Perform the AES InvMixColumn Transformation

Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Tue Nov 21 01:11:41 2017
@@ -292,6 +292,7 @@ void X86Subtarget::initializeEnvironment
   HasPOPCNT = false;
   HasSSE4A = false;
   HasAES = false;
+  HasVAES = false;
   HasFXSR = false;
   HasXSAVE = false;
   HasXSAVEOPT = false;

Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=318740&r1=318739&r2=318740&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
+++ llvm/trunk/lib/Target/X86/X86Subtarget.h Tue Nov 21 01:11:41 2017
@@ -107,6 +107,7 @@ protected:
 
   /// Target has AES instructions
   bool HasAES;
+  bool HasVAES;
 
   /// Target has FXSAVE/FXRESTOR instructions
   bool HasFXSR;
@@ -457,6 +458,7 @@ public:
   bool has3DNowA() const { return X863DNowLevel >= ThreeDNowA; }
   bool hasPOPCNT() const { return HasPOPCNT; }
   bool hasAES() const { return HasAES; }
+  bool hasVAES() const { return HasVAES; }
   bool hasFXSR() const { return HasFXSR; }
   bool hasXSAVE() const { return HasXSAVE; }
   bool hasXSAVEOPT() const { return HasXSAVEOPT; }

Added: llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx-x86.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx-x86.ll?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx-x86.ll (added)
+++ llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx-x86.ll Tue Nov 21 01:11:41 2017
@@ -0,0 +1,13 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx,+vaes -show-mc-encoding | FileCheck %s --check-prefix=VAES_AVX
+
+; {vaes, avx}
+define <4 x i64> @test_x86_aesni_aesenc_256(<4 x i64> %a0, <4 x i64> %a1) {
+; VAES_AVX-LABEL: test_x86_aesni_aesenc_256:
+; VAES_AVX:       # BB#0:
+; VAES_AVX-NEXT:    vaesenc %ymm1, %ymm0, %ymm0 # encoding: [0xc4,0xe2,0x7d,0xdc,0xc1]
+; VAES_AVX-NEXT:    retl # encoding: [0xc3]
+  %res = call <4 x i64> @llvm.x86.aesni.aesenc.256(<4 x i64> %a0, <4 x i64> %a1)
+  ret <4 x i64> %res
+}
+declare <4 x i64> @llvm.x86.aesni.aesenc.256(<4 x i64>, <4 x i64>) nounwind readnone

Added: llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512-x86.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512-x86.ll?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512-x86.ll (added)
+++ llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512-x86.ll Tue Nov 21 01:11:41 2017
@@ -0,0 +1,42 @@
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+vaes,+avx512f -show-mc-encoding | FileCheck %s --check-prefix=VAES_AVX512
+
+define <8 x i64> @test_x86_aesni_aesenc_512(<8 x i64> %a0, <8 x i64> %a1) {
+; VAES_AVX512-LABEL: test_x86_aesni_aesenc_512:
+; VAES_AVX512:       # BB#0:
+; VAES_AVX512-NEXT:    vaesenc %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0xdc,0xc1]
+; VAES_AVX512-NEXT:    retq # encoding: [0xc3]
+  %res = call <8 x i64> @llvm.x86.aesni.aesenc.512(<8 x i64> %a0, <8 x i64> %a1)
+  ret <8 x i64> %res
+}
+declare <8 x i64> @llvm.x86.aesni.aesenc.512(<8 x i64>, <8 x i64>) nounwind readnone
+
+define <8 x i64> @test_x86_aesni_aesenclast_512(<8 x i64> %a0, <8 x i64> %a1) {
+; VAES_AVX512-LABEL: test_x86_aesni_aesenclast_512:
+; VAES_AVX512:       # BB#0:
+; VAES_AVX512-NEXT:    vaesenclast %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0xdd,0xc1]
+; VAES_AVX512-NEXT:    retq # encoding: [0xc3]
+  %res = call <8 x i64> @llvm.x86.aesni.aesenclast.512(<8 x i64> %a0, <8 x i64> %a1)
+  ret <8 x i64> %res
+}
+declare <8 x i64> @llvm.x86.aesni.aesenclast.512(<8 x i64>, <8 x i64>) nounwind readnone
+
+define <8 x i64> @test_x86_aesni_aesdec_512(<8 x i64> %a0, <8 x i64> %a1) {
+; VAES_AVX512-LABEL: test_x86_aesni_aesdec_512:
+; VAES_AVX512:       # BB#0:
+; VAES_AVX512-NEXT:    vaesdec %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0xde,0xc1]
+; VAES_AVX512-NEXT:    retq # encoding: [0xc3]
+  %res = call <8 x i64> @llvm.x86.aesni.aesdec.512(<8 x i64> %a0, <8 x i64> %a1)
+  ret <8 x i64> %res
+}
+declare <8 x i64> @llvm.x86.aesni.aesdec.512(<8 x i64>, <8 x i64>) nounwind readnone
+
+define <8 x i64> @test_x86_aesni_aesdeclast_512(<8 x i64> %a0, <8 x i64> %a1) {
+; VAES_AVX512-LABEL: test_x86_aesni_aesdeclast_512:
+; VAES_AVX512:       # BB#0:
+; VAES_AVX512-NEXT:    vaesdeclast %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0xdf,0xc1]
+; VAES_AVX512-NEXT:    retq # encoding: [0xc3]
+  %res = call <8 x i64> @llvm.x86.aesni.aesdeclast.512(<8 x i64> %a0, <8 x i64> %a1)
+  ret <8 x i64> %res
+}
+declare <8 x i64> @llvm.x86.aesni.aesdeclast.512(<8 x i64>, <8 x i64>) nounwind readnone
+

Added: llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512vl-x86.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512vl-x86.ll?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512vl-x86.ll (added)
+++ llvm/trunk/test/CodeGen/X86/vaes-intrinsics-avx512vl-x86.ll Tue Nov 21 01:11:41 2017
@@ -0,0 +1,82 @@
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+vaes,+avx512f,+avx512vl -show-mc-encoding | FileCheck %s --check-prefix=VAES_AVX512VL
+
+define <2 x i64> @test_x86_aesni_aesenc(<2 x i64> %a0, <2 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesenc:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesenc %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xdc,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64> %a0, <2 x i64> %a1)
+  ret <2 x i64> %res
+}
+declare <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64>, <2 x i64>) nounwind readnone
+
+define <4 x i64> @test_x86_aesni_aesenc_256(<4 x i64> %a0, <4 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesenc_256:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesenc %ymm1, %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0xdc,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <4 x i64> @llvm.x86.aesni.aesenc.256(<4 x i64> %a0, <4 x i64> %a1)
+  ret <4 x i64> %res
+}
+declare <4 x i64> @llvm.x86.aesni.aesenc.256(<4 x i64>, <4 x i64>) nounwind readnone
+
+define <2 x i64> @test_x86_aesni_aesenclast(<2 x i64> %a0, <2 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesenclast:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesenclast %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xdd,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64> %a0, <2 x i64> %a1)
+  ret <2 x i64> %res
+}
+declare <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64>, <2 x i64>) nounwind readnone
+
+define <4 x i64> @test_x86_aesni_aesenclast_256(<4 x i64> %a0, <4 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesenclast_256:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesenclast %ymm1, %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0xdd,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <4 x i64> @llvm.x86.aesni.aesenclast.256(<4 x i64> %a0, <4 x i64> %a1)
+  ret <4 x i64> %res
+}
+declare <4 x i64> @llvm.x86.aesni.aesenclast.256(<4 x i64>, <4 x i64>) nounwind readnone
+
+define <2 x i64> @test_x86_aesni_aesdec(<2 x i64> %a0, <2 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesdec:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesdec %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xde,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64> %a0, <2 x i64> %a1)
+  ret <2 x i64> %res
+}
+declare <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64>, <2 x i64>) nounwind readnone
+
+define <4 x i64> @test_x86_aesni_aesdec_256(<4 x i64> %a0, <4 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesdec_256:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesdec %ymm1, %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0xde,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <4 x i64> @llvm.x86.aesni.aesdec.256(<4 x i64> %a0, <4 x i64> %a1)
+  ret <4 x i64> %res
+}
+declare <4 x i64> @llvm.x86.aesni.aesdec.256(<4 x i64>, <4 x i64>) nounwind readnone
+
+define <2 x i64> @test_x86_aesni_aesdeclast(<2 x i64> %a0, <2 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesdeclast:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesdeclast %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xdf,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64> %a0, <2 x i64> %a1)
+  ret <2 x i64> %res
+}
+declare <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64>, <2 x i64>) nounwind readnone
+
+define <4 x i64> @test_x86_aesni_aesdeclast_256(<4 x i64> %a0, <4 x i64> %a1) {
+; VAES_AVX512VL-LABEL: test_x86_aesni_aesdeclast_256:
+; VAES_AVX512VL:       # BB#0:
+; VAES_AVX512VL-NEXT:    vaesdeclast %ymm1, %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0xdf,0xc1]
+; VAES_AVX512VL-NEXT:    retq # encoding: [0xc3]
+  %res = call <4 x i64> @llvm.x86.aesni.aesdeclast.256(<4 x i64> %a0, <4 x i64> %a1)
+  ret <4 x i64> %res
+}
+declare <4 x i64> @llvm.x86.aesni.aesdeclast.256(<4 x i64>, <4 x i64>) nounwind readnone
+

Added: llvm/trunk/test/MC/X86/avx512vaes-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/avx512vaes-encoding.s?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/MC/X86/avx512vaes-encoding.s (added)
+++ llvm/trunk/test/MC/X86/avx512vaes-encoding.s Tue Nov 21 01:11:41 2017
@@ -0,0 +1,114 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -mcpu=knl -mattr=+vaes --show-encoding < %s  | FileCheck %s
+
+// CHECK: vaesenc %zmm3, %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdc,0xeb]
+          vaesenc %zmm3, %zmm2, %zmm21
+
+// CHECK: vaesenclast %zmm3, %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdd,0xeb]
+          vaesenclast %zmm3, %zmm2, %zmm21
+
+// CHECK: vaesdec %zmm3, %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xde,0xeb]
+          vaesdec %zmm3, %zmm2, %zmm21
+
+// CHECK: vaesdeclast %zmm3, %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdf,0xeb]
+          vaesdeclast %zmm3, %zmm2, %zmm21
+
+// CHECK: vaesenc  (%rcx), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdc,0x29]
+          vaesenc  (%rcx), %zmm2, %zmm21
+
+// CHECK: vaesenc  -256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdc,0x6c,0x24,0xfc]
+          vaesenc  -256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesenc  256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdc,0x6c,0x24,0x04]
+          vaesenc  256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesenc  268435456(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdc,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenc  268435456(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesenc  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdc,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenc  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesenc  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdc,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenc  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesenclast  (%rcx), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdd,0x29]
+          vaesenclast  (%rcx), %zmm2, %zmm21
+
+// CHECK: vaesenclast  -256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdd,0x6c,0x24,0xfc]
+          vaesenclast  -256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesenclast  256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdd,0x6c,0x24,0x04]
+          vaesenclast  256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesenclast  268435456(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdd,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenclast  268435456(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesenclast  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdd,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenclast  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesenclast  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdd,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenclast  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdec  (%rcx), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xde,0x29]
+          vaesdec  (%rcx), %zmm2, %zmm21
+
+// CHECK: vaesdec  -256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xde,0x6c,0x24,0xfc]
+          vaesdec  -256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesdec  256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xde,0x6c,0x24,0x04]
+          vaesdec  256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesdec  268435456(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xde,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdec  268435456(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdec  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xde,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdec  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdec  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xde,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdec  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  (%rcx), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdf,0x29]
+          vaesdeclast  (%rcx), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  -256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdf,0x6c,0x24,0xfc]
+          vaesdeclast  -256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  256(%rsp), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x48,0xdf,0x6c,0x24,0x04]
+          vaesdeclast  256(%rsp), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  268435456(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdf,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdeclast  268435456(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdf,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdeclast  -536870912(%rcx,%r14,8), %zmm2, %zmm21
+
+// CHECK: vaesdeclast  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x48,0xdf,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdeclast  -536870910(%rcx,%r14,8), %zmm2, %zmm21
+

Added: llvm/trunk/test/MC/X86/avx512vl_vaes-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/avx512vl_vaes-encoding.s?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/MC/X86/avx512vl_vaes-encoding.s (added)
+++ llvm/trunk/test/MC/X86/avx512vl_vaes-encoding.s Tue Nov 21 01:11:41 2017
@@ -0,0 +1,226 @@
+//RUN: llvm-mc -triple x86_64-unknown-unknown -mcpu=skx -mattr=+vaes --show-encoding < %s  | FileCheck %s
+
+// CHECK: vaesenc %xmm3, %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdc,0xeb]
+          vaesenc %xmm3, %xmm2, %xmm21
+
+// CHECK: vaesenclast %xmm3, %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdd,0xeb]
+          vaesenclast %xmm3, %xmm2, %xmm21
+
+// CHECK: vaesdec %xmm3, %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xde,0xeb]
+          vaesdec %xmm3, %xmm2, %xmm21
+
+// CHECK: vaesdeclast %xmm3, %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdf,0xeb]
+          vaesdeclast %xmm3, %xmm2, %xmm21
+
+// CHECK: vaesenc  (%rcx), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdc,0x29]
+          vaesenc  (%rcx), %xmm2, %xmm21
+
+// CHECK: vaesenc  -64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdc,0x6c,0x24,0xfc]
+          vaesenc  -64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesenc  64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdc,0x6c,0x24,0x04]
+          vaesenc  64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesenc  268435456(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdc,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenc  268435456(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenc  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdc,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenc  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenc  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdc,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenc  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenclast  (%rcx), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdd,0x29]
+          vaesenclast  (%rcx), %xmm2, %xmm21
+
+// CHECK: vaesenclast  -64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdd,0x6c,0x24,0xfc]
+          vaesenclast  -64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesenclast  64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdd,0x6c,0x24,0x04]
+          vaesenclast  64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesenclast  268435456(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdd,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenclast  268435456(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenclast  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdd,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenclast  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenclast  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdd,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenclast  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdec  (%rcx), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xde,0x29]
+          vaesdec  (%rcx), %xmm2, %xmm21
+
+// CHECK: vaesdec  -64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xde,0x6c,0x24,0xfc]
+          vaesdec  -64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesdec  64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xde,0x6c,0x24,0x04]
+          vaesdec  64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesdec  268435456(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xde,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdec  268435456(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdec  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xde,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdec  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdec  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xde,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdec  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  (%rcx), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdf,0x29]
+          vaesdeclast  (%rcx), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  -64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdf,0x6c,0x24,0xfc]
+          vaesdeclast  -64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  64(%rsp), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x08,0xdf,0x6c,0x24,0x04]
+          vaesdeclast  64(%rsp), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  268435456(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdf,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdeclast  268435456(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdf,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdeclast  -536870912(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesdeclast  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x08,0xdf,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdeclast  -536870910(%rcx,%r14,8), %xmm2, %xmm21
+
+// CHECK: vaesenc %ymm3, %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdc,0xeb]
+          vaesenc %ymm3, %ymm2, %ymm21
+
+// CHECK: vaesenclast %ymm3, %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdd,0xeb]
+          vaesenclast %ymm3, %ymm2, %ymm21
+
+// CHECK: vaesdec %ymm3, %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xde,0xeb]
+          vaesdec %ymm3, %ymm2, %ymm21
+
+// CHECK: vaesdeclast %ymm3, %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdf,0xeb]
+          vaesdeclast %ymm3, %ymm2, %ymm21
+
+// CHECK: vaesenc  (%rcx), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdc,0x29]
+          vaesenc  (%rcx), %ymm2, %ymm21
+
+// CHECK: vaesenc  -128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdc,0x6c,0x24,0xfc]
+          vaesenc  -128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesenc  128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdc,0x6c,0x24,0x04]
+          vaesenc  128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesenc  268435456(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdc,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenc  268435456(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesenc  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdc,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenc  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesenc  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdc,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenc  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesenclast  (%rcx), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdd,0x29]
+          vaesenclast  (%rcx), %ymm2, %ymm21
+
+// CHECK: vaesenclast  -128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdd,0x6c,0x24,0xfc]
+          vaesenclast  -128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesenclast  128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdd,0x6c,0x24,0x04]
+          vaesenclast  128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesenclast  268435456(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdd,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesenclast  268435456(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesenclast  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdd,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenclast  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesenclast  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdd,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenclast  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdec  (%rcx), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xde,0x29]
+          vaesdec  (%rcx), %ymm2, %ymm21
+
+// CHECK: vaesdec  -128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xde,0x6c,0x24,0xfc]
+          vaesdec  -128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesdec  128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xde,0x6c,0x24,0x04]
+          vaesdec  128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesdec  268435456(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xde,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdec  268435456(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdec  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xde,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdec  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdec  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xde,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdec  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  (%rcx), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdf,0x29]
+          vaesdeclast  (%rcx), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  -128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdf,0x6c,0x24,0xfc]
+          vaesdeclast  -128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  128(%rsp), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xe2,0x6d,0x28,0xdf,0x6c,0x24,0x04]
+          vaesdeclast  128(%rsp), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  268435456(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdf,0xac,0xf1,0x00,0x00,0x00,0x10]
+          vaesdeclast  268435456(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdf,0xac,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdeclast  -536870912(%rcx,%r14,8), %ymm2, %ymm21
+
+// CHECK: vaesdeclast  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+// CHECK: encoding: [0x62,0xa2,0x6d,0x28,0xdf,0xac,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdeclast  -536870910(%rcx,%r14,8), %ymm2, %ymm21
+

Added: llvm/trunk/test/MC/X86/avx_vaes-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/avx_vaes-encoding.s?rev=318740&view=auto
==============================================================================
--- llvm/trunk/test/MC/X86/avx_vaes-encoding.s (added)
+++ llvm/trunk/test/MC/X86/avx_vaes-encoding.s Tue Nov 21 01:11:41 2017
@@ -0,0 +1,114 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -mattr=vaes --show-encoding %s | FileCheck %s
+
+// CHECK: vaesenc %ymm3, %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdc,0xcb]
+          vaesenc %ymm3, %ymm2, %ymm1
+
+// CHECK: vaesenclast %ymm3, %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdd,0xcb]
+          vaesenclast %ymm3, %ymm2, %ymm1
+
+// CHECK: vaesdec %ymm3, %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xde,0xcb]
+          vaesdec %ymm3, %ymm2, %ymm1
+
+// CHECK: vaesdeclast %ymm3, %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdf,0xcb]
+          vaesdeclast %ymm3, %ymm2, %ymm1
+
+// CHECK: vaesenc  (%rcx), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdc,0x09]
+          vaesenc  (%rcx), %ymm2, %ymm1
+
+// CHECK: vaesenc  -4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdc,0x4c,0x24,0xfc]
+          vaesenc  -4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesenc  4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdc,0x4c,0x24,0x04]
+          vaesenc  4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesenc  268435456(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdc,0x8c,0xf1,0x00,0x00,0x00,0x10]
+          vaesenc  268435456(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesenc  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdc,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenc  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesenc  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdc,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenc  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesenclast  (%rcx), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdd,0x09]
+          vaesenclast  (%rcx), %ymm2, %ymm1
+
+// CHECK: vaesenclast  -4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdd,0x4c,0x24,0xfc]
+          vaesenclast  -4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesenclast  4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdd,0x4c,0x24,0x04]
+          vaesenclast  4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesenclast  268435456(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdd,0x8c,0xf1,0x00,0x00,0x00,0x10]
+          vaesenclast  268435456(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesenclast  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdd,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+          vaesenclast  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesenclast  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdd,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+          vaesenclast  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdec  (%rcx), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xde,0x09]
+          vaesdec  (%rcx), %ymm2, %ymm1
+
+// CHECK: vaesdec  -4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xde,0x4c,0x24,0xfc]
+          vaesdec  -4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesdec  4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xde,0x4c,0x24,0x04]
+          vaesdec  4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesdec  268435456(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xde,0x8c,0xf1,0x00,0x00,0x00,0x10]
+          vaesdec  268435456(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdec  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xde,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdec  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdec  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xde,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdec  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  (%rcx), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdf,0x09]
+          vaesdeclast  (%rcx), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  -4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdf,0x4c,0x24,0xfc]
+          vaesdeclast  -4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  4(%rsp), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x6d,0xdf,0x4c,0x24,0x04]
+          vaesdeclast  4(%rsp), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  268435456(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+          vaesdeclast  268435456(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+          vaesdeclast  -536870912(%rcx,%r14,8), %ymm2, %ymm1
+
+// CHECK: vaesdeclast  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x6d,0xdf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+          vaesdeclast  -536870910(%rcx,%r14,8), %ymm2, %ymm1
+




More information about the llvm-commits mailing list