[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