[flang] [clang] [llvm] [AArch64][Driver] Better handling of target feature dependencies (PR #78270)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 17 06:40:05 PST 2024
================
@@ -308,6 +312,94 @@ inline constexpr ExtensionInfo Extensions[] = {
};
// clang-format on
+struct ExtensionSet {
+ // Set of extensions which are currently enabled.
+ ExtensionBitset Enabled;
+ // Set of extensions which have been enabled or disabled at any point. Used
+ // to avoid cluttering the cc1 command-line with lots of unneeded features.
+ ExtensionBitset Touched;
+ // Base architecture version, which we need to know because some feature
+ // dependencies change depending on this.
+ const ArchInfo *BaseArch;
+
+ ExtensionSet() : Enabled(), Touched(), BaseArch(nullptr) {}
+
+ // Enable the given architecture extension, and any other extensions it
+ // depends on.
+ void enable(ArchExtKind E);
+ // Disable the given architecture extension, and any other extensions which
+ // depend on it.
+ void disable(ArchExtKind E);
+
+ // Add default extensions for the given CPU.
+ void addCPUDefaults(const CpuInfo &CPU);
+ // Add default extensions for the given architecture version.
+ void addArchDefaults(const ArchInfo &Arch);
+
+ // Add or remove a feature based on a modifier string. The string must be of
+ // the form "<name>" to enable a feature or "no<name>" to disable it. This
+ // will also enable or disable any features as required by the dependencies
+ // between them.
+ bool parseModifier(StringRef Modifier);
+
+ // Convert the set of enabled extension to an LLVM feature list, appending
+ // them to Features.
+ void toLLVMFeatureList(std::vector<StringRef> &Features) const;
----------------
ostannard wrote:
The only call-site so far is `getAArch64TargetFeatures` in the driver, which gets passed a reference to an existing `std::vector<StringRef>`, so this way is easier, and avoids copying between vectors.
https://github.com/llvm/llvm-project/pull/78270
More information about the cfe-commits
mailing list