[llvm] d9e875d - [X86][MC] Support encoding/decoding for APX variant LZCNT/TZCNT/POPCNT instructions (#79954)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 31 05:10:07 PST 2024


Author: XinWang10
Date: 2024-01-31T21:10:02+08:00
New Revision: d9e875dcc13359f2a399b04e7c54bf70c0306a89

URL: https://github.com/llvm/llvm-project/commit/d9e875dcc13359f2a399b04e7c54bf70c0306a89
DIFF: https://github.com/llvm/llvm-project/commit/d9e875dcc13359f2a399b04e7c54bf70c0306a89.diff

LOG: [X86][MC] Support encoding/decoding for APX variant LZCNT/TZCNT/POPCNT instructions (#79954)

Two variants: promoted legacy, NF (no flags update).

The syntax of NF instructions is aligned with GNU binutils.
https://sourceware.org/pipermail/binutils/2023-September/129545.html

Added: 
    llvm/test/MC/Disassembler/X86/apx/lzcnt.txt
    llvm/test/MC/Disassembler/X86/apx/popcnt.txt
    llvm/test/MC/Disassembler/X86/apx/tzcnt.txt
    llvm/test/MC/X86/apx/lzcnt-att.s
    llvm/test/MC/X86/apx/lzcnt-intel.s
    llvm/test/MC/X86/apx/popcnt-att.s
    llvm/test/MC/X86/apx/popcnt-intel.s
    llvm/test/MC/X86/apx/tzcnt-att.s
    llvm/test/MC/X86/apx/tzcnt-intel.s

Modified: 
    llvm/lib/Target/X86/X86InstrMisc.td
    llvm/lib/Target/X86/X86InstrSSE.td
    llvm/test/TableGen/x86-fold-tables.inc

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86InstrMisc.td b/llvm/lib/Target/X86/X86InstrMisc.td
index bd178f3a27fe7..a39b805927137 100644
--- a/llvm/lib/Target/X86/X86InstrMisc.td
+++ b/llvm/lib/Target/X86/X86InstrMisc.td
@@ -1159,67 +1159,51 @@ let Predicates = [HasRDSEED], Defs = [EFLAGS], SchedRW = [WriteSystem] in {
 //===----------------------------------------------------------------------===//
 // LZCNT Instruction
 //
+multiclass Lzcnt<bits<8> o, string m, SDPatternOperator node, X86TypeInfo t,
+                 SchedWrite schedrr, SchedWrite schedrm, string suffix = ""> {
+  def rr#suffix : ITy<o, MRMSrcReg, t, (outs t.RegClass:$dst),
+                      (ins t.RegClass:$src1), m, unaryop_ndd_args,
+                      [(set t.RegClass:$dst, (node t.RegClass:$src1)),
+                                              (implicit EFLAGS)]>,
+                  TB, Sched<[schedrr]>;
+  def rm#suffix : ITy<o, MRMSrcMem, t, (outs t.RegClass:$dst),
+                      (ins t.MemOperand:$src1), m, unaryop_ndd_args,
+                      [(set t.RegClass:$dst, (node (t.LoadNode addr:$src1))),
+                                              (implicit EFLAGS)]>,
+                  TB, Sched<[schedrm]>;
+}
+
 let Predicates = [HasLZCNT], Defs = [EFLAGS] in {
-  def LZCNT16rr : I<0xBD, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
-                    "lzcnt{w}\t{$src, $dst|$dst, $src}",
-                    [(set GR16:$dst, (ctlz GR16:$src)), (implicit EFLAGS)]>,
-                    TB, XS, OpSize16, Sched<[WriteLZCNT]>;
-  def LZCNT16rm : I<0xBD, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
-                    "lzcnt{w}\t{$src, $dst|$dst, $src}",
-                    [(set GR16:$dst, (ctlz (loadi16 addr:$src))),
-                     (implicit EFLAGS)]>, TB, XS, OpSize16, Sched<[WriteLZCNTLd]>;
-
-  def LZCNT32rr : I<0xBD, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
-                    "lzcnt{l}\t{$src, $dst|$dst, $src}",
-                    [(set GR32:$dst, (ctlz GR32:$src)), (implicit EFLAGS)]>,
-                    TB, XS, OpSize32, Sched<[WriteLZCNT]>;
-  def LZCNT32rm : I<0xBD, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
-                    "lzcnt{l}\t{$src, $dst|$dst, $src}",
-                    [(set GR32:$dst, (ctlz (loadi32 addr:$src))),
-                     (implicit EFLAGS)]>, TB, XS, OpSize32, Sched<[WriteLZCNTLd]>;
-
-  def LZCNT64rr : RI<0xBD, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
-                     "lzcnt{q}\t{$src, $dst|$dst, $src}",
-                     [(set GR64:$dst, (ctlz GR64:$src)), (implicit EFLAGS)]>,
-                     TB, XS, Sched<[WriteLZCNT]>;
-  def LZCNT64rm : RI<0xBD, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
-                     "lzcnt{q}\t{$src, $dst|$dst, $src}",
-                     [(set GR64:$dst, (ctlz (loadi64 addr:$src))),
-                      (implicit EFLAGS)]>, TB, XS, Sched<[WriteLZCNTLd]>;
+  defm LZCNT16 : Lzcnt<0xBD, "lzcnt", ctlz, Xi16, WriteLZCNT, WriteLZCNTLd>, OpSize16, XS;
+  defm LZCNT32 : Lzcnt<0xBD, "lzcnt", ctlz, Xi32, WriteLZCNT, WriteLZCNTLd>, OpSize32, XS;
+  defm LZCNT64 : Lzcnt<0xBD, "lzcnt", ctlz, Xi64, WriteLZCNT, WriteLZCNTLd>, XS;
+
+  defm LZCNT16 : Lzcnt<0xF5, "lzcnt", null_frag, Xi16, WriteLZCNT, WriteLZCNTLd, "_EVEX">, PL, PD;
+  defm LZCNT32 : Lzcnt<0xF5, "lzcnt", null_frag, Xi32, WriteLZCNT, WriteLZCNTLd, "_EVEX">, PL;
+  defm LZCNT64 : Lzcnt<0xF5, "lzcnt", null_frag, Xi64, WriteLZCNT, WriteLZCNTLd, "_EVEX">, PL;
 }
 
+defm LZCNT16 : Lzcnt<0xF5, "lzcnt", null_frag, Xi16, WriteLZCNT, WriteLZCNTLd, "_NF">, NF, PD;
+defm LZCNT32 : Lzcnt<0xF5, "lzcnt", null_frag, Xi32, WriteLZCNT, WriteLZCNTLd, "_NF">, NF;
+defm LZCNT64 : Lzcnt<0xF5, "lzcnt", null_frag, Xi64, WriteLZCNT, WriteLZCNTLd, "_NF">, NF;
+
 //===----------------------------------------------------------------------===//
 // BMI Instructions
 //
 let Predicates = [HasBMI], Defs = [EFLAGS] in {
-  def TZCNT16rr : I<0xBC, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
-                    "tzcnt{w}\t{$src, $dst|$dst, $src}",
-                    [(set GR16:$dst, (cttz GR16:$src)), (implicit EFLAGS)]>,
-                    TB, XS, OpSize16, Sched<[WriteTZCNT]>;
-  def TZCNT16rm : I<0xBC, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
-                    "tzcnt{w}\t{$src, $dst|$dst, $src}",
-                    [(set GR16:$dst, (cttz (loadi16 addr:$src))),
-                     (implicit EFLAGS)]>, TB, XS, OpSize16, Sched<[WriteTZCNTLd]>;
-
-  def TZCNT32rr : I<0xBC, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
-                    "tzcnt{l}\t{$src, $dst|$dst, $src}",
-                    [(set GR32:$dst, (cttz GR32:$src)), (implicit EFLAGS)]>,
-                    TB, XS, OpSize32, Sched<[WriteTZCNT]>;
-  def TZCNT32rm : I<0xBC, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
-                    "tzcnt{l}\t{$src, $dst|$dst, $src}",
-                    [(set GR32:$dst, (cttz (loadi32 addr:$src))),
-                     (implicit EFLAGS)]>, TB, XS, OpSize32, Sched<[WriteTZCNTLd]>;
-
-  def TZCNT64rr : RI<0xBC, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
-                     "tzcnt{q}\t{$src, $dst|$dst, $src}",
-                     [(set GR64:$dst, (cttz GR64:$src)), (implicit EFLAGS)]>,
-                     TB, XS, Sched<[WriteTZCNT]>;
-  def TZCNT64rm : RI<0xBC, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
-                     "tzcnt{q}\t{$src, $dst|$dst, $src}",
-                     [(set GR64:$dst, (cttz (loadi64 addr:$src))),
-                      (implicit EFLAGS)]>, TB, XS, Sched<[WriteTZCNTLd]>;
+  defm TZCNT16 : Lzcnt<0xBC, "tzcnt", cttz, Xi16, WriteTZCNT, WriteTZCNTLd>, OpSize16, XS;
+  defm TZCNT32 : Lzcnt<0xBC, "tzcnt", cttz, Xi32, WriteTZCNT, WriteTZCNTLd>, OpSize32, XS;
+  defm TZCNT64 : Lzcnt<0xBC, "tzcnt", cttz, Xi64, WriteTZCNT, WriteTZCNTLd>, XS;
+
+  defm TZCNT16 : Lzcnt<0xF4, "tzcnt", null_frag, Xi16, WriteTZCNT, WriteTZCNTLd, "_EVEX">, PL, PD;
+  defm TZCNT32 : Lzcnt<0xF4, "tzcnt", null_frag, Xi32, WriteTZCNT, WriteTZCNTLd, "_EVEX">, PL;
+  defm TZCNT64 : Lzcnt<0xF4, "tzcnt", null_frag, Xi64, WriteTZCNT, WriteTZCNTLd, "_EVEX">, PL;
 }
 
+defm TZCNT16 : Lzcnt<0xF4, "tzcnt", null_frag, Xi16, WriteTZCNT, WriteTZCNTLd, "_NF">, NF, PD;
+defm TZCNT32 : Lzcnt<0xF4, "tzcnt", null_frag, Xi32, WriteTZCNT, WriteTZCNTLd, "_NF">, NF;
+defm TZCNT64 : Lzcnt<0xF4, "tzcnt", null_frag, Xi64, WriteTZCNT, WriteTZCNTLd, "_NF">, NF;
+
 multiclass Bls<string m, Format RegMRM, Format MemMRM, X86TypeInfo t, string Suffix = ""> {
   let SchedRW = [WriteBLS] in {
     def rr#Suffix : UnaryOpR<0xF3, RegMRM, m, unaryop_ndd_args, t,

diff  --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td
index 16ae69a518d9e..459b5b03507c7 100644
--- a/llvm/lib/Target/X86/X86InstrSSE.td
+++ b/llvm/lib/Target/X86/X86InstrSSE.td
@@ -5757,38 +5757,19 @@ defm VTESTPDY : avx_bittest<0x0F, "vtestpd", VR256, f256mem, loadv4f64, v4f64,
 //===----------------------------------------------------------------------===//
 
 let Defs = [EFLAGS], Predicates = [HasPOPCNT] in {
-  def POPCNT16rr : I<0xB8, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
-                     "popcnt{w}\t{$src, $dst|$dst, $src}",
-                     [(set GR16:$dst, (ctpop GR16:$src)), (implicit EFLAGS)]>,
-                     Sched<[WritePOPCNT]>, OpSize16, TB, XS;
-  def POPCNT16rm : I<0xB8, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
-                     "popcnt{w}\t{$src, $dst|$dst, $src}",
-                     [(set GR16:$dst, (ctpop (loadi16 addr:$src))),
-                      (implicit EFLAGS)]>,
-                      Sched<[WritePOPCNT.Folded]>, OpSize16, TB, XS;
-
-  def POPCNT32rr : I<0xB8, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
-                     "popcnt{l}\t{$src, $dst|$dst, $src}",
-                     [(set GR32:$dst, (ctpop GR32:$src)), (implicit EFLAGS)]>,
-                     Sched<[WritePOPCNT]>, OpSize32, TB, XS;
-
-  def POPCNT32rm : I<0xB8, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
-                     "popcnt{l}\t{$src, $dst|$dst, $src}",
-                     [(set GR32:$dst, (ctpop (loadi32 addr:$src))),
-                      (implicit EFLAGS)]>,
-                      Sched<[WritePOPCNT.Folded]>, OpSize32, TB, XS;
-
-  def POPCNT64rr : RI<0xB8, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
-                      "popcnt{q}\t{$src, $dst|$dst, $src}",
-                      [(set GR64:$dst, (ctpop GR64:$src)), (implicit EFLAGS)]>,
-                      Sched<[WritePOPCNT]>, TB, XS;
-  def POPCNT64rm : RI<0xB8, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
-                      "popcnt{q}\t{$src, $dst|$dst, $src}",
-                      [(set GR64:$dst, (ctpop (loadi64 addr:$src))),
-                       (implicit EFLAGS)]>,
-                       Sched<[WritePOPCNT.Folded]>, TB, XS;
+  defm POPCNT16 : Lzcnt<0xB8, "popcnt", ctpop, Xi16, WritePOPCNT, WritePOPCNT.Folded>, OpSize16, XS;
+  defm POPCNT32 : Lzcnt<0xB8, "popcnt", ctpop, Xi32, WritePOPCNT, WritePOPCNT.Folded>, OpSize32, XS;
+  defm POPCNT64 : Lzcnt<0xB8, "popcnt", ctpop, Xi64, WritePOPCNT, WritePOPCNT.Folded>, XS;
+
+  defm POPCNT16 : Lzcnt<0x88, "popcnt", null_frag, Xi16, WritePOPCNT, WritePOPCNT.Folded, "_EVEX">, PL, PD;
+  defm POPCNT32 : Lzcnt<0x88, "popcnt", null_frag, Xi32, WritePOPCNT, WritePOPCNT.Folded, "_EVEX">, PL;
+  defm POPCNT64 : Lzcnt<0x88, "popcnt", null_frag, Xi64, WritePOPCNT, WritePOPCNT.Folded, "_EVEX">, PL;
 }
 
+defm POPCNT16 : Lzcnt<0x88, "popcnt", null_frag, Xi16, WritePOPCNT, WritePOPCNT.Folded, "_NF">, NF, PD;
+defm POPCNT32 : Lzcnt<0x88, "popcnt", null_frag, Xi32, WritePOPCNT, WritePOPCNT.Folded, "_NF">, NF;
+defm POPCNT64 : Lzcnt<0x88, "popcnt", null_frag, Xi64, WritePOPCNT, WritePOPCNT.Folded, "_NF">, NF;
+
 // SS41I_unop_rm_int_v16 - SSE 4.1 unary operator whose type is v8i16.
 multiclass SS41I_unop_rm_int_v16<bits<8> opc, string OpcodeStr,
                                  SDNode OpNode, PatFrag ld_frag,

diff  --git a/llvm/test/MC/Disassembler/X86/apx/lzcnt.txt b/llvm/test/MC/Disassembler/X86/apx/lzcnt.txt
new file mode 100644
index 0000000000000..6e41cf4c2b04f
--- /dev/null
+++ b/llvm/test/MC/Disassembler/X86/apx/lzcnt.txt
@@ -0,0 +1,50 @@
+# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT
+# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL
+
+# ATT:   {evex}	lzcntw	%dx, %ax
+# INTEL: {evex}	lzcnt	ax, dx
+0x62,0xf4,0x7d,0x08,0xf5,0xc2
+
+# ATT:   {nf}	lzcntw	%dx, %ax
+# INTEL: {nf}	lzcnt	ax, dx
+0x62,0xf4,0x7d,0x0c,0xf5,0xc2
+
+# ATT:   {evex}	lzcntl	%ecx, %edx
+# INTEL: {evex}	lzcnt	edx, ecx
+0x62,0xf4,0x7c,0x08,0xf5,0xd1
+
+# ATT:   {nf}	lzcntl	%ecx, %edx
+# INTEL: {nf}	lzcnt	edx, ecx
+0x62,0xf4,0x7c,0x0c,0xf5,0xd1
+
+# ATT:   {evex}	lzcntq	%r9, %r15
+# INTEL: {evex}	lzcnt	r15, r9
+0x62,0x54,0xfc,0x08,0xf5,0xf9
+
+# ATT:   {nf}	lzcntq	%r9, %r15
+# INTEL: {nf}	lzcnt	r15, r9
+0x62,0x54,0xfc,0x0c,0xf5,0xf9
+
+# ATT:   {evex}	lzcntw	123(%r8,%rax,4), %dx
+# INTEL: {evex}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x08,0xf5,0x54,0x80,0x7b
+
+# ATT:   {nf}	lzcntw	123(%r8,%rax,4), %dx
+# INTEL: {nf}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x0c,0xf5,0x54,0x80,0x7b
+
+# ATT:   {evex}	lzcntl	123(%r8,%rax,4), %ecx
+# INTEL: {evex}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x08,0xf5,0x4c,0x80,0x7b
+
+# ATT:   {nf}	lzcntl	123(%r8,%rax,4), %ecx
+# INTEL: {nf}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x0c,0xf5,0x4c,0x80,0x7b
+
+# ATT:   {evex}	lzcntq	123(%r8,%rax,4), %r9
+# INTEL: {evex}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x08,0xf5,0x4c,0x80,0x7b
+
+# ATT:   {nf}	lzcntq	123(%r8,%rax,4), %r9
+# INTEL: {nf}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x0c,0xf5,0x4c,0x80,0x7b

diff  --git a/llvm/test/MC/Disassembler/X86/apx/popcnt.txt b/llvm/test/MC/Disassembler/X86/apx/popcnt.txt
new file mode 100644
index 0000000000000..d6ceef62f286f
--- /dev/null
+++ b/llvm/test/MC/Disassembler/X86/apx/popcnt.txt
@@ -0,0 +1,50 @@
+# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT
+# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL
+
+# ATT:   {evex}	popcntw	%dx, %ax
+# INTEL: {evex}	popcnt	ax, dx
+0x62,0xf4,0x7d,0x08,0x88,0xc2
+
+# ATT:   {nf}	popcntw	%dx, %ax
+# INTEL: {nf}	popcnt	ax, dx
+0x62,0xf4,0x7d,0x0c,0x88,0xc2
+
+# ATT:   {evex}	popcntl	%ecx, %edx
+# INTEL: {evex}	popcnt	edx, ecx
+0x62,0xf4,0x7c,0x08,0x88,0xd1
+
+# ATT:   {nf}	popcntl	%ecx, %edx
+# INTEL: {nf}	popcnt	edx, ecx
+0x62,0xf4,0x7c,0x0c,0x88,0xd1
+
+# ATT:   {evex}	popcntq	%r9, %r15
+# INTEL: {evex}	popcnt	r15, r9
+0x62,0x54,0xfc,0x08,0x88,0xf9
+
+# ATT:   {nf}	popcntq	%r9, %r15
+# INTEL: {nf}	popcnt	r15, r9
+0x62,0x54,0xfc,0x0c,0x88,0xf9
+
+# ATT:   {evex}	popcntw	123(%r8,%rax,4), %dx
+# INTEL: {evex}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x08,0x88,0x54,0x80,0x7b
+
+# ATT:   {nf}	popcntw	123(%r8,%rax,4), %dx
+# INTEL: {nf}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x0c,0x88,0x54,0x80,0x7b
+
+# ATT:   {evex}	popcntl	123(%r8,%rax,4), %ecx
+# INTEL: {evex}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x08,0x88,0x4c,0x80,0x7b
+
+# ATT:   {nf}	popcntl	123(%r8,%rax,4), %ecx
+# INTEL: {nf}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x0c,0x88,0x4c,0x80,0x7b
+
+# ATT:   {evex}	popcntq	123(%r8,%rax,4), %r9
+# INTEL: {evex}	popcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x08,0x88,0x4c,0x80,0x7b
+
+# ATT:   {nf}	popcntq	123(%r8,%rax,4), %r9
+# INTEL: {nf}	popcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x0c,0x88,0x4c,0x80,0x7b

diff  --git a/llvm/test/MC/Disassembler/X86/apx/tzcnt.txt b/llvm/test/MC/Disassembler/X86/apx/tzcnt.txt
new file mode 100644
index 0000000000000..8c404f2e176fd
--- /dev/null
+++ b/llvm/test/MC/Disassembler/X86/apx/tzcnt.txt
@@ -0,0 +1,50 @@
+# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT
+# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL
+
+# ATT:   {evex}	tzcntw	%dx, %ax
+# INTEL: {evex}	tzcnt	ax, dx
+0x62,0xf4,0x7d,0x08,0xf4,0xc2
+
+# ATT:   {nf}	tzcntw	%dx, %ax
+# INTEL: {nf}	tzcnt	ax, dx
+0x62,0xf4,0x7d,0x0c,0xf4,0xc2
+
+# ATT:   {evex}	tzcntl	%ecx, %edx
+# INTEL: {evex}	tzcnt	edx, ecx
+0x62,0xf4,0x7c,0x08,0xf4,0xd1
+
+# ATT:   {nf}	tzcntl	%ecx, %edx
+# INTEL: {nf}	tzcnt	edx, ecx
+0x62,0xf4,0x7c,0x0c,0xf4,0xd1
+
+# ATT:   {evex}	tzcntq	%r9, %r15
+# INTEL: {evex}	tzcnt	r15, r9
+0x62,0x54,0xfc,0x08,0xf4,0xf9
+
+# ATT:   {nf}	tzcntq	%r9, %r15
+# INTEL: {nf}	tzcnt	r15, r9
+0x62,0x54,0xfc,0x0c,0xf4,0xf9
+
+# ATT:   {evex}	tzcntw	123(%r8,%rax,4), %dx
+# INTEL: {evex}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x08,0xf4,0x54,0x80,0x7b
+
+# ATT:   {nf}	tzcntw	123(%r8,%rax,4), %dx
+# INTEL: {nf}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7d,0x0c,0xf4,0x54,0x80,0x7b
+
+# ATT:   {evex}	tzcntl	123(%r8,%rax,4), %ecx
+# INTEL: {evex}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x08,0xf4,0x4c,0x80,0x7b
+
+# ATT:   {nf}	tzcntl	123(%r8,%rax,4), %ecx
+# INTEL: {nf}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x7c,0x0c,0xf4,0x4c,0x80,0x7b
+
+# ATT:   {evex}	tzcntq	123(%r8,%rax,4), %r9
+# INTEL: {evex}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x08,0xf4,0x4c,0x80,0x7b
+
+# ATT:   {nf}	tzcntq	123(%r8,%rax,4), %r9
+# INTEL: {nf}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xfc,0x0c,0xf4,0x4c,0x80,0x7b

diff  --git a/llvm/test/MC/X86/apx/lzcnt-att.s b/llvm/test/MC/X86/apx/lzcnt-att.s
new file mode 100644
index 0000000000000..ba5c4b56cd031
--- /dev/null
+++ b/llvm/test/MC/X86/apx/lzcnt-att.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s
+
+# CHECK: {evex}	lzcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf5,0xc2]
+         {evex}	lzcntw	%dx, %ax
+# CHECK: {nf}	lzcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf5,0xc2]
+         {nf}	lzcntw	%dx, %ax
+# CHECK: {evex}	lzcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf5,0xd1]
+         {evex}	lzcntl	%ecx, %edx
+# CHECK: {nf}	lzcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf5,0xd1]
+         {nf}	lzcntl	%ecx, %edx
+# CHECK: {evex}	lzcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf5,0xf9]
+         {evex}	lzcntq	%r9, %r15
+# CHECK: {nf}	lzcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf5,0xf9]
+         {nf}	lzcntq	%r9, %r15
+# CHECK: {evex}	lzcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf5,0x54,0x80,0x7b]
+         {evex}	lzcntw	123(%r8,%rax,4), %dx
+# CHECK: {nf}	lzcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf5,0x54,0x80,0x7b]
+         {nf}	lzcntw	123(%r8,%rax,4), %dx
+# CHECK: {evex}	lzcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf5,0x4c,0x80,0x7b]
+         {evex}	lzcntl	123(%r8,%rax,4), %ecx
+# CHECK: {nf}	lzcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf5,0x4c,0x80,0x7b]
+         {nf}	lzcntl	123(%r8,%rax,4), %ecx
+# CHECK: {evex}	lzcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf5,0x4c,0x80,0x7b]
+         {evex}	lzcntq	123(%r8,%rax,4), %r9
+# CHECK: {nf}	lzcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf5,0x4c,0x80,0x7b]
+         {nf}	lzcntq	123(%r8,%rax,4), %r9

diff  --git a/llvm/test/MC/X86/apx/lzcnt-intel.s b/llvm/test/MC/X86/apx/lzcnt-intel.s
new file mode 100644
index 0000000000000..c3301be6bc275
--- /dev/null
+++ b/llvm/test/MC/X86/apx/lzcnt-intel.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s
+
+# CHECK: {evex}	lzcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf5,0xc2]
+         {evex}	lzcnt	ax, dx
+# CHECK: {nf}	lzcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf5,0xc2]
+         {nf}	lzcnt	ax, dx
+# CHECK: {evex}	lzcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf5,0xd1]
+         {evex}	lzcnt	edx, ecx
+# CHECK: {nf}	lzcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf5,0xd1]
+         {nf}	lzcnt	edx, ecx
+# CHECK: {evex}	lzcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf5,0xf9]
+         {evex}	lzcnt	r15, r9
+# CHECK: {nf}	lzcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf5,0xf9]
+         {nf}	lzcnt	r15, r9
+# CHECK: {evex}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf5,0x54,0x80,0x7b]
+         {evex}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf5,0x54,0x80,0x7b]
+         {nf}	lzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf5,0x4c,0x80,0x7b]
+         {evex}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf5,0x4c,0x80,0x7b]
+         {nf}	lzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf5,0x4c,0x80,0x7b]
+         {evex}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf5,0x4c,0x80,0x7b]
+         {nf}	lzcnt	r9, qword ptr [r8 + 4*rax + 123]

