[clang] [CIR] Change the 'inline_kind' enum to have an explicit attribute (PR #215335)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 10 09:54:08 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clangir
Author: Erich Keane (erichkeane)
<details>
<summary>Changes</summary>
If we use the builtin automatic inline-kind here, we don't get to have it printed reasonably/normally. This patch adds the 'genSpecializedAttr=0' and adds an explicit attribute so we print it as an enum value.
---
Full diff: https://github.com/llvm/llvm-project/pull/215335.diff
3 Files Affected:
- (modified) clang/include/clang/CIR/Dialect/IR/CIRAttrs.td (+9-1)
- (modified) clang/include/clang/CIR/Dialect/IR/CIROps.td (+2-2)
- (modified) clang/test/CIR/CodeGen/callsite-inline-attributes.cpp (+8-8)
``````````diff
diff --git a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
index 71585cd83fb66..5cb773035a8fd 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
@@ -1695,7 +1695,15 @@ def CIR_InlineKind : CIR_I32EnumAttr<"InlineKind", "inlineKind", [
I32EnumAttrCase<"NoInline", 1, "no_inline">,
I32EnumAttrCase<"AlwaysInline", 2, "always_inline">,
I32EnumAttrCase<"InlineHint", 3, "inline_hint">
-]>;
+]> {
+ let genSpecializedAttr = 0;
+}
+
+def CIR_InlineKindAttr: CIR_EnumAttr<CIR_InlineKind, "inline_kind"> {
+ let summary = "Inline kind attribute";
+ let description = [{ Inline Kind attributes }];
+ let cppClassName = "InlineKindAttr";
+}
//===----------------------------------------------------------------------===//
// CatchAllAttr & UnwindAttr
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index d0f3c9ee6715f..815dc5c8cddad 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -4221,7 +4221,7 @@ def CIR_FuncOp : CIR_Op<"func", [
TypeAttrOf<CIR_FuncType>:$function_type,
UnitAttr:$builtin,
UnitAttr:$coroutine,
- OptionalAttr<CIR_InlineKind>:$inline_kind,
+ OptionalAttr<CIR_InlineKindAttr>:$inline_kind,
UnitAttr:$lambda,
UnitAttr:$no_proto,
UnitAttr:$dso_local,
@@ -4540,7 +4540,7 @@ class CIR_CallOpBase<string mnemonic, list<Trait> extra_traits = []>
dag commonArgs = (ins OptionalAttr<FlatSymbolRefAttr>:$callee,
Variadic<CIR_AnyType>:$args,
UnitAttr:$nothrow,
- OptionalAttr<CIR_InlineKind>:$inline_kind,
+ OptionalAttr<CIR_InlineKindAttr>:$inline_kind,
UnitAttr:$musttail,
DefaultValuedAttr<CIR_SideEffect, "SideEffect::All">:$side_effect,
OptionalAttr<DictArrayAttr>:$arg_attrs,
diff --git a/clang/test/CIR/CodeGen/callsite-inline-attributes.cpp b/clang/test/CIR/CodeGen/callsite-inline-attributes.cpp
index 06422d36539c6..13a4fcfbb690c 100644
--- a/clang/test/CIR/CodeGen/callsite-inline-attributes.cpp
+++ b/clang/test/CIR/CodeGen/callsite-inline-attributes.cpp
@@ -14,39 +14,39 @@ void caller() {
[[clang::always_inline]]
callee();
- // CIR: cir.call @_Z6calleev() {inline_kind = 2 : i32}
+ // CIR: cir.call @_Z6calleev() {inline_kind = #cir.inline_kind<always_inline>}
// LLVM: call void @_Z6calleev() #[[ALWAYSINLINE:.*]]
[[clang::noinline]]
callee();
- // CIR: cir.call @_Z6calleev() {inline_kind = 1 : i32}
+ // CIR: cir.call @_Z6calleev() {inline_kind = #cir.inline_kind<no_inline>}
// LLVM: call void @_Z6calleev() #[[NOINLINE:.*]]
[[clang::always_inline]]
fptr();
- // CIR: cir.call %{{.*}}() {inline_kind = 2 : i32}
+ // CIR: cir.call %{{.*}}() {inline_kind = #cir.inline_kind<always_inline>}
// LLVM: call void %{{.*}}() #[[ALWAYSINLINE]]
[[clang::noinline]]
fptr();
- // CIR: cir.call %{{.*}}() {inline_kind = 1 : i32}
+ // CIR: cir.call %{{.*}}() {inline_kind = #cir.inline_kind<no_inline>}
// LLVM: call void %{{.*}}() #[[NOINLINE]]
[[clang::always_inline]]
{
callee();
- // CIR: cir.call @_Z6calleev() {inline_kind = 2 : i32}
+ // CIR: cir.call @_Z6calleev() {inline_kind = #cir.inline_kind<always_inline>}
// LLVM: call void @_Z6calleev() #[[ALWAYSINLINE]]
fptr();
- // CIR: cir.call %{{.*}}() {inline_kind = 2 : i32}
+ // CIR: cir.call %{{.*}}() {inline_kind = #cir.inline_kind<always_inline>}
// LLVM: call void %{{.*}}() #[[ALWAYSINLINE]]
}
[[clang::noinline]]
{
callee();
- // CIR: cir.call @_Z6calleev() {inline_kind = 1 : i32}
+ // CIR: cir.call @_Z6calleev() {inline_kind = #cir.inline_kind<no_inline>}
// LLVM: call void @_Z6calleev() #[[NOINLINE]]
fptr();
- // CIR: cir.call %{{.*}}() {inline_kind = 1 : i32}
+ // CIR: cir.call %{{.*}}() {inline_kind = #cir.inline_kind<no_inline>}
// LLVM: call void %{{.*}}() #[[NOINLINE]]
}
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/215335
More information about the cfe-commits
mailing list