<div dir="ltr">Sorry I'm a bit late to this. Is there a way we can inherit features from one project to the next without creating wrapper SubtargetFeatures? Can we just pass like an inherited list and new feature list and !listconcat them when creating each processor? I don't like the idea of these wrapper processor feature sets. I don't like the SLM and Atom ones we already had. It always felt like the checks that were based on Atom/SLM should be based on -mcpu or -march and not a "feature". I don't think its a good idea to encourage more of this.<div><br></div><div>PowerPC does something like this</div><div><br></div><div><div>def ProcessorFeatures {</div><div>  list<SubtargetFeature> Power7FeatureList =</div><div>  Â  Â  [DirectivePwr7, FeatureAltivec, FeatureVSX,</div><div>  Â  Â  Â FeatureMFOCRF, FeatureFCPSGN, FeatureFSqrt, FeatureFRE,</div><div>  Â  Â  Â FeatureFRES, FeatureFRSQRTE, FeatureFRSQRTES,</div><div>  Â  Â  Â FeatureRecipPrec, FeatureSTFIWX, FeatureLFIWAX,</div><div>  Â  Â  Â FeatureFPRND, FeatureFPCVT, FeatureISEL,</div><div>  Â  Â  Â FeaturePOPCNTD, FeatureCMPB, FeatureLDBRX,</div><div>  Â  Â  Â Feature64Bit /*, Feature64BitRegs */,</div><div>  Â  Â  Â FeatureBPERMD, FeatureExtDiv,</div><div>  Â  Â  Â FeatureMFTB, DeprecatedDST];</div><div>  list<SubtargetFeature> Power8SpecificFeatures =</div><div>  Â  Â  [DirectivePwr8, FeatureP8Altivec, FeatureP8Vector, FeatureP8Crypto,</div><div>  Â  Â  Â FeatureHTM, FeatureDirectMove, FeatureICBT, FeaturePartwordAtomic,</div><div>  Â  Â  Â FeatureFusion];</div><div>  list<SubtargetFeature> Power8FeatureList =</div><div>  Â  Â  !listconcat(Power7FeatureList, Power8SpecificFeatures);</div><div>}</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 24, 2016 at 2:41 AM, Elena Demikhovsky via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: delena<br>
Date: Sun Jan 24 04:41:28 2016<br>
New Revision: 258659<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=258659&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=258659&view=rev</a><br>
Log:<br>
Added Skylake client to X86 targets and features<br>
<br>
Changes in X86.td:<br>
<br>
I set features of Intel processors in incremental form: IVB = SNB + X HSW = IVB + X ..<br>
I added Skylake client processor and defined it's features<br>
FeatureADX was missing on KNL<br>
Added some new features to appropriate processors SMAP, IFMA, PREFETCHWT1, VMFUNC and others<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D16357" rel="noreferrer" target="_blank">http://reviews.llvm.org/D16357</a><br>
<br>
<br>
Modified:<br>
  Â  llvm/trunk/lib/Support/Host.cpp<br>
  Â  llvm/trunk/lib/Target/X86/X86.td<br>
  Â  llvm/trunk/lib/Target/X86/X86InstrInfo.td<br>
  Â  llvm/trunk/lib/Target/X86/X86Subtarget.cpp<br>
  Â  llvm/trunk/lib/Target/X86/X86Subtarget.h<br>
  Â  llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll<br>