diff  --git a/llvm/test/MC/X86/apx/popcnt-att.s b/llvm/test/MC/X86/apx/popcnt-att.s
new file mode 100644
index 0000000000000..a25c27cc3a1b2
--- /dev/null
+++ b/llvm/test/MC/X86/apx/popcnt-att.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s
+
+# CHECK: {evex}	popcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x88,0xc2]
+         {evex}	popcntw	%dx, %ax
+# CHECK: {nf}	popcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x88,0xc2]
+         {nf}	popcntw	%dx, %ax
+# CHECK: {evex}	popcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x88,0xd1]
+         {evex}	popcntl	%ecx, %edx
+# CHECK: {nf}	popcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x88,0xd1]
+         {nf}	popcntl	%ecx, %edx
+# CHECK: {evex}	popcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x88,0xf9]
+         {evex}	popcntq	%r9, %r15
+# CHECK: {nf}	popcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x88,0xf9]
+         {nf}	popcntq	%r9, %r15
+# CHECK: {evex}	popcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x88,0x54,0x80,0x7b]
+         {evex}	popcntw	123(%r8,%rax,4), %dx
+# CHECK: {nf}	popcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x88,0x54,0x80,0x7b]
+         {nf}	popcntw	123(%r8,%rax,4), %dx
+# CHECK: {evex}	popcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x88,0x4c,0x80,0x7b]
+         {evex}	popcntl	123(%r8,%rax,4), %ecx
+# CHECK: {nf}	popcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x88,0x4c,0x80,0x7b]
+         {nf}	popcntl	123(%r8,%rax,4), %ecx
+# CHECK: {evex}	popcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x88,0x4c,0x80,0x7b]
+         {evex}	popcntq	123(%r8,%rax,4), %r9
+# CHECK: {nf}	popcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x88,0x4c,0x80,0x7b]
+         {nf}	popcntq	123(%r8,%rax,4), %r9

