[Mlir-commits] [mlir] [MLIR][SideEffects][MemoryEffects] Modified LICM to be more aggressive when checking movability of ops with MemWrite effects (PR #155344)

Mo Bagherbeik llvmlistbot at llvm.org
Wed Oct 8 14:13:11 PDT 2025


================
@@ -2977,6 +2977,88 @@ def TestEffectsResult : TEST_Op<"test_effects_result"> {
   let results = (outs Res<I32, "", [MemAlloc, MemWrite]>);
 }
 
+//===----------------------------------------------------------------------===//
+// Test Ops with multiple effects for Loop Invariant Code Motion.
+//===----------------------------------------------------------------------===//
+
+def TestResourceA : Resource<"TestResourceA">;
+def TestResourceB : Resource<"TestResourceB">;
+def TestResourceC : Resource<"TestResourceC">;
+def TestResourceD : Resource<"TestResourceD">;
+def TestResourceE : Resource<"TestResourceE">;
+def TestResourceF : Resource<"TestResourceF">;
+
+def TestEffectsWriteA : TEST_Op<"test_effects_write_A",
+  [MemoryEffects<[MemWrite<TestResourceA>]>,
+  AlwaysSpeculatable]>;
+
+def TestEffectsWriteAWithInput : TEST_Op<"test_effects_write_A_with_input",
+  [MemoryEffects<[MemWrite<TestResourceA>]>,
+  AlwaysSpeculatable]> {
+  
+  let arguments = (ins AnyType:$arg);
+}
+
+def TestEffectsReadA : TEST_Op<"test_effects_read_A",
+  [MemoryEffects<[MemRead<TestResourceA>]>,
+  AlwaysSpeculatable]>;
+
+def TestEffectsReadAWriteB : TEST_Op<"test_effects_read_A_write_B",
+  [MemoryEffects<[MemRead<TestResourceA>,
+    MemWrite<TestResourceB>]>,
+  AlwaysSpeculatable]>;
----------------
mbagherbeikTT wrote:

major misunderstanding on my part from how the pass was originally structured when I first started tinkering with it.

Speculatable trait has been removed from all of the new test ops

https://github.com/llvm/llvm-project/pull/155344


More information about the Mlir-commits mailing list