public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] backend: handle cold attribute
@ 2022-06-08 12:34 Thomas Schwinge
0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2022-06-08 12:34 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:16730054de50fa613b86addd9cc4d737cfb7caf8
commit 16730054de50fa613b86addd9cc4d737cfb7caf8
Author: liushuyu <liushuyu011@gmail.com>
Date: Thu Apr 21 17:30:52 2022 -0600
backend: handle cold attribute
Diff:
---
gcc/rust/backend/rust-compile-base.cc | 23 +++++++++++++++++++++++
gcc/rust/backend/rust-compile-base.h | 3 +++
gcc/rust/util/rust-attributes.cc | 15 ++++++++++-----
gcc/testsuite/rust/compile/attr_cold.rs | 12 ++++++++++++
4 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc
index 602fc56c353..f138cb12478 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -55,6 +55,7 @@ HIRCompileBase::setup_attributes_on_fndecl (
bool is_inline = attr.get_path ().as_string ().compare ("inline") == 0;
bool is_must_use
= attr.get_path ().as_string ().compare ("must_use") == 0;
+ bool is_cold = attr.get_path ().as_string ().compare ("cold") == 0;
if (is_inline)
{
handle_inline_attribute_on_fndecl (fndecl, attr);
@@ -63,7 +64,29 @@ HIRCompileBase::setup_attributes_on_fndecl (
{
handle_must_use_attribute_on_fndecl (fndecl, attr);
}
+ else if (is_cold)
+ {
+ handle_cold_attribute_on_fndecl (fndecl, attr);
+ }
+ }
+}
+
+void
+HIRCompileBase::handle_cold_attribute_on_fndecl (tree fndecl,
+ const AST::Attribute &attr)
+{
+ // simple #[cold]
+ if (!attr.has_attr_input ())
+ {
+ tree cold = get_identifier ("cold");
+ // this will get handled by the GCC backend later
+ DECL_ATTRIBUTES (fndecl)
+ = tree_cons (cold, NULL_TREE, DECL_ATTRIBUTES (fndecl));
+ return;
}
+
+ rust_error_at (attr.get_locus (),
+ "attribute %<cold%> does not accept any arguments");
}
void
diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h
index c7f7f406ebd..68a3994450b 100644
--- a/gcc/rust/backend/rust-compile-base.h
+++ b/gcc/rust/backend/rust-compile-base.h
@@ -82,6 +82,9 @@ protected:
static void handle_inline_attribute_on_fndecl (tree fndecl,
const AST::Attribute &attr);
+ static void handle_cold_attribute_on_fndecl (tree fndecl,
+ const AST::Attribute &attr);
+
static void handle_must_use_attribute_on_fndecl (tree fndecl,
const AST::Attribute &attr);
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index b1211fe792c..106500d87e6 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -22,11 +22,16 @@ namespace Rust {
namespace Analysis {
// https://doc.rust-lang.org/stable/nightly-rustc/src/rustc_feature/builtin_attrs.rs.html#248
-static const BuiltinAttrDefinition __definitions[]
- = {{"inline", CODE_GENERATION}, {"cfg", EXPANSION},
- {"cfg_attr", EXPANSION}, {"allow", STATIC_ANALYSIS},
- {"doc", HIR_LOWERING}, {"lang", HIR_LOWERING},
- {"must_use", STATIC_ANALYSIS}};
+static const BuiltinAttrDefinition __definitions[] = {
+ {"inline", CODE_GENERATION},
+ {"cold", CODE_GENERATION},
+ {"cfg", EXPANSION},
+ {"cfg_attr", EXPANSION},
+ {"allow", STATIC_ANALYSIS},
+ {"doc", HIR_LOWERING},
+ {"must_use", STATIC_ANALYSIS},
+ {"lang", HIR_LOWERING},
+};
BuiltinAttributeMappings *
BuiltinAttributeMappings::get ()
diff --git a/gcc/testsuite/rust/compile/attr_cold.rs b/gcc/testsuite/rust/compile/attr_cold.rs
new file mode 100644
index 00000000000..883d2f81932
--- /dev/null
+++ b/gcc/testsuite/rust/compile/attr_cold.rs
@@ -0,0 +1,12 @@
+// { dg-additional-options "-fdump-tree-gimple }
+#[cold]
+fn cold_function() -> i32 {
+ 42
+}
+
+fn main() -> i32 {
+ // { dg-final { scan-tree-dump-times {__attribute__((cdecl, cold))} 1 gimple } }
+ cold_function();
+
+ 0
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-06-08 12:34 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-08 12:34 [gcc/devel/rust/master] backend: handle cold attribute Thomas Schwinge
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).