================ @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits