diff options
| author | Mingming Liu <mingmingl@google.com> | 2025-09-10 15:25:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-10 15:25:31 -0700 |
| commit | 1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch) | |
| tree | 57f4b1f313c8cf74eed8819870f39c36ea263c68 /llvm/test/TableGen/HwModeBitSet.td | |
| parent | 898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff) | |
| parent | b8cefcb601ddaa18482555c4ff363c01a270c2fe (diff) | |
Merge branch 'main' into users/mingmingl-llvm/samplefdo-profile-formatusers/mingmingl-llvm/samplefdo-profile-format
Diffstat (limited to 'llvm/test/TableGen/HwModeBitSet.td')
| -rw-r--r-- | llvm/test/TableGen/HwModeBitSet.td | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/llvm/test/TableGen/HwModeBitSet.td b/llvm/test/TableGen/HwModeBitSet.td index b2de6e8e012c..869b09b3c631 100644 --- a/llvm/test/TableGen/HwModeBitSet.td +++ b/llvm/test/TableGen/HwModeBitSet.td @@ -11,9 +11,17 @@ def TestTarget : Target { let InstructionSet = TestTargetInstrInfo; } -def TestMode : HwMode<"+feat", []>; -def TestMode1 : HwMode<"+feat1", []>; -def TestMode2 : HwMode<"+feat2", []>; +def Feat1 : SubtargetFeature<"feat1", "HasFeat1", "true", "enable feature 1">; +def Feat2 : SubtargetFeature<"feat2", "HasFeat2", "true", "enable feature 2">; + +def HasFeat1 : Predicate<"Subtarget->hasFeat1()">, + AssemblerPredicate<(all_of Feat1)>; +def HasFeat2 : Predicate<"Subtarget->hasFeat2()">, + AssemblerPredicate<(all_of Feat2)>; + +def TestMode : HwMode<[HasFeat1]>; +def TestMode1 : HwMode<[HasFeat2]>; +def TestMode2 : HwMode<[HasFeat1, HasFeat2]>; class MyReg<string n> : Register<n> { @@ -120,13 +128,26 @@ def foo : Instruction { let AsmString = "foo $factor"; } +// CHECK-SUBTARGET-LABEL: unsigned TestTargetGenMCSubtargetInfo::getHwModeSet() const { +// CHECK-SUBTARGET{LITERAL}:[[maybe_unused]] const FeatureBitset &FB = getFeatureBits(); +// CHECK-SUBTARGET-NEXT: // Collect HwModes and store them as a bit set. +// CHECK-SUBTARGET-NEXT: unsigned Modes = 0; +// CHECK-SUBTARGET-NEXT: if (FB[TestTarget::Feat1]) Modes |= (1 << 0); +// CHECK-SUBTARGET-NEXT: if (FB[TestTarget::Feat2]) Modes |= (1 << 1); +// CHECK-SUBTARGET-NEXT: if (FB[TestTarget::Feat1] && FB[TestTarget::Feat2]) Modes |= (1 << 2); +// CHECK-SUBTARGET-NEXT: return Modes; +// CHECK-SUBTARGET-NEXT: } + // CHECK-SUBTARGET-LABEL: unsigned TestTargetGenSubtargetInfo::getHwModeSet() const { -// CHECK-SUBTARGET: unsigned Modes = 0; -// CHECK-SUBTARGET: if (checkFeatures("+feat")) Modes |= (1 << 0); -// CHECK-SUBTARGET: if (checkFeatures("+feat1")) Modes |= (1 << 1); -// CHECK-SUBTARGET: if (checkFeatures("+feat2")) Modes |= (1 << 2); -// CHECK-SUBTARGET: return Modes; -// CHECK-SUBTARGET: } +// CHECK-SUBTARGET{LITERAL}:[[maybe_unused]] const auto *Subtarget = +// CHECK-SUBTARGET-NEXT: static_cast<const TestTargetSubtarget *>(this); +// CHECK-SUBTARGET-NEXT: // Collect HwModes and store them as a bit set. +// CHECK-SUBTARGET-NEXT: unsigned Modes = 0; +// CHECK-SUBTARGET-NEXT: if ((Subtarget->hasFeat1())) Modes |= (1 << 0); +// CHECK-SUBTARGET-NEXT: if ((Subtarget->hasFeat2())) Modes |= (1 << 1); +// CHECK-SUBTARGET-NEXT: if ((Subtarget->hasFeat1()) && (Subtarget->hasFeat2())) Modes |= (1 << 2); +// CHECK-SUBTARGET-NEXT: return Modes; +// CHECK-SUBTARGET-NEXT: } // CHECK-SUBTARGET-LABEL: unsigned TestTargetGenSubtargetInfo::getHwMode(enum HwModeType type) const { // CHECK-SUBTARGET: unsigned Modes = getHwModeSet(); // CHECK-SUBTARGET: if (!Modes) @@ -159,4 +180,3 @@ def foo : Instruction { // CHECK-SUBTARGET: llvm_unreachable("unexpected HwModeType"); // CHECK-SUBTARGET: return 0; // should not get here // CHECK-SUBTARGET: } - |