diff  --git a/llvm/test/MC/X86/apx/popcnt-intel.s b/llvm/test/MC/X86/apx/popcnt-intel.s
new file mode 100644
index 0000000000000..12c514de39fb5
--- /dev/null
+++ b/llvm/test/MC/X86/apx/popcnt-intel.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s
+
+# CHECK: {evex}	popcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x88,0xc2]
+         {evex}	popcnt	ax, dx
+# CHECK: {nf}	popcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x88,0xc2]
+         {nf}	popcnt	ax, dx
+# CHECK: {evex}	popcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x88,0xd1]
+         {evex}	popcnt	edx, ecx
+# CHECK: {nf}	popcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x88,0xd1]
+         {nf}	popcnt	edx, ecx
+# CHECK: {evex}	popcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x88,0xf9]
+         {evex}	popcnt	r15, r9
+# CHECK: {nf}	popcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x88,0xf9]
+         {nf}	popcnt	r15, r9
+# CHECK: {evex}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x88,0x54,0x80,0x7b]
+         {evex}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x88,0x54,0x80,0x7b]
+         {nf}	popcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x88,0x4c,0x80,0x7b]
+         {evex}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x88,0x4c,0x80,0x7b]
+         {nf}	popcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	popcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x88,0x4c,0x80,0x7b]
+         {evex}	popcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	popcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x88,0x4c,0x80,0x7b]
+         {nf}	popcnt	r9, qword ptr [r8 + 4*rax + 123]

