[llvm] [SystemZ] Fold i16/i32/i64 logical RMW operations into memory operands in TableGen (PR #192802)
Ulrich Weigand via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 8 08:00:18 PDT 2026
================
@@ -41,16 +41,56 @@ multiclass ZXB<SDPatternOperator operator, RegisterOperand cls,
// of the second operand.
class RMWI<SDPatternOperator load, SDPatternOperator operator,
SDPatternOperator store, AddressingMode mode,
- PatFrag imm, Instruction insn>
+ ImmLeaf imm, Instruction insn>
: Pat<(store (operator (load mode:$addr), imm:$src), mode:$addr),
(insn mode:$addr, (UIMM8 imm:$src))>;
+// Helpers for the ComplexPattern offset variants.
+// 16-bit truncation operations variant (offset 1).
+class RMWIOffset16<SDPatternOperator load, SDPatternOperator operator,
+ ComplexPattern mode, PatFrag imm, Instruction insn>
+ : Pat<(truncstorei16 (i32 (operator (i32 (load mode:$addr)), imm:$src)),
+ mode:$addr),
+ (insn mode:$addr, (UIMM8 $src))>;
----------------
uweigand wrote:
Why do you need any of these? Isn't this just `RMWI` with the appropriate parameters?
https://github.com/llvm/llvm-project/pull/192802
More information about the llvm-commits
mailing list