[clang] [CIR] Add side effect attribute to call operations (PR #144201)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 16 10:58:54 PDT 2025
================
@@ -1858,6 +1858,40 @@ def FuncOp : CIR_Op<"func", [
// CallOp
//===----------------------------------------------------------------------===//
+def SE_All : I32EnumAttrCase<"All", 1, "all">;
+def SE_Pure : I32EnumAttrCase<"Pure", 2, "pure">;
+def SE_Const : I32EnumAttrCase<"Const", 3, "const">;
+
+def SideEffect
+ : I32EnumAttr<
+ "SideEffect",
+ "allowed side effects of a function", [SE_All, SE_Pure, SE_Const]> {
+ let description = [{
+ The side effect attribute specifies the possible side effects of the callee
+ of a call operation. This is an enumeration attribute and all possible
+ enumerators are:
+
+ - all: The callee can have any side effects. This is the default if no side
+ effects are explicitly listed.
+ - pure: The callee may read data from memory, but it cannot write data to
+ memory. This has the same effect as the GNU C/C++ attribute
+ `__attribute__((pure))`.
+ - const: The callee may not read or write data from memory. This has the
+ same effect as the GNU C/C++ attribute `__attribute__((const))`.
+
+ Examples:
+
+ ```mlir
+ %0 = cir.const #cir.int<0> : !s32i
+ %1 = cir.const #cir.int<1> : !s32i
+ %2 = cir.call @add(%0, %1) : (!s32i, !s32i) -> !s32i side_effect(all)
----------------
andykaylor wrote:
```suggestion
%2 = cir.call @add(%0, %1) : (!s32i, !s32i) -> !s32i
```
`side_effect(all)` doesn't get printed
https://github.com/llvm/llvm-project/pull/144201
More information about the cfe-commits
mailing list