From 1e686d268980c7167f12c71e8b1bb66bdc3fd51c Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Thu, 12 Mar 2020 13:06:12 +0000 Subject: [PATCH] [X86] Add FeatureFast7ByteNOP flag Lets us remove another SLM proc family flag usage. This is NFC, but we should probably check whether atom/glm/knl? should be using this flag as well... --- llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp | 2 +- llvm/lib/Target/X86/X86.td | 6 ++++++ llvm/lib/Target/X86/X86Subtarget.h | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp index 2f84d23..0498f3f 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp @@ -924,7 +924,7 @@ bool X86AsmBackend::writeNopData(raw_ostream &OS, uint64_t Count) const { // 15-bytes is the longest single NOP instruction, but 10-bytes is // commonly the longest that can be efficiently decoded. uint64_t MaxNopLength = 10; - if (STI.getFeatureBits()[X86::ProcIntelSLM]) + if (STI.getFeatureBits()[X86::FeatureFast7ByteNOP]) MaxNopLength = 7; else if (STI.getFeatureBits()[X86::FeatureFast15ByteNOP]) MaxNopLength = 15; diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index a2b11d5..931367c 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -329,6 +329,11 @@ def FeatureFastLZCNT : SubtargetFeature< "fast-lzcnt", "HasFastLZCNT", "true", "LZCNT instructions are as fast as most simple integer ops">; +// If the target can efficiently decode NOPs upto 7-bytes in length. +def FeatureFast7ByteNOP + : SubtargetFeature< + "fast-7bytenop", "HasFast7ByteNOP", "true", + "Target can quickly decode up to 7 byte NOPs">; // If the target can efficiently decode NOPs upto 11-bytes in length. def FeatureFast11ByteNOP : SubtargetFeature< @@ -728,6 +733,7 @@ def ProcessorFeatures { list SLMSpecificFeatures = [ProcIntelSLM, FeatureSlowDivide64, FeatureSlowPMULLD, + FeatureFast7ByteNOP, FeaturePOPCNTFalseDeps]; list SLMInheritableFeatures = !listconcat(AtomInheritableFeatures, SLMAdditionalFeatures); diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index f4e8d30..9380145 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -258,6 +258,10 @@ protected: bool InsertVZEROUPPER = false; /// True if there is no performance penalty for writing NOPs with up to + /// 7 bytes. + bool HasFast7ByteNOP = false; + + /// True if there is no performance penalty for writing NOPs with up to /// 11 bytes. bool HasFast11ByteNOP = false; -- 2.7.4