<br>
Modified: llvm/trunk/lib/Support/Host.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Support/Host.cpp (original)<br>
+++ llvm/trunk/lib/Support/Host.cpp Sun Jan 24 04:41:28 2016<br>
@@ -805,25 +805,34 @@ bool sys::getHostCPUFeatures(StringMap<b<br>
  Â Features["avx2"]  Â  Â = HasAVXSave && HasLeaf7 && ((EBX >>  5) & 1);<br>
<br>
  Â Features["fsgsbase"] = HasLeaf7 && ((EBX >>  0) & 1);<br>
+  Features["sgx"]  Â  Â  = HasLeaf7 && ((EBX >>  2) & 1);<br>
  Â Features["bmi"]  Â  Â  = HasLeaf7 && ((EBX >>  3) & 1);<br>
  Â Features["hle"]  Â  Â  = HasLeaf7 && ((EBX >>  4) & 1);<br>
  Â Features["bmi2"]  Â  Â = HasLeaf7 && ((EBX >>  8) & 1);<br>
+  Features["invpcid"]  = HasLeaf7 && ((EBX >> 10) & 1);<br>
  Â Features["rtm"]  Â  Â  = HasLeaf7 && ((EBX >> 11) & 1);<br>
  Â Features["rdseed"]  Â = HasLeaf7 && ((EBX >> 18) & 1);<br>
  Â Features["adx"]  Â  Â  = HasLeaf7 && ((EBX >> 19) & 1);<br>
+  Features["smap"]  Â  Â = HasLeaf7 && ((EBX >> 20) & 1);<br>
+  Features["pcommit"]  = HasLeaf7 && ((EBX >> 22) & 1);<br>
+  Features["clflushopt"] = HasLeaf7 && ((EBX >> 23) & 1);<br>
+  Features["clwb"]  Â  Â = HasLeaf7 && ((EBX >> 24) & 1);<br>
  Â Features["sha"]  Â  Â  = HasLeaf7 && ((EBX >> 29) & 1);<br>
-  // Enable protection keys<br>
-  Features["pku"]  Â  = HasLeaf7 && ((ECX >> 4) & 1);<br>
<br>
  Â // AVX512 is only supported if the OS supports the context save for it.<br>
  Â Features["avx512f"]  = HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save;<br>
  Â Features["avx512dq"] = HasLeaf7 && ((EBX >> 17) & 1) && HasAVX512Save;<br>
+  Features["avx512ifma"] = HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save;<br>
  Â Features["avx512pf"] = HasLeaf7 && ((EBX >> 26) & 1) && HasAVX512Save;<br>
  Â Features["avx512er"] = HasLeaf7 && ((EBX >> 27) & 1) && HasAVX512Save;<br>
  Â Features["avx512cd"] = HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save;<br>
  Â Features["avx512bw"] = HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save;<br>
  Â Features["avx512vl"] = HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save;<br>
-  Features["avx512vbmi"] = HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save;<br>
+<br>
+  Features["prefetchwt1"] = HasLeaf7 && (ECX & 1);<br>
+  Features["avx512vbmi"]  = HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save;<br>
+  // Enable protection keys<br>
+  Features["pku"]  Â  Â  Â  Â = HasLeaf7 && ((ECX >> 4) & 1);<br>
<br>
  Â bool HasLeafD = MaxLevel >= 0xd &&<br>
  Â  Â !GetX86CpuIDAndInfoEx(0xd, 0x1, &EAX, &EBX, &ECX, &EDX);<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86.td (original)<br>
+++ llvm/trunk/lib/Target/X86/X86.td Sun Jan 24 04:41:28 2016<br>
@@ -125,6 +125,9 @@ def FeatureCDI  Â  Â  : SubtargetFeature<"<br>
 def FeaturePFI  Â  Â  : SubtargetFeature<"avx512pf", "HasPFI", "true",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Enable AVX-512 PreFetch Instructions",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [FeatureAVX512]>;<br>
+def FeaturePREFETCHWT1  : SubtargetFeature<"prefetchwt1", "HasPFPREFETCHWT1",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Prefetch with Intent to Write and T1 Hint">;<br>
 def FeatureDQI  Â  Â : SubtargetFeature<"avx512dq", "HasDQI", "true",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Enable AVX-512 Doubleword and Quadword Instructions",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [FeatureAVX512]>;<br>
@@ -137,6 +140,9 @@ def FeatureVLX  Â  Â : SubtargetFeature<"a<br>
 def FeatureVBMI  Â  Â : SubtargetFeature<"avx512vbmi", "HasVBMI", "true",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Enable AVX-512 Vector Bit Manipulation Instructions",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [FeatureAVX512]>;<br>
+def FeatureIFMA  Â  Â : SubtargetFeature<"ifma", "HasIFMA", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Enable AVX-512 Integer Fused Multiple-Add",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  [FeatureAVX512]>;<br>
 def FeaturePKU  Â : SubtargetFeature<"pku", "HasPKU", "true",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Enable protection keys">;<br>
 def FeaturePCLMUL  : SubtargetFeature<"pclmul", "HasPCLMUL", "true",<br>
@@ -202,6 +208,20 @@ def FeatureSlowDivide64 : SubtargetFeatu<br>
 def FeaturePadShortFunctions : SubtargetFeature<"pad-short-functions",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "PadShortFunctions", "true",<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Pad short functions">;<br>
+def FeatureINVPCID : SubtargetFeature<"invpcid", "HasInvPCId", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Invalidate Process-Context Identifier">;<br>
+def FeatureVMFUNC  : SubtargetFeature<"vmfunc", "HasVMFUNC", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "VM Functions">;<br>
+def FeatureSMAP  Â  : SubtargetFeature<"smap", "HasSMAP", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Supervisor Mode Access Protection">;<br>
+def FeatureSGX  Â  Â : SubtargetFeature<"sgx", "HasSGX", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Enable Software Guard Extensions">;<br>
+def FeatureCLFLUSHOPT : SubtargetFeature<"clflushopt", "HasCLFLUSHOPT", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Flush A Cache Line Optimized">;<br>
+def FeaturePCOMMIT : SubtargetFeature<"pcommit", "HasPCOMMIT", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Enable Persistent Commit">;<br>
+def FeatureCLWB  Â  : SubtargetFeature<"clwb", "HasCLWB", "true",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "Cache Line Write Back">;<br>
 // TODO: This feature ought to be renamed.<br>
 // What it really refers to are CPUs for which certain instructions<br>
 // (which ones besides the example below?) are microcoded.<br>
@@ -365,13 +385,12 @@ def : WestmereProc<"westmere">;<br>
<br>
 // SSE is not listed here since llvm treats AVX as a reimplementation of SSE,<br>
 // rather than a superset.<br>
-class SandyBridgeProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [<br>
+def ProcIntelSNB : SubtargetFeature<"snb", "X86ProcFamily", "IntelSNB",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel SandyBridge Processor", [<br>
  Â FeatureMMX,<br>
  Â FeatureAVX,<br>
  Â FeatureFXSR,<br>
  Â FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeatureSlowUAMem32,<br>
  Â FeaturePOPCNT,<br>
  Â FeatureAES,<br>
  Â FeaturePCLMUL,<br>
@@ -379,187 +398,125 @@ class SandyBridgeProc<string Name> : Pro<br>
  Â FeatureXSAVEOPT,<br>
  Â FeatureLAHFSAHF<br>
 ]>;<br>
+<br>
+class SandyBridgeProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [<br>
+  ProcIntelSNB,<br>
+  FeatureSlowBTMem,<br>
+  FeatureSlowUAMem32<br>
+]>;<br>
 def : SandyBridgeProc<"sandybridge">;<br>
 def : SandyBridgeProc<"corei7-avx">; // Legacy alias.<br>
<br>
-class IvyBridgeProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [<br>
-  FeatureMMX,<br>
-  FeatureAVX,<br>
-  FeatureFXSR,<br>
-  FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeatureSlowUAMem32,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
+def ProcIntelIVB : SubtargetFeature<"ivb", "X86ProcFamily", "IntelIVB",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel IvyBridge Processor", [<br>
+  ProcIntelSNB,<br>
  Â FeatureRDRAND,<br>
  Â FeatureF16C,<br>
-  FeatureFSGSBase,<br>
-  FeatureLAHFSAHF<br>
+  FeatureFSGSBase<br>
+]>;<br>
+<br>
+class IvyBridgeProc<string Name> : ProcessorModel<Name, SandyBridgeModel, [<br>
+  ProcIntelIVB,<br>
+  FeatureSlowBTMem,<br>
+  FeatureSlowUAMem32<br>
 ]>;<br>
 def : IvyBridgeProc<"ivybridge">;<br>
 def : IvyBridgeProc<"core-avx-i">; // Legacy alias.<br>
<br>
-class HaswellProc<string Name> : ProcessorModel<Name, HaswellModel, [<br>
-  FeatureMMX,<br>
+def ProcIntelHSW : SubtargetFeature<"hsw", "X86ProcFamily", "IntelHSW",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel Haswell Processor", [<br>
+  ProcIntelIVB,<br>
  Â FeatureAVX2,<br>
-  FeatureFXSR,<br>
-  FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureRDRAND,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
-  FeatureF16C,<br>
-  FeatureFSGSBase,<br>
-  FeatureMOVBE,<br>
-  FeatureLZCNT,<br>
  Â FeatureBMI,<br>
  Â FeatureBMI2,<br>
  Â FeatureFMA,<br>
+  FeatureLZCNT,<br>
+  FeatureMOVBE,<br>
+  FeatureINVPCID,<br>
+  FeatureVMFUNC,<br>
  Â FeatureRTM,<br>
  Â FeatureHLE,<br>
-  FeatureSlowIncDec,<br>
-  FeatureLAHFSAHF<br>
+  FeatureSlowIncDec<br>
 ]>;<br>
+<br>
+class HaswellProc<string Name> : ProcessorModel<Name, HaswellModel,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [ProcIntelHSW]>;<br>
 def : HaswellProc<"haswell">;<br>
 def : HaswellProc<"core-avx2">; // Legacy alias.<br>
<br>
-class BroadwellProc<string Name> : ProcessorModel<Name, HaswellModel, [<br>
-  FeatureMMX,<br>
-  FeatureAVX2,<br>
-  FeatureFXSR,<br>
-  FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
-  FeatureRDRAND,<br>
-  FeatureF16C,<br>
-  FeatureFSGSBase,<br>
-  FeatureMOVBE,<br>
-  FeatureLZCNT,<br>
-  FeatureBMI,<br>
-  FeatureBMI2,<br>
-  FeatureFMA,<br>
-  FeatureRTM,<br>
-  FeatureHLE,<br>
+def ProcIntelBDW : SubtargetFeature<"bdw", "X86ProcFamily", "IntelBDW",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel Broadwell Processor", [<br>
+  ProcIntelHSW,<br>
  Â FeatureADX,<br>
  Â FeatureRDSEED,<br>
-  FeatureSlowIncDec,<br>
-  FeatureLAHFSAHF<br>
+  FeatureSMAP<br>
 ]>;<br>
+class BroadwellProc<string Name> : ProcessorModel<Name, HaswellModel,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [ProcIntelBDW]>;<br>
 def : BroadwellProc<"broadwell">;<br>
<br>
+def ProcIntelSKL : SubtargetFeature<"skl", "X86ProcFamily", "IntelSKL",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel Skylake Client Processor", [<br>
+  ProcIntelBDW,<br>
+  FeatureMPX,<br>
+  FeatureXSAVEC,<br>
+  FeatureXSAVES,<br>
+  FeatureSGX,<br>
+  FeatureCLFLUSHOPT<br>
+]>;<br>
+<br>
+// FIXME: define SKL model<br>
+class SkylakeClientProc<string Name> : ProcessorModel<Name, HaswellModel,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [ProcIntelSKL]>;<br>
+def : SkylakeClientProc<"skl">;<br>
+<br>
 // FIXME: define KNL model<br>
