Skip to content

Commit f1524c8

Browse files
committed
[X86] Add FeatureINVLPGB and CPUID handling for INVLPGB/TLBSYNC instructions
Both instructions are available under the same CPUID bit (Fn8000_0008_EBX[INVLPGB]). NOTE: I could use some advice on the X86TargetParser.def ordering wrt matching gcc
1 parent f87a9db commit f1524c8

File tree

6 files changed

+13
-6
lines changed

6 files changed

+13
-6
lines changed

llvm/include/llvm/TargetParser/X86TargetParser.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ X86_FEATURE_COMPAT(ENQCMD, "enqcmd", 0)
197197
X86_FEATURE_COMPAT(F16C, "f16c", 0)
198198
X86_FEATURE_COMPAT(FSGSBASE, "fsgsbase", 0)
199199
X86_FEATURE (CRC32, "crc32")
200+
X86_FEATURE (INVLPGB, "invlpgb")
200201
X86_FEATURE (INVPCID, "invpcid")
201202
X86_FEATURE (RDPRU, "rdpru")
202203
X86_FEATURE (SAHF, "sahf")

llvm/lib/Target/X86/X86.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ def FeatureMWAITX : SubtargetFeature<"mwaitx", "HasMWAITX", "true",
252252
"Enable MONITORX/MWAITX timer functionality">;
253253
def FeatureCLZERO : SubtargetFeature<"clzero", "HasCLZERO", "true",
254254
"Enable Cache Line Zero">;
255+
def FeatureINVLPGB : SubtargetFeature<"invlpgb", "HasINVLPGB", "true",
256+
"Support invlpgb/tlbsync instructions">;
255257
def FeatureCLDEMOTE : SubtargetFeature<"cldemote", "HasCLDEMOTE", "true",
256258
"Enable Cache Line Demote">;
257259
def FeaturePTWRITE : SubtargetFeature<"ptwrite", "HasPTWRITE", "true",
@@ -1565,6 +1567,7 @@ def ProcessorFeatures {
15651567
!listconcat(ZNFeatures, ZN2AdditionalFeatures);
15661568
list<SubtargetFeature> ZN3AdditionalFeatures = [FeatureFSRM,
15671569
FeatureINVPCID,
1570+
FeatureINVLPGB,
15681571
FeaturePKU,
15691572
FeatureVAES,
15701573
FeatureVPCLMULQDQ];

llvm/lib/Target/X86/X86InstrMisc.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,11 +1603,11 @@ let SchedRW = [WriteSystem] in {
16031603
let Uses = [EAX, EDX] in
16041604
def INVLPGB32 : I<0x01, MRM_FE, (outs), (ins),
16051605
"invlpgb", []>,
1606-
TB, Requires<[Not64BitMode]>;
1606+
TB, Requires<[HasINVLPGB, Not64BitMode]>;
16071607
let Uses = [RAX, EDX] in
16081608
def INVLPGB64 : I<0x01, MRM_FE, (outs), (ins),
16091609
"invlpgb", []>,
1610-
TB, Requires<[In64BitMode]>;
1610+
TB, Requires<[HasINVLPGB, In64BitMode]>;
16111611
} // SchedRW
16121612

16131613
//===----------------------------------------------------------------------===//
@@ -1617,7 +1617,7 @@ let SchedRW = [WriteSystem] in {
16171617
let SchedRW = [WriteSystem] in {
16181618
def TLBSYNC : I<0x01, MRM_FF, (outs), (ins),
16191619
"tlbsync", []>,
1620-
TB, Requires<[]>;
1620+
TB, Requires<[HasINVLPGB]>;
16211621
} // SchedRW
16221622

16231623
//===----------------------------------------------------------------------===//

llvm/lib/Target/X86/X86InstrPredicates.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def HasWBNOINVD : Predicate<"Subtarget->hasWBNOINVD()">;
166166
def HasRDPID : Predicate<"Subtarget->hasRDPID()">;
167167
def HasRDPRU : Predicate<"Subtarget->hasRDPRU()">;
168168
def HasWAITPKG : Predicate<"Subtarget->hasWAITPKG()">;
169+
def HasINVLPGB : Predicate<"Subtarget->hasINVLPGB()">;
169170
def HasINVPCID : Predicate<"Subtarget->hasINVPCID()">;
170171
def HasCX8 : Predicate<"Subtarget->hasCX8()">;
171172
def HasCX16 : Predicate<"Subtarget->hasCX16()">;

llvm/lib/TargetParser/Host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,6 +1825,7 @@ const StringMap<bool> sys::getHostCPUFeatures() {
18251825
bool HasExtLeaf8 = MaxExtLevel >= 0x80000008 &&
18261826
!getX86CpuIDAndInfo(0x80000008, &EAX, &EBX, &ECX, &EDX);
18271827
Features["clzero"] = HasExtLeaf8 && ((EBX >> 0) & 1);
1828+
Features["invlpgb"] = HasExtLeaf8 && ((EBX >> 3) & 1);
18281829
Features["rdpru"] = HasExtLeaf8 && ((EBX >> 4) & 1);
18291830
Features["wbnoinvd"] = HasExtLeaf8 && ((EBX >> 9) & 1);
18301831

llvm/lib/TargetParser/X86TargetParser.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,9 @@ constexpr FeatureBitset FeaturesZNVER1 =
236236
constexpr FeatureBitset FeaturesZNVER2 = FeaturesZNVER1 | FeatureCLWB |
237237
FeatureRDPID | FeatureRDPRU |
238238
FeatureWBNOINVD;
239-
static constexpr FeatureBitset FeaturesZNVER3 = FeaturesZNVER2 |
240-
FeatureINVPCID | FeaturePKU |
241-
FeatureVAES | FeatureVPCLMULQDQ;
239+
static constexpr FeatureBitset FeaturesZNVER3 =
240+
FeaturesZNVER2 | FeatureINVPCID | FeatureINVLPGB | FeaturePKU |
241+
FeatureVAES | FeatureVPCLMULQDQ;
242242
static constexpr FeatureBitset FeaturesZNVER4 =
243243
FeaturesZNVER3 | FeatureAVX512F | FeatureEVEX512 | FeatureAVX512CD |
244244
FeatureAVX512DQ | FeatureAVX512BW | FeatureAVX512VL | FeatureAVX512IFMA |
@@ -505,6 +505,7 @@ constexpr FeatureBitset ImpliedFeaturesCRC32 = {};
505505
constexpr FeatureBitset ImpliedFeaturesENQCMD = {};
506506
constexpr FeatureBitset ImpliedFeaturesFSGSBASE = {};
507507
constexpr FeatureBitset ImpliedFeaturesFXSR = {};
508+
constexpr FeatureBitset ImpliedFeaturesINVLPGB = {};
508509
constexpr FeatureBitset ImpliedFeaturesINVPCID = {};
509510
constexpr FeatureBitset ImpliedFeaturesLWP = {};
510511
constexpr FeatureBitset ImpliedFeaturesLZCNT = {};

0 commit comments

Comments
 (0)