diff  --git a/llvm/test/MC/X86/apx/tzcnt-att.s b/llvm/test/MC/X86/apx/tzcnt-att.s
new file mode 100644
index 0000000000000..e2d7494863cab
--- /dev/null
+++ b/llvm/test/MC/X86/apx/tzcnt-att.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s
+
+# CHECK: {evex}	tzcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf4,0xc2]
+         {evex}	tzcntw	%dx, %ax
+# CHECK: {nf}	tzcntw	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf4,0xc2]
+         {nf}	tzcntw	%dx, %ax
+# CHECK: {evex}	tzcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf4,0xd1]
+         {evex}	tzcntl	%ecx, %edx
+# CHECK: {nf}	tzcntl	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf4,0xd1]
+         {nf}	tzcntl	%ecx, %edx
+# CHECK: {evex}	tzcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf4,0xf9]
+         {evex}	tzcntq	%r9, %r15
+# CHECK: {nf}	tzcntq	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf4,0xf9]
+         {nf}	tzcntq	%r9, %r15
+# CHECK: {evex}	tzcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf4,0x54,0x80,0x7b]
+         {evex}	tzcntw	123(%r8,%rax,4), %dx
+# CHECK: {nf}	tzcntw	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf4,0x54,0x80,0x7b]
+         {nf}	tzcntw	123(%r8,%rax,4), %dx
+# CHECK: {evex}	tzcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf4,0x4c,0x80,0x7b]
+         {evex}	tzcntl	123(%r8,%rax,4), %ecx
+# CHECK: {nf}	tzcntl	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf4,0x4c,0x80,0x7b]
+         {nf}	tzcntl	123(%r8,%rax,4), %ecx
+# CHECK: {evex}	tzcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf4,0x4c,0x80,0x7b]
+         {evex}	tzcntq	123(%r8,%rax,4), %r9
+# CHECK: {nf}	tzcntq	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf4,0x4c,0x80,0x7b]
+         {nf}	tzcntq	123(%r8,%rax,4), %r9

