From dc6cd6a29a0831d1a4d607162a1dbd07b556143a Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 30 Jul 2026 14:32:20 +0200 Subject: [PATCH] [mlir] Honor IntrHasSideEffects on IntrNoMem LLVM intrinsics (#212760) `[IntrNoMem, IntrHasSideEffects]` is a perfectly valid intrinsic trait combination, and MLIR would CSE/DCE those without checking. This mirrors how LLVM models this, see getEffectiveME in IntrinsicEmitter.cpp --- mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp b/mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp index 54cc4b79a36b..ea72ae974c58 100644 --- a/mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp +++ b/mlir/tools/mlir-tblgen/LLVMIRIntrinsicGen.cpp @@ -161,11 +161,15 @@ public: } /// Return true if the intrinsic may have side effects, i.e. does not have the - /// `IntrNoMem` property. + /// `IntrNoMem` property or has the `IntrHasSideEffects` property. bool hasSideEffects() const { return llvm::none_of( - record.getValueAsListOfDefs(fieldTraits), - [](const Record *r) { return r->getName() == "IntrNoMem"; }); + record.getValueAsListOfDefs(fieldTraits), + [](const Record *r) { return r->getName() == "IntrNoMem"; }) || + llvm::any_of(record.getValueAsListOfDefs(fieldTraits), + [](const Record *r) { + return r->getName() == "IntrHasSideEffects"; + }); } /// Return true if the intrinsic is commutative, i.e. has the respective