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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to