diff  --git a/llvm/test/MC/X86/apx/tzcnt-intel.s b/llvm/test/MC/X86/apx/tzcnt-intel.s
new file mode 100644
index 0000000000000..694424c2863f5
--- /dev/null
+++ b/llvm/test/MC/X86/apx/tzcnt-intel.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s
+
+# CHECK: {evex}	tzcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf4,0xc2]
+         {evex}	tzcnt	ax, dx
+# CHECK: {nf}	tzcnt	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf4,0xc2]
+         {nf}	tzcnt	ax, dx
+# CHECK: {evex}	tzcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf4,0xd1]
+         {evex}	tzcnt	edx, ecx
+# CHECK: {nf}	tzcnt	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf4,0xd1]
+         {nf}	tzcnt	edx, ecx
+# CHECK: {evex}	tzcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf4,0xf9]
+         {evex}	tzcnt	r15, r9
+# CHECK: {nf}	tzcnt	r15, r9
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf4,0xf9]
+         {nf}	tzcnt	r15, r9
+# CHECK: {evex}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf4,0x54,0x80,0x7b]
+         {evex}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf4,0x54,0x80,0x7b]
+         {nf}	tzcnt	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf4,0x4c,0x80,0x7b]
+         {evex}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf4,0x4c,0x80,0x7b]
+         {nf}	tzcnt	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: {evex}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x08,0xf4,0x4c,0x80,0x7b]
+         {evex}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: {nf}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0xf4,0x4c,0x80,0x7b]
+         {nf}	tzcnt	r9, qword ptr [r8 + 4*rax + 123]