-class KnightsLandingProc<string Name> : ProcessorModel<Name, HaswellModel, [<br>
-  FeatureMMX,<br>
+class KnightsLandingProc<string Name> : ProcessorModel<Name, HaswellModel,[<br>
+  ProcIntelIVB,<br>
  Â FeatureAVX512,<br>
-  FeatureFXSR,<br>
  Â FeatureERI,<br>
  Â FeatureCDI,<br>
  Â FeaturePFI,<br>
-  FeatureCMPXCHG16B,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
-  FeatureRDRAND,<br>
-  FeatureF16C,<br>
-  FeatureFSGSBase,<br>
+  FeaturePREFETCHWT1,<br>
+  FeatureADX,<br>
+  FeatureRDSEED,<br>
  Â FeatureMOVBE,<br>
  Â FeatureLZCNT,<br>
  Â FeatureBMI,<br>
  Â FeatureBMI2,<br>
-  FeatureFMA,<br>
-  FeatureRTM,<br>
-  FeatureHLE,<br>
-  FeatureSlowIncDec,<br>
-  FeatureMPX,<br>
-  FeatureLAHFSAHF<br>
+  FeatureFMA<br>
 ]>;<br>
 def : KnightsLandingProc<"knl">;<br>
<br>
-// FIXME: define SKX model<br>
-class SkylakeProc<string Name> : ProcessorModel<Name, HaswellModel, [<br>
-  FeatureMMX,<br>
+def ProcIntelSKX : SubtargetFeature<"skx", "X86ProcFamily", "IntelSKX",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel Skylake Server Processor", [<br>
+  ProcIntelSKL,<br>
  Â FeatureAVX512,<br>
-  FeatureFXSR,<br>
  Â FeatureCDI,<br>
  Â FeatureDQI,<br>
  Â FeatureBWI,<br>
  Â FeatureVLX,<br>
  Â FeaturePKU,<br>
-  FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
-  FeatureRDRAND,<br>
-  FeatureF16C,<br>
-  FeatureFSGSBase,<br>
-  FeatureMOVBE,<br>
-  FeatureLZCNT,<br>
-  FeatureBMI,<br>
-  FeatureBMI2,<br>
-  FeatureFMA,<br>
-  FeatureRTM,<br>
-  FeatureHLE,<br>
-  FeatureADX,<br>
-  FeatureRDSEED,<br>
-  FeatureSlowIncDec,<br>
-  FeatureMPX,<br>
-  FeatureXSAVEC,<br>
-  FeatureXSAVES,<br>
-  FeatureLAHFSAHF<br>
+  FeaturePCOMMIT,<br>
+  FeatureCLWB<br>
 ]>;<br>
-def : SkylakeProc<"skylake">;<br>
-def : SkylakeProc<"skx">; // Legacy alias.<br>
<br>
-class CannonlakeProc<string Name> : ProcessorModel<Name, HaswellModel, [<br>
-  FeatureMMX,<br>
-  FeatureAVX512,<br>
-  FeatureFXSR,<br>
-  FeatureCDI,<br>
-  FeatureDQI,<br>
-  FeatureBWI,<br>
-  FeatureVLX,<br>
-  FeaturePKU,<br>
-  FeatureCMPXCHG16B,<br>
-  FeatureSlowBTMem,<br>
-  FeaturePOPCNT,<br>
-  FeatureAES,<br>
-  FeaturePCLMUL,<br>
-  FeatureXSAVE,<br>
-  FeatureXSAVEOPT,<br>
-  FeatureRDRAND,<br>
-  FeatureF16C,<br>
-  FeatureFSGSBase,<br>
-  FeatureMOVBE,<br>
-  FeatureLZCNT,<br>
-  FeatureBMI,<br>
-  FeatureBMI2,<br>
+// FIXME: define SKX model<br>
+class SkylakeServerProc<string Name> : ProcessorModel<Name, HaswellModel,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â [ ProcIntelSKX]>;<br>
+def : SkylakeServerProc<"skylake">;<br>
+def : SkylakeServerProc<"skx">; // Legacy alias.<br>
+<br>
+def ProcIntelCNL : SubtargetFeature<"cnl", "X86ProcFamily", "IntelCNL",<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  " Intel Cannonlake Processor", [<br>
+  ProcIntelSKX,<br>
  Â FeatureVBMI,<br>
-  FeatureFMA,<br>
-  FeatureRTM,<br>
-  FeatureHLE,<br>
-  FeatureADX,<br>
-  FeatureRDSEED,<br>
-  FeatureSlowIncDec,<br>
-  FeatureMPX,<br>
-  FeatureXSAVEC,<br>
-  FeatureXSAVES,<br>
-  FeatureLAHFSAHF<br>
+  FeatureIFMA,<br>
+  FeatureSHA<br>
 ]>;<br>
+<br>
+class CannonlakeProc<string Name> : ProcessorModel<Name, HaswellModel,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  [ ProcIntelCNL ]>;<br>
 def : CannonlakeProc<"cannonlake">;<br>
 def : CannonlakeProc<"cnl">;<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)<br>
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Sun Jan 24 04:41:28 2016<br>
@@ -797,6 +797,8 @@ def HasBMI  Â  Â  Â : Predicate<"Subtarget-<br>
 def HasBMI2  Â  Â  : Predicate<"Subtarget->hasBMI2()">;<br>
 def HasVBMI  Â  Â  : Predicate<"Subtarget->hasVBMI()">,<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  AssemblerPredicate<"FeatureVBMI", "AVX-512 VBMI ISA">;<br>
+def HasIFMA  Â  Â  : Predicate<"Subtarget->hasIFMA()">,<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â AssemblerPredicate<"FeatureIFMA", "AVX-512 IFMA ISA">;<br>
 def HasRTM  Â  Â  Â : Predicate<"Subtarget->hasRTM()">;<br>
 def HasHLE  Â  Â  Â : Predicate<"Subtarget->hasHLE()">;<br>
 def HasTSX  Â  Â  Â : Predicate<"Subtarget->hasRTM() || Subtarget->hasHLE()">;<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Sun Jan 24 04:41:28 2016<br>
@@ -262,6 +262,7 @@ void X86Subtarget::initializeEnvironment<br>
  Â HasBMI = false;<br>
  Â HasBMI2 = false;<br>
  Â HasVBMI = false;<br>
+  HasIFMA = false;<br>
  Â HasRTM = false;<br>
  Â HasHLE = false;<br>
  Â HasERI = false;<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)<br>
