[llvm] [SelectionDAG] Fix unsafe cases for loop.dependence.{war/raw}.mask (PR #168565)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 11 08:47:03 PST 2025


================
@@ -1569,8 +1569,21 @@ enum NodeType {
   GET_ACTIVE_LANE_MASK,
 
   // The `llvm.loop.dependence.{war, raw}.mask` intrinsics
-  // Operands: Load pointer, Store pointer, Element size
+  // Operands: Load pointer, Store pointer, Element size, Lane offset
   // Output: Mask
+  //
+  // Note: The semantics of these opcodes differ slightly from the intrinsics.
+  // Wherever "lane" (meaning lane index) occurs in the intrinsic definition, it
+  // is replaced with (lane + lane_offset) for the ISD opcode.
+  //
+  //  E.g., for LOOP_DEPENDENCE_WAR_MASK:
+  //    `(ptrB - ptrA) > elementSize * lane`
+  //  Becomes:
+  //    `(ptrB - ptrA) > elementSize * (lane + lane_offset)`
----------------
sdesmalen-arm wrote:

very minor nit: 
in other places you have it written the other way around (which I personally find a bit more intuitive), e.g. `elementSize * lane < (ptrB - ptrA)`

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


More information about the llvm-commits mailing list