[PATCH] D115199: [X86][AMX] Support amxpreserve attribute in clang.
LuoYuanke via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 6 16:16:06 PST 2021
LuoYuanke created this revision.
Herald added a reviewer: aaron.ballman.
LuoYuanke requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D115199
Files:
clang/include/clang/Basic/Attr.td
clang/lib/CodeGen/CGCall.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/Sema/SemaType.cpp
Index: clang/lib/Sema/SemaType.cpp
===================================================================
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -7514,6 +7514,17 @@
return true;
}
+ if (attr.getKind() == ParsedAttr::AT_AMXPreserve) {
+ if (S.CheckAttrTarget(attr))
+ return true;
+
+ // Delay if this is not a function type.
+ if (!unwrapped.isFunctionType())
+ return false;
+
+ return true;
+ }
+
if (attr.getKind() == ParsedAttr::AT_AnyX86NoCallerSavedRegisters) {
if (S.CheckAttrTarget(attr) || S.CheckAttrNoArgs(attr))
return true;
Index: clang/lib/CodeGen/CodeGenModule.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ clang/lib/CodeGen/CodeGenModule.cpp
@@ -1858,6 +1858,8 @@
// carry an explicit noinline attribute.
if (!F->hasFnAttribute(llvm::Attribute::AlwaysInline))
B.addAttribute(llvm::Attribute::NoInline);
+ } else if (D->hasAttr<AMXPreserveAttr>()) {
+ B.addAttribute(llvm::Attribute::AMXPreserve);
} else {
// Otherwise, propagate the inline hint attribute and potentially use its
// absence to mark things as noinline.
Index: clang/lib/CodeGen/CGCall.cpp
===================================================================
--- clang/lib/CodeGen/CGCall.cpp
+++ clang/lib/CodeGen/CGCall.cpp
@@ -2116,6 +2116,8 @@
FuncAttrs.addAttribute(llvm::Attribute::NoCfCheck);
if (TargetDecl->hasAttr<LeafAttr>())
FuncAttrs.addAttribute(llvm::Attribute::NoCallback);
+ if (TargetDecl->hasAttr<AMXPreserveAttr>())
+ FuncAttrs.addAttribute(llvm::Attribute::AMXPreserve);
HasOptnone = TargetDecl->hasAttr<OptimizeNoneAttr>();
if (auto *AllocSize = TargetDecl->getAttr<AllocSizeAttr>()) {
Index: clang/include/clang/Basic/Attr.td
===================================================================
--- clang/include/clang/Basic/Attr.td
+++ clang/include/clang/Basic/Attr.td
@@ -2892,6 +2892,12 @@
let SimpleHandler = 1;
}
+def AMXPreserve : InheritableAttr, TargetSpecificAttr<TargetAnyX86> {
+ let Spellings = [GCC<"amxpreserve">, Declspec<"amxpreserve">];
+ let Documentation = [Undocumented];
+ let SimpleHandler = 1;
+}
+
def AnyX86Interrupt : InheritableAttr, TargetSpecificAttr<TargetAnyX86> {
// NOTE: If you add any additional spellings, ARMInterrupt's,
// M68kInterrupt's, MSP430Interrupt's and MipsInterrupt's spellings must match.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115199.392219.patch
Type: text/x-patch
Size: 2473 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211207/bdfd1183/attachment.bin>
More information about the cfe-commits
mailing list