+++ llvm/trunk/lib/Target/X86/X86Subtarget.h Sun Jan 24 04:41:28 2016<br>
@@ -55,7 +55,8 @@ protected:<br>
  Â };<br>
<br>
  Â enum X86ProcFamilyEnum {<br>
-  Â  Others, IntelAtom, IntelSLM<br>
+  Â  Others, IntelAtom, IntelSLM, IntelSNB, IntelIVB, IntelHSW, IntelBDW,<br>
+  Â  IntelKNL, IntelSKL, IntelSKX, IntelCNL<br>
  Â };<br>
<br>
  Â /// X86 processor family: Intel Atom, and others<br>
@@ -137,6 +138,9 @@ protected:<br>
  Â /// Processor has VBMI instructions.<br>
  Â bool HasVBMI;<br>
<br>
+  /// Processor has Integer Fused Multiply Add<br>
+  bool HasIFMA;<br>
+<br>
  Â /// Processor has RTM instructions.<br>
  Â bool HasRTM;<br>
<br>
@@ -158,6 +162,9 @@ protected:<br>
  Â /// Processor has LAHF/SAHF instructions.<br>
  Â bool HasLAHFSAHF;<br>
<br>
+  /// Processor has Prefetch with intent to Write instruction<br>
+  bool HasPFPREFETCHWT1;<br>
+<br>
  Â /// True if BT (bit test) of memory instructions are slow.<br>
  Â bool IsBTMemSlow;<br>
