[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