[clang] Add clang atomic control options and attribute (PR #114841)
Yaxun Liu via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 23 17:03:24 PST 2025
================
@@ -1101,6 +1107,187 @@ inline void FPOptions::applyChanges(FPOptionsOverride FPO) {
*this = FPO.applyOverrides(*this);
}
+// The three atomic code-generation options.
+// The canonical (positive) names are:
+// "remote_memory", "fine_grained_memory", and "ignore_denormal_mode".
+// In attribute or command-line parsing, a token prefixed with "no_" inverts its
+// value.
+enum class AtomicOptionKind {
+ RemoteMemory, // true means remote memory is enabled.
+ FineGrainedMemory, // true means fine-grained memory is enabled.
+ IgnoreDenormalMode, // true means ignore floating-point denormals.
+ LANGOPT_ATOMIC_OPTION_LAST
+};
+
+struct AtomicOptions {
+ // Bitfields for each option.
+ unsigned remote_memory : 1;
+ unsigned fine_grained_memory : 1;
+ unsigned ignore_denormal_mode : 1;
+
+ AtomicOptions()
+ : remote_memory(0), fine_grained_memory(0), ignore_denormal_mode(0) {}
+
+ bool getOption(AtomicOptionKind Kind) const {
+ switch (Kind) {
+ case AtomicOptionKind::RemoteMemory:
+ return remote_memory;
+ case AtomicOptionKind::FineGrainedMemory:
+ return fine_grained_memory;
+ case AtomicOptionKind::IgnoreDenormalMode:
+ return ignore_denormal_mode;
+ default:
+ llvm_unreachable("Invalid AtomicOptionKind");
+ }
+ }
+
+ void setOption(AtomicOptionKind Kind, bool Value) {
+ switch (Kind) {
+ case AtomicOptionKind::RemoteMemory:
+ remote_memory = Value;
+ break;
+ case AtomicOptionKind::FineGrainedMemory:
+ fine_grained_memory = Value;
+ break;
+ case AtomicOptionKind::IgnoreDenormalMode:
+ ignore_denormal_mode = Value;
+ break;
+ default:
+ llvm_unreachable("Invalid AtomicOptionKind");
+ }
+ }
+
+ LLVM_DUMP_METHOD void dump() const {
+ llvm::errs() << "\n remote_memory: " << remote_memory
+ << "\n fine_grained_memory: " << fine_grained_memory
+ << "\n ignore_denormal_mode: " << ignore_denormal_mode << "\n";
+ }
+
+ // The canonical names for each option.
+ static constexpr const char *OptionNames[] = {
+ "remote_memory", // canonical name for RemoteMemory option.
+ "fine_grained_memory", // canonical name for FineGrainedMemory option.
+ "ignore_denormal_mode" // canonical name for IgnoreDenormalMode option.
+ };
+};
+
+/// Represents overrides for atomic options.
+class AtomicOptionsOverride {
+ AtomicOptions Options;
+ // Bitmask for active overrides.
+ unsigned OverrideMask;
----------------
yxsamliu wrote:
will remove AtomicOptionsOverride and use AtomicAttr to override AtomicOptions
https://github.com/llvm/llvm-project/pull/114841
More information about the cfe-commits
mailing list