diff  --git a/llvm/test/TableGen/x86-fold-tables.inc b/llvm/test/TableGen/x86-fold-tables.inc
index aa412fafb22ec..abeef29c80edf 100644
--- a/llvm/test/TableGen/x86-fold-tables.inc
+++ b/llvm/test/TableGen/x86-fold-tables.inc
@@ -754,8 +754,11 @@ static const X86FoldTableEntry Table1[] = {
   {X86::LWPVAL32rri, X86::LWPVAL32rmi, 0},
   {X86::LWPVAL64rri, X86::LWPVAL64rmi, 0},
   {X86::LZCNT16rr, X86::LZCNT16rm, 0},
+  {X86::LZCNT16rr_NF, X86::LZCNT16rm_NF, 0},
   {X86::LZCNT32rr, X86::LZCNT32rm, 0},
+  {X86::LZCNT32rr_NF, X86::LZCNT32rm_NF, 0},
   {X86::LZCNT64rr, X86::LZCNT64rm, 0},
+  {X86::LZCNT64rr_NF, X86::LZCNT64rm_NF, 0},
   {X86::MMX_CVTPD2PIrr, X86::MMX_CVTPD2PIrm, TB_ALIGN_16},
   {X86::MMX_CVTPI2PDrr, X86::MMX_CVTPI2PDrm, 0},
   {X86::MMX_CVTPS2PIrr, X86::MMX_CVTPS2PIrm, TB_NO_REVERSE},
@@ -864,8 +867,11 @@ static const X86FoldTableEntry Table1[] = {
   {X86::PMOVZXWDrr, X86::PMOVZXWDrm, TB_NO_REVERSE},
   {X86::PMOVZXWQrr, X86::PMOVZXWQrm, TB_NO_REVERSE},
   {X86::POPCNT16rr, X86::POPCNT16rm, 0},
+  {X86::POPCNT16rr_NF, X86::POPCNT16rm_NF, 0},
   {X86::POPCNT32rr, X86::POPCNT32rm, 0},
+  {X86::POPCNT32rr_NF, X86::POPCNT32rm_NF, 0},
   {X86::POPCNT64rr, X86::POPCNT64rm, 0},
+  {X86::POPCNT64rr_NF, X86::POPCNT64rm_NF, 0},
   {X86::PSHUFDri, X86::PSHUFDmi, TB_ALIGN_16},
   {X86::PSHUFHWri, X86::PSHUFHWmi, TB_ALIGN_16},
   {X86::PSHUFLWri, X86::PSHUFLWmi, TB_ALIGN_16},
@@ -1103,8 +1109,11 @@ static const X86FoldTableEntry Table1[] = {
   {X86::T1MSKC32rr, X86::T1MSKC32rm, 0},
   {X86::T1MSKC64rr, X86::T1MSKC64rm, 0},
   {X86::TZCNT16rr, X86::TZCNT16rm, 0},
+  {X86::TZCNT16rr_NF, X86::TZCNT16rm_NF, 0},
   {X86::TZCNT32rr, X86::TZCNT32rm, 0},
+  {X86::TZCNT32rr_NF, X86::TZCNT32rm_NF, 0},
   {X86::TZCNT64rr, X86::TZCNT64rm, 0},
+  {X86::TZCNT64rr_NF, X86::TZCNT64rm_NF, 0},
   {X86::TZMSK32rr, X86::TZMSK32rm, 0},
   {X86::TZMSK64rr, X86::TZMSK64rm, 0},
   {X86::UCOMISDrr, X86::UCOMISDrm, 0},


        


More information about the llvm-commits mailing list