<br>
@@ -229,9 +236,30 @@ protected:<br>
  Â /// Processor has PKU extenstions<br>
  Â bool HasPKU;<br>
<br>
-  /// Processot supports MPX - Memory Protection Extensions<br>
+  /// Processor supports MPX - Memory Protection Extensions<br>
  Â bool HasMPX;<br>
<br>
+  /// Processor supports Invalidate Process-Context Identifier<br>
+  bool HasInvPCId;<br>
+<br>
+  /// Processor has VM Functions<br>
+  bool HasVMFUNC;<br>
+<br>
+  /// Processor has Supervisor Mode Access Protection<br>
+  bool HasSMAP;<br>
+<br>
+  /// Processor has Software Guard Extensions<br>
+  bool HasSGX;<br>
+<br>
+  /// Processor supports Flush Cache Line instruction<br>
+  bool HasCLFLUSHOPT;<br>
+<br>
+  /// Processor has Persistent Commit feature<br>
+  bool HasPCOMMIT;<br>
+<br>
+  /// Processor supports Cache Line Write Back instruction<br>
+  bool HasCLWB;<br>
+<br>
  Â /// Use software floating point for code generation.<br>
  Â bool UseSoftFloat;<br>
<br>
@@ -378,6 +406,7 @@ public:<br>
  Â bool hasBMI() const { return HasBMI; }<br>
  Â bool hasBMI2() const { return HasBMI2; }<br>
  Â bool hasVBMI() const { return HasVBMI; }<br>
