[clang] [llvm] [IR] Memory effects for floating-point operations (PR #221754)
Krzysztof Drewniak via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 17 10:56:52 PDT 2026
================
@@ -119,24 +135,41 @@ template <typename LocationEnum> class MemoryEffectsBase {
setModRef(Loc, MR);
}
+ /// Create MemoryEffectsBase that can access any location with the given
+ /// ModRefInfo, excluding floating-point locations.
+ /// The boolean argument value is not used, it only allows to distinguish
+ /// between constructors.
+ MemoryEffectsBase(ModRefInfo MR, bool) {
+ for (Location Loc : mem_locations())
+ setModRef(Loc, MR);
+ }
+
/// Create MemoryEffectsBase that can read and write any memory.
static MemoryEffectsBase unknown() {
return MemoryEffectsBase(ModRefInfo::ModRef);
}
+ /// Create MemoryEffectsBase that can read and write any memory except
+ /// floating-point registers.
+ static MemoryEffectsBase unknown_mem() {
+ return MemoryEffectsBase(ModRefInfo::ModRef, false);
+ }
+
/// Create MemoryEffectsBase that cannot read or write any memory.
static MemoryEffectsBase none() {
return MemoryEffectsBase(ModRefInfo::NoModRef);
}
- /// Create MemoryEffectsBase that can read any memory.
+ /// Create MemoryEffectsBase that can read any memory excluding floating-point
+ /// registers.
static MemoryEffectsBase readOnly() {
- return MemoryEffectsBase(ModRefInfo::Ref);
+ return MemoryEffectsBase(ModRefInfo::Ref, false);
}
- /// Create MemoryEffectsBase that can write any memory.
+ /// Create MemoryEffectsBase that can write any memory excluding
+ /// floating-point registers.
static MemoryEffectsBase writeOnly() {
- return MemoryEffectsBase(ModRefInfo::Mod);
+ return MemoryEffectsBase(ModRefInfo::Mod, false);
----------------
krzysz00 wrote:
Similarly
https://github.com/llvm/llvm-project/pull/221754
More information about the cfe-commits
mailing list