diff options
author | alk3pInjection <webmaster@raspii.tech> | 2024-02-04 16:16:35 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2024-02-04 16:16:35 +0800 |
commit | abdaadbcae30fe0c9a66c7516798279fdfd97750 (patch) | |
tree | 00a54a6e25601e43876d03c1a4a12a749d4a914c /lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h |
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
Change-Id: I7303388733328cd98ab9aa3c30236db67f2e9e9c
Diffstat (limited to 'lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h')
-rw-r--r-- | lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h b/lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h new file mode 100644 index 0000000..0914bcb --- /dev/null +++ b/lib/gcc/arm-none-eabi/13.2.1/plugin/include/tree-nested.h @@ -0,0 +1,89 @@ +/* Header file for Nested function decomposition for GIMPLE. + Copyright (C) 2013-2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef GCC_TREE_NESTED_H +#define GCC_TREE_NESTED_H + +extern tree build_addr (tree); +extern void insert_field_into_struct (tree, tree); +extern void lower_nested_functions (tree); + +class nested_function_info +{ +public: + /* Constructor. */ + nested_function_info () + : origin (NULL), + nested (NULL), + next_nested (NULL) + { + } + /* Copy constructor. We can not simply copy the structure, + because the linked lists would go wrong. However we should never + need that. */ + nested_function_info (const nested_function_info &) + { + gcc_unreachable (); + } + ~nested_function_info (); + + /* Return nested_function_info, if available. */ + static nested_function_info *get (cgraph_node *node); + + /* Return nested_function_info possibly creating new one. */ + static nested_function_info *get_create (cgraph_node *node); + + /* Release all nested_function_infos. */ + static void release (void); + + /* For nested functions points to function the node is nested in. */ + cgraph_node *origin; + /* Points to first nested function, if any. */ + cgraph_node *nested; + /* Pointer to the next function with same origin, if any. */ + cgraph_node *next_nested; +}; + +extern void maybe_record_nested_function (cgraph_node *node); +extern void unnest_function (cgraph_node *node); + +/* If there are functions nested in NODE, return first one. */ +inline cgraph_node * +first_nested_function (cgraph_node *node) +{ + nested_function_info *info = nested_function_info::get (node); + return info ? info->nested : NULL; +} + +/* Return next nested function (used to iterate from first_nested_function). */ +inline cgraph_node * +next_nested_function (cgraph_node *node) +{ + return nested_function_info::get (node)->next_nested; +} + +/* Return origin of nested function (and NULL otherwise). */ +inline cgraph_node * +nested_function_origin (cgraph_node *node) +{ + nested_function_info *info = nested_function_info::get (node); + return info ? info->origin : NULL; +} + +#endif /* GCC_TREE_NESTED_H */ |