18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef GCC_COMMON_H_INCLUDED
38c2ecf20Sopenharmony_ci#define GCC_COMMON_H_INCLUDED
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include "bversion.h"
68c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 6000
78c2ecf20Sopenharmony_ci#include "gcc-plugin.h"
88c2ecf20Sopenharmony_ci#else
98c2ecf20Sopenharmony_ci#include "plugin.h"
108c2ecf20Sopenharmony_ci#endif
118c2ecf20Sopenharmony_ci#include "plugin-version.h"
128c2ecf20Sopenharmony_ci#include "config.h"
138c2ecf20Sopenharmony_ci#include "system.h"
148c2ecf20Sopenharmony_ci#include "coretypes.h"
158c2ecf20Sopenharmony_ci#include "tm.h"
168c2ecf20Sopenharmony_ci#include "line-map.h"
178c2ecf20Sopenharmony_ci#include "input.h"
188c2ecf20Sopenharmony_ci#include "tree.h"
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#include "tree-inline.h"
218c2ecf20Sopenharmony_ci#include "version.h"
228c2ecf20Sopenharmony_ci#include "rtl.h"
238c2ecf20Sopenharmony_ci#include "tm_p.h"
248c2ecf20Sopenharmony_ci#include "flags.h"
258c2ecf20Sopenharmony_ci#include "hard-reg-set.h"
268c2ecf20Sopenharmony_ci#include "output.h"
278c2ecf20Sopenharmony_ci#include "except.h"
288c2ecf20Sopenharmony_ci#include "function.h"
298c2ecf20Sopenharmony_ci#include "toplev.h"
308c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 5000
318c2ecf20Sopenharmony_ci#include "expr.h"
328c2ecf20Sopenharmony_ci#endif
338c2ecf20Sopenharmony_ci#include "basic-block.h"
348c2ecf20Sopenharmony_ci#include "intl.h"
358c2ecf20Sopenharmony_ci#include "ggc.h"
368c2ecf20Sopenharmony_ci#include "timevar.h"
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION < 10000
398c2ecf20Sopenharmony_ci#include "params.h"
408c2ecf20Sopenharmony_ci#endif
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4009
438c2ecf20Sopenharmony_ci#include "pointer-set.h"
448c2ecf20Sopenharmony_ci#else
458c2ecf20Sopenharmony_ci#include "hash-map.h"
468c2ecf20Sopenharmony_ci#endif
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 7000
498c2ecf20Sopenharmony_ci#include "memmodel.h"
508c2ecf20Sopenharmony_ci#endif
518c2ecf20Sopenharmony_ci#include "emit-rtl.h"
528c2ecf20Sopenharmony_ci#include "debug.h"
538c2ecf20Sopenharmony_ci#include "target.h"
548c2ecf20Sopenharmony_ci#include "langhooks.h"
558c2ecf20Sopenharmony_ci#include "cfgloop.h"
568c2ecf20Sopenharmony_ci#include "cgraph.h"
578c2ecf20Sopenharmony_ci#include "opts.h"
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4005
608c2ecf20Sopenharmony_ci#include <sys/mman.h>
618c2ecf20Sopenharmony_ci#endif
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4007
648c2ecf20Sopenharmony_ci#include "tree-pretty-print.h"
658c2ecf20Sopenharmony_ci#include "gimple-pretty-print.h"
668c2ecf20Sopenharmony_ci#endif
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4006
698c2ecf20Sopenharmony_ci/*
708c2ecf20Sopenharmony_ci * The c-family headers were moved into a subdirectory in GCC version
718c2ecf20Sopenharmony_ci * 4.7, but most plugin-building users of GCC 4.6 are using the Debian
728c2ecf20Sopenharmony_ci * or Ubuntu package, which has an out-of-tree patch to move this to the
738c2ecf20Sopenharmony_ci * same location as found in 4.7 and later:
748c2ecf20Sopenharmony_ci * https://sources.debian.net/src/gcc-4.6/4.6.3-14/debian/patches/pr45078.diff/
758c2ecf20Sopenharmony_ci */
768c2ecf20Sopenharmony_ci#include "c-family/c-common.h"
778c2ecf20Sopenharmony_ci#else
788c2ecf20Sopenharmony_ci#include "c-common.h"
798c2ecf20Sopenharmony_ci#endif
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4008
828c2ecf20Sopenharmony_ci#include "tree-flow.h"
838c2ecf20Sopenharmony_ci#else
848c2ecf20Sopenharmony_ci#include "tree-cfgcleanup.h"
858c2ecf20Sopenharmony_ci#include "tree-ssa-operands.h"
868c2ecf20Sopenharmony_ci#include "tree-into-ssa.h"
878c2ecf20Sopenharmony_ci#endif
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4008
908c2ecf20Sopenharmony_ci#include "is-a.h"
918c2ecf20Sopenharmony_ci#endif
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci#include "diagnostic.h"
948c2ecf20Sopenharmony_ci#include "tree-dump.h"
958c2ecf20Sopenharmony_ci#include "tree-pass.h"
968c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4009
978c2ecf20Sopenharmony_ci#include "pass_manager.h"
988c2ecf20Sopenharmony_ci#endif
998c2ecf20Sopenharmony_ci#include "predict.h"
1008c2ecf20Sopenharmony_ci#include "ipa-utils.h"
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 8000
1038c2ecf20Sopenharmony_ci#include "stringpool.h"
1048c2ecf20Sopenharmony_ci#endif
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4009
1078c2ecf20Sopenharmony_ci#include "attribs.h"
1088c2ecf20Sopenharmony_ci#include "varasm.h"
1098c2ecf20Sopenharmony_ci#include "stor-layout.h"
1108c2ecf20Sopenharmony_ci#include "internal-fn.h"
1118c2ecf20Sopenharmony_ci#endif
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci#include "gimple.h"
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4009
1168c2ecf20Sopenharmony_ci#include "gimple-expr.h"
1178c2ecf20Sopenharmony_ci#include "gimple-iterator.h"
1188c2ecf20Sopenharmony_ci#include "gimple-fold.h"
1198c2ecf20Sopenharmony_ci#include "context.h"
1208c2ecf20Sopenharmony_ci#include "tree-ssa-alias.h"
1218c2ecf20Sopenharmony_ci#include "tree-ssa.h"
1228c2ecf20Sopenharmony_ci#include "stringpool.h"
1238c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 7000
1248c2ecf20Sopenharmony_ci#include "tree-vrp.h"
1258c2ecf20Sopenharmony_ci#endif
1268c2ecf20Sopenharmony_ci#include "tree-ssanames.h"
1278c2ecf20Sopenharmony_ci#include "print-tree.h"
1288c2ecf20Sopenharmony_ci#include "tree-eh.h"
1298c2ecf20Sopenharmony_ci#include "stmt.h"
1308c2ecf20Sopenharmony_ci#include "gimplify.h"
1318c2ecf20Sopenharmony_ci#endif
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4009
1348c2ecf20Sopenharmony_ci#include "tree-ssa-operands.h"
1358c2ecf20Sopenharmony_ci#include "tree-phinodes.h"
1368c2ecf20Sopenharmony_ci#include "tree-cfg.h"
1378c2ecf20Sopenharmony_ci#include "gimple-ssa.h"
1388c2ecf20Sopenharmony_ci#include "ssa-iterators.h"
1398c2ecf20Sopenharmony_ci#endif
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 5000
1428c2ecf20Sopenharmony_ci#include "builtins.h"
1438c2ecf20Sopenharmony_ci#endif
1448c2ecf20Sopenharmony_ci
1458c2ecf20Sopenharmony_ci/* missing from basic_block.h... */
1468c2ecf20Sopenharmony_civoid debug_dominance_info(enum cdi_direction dir);
1478c2ecf20Sopenharmony_civoid debug_dominance_tree(enum cdi_direction dir, basic_block root);
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4006
1508c2ecf20Sopenharmony_civoid debug_gimple_stmt(gimple);
1518c2ecf20Sopenharmony_civoid debug_gimple_seq(gimple_seq);
1528c2ecf20Sopenharmony_civoid print_gimple_seq(FILE *, gimple_seq, int, int);
1538c2ecf20Sopenharmony_civoid print_gimple_stmt(FILE *, gimple, int, int);
1548c2ecf20Sopenharmony_civoid print_gimple_expr(FILE *, gimple, int, int);
1558c2ecf20Sopenharmony_civoid dump_gimple_stmt(pretty_printer *, gimple, int, int);
1568c2ecf20Sopenharmony_ci#endif
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci#ifndef __unused
1598c2ecf20Sopenharmony_ci#define __unused __attribute__((__unused__))
1608c2ecf20Sopenharmony_ci#endif
1618c2ecf20Sopenharmony_ci#ifndef __visible
1628c2ecf20Sopenharmony_ci#define __visible __attribute__((visibility("default")))
1638c2ecf20Sopenharmony_ci#endif
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci#define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node))
1668c2ecf20Sopenharmony_ci#define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node))
1678c2ecf20Sopenharmony_ci#define TYPE_NAME_POINTER(node) IDENTIFIER_POINTER(TYPE_NAME(node))
1688c2ecf20Sopenharmony_ci#define TYPE_NAME_LENGTH(node) IDENTIFIER_LENGTH(TYPE_NAME(node))
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_ci/* should come from c-tree.h if only it were installed for gcc 4.5... */
1718c2ecf20Sopenharmony_ci#define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1(TYPE)
1728c2ecf20Sopenharmony_ci
1738c2ecf20Sopenharmony_cistatic inline tree build_const_char_string(int len, const char *str)
1748c2ecf20Sopenharmony_ci{
1758c2ecf20Sopenharmony_ci	tree cstr, elem, index, type;
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci	cstr = build_string(len, str);
1788c2ecf20Sopenharmony_ci	elem = build_type_variant(char_type_node, 1, 0);
1798c2ecf20Sopenharmony_ci	index = build_index_type(size_int(len - 1));
1808c2ecf20Sopenharmony_ci	type = build_array_type(elem, index);
1818c2ecf20Sopenharmony_ci	TREE_TYPE(cstr) = type;
1828c2ecf20Sopenharmony_ci	TREE_CONSTANT(cstr) = 1;
1838c2ecf20Sopenharmony_ci	TREE_READONLY(cstr) = 1;
1848c2ecf20Sopenharmony_ci	TREE_STATIC(cstr) = 1;
1858c2ecf20Sopenharmony_ci	return cstr;
1868c2ecf20Sopenharmony_ci}
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci#define PASS_INFO(NAME, REF, ID, POS)		\
1898c2ecf20Sopenharmony_cistruct register_pass_info NAME##_pass_info = {	\
1908c2ecf20Sopenharmony_ci	.pass = make_##NAME##_pass(),		\
1918c2ecf20Sopenharmony_ci	.reference_pass_name = REF,		\
1928c2ecf20Sopenharmony_ci	.ref_pass_instance_number = ID,		\
1938c2ecf20Sopenharmony_ci	.pos_op = POS,				\
1948c2ecf20Sopenharmony_ci}
1958c2ecf20Sopenharmony_ci
1968c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4005
1978c2ecf20Sopenharmony_ci#define FOR_EACH_LOCAL_DECL(FUN, I, D)			\
1988c2ecf20Sopenharmony_ci	for (tree vars = (FUN)->local_decls, (I) = 0;	\
1998c2ecf20Sopenharmony_ci		vars && ((D) = TREE_VALUE(vars));	\
2008c2ecf20Sopenharmony_ci		vars = TREE_CHAIN(vars), (I)++)
2018c2ecf20Sopenharmony_ci#define DECL_CHAIN(NODE) (TREE_CHAIN(DECL_MINIMAL_CHECK(NODE)))
2028c2ecf20Sopenharmony_ci#define FOR_EACH_VEC_ELT(T, V, I, P) \
2038c2ecf20Sopenharmony_ci	for (I = 0; VEC_iterate(T, (V), (I), (P)); ++(I))
2048c2ecf20Sopenharmony_ci#define TODO_rebuild_cgraph_edges 0
2058c2ecf20Sopenharmony_ci#define SCOPE_FILE_SCOPE_P(EXP) (!(EXP))
2068c2ecf20Sopenharmony_ci
2078c2ecf20Sopenharmony_ci#ifndef O_BINARY
2088c2ecf20Sopenharmony_ci#define O_BINARY 0
2098c2ecf20Sopenharmony_ci#endif
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_citypedef struct varpool_node *varpool_node_ptr;
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_cistatic inline bool gimple_call_builtin_p(gimple stmt, enum built_in_function code)
2148c2ecf20Sopenharmony_ci{
2158c2ecf20Sopenharmony_ci	tree fndecl;
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ci	if (!is_gimple_call(stmt))
2188c2ecf20Sopenharmony_ci		return false;
2198c2ecf20Sopenharmony_ci	fndecl = gimple_call_fndecl(stmt);
2208c2ecf20Sopenharmony_ci	if (!fndecl || DECL_BUILT_IN_CLASS(fndecl) != BUILT_IN_NORMAL)
2218c2ecf20Sopenharmony_ci		return false;
2228c2ecf20Sopenharmony_ci	return DECL_FUNCTION_CODE(fndecl) == code;
2238c2ecf20Sopenharmony_ci}
2248c2ecf20Sopenharmony_ci
2258c2ecf20Sopenharmony_cistatic inline bool is_simple_builtin(tree decl)
2268c2ecf20Sopenharmony_ci{
2278c2ecf20Sopenharmony_ci	if (decl && DECL_BUILT_IN_CLASS(decl) != BUILT_IN_NORMAL)
2288c2ecf20Sopenharmony_ci		return false;
2298c2ecf20Sopenharmony_ci
2308c2ecf20Sopenharmony_ci	switch (DECL_FUNCTION_CODE(decl)) {
2318c2ecf20Sopenharmony_ci	/* Builtins that expand to constants. */
2328c2ecf20Sopenharmony_ci	case BUILT_IN_CONSTANT_P:
2338c2ecf20Sopenharmony_ci	case BUILT_IN_EXPECT:
2348c2ecf20Sopenharmony_ci	case BUILT_IN_OBJECT_SIZE:
2358c2ecf20Sopenharmony_ci	case BUILT_IN_UNREACHABLE:
2368c2ecf20Sopenharmony_ci	/* Simple register moves or loads from stack. */
2378c2ecf20Sopenharmony_ci	case BUILT_IN_RETURN_ADDRESS:
2388c2ecf20Sopenharmony_ci	case BUILT_IN_EXTRACT_RETURN_ADDR:
2398c2ecf20Sopenharmony_ci	case BUILT_IN_FROB_RETURN_ADDR:
2408c2ecf20Sopenharmony_ci	case BUILT_IN_RETURN:
2418c2ecf20Sopenharmony_ci	case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
2428c2ecf20Sopenharmony_ci	case BUILT_IN_FRAME_ADDRESS:
2438c2ecf20Sopenharmony_ci	case BUILT_IN_VA_END:
2448c2ecf20Sopenharmony_ci	case BUILT_IN_STACK_SAVE:
2458c2ecf20Sopenharmony_ci	case BUILT_IN_STACK_RESTORE:
2468c2ecf20Sopenharmony_ci	/* Exception state returns or moves registers around. */
2478c2ecf20Sopenharmony_ci	case BUILT_IN_EH_FILTER:
2488c2ecf20Sopenharmony_ci	case BUILT_IN_EH_POINTER:
2498c2ecf20Sopenharmony_ci	case BUILT_IN_EH_COPY_VALUES:
2508c2ecf20Sopenharmony_ci	return true;
2518c2ecf20Sopenharmony_ci
2528c2ecf20Sopenharmony_ci	default:
2538c2ecf20Sopenharmony_ci	return false;
2548c2ecf20Sopenharmony_ci	}
2558c2ecf20Sopenharmony_ci}
2568c2ecf20Sopenharmony_ci
2578c2ecf20Sopenharmony_cistatic inline void add_local_decl(struct function *fun, tree d)
2588c2ecf20Sopenharmony_ci{
2598c2ecf20Sopenharmony_ci	gcc_assert(TREE_CODE(d) == VAR_DECL);
2608c2ecf20Sopenharmony_ci	fun->local_decls = tree_cons(NULL_TREE, d, fun->local_decls);
2618c2ecf20Sopenharmony_ci}
2628c2ecf20Sopenharmony_ci#endif
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4006
2658c2ecf20Sopenharmony_ci#define ANY_RETURN_P(rtx) (GET_CODE(rtx) == RETURN)
2668c2ecf20Sopenharmony_ci#define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4(EXP)
2678c2ecf20Sopenharmony_ci#define EDGE_PRESERVE 0ULL
2688c2ecf20Sopenharmony_ci#define HOST_WIDE_INT_PRINT_HEX_PURE "%" HOST_WIDE_INT_PRINT "x"
2698c2ecf20Sopenharmony_ci#define flag_fat_lto_objects true
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ci#define get_random_seed(noinit) ({						\
2728c2ecf20Sopenharmony_ci	unsigned HOST_WIDE_INT seed;						\
2738c2ecf20Sopenharmony_ci	sscanf(get_random_seed(noinit), "%" HOST_WIDE_INT_PRINT "x", &seed);	\
2748c2ecf20Sopenharmony_ci	seed * seed; })
2758c2ecf20Sopenharmony_ci
2768c2ecf20Sopenharmony_ci#define int_const_binop(code, arg1, arg2)	\
2778c2ecf20Sopenharmony_ci	int_const_binop((code), (arg1), (arg2), 0)
2788c2ecf20Sopenharmony_ci
2798c2ecf20Sopenharmony_cistatic inline bool gimple_clobber_p(gimple s __unused)
2808c2ecf20Sopenharmony_ci{
2818c2ecf20Sopenharmony_ci	return false;
2828c2ecf20Sopenharmony_ci}
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_cistatic inline bool gimple_asm_clobbers_memory_p(const_gimple stmt)
2858c2ecf20Sopenharmony_ci{
2868c2ecf20Sopenharmony_ci	unsigned i;
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci	for (i = 0; i < gimple_asm_nclobbers(stmt); i++) {
2898c2ecf20Sopenharmony_ci		tree op = gimple_asm_clobber_op(stmt, i);
2908c2ecf20Sopenharmony_ci
2918c2ecf20Sopenharmony_ci		if (!strcmp(TREE_STRING_POINTER(TREE_VALUE(op)), "memory"))
2928c2ecf20Sopenharmony_ci			return true;
2938c2ecf20Sopenharmony_ci	}
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci	return false;
2968c2ecf20Sopenharmony_ci}
2978c2ecf20Sopenharmony_ci
2988c2ecf20Sopenharmony_cistatic inline tree builtin_decl_implicit(enum built_in_function fncode)
2998c2ecf20Sopenharmony_ci{
3008c2ecf20Sopenharmony_ci	return implicit_built_in_decls[fncode];
3018c2ecf20Sopenharmony_ci}
3028c2ecf20Sopenharmony_ci
3038c2ecf20Sopenharmony_cistatic inline int ipa_reverse_postorder(struct cgraph_node **order)
3048c2ecf20Sopenharmony_ci{
3058c2ecf20Sopenharmony_ci	return cgraph_postorder(order);
3068c2ecf20Sopenharmony_ci}
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_cistatic inline struct cgraph_node *cgraph_create_node(tree decl)
3098c2ecf20Sopenharmony_ci{
3108c2ecf20Sopenharmony_ci	return cgraph_node(decl);
3118c2ecf20Sopenharmony_ci}
3128c2ecf20Sopenharmony_ci
3138c2ecf20Sopenharmony_cistatic inline struct cgraph_node *cgraph_get_create_node(tree decl)
3148c2ecf20Sopenharmony_ci{
3158c2ecf20Sopenharmony_ci	struct cgraph_node *node = cgraph_get_node(decl);
3168c2ecf20Sopenharmony_ci
3178c2ecf20Sopenharmony_ci	return node ? node : cgraph_node(decl);
3188c2ecf20Sopenharmony_ci}
3198c2ecf20Sopenharmony_ci
3208c2ecf20Sopenharmony_cistatic inline bool cgraph_function_with_gimple_body_p(struct cgraph_node *node)
3218c2ecf20Sopenharmony_ci{
3228c2ecf20Sopenharmony_ci	return node->analyzed && !node->thunk.thunk_p && !node->alias;
3238c2ecf20Sopenharmony_ci}
3248c2ecf20Sopenharmony_ci
3258c2ecf20Sopenharmony_cistatic inline struct cgraph_node *cgraph_first_function_with_gimple_body(void)
3268c2ecf20Sopenharmony_ci{
3278c2ecf20Sopenharmony_ci	struct cgraph_node *node;
3288c2ecf20Sopenharmony_ci
3298c2ecf20Sopenharmony_ci	for (node = cgraph_nodes; node; node = node->next)
3308c2ecf20Sopenharmony_ci		if (cgraph_function_with_gimple_body_p(node))
3318c2ecf20Sopenharmony_ci			return node;
3328c2ecf20Sopenharmony_ci	return NULL;
3338c2ecf20Sopenharmony_ci}
3348c2ecf20Sopenharmony_ci
3358c2ecf20Sopenharmony_cistatic inline struct cgraph_node *cgraph_next_function_with_gimple_body(struct cgraph_node *node)
3368c2ecf20Sopenharmony_ci{
3378c2ecf20Sopenharmony_ci	for (node = node->next; node; node = node->next)
3388c2ecf20Sopenharmony_ci		if (cgraph_function_with_gimple_body_p(node))
3398c2ecf20Sopenharmony_ci			return node;
3408c2ecf20Sopenharmony_ci	return NULL;
3418c2ecf20Sopenharmony_ci}
3428c2ecf20Sopenharmony_ci
3438c2ecf20Sopenharmony_cistatic inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
3448c2ecf20Sopenharmony_ci{
3458c2ecf20Sopenharmony_ci	cgraph_node_ptr alias;
3468c2ecf20Sopenharmony_ci
3478c2ecf20Sopenharmony_ci	if (callback(node, data))
3488c2ecf20Sopenharmony_ci		return true;
3498c2ecf20Sopenharmony_ci
3508c2ecf20Sopenharmony_ci	for (alias = node->same_body; alias; alias = alias->next) {
3518c2ecf20Sopenharmony_ci		if (include_overwritable || cgraph_function_body_availability(alias) > AVAIL_OVERWRITABLE)
3528c2ecf20Sopenharmony_ci			if (cgraph_for_node_and_aliases(alias, callback, data, include_overwritable))
3538c2ecf20Sopenharmony_ci				return true;
3548c2ecf20Sopenharmony_ci	}
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ci	return false;
3578c2ecf20Sopenharmony_ci}
3588c2ecf20Sopenharmony_ci
3598c2ecf20Sopenharmony_ci#define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
3608c2ecf20Sopenharmony_ci	for ((node) = cgraph_first_function_with_gimple_body(); (node); \
3618c2ecf20Sopenharmony_ci		(node) = cgraph_next_function_with_gimple_body(node))
3628c2ecf20Sopenharmony_ci
3638c2ecf20Sopenharmony_cistatic inline void varpool_add_new_variable(tree decl)
3648c2ecf20Sopenharmony_ci{
3658c2ecf20Sopenharmony_ci	varpool_finalize_decl(decl);
3668c2ecf20Sopenharmony_ci}
3678c2ecf20Sopenharmony_ci#endif
3688c2ecf20Sopenharmony_ci
3698c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4007
3708c2ecf20Sopenharmony_ci#define FOR_EACH_FUNCTION(node)	\
3718c2ecf20Sopenharmony_ci	for (node = cgraph_nodes; node; node = node->next)
3728c2ecf20Sopenharmony_ci#define FOR_EACH_VARIABLE(node)	\
3738c2ecf20Sopenharmony_ci	for (node = varpool_nodes; node; node = node->next)
3748c2ecf20Sopenharmony_ci#define PROP_loops 0
3758c2ecf20Sopenharmony_ci#define NODE_SYMBOL(node) (node)
3768c2ecf20Sopenharmony_ci#define NODE_DECL(node) (node)->decl
3778c2ecf20Sopenharmony_ci#define INSN_LOCATION(INSN) RTL_LOCATION(INSN)
3788c2ecf20Sopenharmony_ci#define vNULL NULL
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_cistatic inline int bb_loop_depth(const_basic_block bb)
3818c2ecf20Sopenharmony_ci{
3828c2ecf20Sopenharmony_ci	return bb->loop_father ? loop_depth(bb->loop_father) : 0;
3838c2ecf20Sopenharmony_ci}
3848c2ecf20Sopenharmony_ci
3858c2ecf20Sopenharmony_cistatic inline bool gimple_store_p(gimple gs)
3868c2ecf20Sopenharmony_ci{
3878c2ecf20Sopenharmony_ci	tree lhs = gimple_get_lhs(gs);
3888c2ecf20Sopenharmony_ci
3898c2ecf20Sopenharmony_ci	return lhs && !is_gimple_reg(lhs);
3908c2ecf20Sopenharmony_ci}
3918c2ecf20Sopenharmony_ci
3928c2ecf20Sopenharmony_cistatic inline void gimple_init_singleton(gimple g __unused)
3938c2ecf20Sopenharmony_ci{
3948c2ecf20Sopenharmony_ci}
3958c2ecf20Sopenharmony_ci#endif
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4007 || BUILDING_GCC_VERSION == 4008
3988c2ecf20Sopenharmony_cistatic inline struct cgraph_node *cgraph_alias_target(struct cgraph_node *n)
3998c2ecf20Sopenharmony_ci{
4008c2ecf20Sopenharmony_ci	return cgraph_alias_aliased_node(n);
4018c2ecf20Sopenharmony_ci}
4028c2ecf20Sopenharmony_ci#endif
4038c2ecf20Sopenharmony_ci
4048c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4008
4058c2ecf20Sopenharmony_ci#define ENTRY_BLOCK_PTR_FOR_FN(FN)	ENTRY_BLOCK_PTR_FOR_FUNCTION(FN)
4068c2ecf20Sopenharmony_ci#define EXIT_BLOCK_PTR_FOR_FN(FN)	EXIT_BLOCK_PTR_FOR_FUNCTION(FN)
4078c2ecf20Sopenharmony_ci#define basic_block_info_for_fn(FN)	((FN)->cfg->x_basic_block_info)
4088c2ecf20Sopenharmony_ci#define n_basic_blocks_for_fn(FN)	((FN)->cfg->x_n_basic_blocks)
4098c2ecf20Sopenharmony_ci#define n_edges_for_fn(FN)		((FN)->cfg->x_n_edges)
4108c2ecf20Sopenharmony_ci#define last_basic_block_for_fn(FN)	((FN)->cfg->x_last_basic_block)
4118c2ecf20Sopenharmony_ci#define label_to_block_map_for_fn(FN)	((FN)->cfg->x_label_to_block_map)
4128c2ecf20Sopenharmony_ci#define profile_status_for_fn(FN)	((FN)->cfg->x_profile_status)
4138c2ecf20Sopenharmony_ci#define BASIC_BLOCK_FOR_FN(FN, N)	BASIC_BLOCK_FOR_FUNCTION((FN), (N))
4148c2ecf20Sopenharmony_ci#define NODE_IMPLICIT_ALIAS(node)	(node)->same_body_alias
4158c2ecf20Sopenharmony_ci#define VAR_P(NODE)			(TREE_CODE(NODE) == VAR_DECL)
4168c2ecf20Sopenharmony_ci
4178c2ecf20Sopenharmony_cistatic inline bool tree_fits_shwi_p(const_tree t)
4188c2ecf20Sopenharmony_ci{
4198c2ecf20Sopenharmony_ci	if (t == NULL_TREE || TREE_CODE(t) != INTEGER_CST)
4208c2ecf20Sopenharmony_ci		return false;
4218c2ecf20Sopenharmony_ci
4228c2ecf20Sopenharmony_ci	if (TREE_INT_CST_HIGH(t) == 0 && (HOST_WIDE_INT)TREE_INT_CST_LOW(t) >= 0)
4238c2ecf20Sopenharmony_ci		return true;
4248c2ecf20Sopenharmony_ci
4258c2ecf20Sopenharmony_ci	if (TREE_INT_CST_HIGH(t) == -1 && (HOST_WIDE_INT)TREE_INT_CST_LOW(t) < 0 && !TYPE_UNSIGNED(TREE_TYPE(t)))
4268c2ecf20Sopenharmony_ci		return true;
4278c2ecf20Sopenharmony_ci
4288c2ecf20Sopenharmony_ci	return false;
4298c2ecf20Sopenharmony_ci}
4308c2ecf20Sopenharmony_ci
4318c2ecf20Sopenharmony_cistatic inline bool tree_fits_uhwi_p(const_tree t)
4328c2ecf20Sopenharmony_ci{
4338c2ecf20Sopenharmony_ci	if (t == NULL_TREE || TREE_CODE(t) != INTEGER_CST)
4348c2ecf20Sopenharmony_ci		return false;
4358c2ecf20Sopenharmony_ci
4368c2ecf20Sopenharmony_ci	return TREE_INT_CST_HIGH(t) == 0;
4378c2ecf20Sopenharmony_ci}
4388c2ecf20Sopenharmony_ci
4398c2ecf20Sopenharmony_cistatic inline HOST_WIDE_INT tree_to_shwi(const_tree t)
4408c2ecf20Sopenharmony_ci{
4418c2ecf20Sopenharmony_ci	gcc_assert(tree_fits_shwi_p(t));
4428c2ecf20Sopenharmony_ci	return TREE_INT_CST_LOW(t);
4438c2ecf20Sopenharmony_ci}
4448c2ecf20Sopenharmony_ci
4458c2ecf20Sopenharmony_cistatic inline unsigned HOST_WIDE_INT tree_to_uhwi(const_tree t)
4468c2ecf20Sopenharmony_ci{
4478c2ecf20Sopenharmony_ci	gcc_assert(tree_fits_uhwi_p(t));
4488c2ecf20Sopenharmony_ci	return TREE_INT_CST_LOW(t);
4498c2ecf20Sopenharmony_ci}
4508c2ecf20Sopenharmony_ci
4518c2ecf20Sopenharmony_cistatic inline const char *get_tree_code_name(enum tree_code code)
4528c2ecf20Sopenharmony_ci{
4538c2ecf20Sopenharmony_ci	gcc_assert(code < MAX_TREE_CODES);
4548c2ecf20Sopenharmony_ci	return tree_code_name[code];
4558c2ecf20Sopenharmony_ci}
4568c2ecf20Sopenharmony_ci
4578c2ecf20Sopenharmony_ci#define ipa_remove_stmt_references(cnode, stmt)
4588c2ecf20Sopenharmony_ci
4598c2ecf20Sopenharmony_citypedef union gimple_statement_d gasm;
4608c2ecf20Sopenharmony_citypedef union gimple_statement_d gassign;
4618c2ecf20Sopenharmony_citypedef union gimple_statement_d gcall;
4628c2ecf20Sopenharmony_citypedef union gimple_statement_d gcond;
4638c2ecf20Sopenharmony_citypedef union gimple_statement_d gdebug;
4648c2ecf20Sopenharmony_citypedef union gimple_statement_d ggoto;
4658c2ecf20Sopenharmony_citypedef union gimple_statement_d gphi;
4668c2ecf20Sopenharmony_citypedef union gimple_statement_d greturn;
4678c2ecf20Sopenharmony_ci
4688c2ecf20Sopenharmony_cistatic inline gasm *as_a_gasm(gimple stmt)
4698c2ecf20Sopenharmony_ci{
4708c2ecf20Sopenharmony_ci	return stmt;
4718c2ecf20Sopenharmony_ci}
4728c2ecf20Sopenharmony_ci
4738c2ecf20Sopenharmony_cistatic inline const gasm *as_a_const_gasm(const_gimple stmt)
4748c2ecf20Sopenharmony_ci{
4758c2ecf20Sopenharmony_ci	return stmt;
4768c2ecf20Sopenharmony_ci}
4778c2ecf20Sopenharmony_ci
4788c2ecf20Sopenharmony_cistatic inline gassign *as_a_gassign(gimple stmt)
4798c2ecf20Sopenharmony_ci{
4808c2ecf20Sopenharmony_ci	return stmt;
4818c2ecf20Sopenharmony_ci}
4828c2ecf20Sopenharmony_ci
4838c2ecf20Sopenharmony_cistatic inline const gassign *as_a_const_gassign(const_gimple stmt)
4848c2ecf20Sopenharmony_ci{
4858c2ecf20Sopenharmony_ci	return stmt;
4868c2ecf20Sopenharmony_ci}
4878c2ecf20Sopenharmony_ci
4888c2ecf20Sopenharmony_cistatic inline gcall *as_a_gcall(gimple stmt)
4898c2ecf20Sopenharmony_ci{
4908c2ecf20Sopenharmony_ci	return stmt;
4918c2ecf20Sopenharmony_ci}
4928c2ecf20Sopenharmony_ci
4938c2ecf20Sopenharmony_cistatic inline const gcall *as_a_const_gcall(const_gimple stmt)
4948c2ecf20Sopenharmony_ci{
4958c2ecf20Sopenharmony_ci	return stmt;
4968c2ecf20Sopenharmony_ci}
4978c2ecf20Sopenharmony_ci
4988c2ecf20Sopenharmony_cistatic inline gcond *as_a_gcond(gimple stmt)
4998c2ecf20Sopenharmony_ci{
5008c2ecf20Sopenharmony_ci	return stmt;
5018c2ecf20Sopenharmony_ci}
5028c2ecf20Sopenharmony_ci
5038c2ecf20Sopenharmony_cistatic inline const gcond *as_a_const_gcond(const_gimple stmt)
5048c2ecf20Sopenharmony_ci{
5058c2ecf20Sopenharmony_ci	return stmt;
5068c2ecf20Sopenharmony_ci}
5078c2ecf20Sopenharmony_ci
5088c2ecf20Sopenharmony_cistatic inline gdebug *as_a_gdebug(gimple stmt)
5098c2ecf20Sopenharmony_ci{
5108c2ecf20Sopenharmony_ci	return stmt;
5118c2ecf20Sopenharmony_ci}
5128c2ecf20Sopenharmony_ci
5138c2ecf20Sopenharmony_cistatic inline const gdebug *as_a_const_gdebug(const_gimple stmt)
5148c2ecf20Sopenharmony_ci{
5158c2ecf20Sopenharmony_ci	return stmt;
5168c2ecf20Sopenharmony_ci}
5178c2ecf20Sopenharmony_ci
5188c2ecf20Sopenharmony_cistatic inline ggoto *as_a_ggoto(gimple stmt)
5198c2ecf20Sopenharmony_ci{
5208c2ecf20Sopenharmony_ci	return stmt;
5218c2ecf20Sopenharmony_ci}
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_cistatic inline const ggoto *as_a_const_ggoto(const_gimple stmt)
5248c2ecf20Sopenharmony_ci{
5258c2ecf20Sopenharmony_ci	return stmt;
5268c2ecf20Sopenharmony_ci}
5278c2ecf20Sopenharmony_ci
5288c2ecf20Sopenharmony_cistatic inline gphi *as_a_gphi(gimple stmt)
5298c2ecf20Sopenharmony_ci{
5308c2ecf20Sopenharmony_ci	return stmt;
5318c2ecf20Sopenharmony_ci}
5328c2ecf20Sopenharmony_ci
5338c2ecf20Sopenharmony_cistatic inline const gphi *as_a_const_gphi(const_gimple stmt)
5348c2ecf20Sopenharmony_ci{
5358c2ecf20Sopenharmony_ci	return stmt;
5368c2ecf20Sopenharmony_ci}
5378c2ecf20Sopenharmony_ci
5388c2ecf20Sopenharmony_cistatic inline greturn *as_a_greturn(gimple stmt)
5398c2ecf20Sopenharmony_ci{
5408c2ecf20Sopenharmony_ci	return stmt;
5418c2ecf20Sopenharmony_ci}
5428c2ecf20Sopenharmony_ci
5438c2ecf20Sopenharmony_cistatic inline const greturn *as_a_const_greturn(const_gimple stmt)
5448c2ecf20Sopenharmony_ci{
5458c2ecf20Sopenharmony_ci	return stmt;
5468c2ecf20Sopenharmony_ci}
5478c2ecf20Sopenharmony_ci#endif
5488c2ecf20Sopenharmony_ci
5498c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4008
5508c2ecf20Sopenharmony_ci#define NODE_SYMBOL(node) (&(node)->symbol)
5518c2ecf20Sopenharmony_ci#define NODE_DECL(node) (node)->symbol.decl
5528c2ecf20Sopenharmony_ci#endif
5538c2ecf20Sopenharmony_ci
5548c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4008
5558c2ecf20Sopenharmony_ci#define add_referenced_var(var)
5568c2ecf20Sopenharmony_ci#define mark_sym_for_renaming(var)
5578c2ecf20Sopenharmony_ci#define varpool_mark_needed_node(node)
5588c2ecf20Sopenharmony_ci#define create_var_ann(var)
5598c2ecf20Sopenharmony_ci#define TODO_dump_func 0
5608c2ecf20Sopenharmony_ci#define TODO_dump_cgraph 0
5618c2ecf20Sopenharmony_ci#endif
5628c2ecf20Sopenharmony_ci
5638c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION <= 4009
5648c2ecf20Sopenharmony_ci#define TODO_verify_il 0
5658c2ecf20Sopenharmony_ci#define AVAIL_INTERPOSABLE AVAIL_OVERWRITABLE
5668c2ecf20Sopenharmony_ci
5678c2ecf20Sopenharmony_ci#define section_name_prefix LTO_SECTION_NAME_PREFIX
5688c2ecf20Sopenharmony_ci#define fatal_error(loc, gmsgid, ...) fatal_error((gmsgid), __VA_ARGS__)
5698c2ecf20Sopenharmony_ci
5708c2ecf20Sopenharmony_cirtx emit_move_insn(rtx x, rtx y);
5718c2ecf20Sopenharmony_ci
5728c2ecf20Sopenharmony_citypedef struct rtx_def rtx_insn;
5738c2ecf20Sopenharmony_ci
5748c2ecf20Sopenharmony_cistatic inline const char *get_decl_section_name(const_tree decl)
5758c2ecf20Sopenharmony_ci{
5768c2ecf20Sopenharmony_ci	if (DECL_SECTION_NAME(decl) == NULL_TREE)
5778c2ecf20Sopenharmony_ci		return NULL;
5788c2ecf20Sopenharmony_ci
5798c2ecf20Sopenharmony_ci	return TREE_STRING_POINTER(DECL_SECTION_NAME(decl));
5808c2ecf20Sopenharmony_ci}
5818c2ecf20Sopenharmony_ci
5828c2ecf20Sopenharmony_cistatic inline void set_decl_section_name(tree node, const char *value)
5838c2ecf20Sopenharmony_ci{
5848c2ecf20Sopenharmony_ci	if (value)
5858c2ecf20Sopenharmony_ci		DECL_SECTION_NAME(node) = build_string(strlen(value) + 1, value);
5868c2ecf20Sopenharmony_ci	else
5878c2ecf20Sopenharmony_ci		DECL_SECTION_NAME(node) = NULL;
5888c2ecf20Sopenharmony_ci}
5898c2ecf20Sopenharmony_ci#endif
5908c2ecf20Sopenharmony_ci
5918c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION == 4009
5928c2ecf20Sopenharmony_citypedef struct gimple_statement_asm gasm;
5938c2ecf20Sopenharmony_citypedef struct gimple_statement_base gassign;
5948c2ecf20Sopenharmony_citypedef struct gimple_statement_call gcall;
5958c2ecf20Sopenharmony_citypedef struct gimple_statement_base gcond;
5968c2ecf20Sopenharmony_citypedef struct gimple_statement_base gdebug;
5978c2ecf20Sopenharmony_citypedef struct gimple_statement_base ggoto;
5988c2ecf20Sopenharmony_citypedef struct gimple_statement_phi gphi;
5998c2ecf20Sopenharmony_citypedef struct gimple_statement_base greturn;
6008c2ecf20Sopenharmony_ci
6018c2ecf20Sopenharmony_cistatic inline gasm *as_a_gasm(gimple stmt)
6028c2ecf20Sopenharmony_ci{
6038c2ecf20Sopenharmony_ci	return as_a<gasm>(stmt);
6048c2ecf20Sopenharmony_ci}
6058c2ecf20Sopenharmony_ci
6068c2ecf20Sopenharmony_cistatic inline const gasm *as_a_const_gasm(const_gimple stmt)
6078c2ecf20Sopenharmony_ci{
6088c2ecf20Sopenharmony_ci	return as_a<const gasm>(stmt);
6098c2ecf20Sopenharmony_ci}
6108c2ecf20Sopenharmony_ci
6118c2ecf20Sopenharmony_cistatic inline gassign *as_a_gassign(gimple stmt)
6128c2ecf20Sopenharmony_ci{
6138c2ecf20Sopenharmony_ci	return stmt;
6148c2ecf20Sopenharmony_ci}
6158c2ecf20Sopenharmony_ci
6168c2ecf20Sopenharmony_cistatic inline const gassign *as_a_const_gassign(const_gimple stmt)
6178c2ecf20Sopenharmony_ci{
6188c2ecf20Sopenharmony_ci	return stmt;
6198c2ecf20Sopenharmony_ci}
6208c2ecf20Sopenharmony_ci
6218c2ecf20Sopenharmony_cistatic inline gcall *as_a_gcall(gimple stmt)
6228c2ecf20Sopenharmony_ci{
6238c2ecf20Sopenharmony_ci	return as_a<gcall>(stmt);
6248c2ecf20Sopenharmony_ci}
6258c2ecf20Sopenharmony_ci
6268c2ecf20Sopenharmony_cistatic inline const gcall *as_a_const_gcall(const_gimple stmt)
6278c2ecf20Sopenharmony_ci{
6288c2ecf20Sopenharmony_ci	return as_a<const gcall>(stmt);
6298c2ecf20Sopenharmony_ci}
6308c2ecf20Sopenharmony_ci
6318c2ecf20Sopenharmony_cistatic inline gcond *as_a_gcond(gimple stmt)
6328c2ecf20Sopenharmony_ci{
6338c2ecf20Sopenharmony_ci	return stmt;
6348c2ecf20Sopenharmony_ci}
6358c2ecf20Sopenharmony_ci
6368c2ecf20Sopenharmony_cistatic inline const gcond *as_a_const_gcond(const_gimple stmt)
6378c2ecf20Sopenharmony_ci{
6388c2ecf20Sopenharmony_ci	return stmt;
6398c2ecf20Sopenharmony_ci}
6408c2ecf20Sopenharmony_ci
6418c2ecf20Sopenharmony_cistatic inline gdebug *as_a_gdebug(gimple stmt)
6428c2ecf20Sopenharmony_ci{
6438c2ecf20Sopenharmony_ci	return stmt;
6448c2ecf20Sopenharmony_ci}
6458c2ecf20Sopenharmony_ci
6468c2ecf20Sopenharmony_cistatic inline const gdebug *as_a_const_gdebug(const_gimple stmt)
6478c2ecf20Sopenharmony_ci{
6488c2ecf20Sopenharmony_ci	return stmt;
6498c2ecf20Sopenharmony_ci}
6508c2ecf20Sopenharmony_ci
6518c2ecf20Sopenharmony_cistatic inline ggoto *as_a_ggoto(gimple stmt)
6528c2ecf20Sopenharmony_ci{
6538c2ecf20Sopenharmony_ci	return stmt;
6548c2ecf20Sopenharmony_ci}
6558c2ecf20Sopenharmony_ci
6568c2ecf20Sopenharmony_cistatic inline const ggoto *as_a_const_ggoto(const_gimple stmt)
6578c2ecf20Sopenharmony_ci{
6588c2ecf20Sopenharmony_ci	return stmt;
6598c2ecf20Sopenharmony_ci}
6608c2ecf20Sopenharmony_ci
6618c2ecf20Sopenharmony_cistatic inline gphi *as_a_gphi(gimple stmt)
6628c2ecf20Sopenharmony_ci{
6638c2ecf20Sopenharmony_ci	return as_a<gphi>(stmt);
6648c2ecf20Sopenharmony_ci}
6658c2ecf20Sopenharmony_ci
6668c2ecf20Sopenharmony_cistatic inline const gphi *as_a_const_gphi(const_gimple stmt)
6678c2ecf20Sopenharmony_ci{
6688c2ecf20Sopenharmony_ci	return as_a<const gphi>(stmt);
6698c2ecf20Sopenharmony_ci}
6708c2ecf20Sopenharmony_ci
6718c2ecf20Sopenharmony_cistatic inline greturn *as_a_greturn(gimple stmt)
6728c2ecf20Sopenharmony_ci{
6738c2ecf20Sopenharmony_ci	return stmt;
6748c2ecf20Sopenharmony_ci}
6758c2ecf20Sopenharmony_ci
6768c2ecf20Sopenharmony_cistatic inline const greturn *as_a_const_greturn(const_gimple stmt)
6778c2ecf20Sopenharmony_ci{
6788c2ecf20Sopenharmony_ci	return stmt;
6798c2ecf20Sopenharmony_ci}
6808c2ecf20Sopenharmony_ci#endif
6818c2ecf20Sopenharmony_ci
6828c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 4009
6838c2ecf20Sopenharmony_ci#define TODO_ggc_collect 0
6848c2ecf20Sopenharmony_ci#define NODE_SYMBOL(node) (node)
6858c2ecf20Sopenharmony_ci#define NODE_DECL(node) (node)->decl
6868c2ecf20Sopenharmony_ci#define cgraph_node_name(node) (node)->name()
6878c2ecf20Sopenharmony_ci#define NODE_IMPLICIT_ALIAS(node) (node)->cpp_implicit_alias
6888c2ecf20Sopenharmony_ci
6898c2ecf20Sopenharmony_cistatic inline opt_pass *get_pass_for_id(int id)
6908c2ecf20Sopenharmony_ci{
6918c2ecf20Sopenharmony_ci	return g->get_passes()->get_pass_for_id(id);
6928c2ecf20Sopenharmony_ci}
6938c2ecf20Sopenharmony_ci#endif
6948c2ecf20Sopenharmony_ci
6958c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 5000 && BUILDING_GCC_VERSION < 6000
6968c2ecf20Sopenharmony_ci/* gimple related */
6978c2ecf20Sopenharmony_citemplate <>
6988c2ecf20Sopenharmony_citemplate <>
6998c2ecf20Sopenharmony_ciinline bool is_a_helper<const gassign *>::test(const_gimple gs)
7008c2ecf20Sopenharmony_ci{
7018c2ecf20Sopenharmony_ci	return gs->code == GIMPLE_ASSIGN;
7028c2ecf20Sopenharmony_ci}
7038c2ecf20Sopenharmony_ci#endif
7048c2ecf20Sopenharmony_ci
7058c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 5000
7068c2ecf20Sopenharmony_ci#define TODO_verify_ssa TODO_verify_il
7078c2ecf20Sopenharmony_ci#define TODO_verify_flow TODO_verify_il
7088c2ecf20Sopenharmony_ci#define TODO_verify_stmts TODO_verify_il
7098c2ecf20Sopenharmony_ci#define TODO_verify_rtl_sharing TODO_verify_il
7108c2ecf20Sopenharmony_ci
7118c2ecf20Sopenharmony_ci#define INSN_DELETED_P(insn) (insn)->deleted()
7128c2ecf20Sopenharmony_ci
7138c2ecf20Sopenharmony_cistatic inline const char *get_decl_section_name(const_tree decl)
7148c2ecf20Sopenharmony_ci{
7158c2ecf20Sopenharmony_ci	return DECL_SECTION_NAME(decl);
7168c2ecf20Sopenharmony_ci}
7178c2ecf20Sopenharmony_ci
7188c2ecf20Sopenharmony_ci/* symtab/cgraph related */
7198c2ecf20Sopenharmony_ci#define debug_cgraph_node(node) (node)->debug()
7208c2ecf20Sopenharmony_ci#define cgraph_get_node(decl) cgraph_node::get(decl)
7218c2ecf20Sopenharmony_ci#define cgraph_get_create_node(decl) cgraph_node::get_create(decl)
7228c2ecf20Sopenharmony_ci#define cgraph_create_node(decl) cgraph_node::create(decl)
7238c2ecf20Sopenharmony_ci#define cgraph_n_nodes symtab->cgraph_count
7248c2ecf20Sopenharmony_ci#define cgraph_max_uid symtab->cgraph_max_uid
7258c2ecf20Sopenharmony_ci#define varpool_get_node(decl) varpool_node::get(decl)
7268c2ecf20Sopenharmony_ci#define dump_varpool_node(file, node) (node)->dump(file)
7278c2ecf20Sopenharmony_ci
7288c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 8000
7298c2ecf20Sopenharmony_ci#define cgraph_create_edge(caller, callee, call_stmt, count, freq) \
7308c2ecf20Sopenharmony_ci	(caller)->create_edge((callee), (call_stmt), (count))
7318c2ecf20Sopenharmony_ci
7328c2ecf20Sopenharmony_ci#define cgraph_create_edge_including_clones(caller, callee,	\
7338c2ecf20Sopenharmony_ci		old_call_stmt, call_stmt, count, freq, reason)	\
7348c2ecf20Sopenharmony_ci	(caller)->create_edge_including_clones((callee),	\
7358c2ecf20Sopenharmony_ci		(old_call_stmt), (call_stmt), (count), (reason))
7368c2ecf20Sopenharmony_ci#else
7378c2ecf20Sopenharmony_ci#define cgraph_create_edge(caller, callee, call_stmt, count, freq) \
7388c2ecf20Sopenharmony_ci	(caller)->create_edge((callee), (call_stmt), (count), (freq))
7398c2ecf20Sopenharmony_ci
7408c2ecf20Sopenharmony_ci#define cgraph_create_edge_including_clones(caller, callee,	\
7418c2ecf20Sopenharmony_ci		old_call_stmt, call_stmt, count, freq, reason)	\
7428c2ecf20Sopenharmony_ci	(caller)->create_edge_including_clones((callee),	\
7438c2ecf20Sopenharmony_ci		(old_call_stmt), (call_stmt), (count), (freq), (reason))
7448c2ecf20Sopenharmony_ci#endif
7458c2ecf20Sopenharmony_ci
7468c2ecf20Sopenharmony_citypedef struct cgraph_node *cgraph_node_ptr;
7478c2ecf20Sopenharmony_citypedef struct cgraph_edge *cgraph_edge_p;
7488c2ecf20Sopenharmony_citypedef struct varpool_node *varpool_node_ptr;
7498c2ecf20Sopenharmony_ci
7508c2ecf20Sopenharmony_cistatic inline void change_decl_assembler_name(tree decl, tree name)
7518c2ecf20Sopenharmony_ci{
7528c2ecf20Sopenharmony_ci	symtab->change_decl_assembler_name(decl, name);
7538c2ecf20Sopenharmony_ci}
7548c2ecf20Sopenharmony_ci
7558c2ecf20Sopenharmony_cistatic inline void varpool_finalize_decl(tree decl)
7568c2ecf20Sopenharmony_ci{
7578c2ecf20Sopenharmony_ci	varpool_node::finalize_decl(decl);
7588c2ecf20Sopenharmony_ci}
7598c2ecf20Sopenharmony_ci
7608c2ecf20Sopenharmony_cistatic inline void varpool_add_new_variable(tree decl)
7618c2ecf20Sopenharmony_ci{
7628c2ecf20Sopenharmony_ci	varpool_node::add(decl);
7638c2ecf20Sopenharmony_ci}
7648c2ecf20Sopenharmony_ci
7658c2ecf20Sopenharmony_cistatic inline unsigned int rebuild_cgraph_edges(void)
7668c2ecf20Sopenharmony_ci{
7678c2ecf20Sopenharmony_ci	return cgraph_edge::rebuild_edges();
7688c2ecf20Sopenharmony_ci}
7698c2ecf20Sopenharmony_ci
7708c2ecf20Sopenharmony_cistatic inline cgraph_node_ptr cgraph_function_node(cgraph_node_ptr node, enum availability *availability)
7718c2ecf20Sopenharmony_ci{
7728c2ecf20Sopenharmony_ci	return node->function_symbol(availability);
7738c2ecf20Sopenharmony_ci}
7748c2ecf20Sopenharmony_ci
7758c2ecf20Sopenharmony_cistatic inline cgraph_node_ptr cgraph_function_or_thunk_node(cgraph_node_ptr node, enum availability *availability = NULL)
7768c2ecf20Sopenharmony_ci{
7778c2ecf20Sopenharmony_ci	return node->ultimate_alias_target(availability);
7788c2ecf20Sopenharmony_ci}
7798c2ecf20Sopenharmony_ci
7808c2ecf20Sopenharmony_cistatic inline bool cgraph_only_called_directly_p(cgraph_node_ptr node)
7818c2ecf20Sopenharmony_ci{
7828c2ecf20Sopenharmony_ci	return node->only_called_directly_p();
7838c2ecf20Sopenharmony_ci}
7848c2ecf20Sopenharmony_ci
7858c2ecf20Sopenharmony_cistatic inline enum availability cgraph_function_body_availability(cgraph_node_ptr node)
7868c2ecf20Sopenharmony_ci{
7878c2ecf20Sopenharmony_ci	return node->get_availability();
7888c2ecf20Sopenharmony_ci}
7898c2ecf20Sopenharmony_ci
7908c2ecf20Sopenharmony_cistatic inline cgraph_node_ptr cgraph_alias_target(cgraph_node_ptr node)
7918c2ecf20Sopenharmony_ci{
7928c2ecf20Sopenharmony_ci	return node->get_alias_target();
7938c2ecf20Sopenharmony_ci}
7948c2ecf20Sopenharmony_ci
7958c2ecf20Sopenharmony_cistatic inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
7968c2ecf20Sopenharmony_ci{
7978c2ecf20Sopenharmony_ci	return node->call_for_symbol_thunks_and_aliases(callback, data, include_overwritable);
7988c2ecf20Sopenharmony_ci}
7998c2ecf20Sopenharmony_ci
8008c2ecf20Sopenharmony_cistatic inline struct cgraph_node_hook_list *cgraph_add_function_insertion_hook(cgraph_node_hook hook, void *data)
8018c2ecf20Sopenharmony_ci{
8028c2ecf20Sopenharmony_ci	return symtab->add_cgraph_insertion_hook(hook, data);
8038c2ecf20Sopenharmony_ci}
8048c2ecf20Sopenharmony_ci
8058c2ecf20Sopenharmony_cistatic inline void cgraph_remove_function_insertion_hook(struct cgraph_node_hook_list *entry)
8068c2ecf20Sopenharmony_ci{
8078c2ecf20Sopenharmony_ci	symtab->remove_cgraph_insertion_hook(entry);
8088c2ecf20Sopenharmony_ci}
8098c2ecf20Sopenharmony_ci
8108c2ecf20Sopenharmony_cistatic inline struct cgraph_node_hook_list *cgraph_add_node_removal_hook(cgraph_node_hook hook, void *data)
8118c2ecf20Sopenharmony_ci{
8128c2ecf20Sopenharmony_ci	return symtab->add_cgraph_removal_hook(hook, data);
8138c2ecf20Sopenharmony_ci}
8148c2ecf20Sopenharmony_ci
8158c2ecf20Sopenharmony_cistatic inline void cgraph_remove_node_removal_hook(struct cgraph_node_hook_list *entry)
8168c2ecf20Sopenharmony_ci{
8178c2ecf20Sopenharmony_ci	symtab->remove_cgraph_removal_hook(entry);
8188c2ecf20Sopenharmony_ci}
8198c2ecf20Sopenharmony_ci
8208c2ecf20Sopenharmony_cistatic inline struct cgraph_2node_hook_list *cgraph_add_node_duplication_hook(cgraph_2node_hook hook, void *data)
8218c2ecf20Sopenharmony_ci{
8228c2ecf20Sopenharmony_ci	return symtab->add_cgraph_duplication_hook(hook, data);
8238c2ecf20Sopenharmony_ci}
8248c2ecf20Sopenharmony_ci
8258c2ecf20Sopenharmony_cistatic inline void cgraph_remove_node_duplication_hook(struct cgraph_2node_hook_list *entry)
8268c2ecf20Sopenharmony_ci{
8278c2ecf20Sopenharmony_ci	symtab->remove_cgraph_duplication_hook(entry);
8288c2ecf20Sopenharmony_ci}
8298c2ecf20Sopenharmony_ci
8308c2ecf20Sopenharmony_cistatic inline void cgraph_call_node_duplication_hooks(cgraph_node_ptr node, cgraph_node_ptr node2)
8318c2ecf20Sopenharmony_ci{
8328c2ecf20Sopenharmony_ci	symtab->call_cgraph_duplication_hooks(node, node2);
8338c2ecf20Sopenharmony_ci}
8348c2ecf20Sopenharmony_ci
8358c2ecf20Sopenharmony_cistatic inline void cgraph_call_edge_duplication_hooks(cgraph_edge *cs1, cgraph_edge *cs2)
8368c2ecf20Sopenharmony_ci{
8378c2ecf20Sopenharmony_ci	symtab->call_edge_duplication_hooks(cs1, cs2);
8388c2ecf20Sopenharmony_ci}
8398c2ecf20Sopenharmony_ci
8408c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 6000
8418c2ecf20Sopenharmony_citypedef gimple *gimple_ptr;
8428c2ecf20Sopenharmony_citypedef const gimple *const_gimple_ptr;
8438c2ecf20Sopenharmony_ci#define gimple gimple_ptr
8448c2ecf20Sopenharmony_ci#define const_gimple const_gimple_ptr
8458c2ecf20Sopenharmony_ci#undef CONST_CAST_GIMPLE
8468c2ecf20Sopenharmony_ci#define CONST_CAST_GIMPLE(X) CONST_CAST(gimple, (X))
8478c2ecf20Sopenharmony_ci#endif
8488c2ecf20Sopenharmony_ci
8498c2ecf20Sopenharmony_ci/* gimple related */
8508c2ecf20Sopenharmony_cistatic inline gimple gimple_build_assign_with_ops(enum tree_code subcode, tree lhs, tree op1, tree op2 MEM_STAT_DECL)
8518c2ecf20Sopenharmony_ci{
8528c2ecf20Sopenharmony_ci	return gimple_build_assign(lhs, subcode, op1, op2 PASS_MEM_STAT);
8538c2ecf20Sopenharmony_ci}
8548c2ecf20Sopenharmony_ci
8558c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION < 10000
8568c2ecf20Sopenharmony_citemplate <>
8578c2ecf20Sopenharmony_citemplate <>
8588c2ecf20Sopenharmony_ciinline bool is_a_helper<const ggoto *>::test(const_gimple gs)
8598c2ecf20Sopenharmony_ci{
8608c2ecf20Sopenharmony_ci	return gs->code == GIMPLE_GOTO;
8618c2ecf20Sopenharmony_ci}
8628c2ecf20Sopenharmony_ci
8638c2ecf20Sopenharmony_citemplate <>
8648c2ecf20Sopenharmony_citemplate <>
8658c2ecf20Sopenharmony_ciinline bool is_a_helper<const greturn *>::test(const_gimple gs)
8668c2ecf20Sopenharmony_ci{
8678c2ecf20Sopenharmony_ci	return gs->code == GIMPLE_RETURN;
8688c2ecf20Sopenharmony_ci}
8698c2ecf20Sopenharmony_ci#endif
8708c2ecf20Sopenharmony_ci
8718c2ecf20Sopenharmony_cistatic inline gasm *as_a_gasm(gimple stmt)
8728c2ecf20Sopenharmony_ci{
8738c2ecf20Sopenharmony_ci	return as_a<gasm *>(stmt);
8748c2ecf20Sopenharmony_ci}
8758c2ecf20Sopenharmony_ci
8768c2ecf20Sopenharmony_cistatic inline const gasm *as_a_const_gasm(const_gimple stmt)
8778c2ecf20Sopenharmony_ci{
8788c2ecf20Sopenharmony_ci	return as_a<const gasm *>(stmt);
8798c2ecf20Sopenharmony_ci}
8808c2ecf20Sopenharmony_ci
8818c2ecf20Sopenharmony_cistatic inline gassign *as_a_gassign(gimple stmt)
8828c2ecf20Sopenharmony_ci{
8838c2ecf20Sopenharmony_ci	return as_a<gassign *>(stmt);
8848c2ecf20Sopenharmony_ci}
8858c2ecf20Sopenharmony_ci
8868c2ecf20Sopenharmony_cistatic inline const gassign *as_a_const_gassign(const_gimple stmt)
8878c2ecf20Sopenharmony_ci{
8888c2ecf20Sopenharmony_ci	return as_a<const gassign *>(stmt);
8898c2ecf20Sopenharmony_ci}
8908c2ecf20Sopenharmony_ci
8918c2ecf20Sopenharmony_cistatic inline gcall *as_a_gcall(gimple stmt)
8928c2ecf20Sopenharmony_ci{
8938c2ecf20Sopenharmony_ci	return as_a<gcall *>(stmt);
8948c2ecf20Sopenharmony_ci}
8958c2ecf20Sopenharmony_ci
8968c2ecf20Sopenharmony_cistatic inline const gcall *as_a_const_gcall(const_gimple stmt)
8978c2ecf20Sopenharmony_ci{
8988c2ecf20Sopenharmony_ci	return as_a<const gcall *>(stmt);
8998c2ecf20Sopenharmony_ci}
9008c2ecf20Sopenharmony_ci
9018c2ecf20Sopenharmony_cistatic inline ggoto *as_a_ggoto(gimple stmt)
9028c2ecf20Sopenharmony_ci{
9038c2ecf20Sopenharmony_ci	return as_a<ggoto *>(stmt);
9048c2ecf20Sopenharmony_ci}
9058c2ecf20Sopenharmony_ci
9068c2ecf20Sopenharmony_cistatic inline const ggoto *as_a_const_ggoto(const_gimple stmt)
9078c2ecf20Sopenharmony_ci{
9088c2ecf20Sopenharmony_ci	return as_a<const ggoto *>(stmt);
9098c2ecf20Sopenharmony_ci}
9108c2ecf20Sopenharmony_ci
9118c2ecf20Sopenharmony_cistatic inline gphi *as_a_gphi(gimple stmt)
9128c2ecf20Sopenharmony_ci{
9138c2ecf20Sopenharmony_ci	return as_a<gphi *>(stmt);
9148c2ecf20Sopenharmony_ci}
9158c2ecf20Sopenharmony_ci
9168c2ecf20Sopenharmony_cistatic inline const gphi *as_a_const_gphi(const_gimple stmt)
9178c2ecf20Sopenharmony_ci{
9188c2ecf20Sopenharmony_ci	return as_a<const gphi *>(stmt);
9198c2ecf20Sopenharmony_ci}
9208c2ecf20Sopenharmony_ci
9218c2ecf20Sopenharmony_cistatic inline greturn *as_a_greturn(gimple stmt)
9228c2ecf20Sopenharmony_ci{
9238c2ecf20Sopenharmony_ci	return as_a<greturn *>(stmt);
9248c2ecf20Sopenharmony_ci}
9258c2ecf20Sopenharmony_ci
9268c2ecf20Sopenharmony_cistatic inline const greturn *as_a_const_greturn(const_gimple stmt)
9278c2ecf20Sopenharmony_ci{
9288c2ecf20Sopenharmony_ci	return as_a<const greturn *>(stmt);
9298c2ecf20Sopenharmony_ci}
9308c2ecf20Sopenharmony_ci
9318c2ecf20Sopenharmony_ci/* IPA/LTO related */
9328c2ecf20Sopenharmony_ci#define ipa_ref_list_referring_iterate(L, I, P)	\
9338c2ecf20Sopenharmony_ci	(L)->referring.iterate((I), &(P))
9348c2ecf20Sopenharmony_ci#define ipa_ref_list_reference_iterate(L, I, P)	\
9358c2ecf20Sopenharmony_ci	(L)->reference.iterate((I), &(P))
9368c2ecf20Sopenharmony_ci
9378c2ecf20Sopenharmony_cistatic inline cgraph_node_ptr ipa_ref_referring_node(struct ipa_ref *ref)
9388c2ecf20Sopenharmony_ci{
9398c2ecf20Sopenharmony_ci	return dyn_cast<cgraph_node_ptr>(ref->referring);
9408c2ecf20Sopenharmony_ci}
9418c2ecf20Sopenharmony_ci
9428c2ecf20Sopenharmony_cistatic inline void ipa_remove_stmt_references(symtab_node *referring_node, gimple stmt)
9438c2ecf20Sopenharmony_ci{
9448c2ecf20Sopenharmony_ci	referring_node->remove_stmt_references(stmt);
9458c2ecf20Sopenharmony_ci}
9468c2ecf20Sopenharmony_ci#endif
9478c2ecf20Sopenharmony_ci
9488c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION < 6000
9498c2ecf20Sopenharmony_ci#define get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, preversep, pvolatilep, keep_aligning)	\
9508c2ecf20Sopenharmony_ci	get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, pvolatilep, keep_aligning)
9518c2ecf20Sopenharmony_ci#define gen_rtx_set(ARG0, ARG1) gen_rtx_SET(VOIDmode, (ARG0), (ARG1))
9528c2ecf20Sopenharmony_ci#endif
9538c2ecf20Sopenharmony_ci
9548c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 6000
9558c2ecf20Sopenharmony_ci#define gen_rtx_set(ARG0, ARG1) gen_rtx_SET((ARG0), (ARG1))
9568c2ecf20Sopenharmony_ci#endif
9578c2ecf20Sopenharmony_ci
9588c2ecf20Sopenharmony_ci#ifdef __cplusplus
9598c2ecf20Sopenharmony_cistatic inline void debug_tree(const_tree t)
9608c2ecf20Sopenharmony_ci{
9618c2ecf20Sopenharmony_ci	debug_tree(CONST_CAST_TREE(t));
9628c2ecf20Sopenharmony_ci}
9638c2ecf20Sopenharmony_ci
9648c2ecf20Sopenharmony_cistatic inline void debug_gimple_stmt(const_gimple s)
9658c2ecf20Sopenharmony_ci{
9668c2ecf20Sopenharmony_ci	debug_gimple_stmt(CONST_CAST_GIMPLE(s));
9678c2ecf20Sopenharmony_ci}
9688c2ecf20Sopenharmony_ci#else
9698c2ecf20Sopenharmony_ci#define debug_tree(t) debug_tree(CONST_CAST_TREE(t))
9708c2ecf20Sopenharmony_ci#define debug_gimple_stmt(s) debug_gimple_stmt(CONST_CAST_GIMPLE(s))
9718c2ecf20Sopenharmony_ci#endif
9728c2ecf20Sopenharmony_ci
9738c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION >= 7000
9748c2ecf20Sopenharmony_ci#define get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, preversep, pvolatilep, keep_aligning)	\
9758c2ecf20Sopenharmony_ci	get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, preversep, pvolatilep)
9768c2ecf20Sopenharmony_ci#endif
9778c2ecf20Sopenharmony_ci
9788c2ecf20Sopenharmony_ci#if BUILDING_GCC_VERSION < 7000
9798c2ecf20Sopenharmony_ci#define SET_DECL_ALIGN(decl, align)	DECL_ALIGN(decl) = (align)
9808c2ecf20Sopenharmony_ci#define SET_DECL_MODE(decl, mode)	DECL_MODE(decl) = (mode)
9818c2ecf20Sopenharmony_ci#endif
9828c2ecf20Sopenharmony_ci
9838c2ecf20Sopenharmony_ci#endif
984