https://github.com/erichkeane created https://github.com/llvm/llvm-project/pull/215335
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. >From 43c269eea48a49a55079e100e44ecbf5ba088d74 Mon Sep 17 00:00:00 2001 From: erichkeane <[email protected]> Date: Mon, 10 Aug 2026 09:51:46 -0700 Subject: [PATCH] [CIR] Change the 'inline_kind' enum to have an explicit attribute 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. --- clang/include/clang/CIR/Dialect/IR/CIRAttrs.td | 10 +++++++++- clang/include/clang/CIR/Dialect/IR/CIROps.td | 4 ++-- .../CIR/CodeGen/callsite-inline-attributes.cpp | 16 ++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) 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]] } } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
