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

Reply via email to