+  bool hasIFMA() const { return HasIFMA; }<br>
  Â bool hasRTM() const { return HasRTM; }<br>
  Â bool hasHLE() const { return HasHLE; }<br>
  Â bool hasADX() const { return HasADX; }<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll?rev=258659&r1=258658&r2=258659&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll?rev=258659&r1=258658&r2=258659&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/avx512bw-intrinsics.ll Sun Jan 24 04:41:28 2016<br>
@@ -214,31 +214,31 @@ define i64 @test_cmp_b_512(<64 x i8> %a0<br>
 ; AVX512F-32-NEXT:  Â  vpcmpltb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpleb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpunordb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpneqb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnltb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnleb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpordb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, (%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl (%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  addl $68, %esp<br>
 ; AVX512F-32-NEXT:  Â  retl<br>
  Â %res0 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 -1)<br>
@@ -303,31 +303,31 @@ define i64 @test_mask_cmp_b_512(<64 x i8<br>
 ; AVX512F-32-NEXT:  Â  vpcmpltb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpleb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpunordb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpneqb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnltb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnleb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpordb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  addl $68, %esp<br>
 ; AVX512F-32-NEXT:  Â  retl<br>
  Â %res0 = call i64 @llvm.x86.avx512.mask.cmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 %mask)<br>
@@ -390,31 +390,31 @@ define i64 @test_ucmp_b_512(<64 x i8> %a<br>
 ; AVX512F-32-NEXT:  Â  vpcmpltub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpleub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpunordub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnequb %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnltub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnleub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpordub %zmm1, %zmm0, %k0<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, (%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl (%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  addl $68, %esp<br>
 ; AVX512F-32-NEXT:  Â  retl<br>
  Â %res0 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 -1)<br>
@@ -479,31 +479,31 @@ define i64 @test_mask_x86_avx512_ucmp_b_<br>
 ; AVX512F-32-NEXT:  Â  vpcmpltub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpleub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpunordub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnequb %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnltub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpnleub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  vpcmpordub %zmm1, %zmm0, %k0 {%k1}<br>
 ; AVX512F-32-NEXT:  Â  kmovq %k0, {{[0-9]+}}(%esp)<br>
 ; AVX512F-32-NEXT:  Â  addl {{[0-9]+}}(%esp), %eax<br>
-; AVX512F-32-NEXT:  Â  adcl {{[0-9]+}}(%esp), %edx<br>
+; AVX512F-32-NEXT:  Â  adcxl {{[0-9]+}}(%esp), %edx<br>
 ; AVX512F-32-NEXT:  Â  addl $68, %esp<br>
 ; AVX512F-32-NEXT:  Â  retl<br>
  Â %res0 = call i64 @llvm.x86.avx512.mask.ucmp.b.512(<64 x i8> %a0, <64 x i8> %a1, i32 0, i64 %mask)<br>
@@ -2879,6 +2879,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm2, %zmm0<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm0, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrl_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsrlw %xmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsrlw %xmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsrlw %xmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm2, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrl.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
@@ -2899,6 +2909,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm0, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrl_wi_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsrlw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsrlw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsrlw $3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 -1)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrl.wi.512(<32 x i16> %x0, i8 3, <32 x i16> zeroinitializer, i32 %x3)<br>
@@ -2919,6 +2939,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrlv32hi:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsrlvw %zmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsrlvw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsrlvw %zmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psrlv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrlv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrlv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
@@ -2939,6 +2969,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psra_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsraw %xmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsraw %xmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsraw %xmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psra.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
@@ -2959,6 +2999,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psra_wi_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsraw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsraw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsraw $3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i8 3, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psra.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 -1)<br>
@@ -2979,6 +3029,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_pshufh_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpshufhw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpshufhw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpshufhw $3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i8 3, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.pshufh.w.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 -1)<br>
@@ -2992,13 +3052,23 @@ declare <32 x i16> @llvm.x86.avx512.mask<br>
 define <32 x i16>@test_int_x86_avx512_mask_pshufl_w_512(<32 x i16> %x0, i8 %x1, <32 x i16> %x2, i32 %x3) {<br>
 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pshufl_w_512:<br>
 ; AVX512BW:  Â  Â  Â ## BB#0:<br>
-; AVX512BW-NEXT:  Â  kmovd %esi, %k1<br>
-; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm1 {%k1}<br>
-; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm2 {%k1} {z}<br>
-; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm0<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
-; AVX512BW-NEXT:  Â  retq<br>
+; AVX512BW-NEXT:  Â  kmovd %esi, %k1<br>
+; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512BW-NEXT:  Â  vpshuflw $3, %zmm0, %zmm0<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_pshufl_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpshuflw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpshuflw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpshuflw $3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i8 3, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.pshufl.w.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 -1)<br>
@@ -3019,6 +3089,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psrav32_hi:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsravw %zmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsravw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsravw %zmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psrav32.hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psrav32.hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psrav32.hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
@@ -3039,6 +3119,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psll_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsllw %xmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsllw %xmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsllw %xmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psll.w.512(<32 x i16> %x0, <8 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
@@ -3059,6 +3149,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psll_wi_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsllw $3, %zmm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsllw $3, %zmm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsllw $3, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i8 3, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psll.wi.512(<32 x i16> %x0, i8 3, <32 x i16> %x2, i32 -1)<br>
@@ -3079,6 +3179,16 @@ define <32 x i16>@test_int_x86_avx512_ma<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
 ; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
 ; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_psllv32hi:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpsllvw %zmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpsllvw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpsllvw %zmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.psllv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.psllv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.psllv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
@@ -3152,13 +3262,23 @@ declare <32 x i16> @llvm.x86.avx512.mask<br>
 define <32 x i16>@test_int_x86_avx512_mask_pmovzxb_w_512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2) {<br>
 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmovzxb_w_512:<br>
 ; AVX512BW:  Â  Â  Â ## BB#0:<br>
-; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
-; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm1 {%k1}<br>
-; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm2 {%k1} {z}<br>
-; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm0<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
-; AVX512BW-NEXT:  Â  retq<br>
+; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
+; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm1 {%k1}<br>
+; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm2 {%k1} {z}<br>
+; AVX512BW-NEXT:  Â  vpmovzxbw %ymm0, %zmm0<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmovzxb_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpmovzxbw %ymm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpmovzxbw %ymm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpmovzxbw %ymm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> zeroinitializer, i32 %x2)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.pmovzxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 -1)<br>
@@ -3172,13 +3292,23 @@ declare <32 x i16> @llvm.x86.avx512.mask<br>
 define <32 x i16>@test_int_x86_avx512_mask_pmovsxb_w_512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2) {<br>
 ; AVX512BW-LABEL: test_int_x86_avx512_mask_pmovsxb_w_512:<br>
 ; AVX512BW:  Â  Â  Â ## BB#0:<br>
-; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
-; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm1 {%k1}<br>
-; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm2 {%k1} {z}<br>
-; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm0<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
-; AVX512BW-NEXT:  Â  retq<br>
+; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
+; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm1 {%k1}<br>
+; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm2 {%k1} {z}<br>
+; AVX512BW-NEXT:  Â  vpmovsxbw %ymm0, %zmm0<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_pmovsxb_w_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpmovsxbw %ymm0, %zmm1 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpmovsxbw %ymm0, %zmm2 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpmovsxbw %ymm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm2, %zmm1, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 %x2)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> zeroinitializer, i32 %x2)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.pmovsxb.w.512(<32 x i8> %x0, <32 x i16> %x1, i32 -1)<br>
@@ -3192,13 +3322,23 @@ declare <32 x i16> @llvm.x86.avx512.mask<br>
 define <32 x i16>@test_int_x86_avx512_mask_permvar_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {<br>
 ; AVX512BW-LABEL: test_int_x86_avx512_mask_permvar_hi_512:<br>
 ; AVX512BW:  Â  Â  Â ## BB#0:<br>
-; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
-; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm2 {%k1}<br>
-; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
-; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm0<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
-; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
-; AVX512BW-NEXT:  Â  retq<br>
+; AVX512BW-NEXT:  Â  kmovd %edi, %k1<br>
+; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512BW-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm0<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512BW-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512BW-NEXT:  Â  retq<br>
+;<br>
+; AVX512F-32-LABEL: test_int_x86_avx512_mask_permvar_hi_512:<br>
+; AVX512F-32:  Â  Â  Â # BB#0:<br>
+; AVX512F-32-NEXT:  Â  kmovd {{[0-9]+}}(%esp), %k1<br>
+; AVX512F-32-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm2 {%k1}<br>
+; AVX512F-32-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm3 {%k1} {z}<br>
+; AVX512F-32-NEXT:  Â  vpermw %zmm1, %zmm0, %zmm0<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm3, %zmm2, %zmm1<br>
+; AVX512F-32-NEXT:  Â  vpaddw %zmm0, %zmm1, %zmm0<br>
+; AVX512F-32-NEXT:  Â  retl<br>
  Â %res = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3)<br>
  Â %res1 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> zeroinitializer, i32 %x3)<br>
  Â %res2 = call <32 x i16> @llvm.x86.avx512.mask.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 -1)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">~Craig</div>
</div>