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).