111
|
1 /* Header file for gimplification.
|
131
|
2 Copyright (C) 2013-2018 Free Software Foundation, Inc.
|
111
|
3
|
|
4 This file is part of GCC.
|
|
5
|
|
6 GCC is free software; you can redistribute it and/or modify it under
|
|
7 the terms of the GNU General Public License as published by the Free
|
|
8 Software Foundation; either version 3, or (at your option) any later
|
|
9 version.
|
|
10
|
|
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
14 for more details.
|
|
15
|
|
16 You should have received a copy of the GNU General Public License
|
|
17 along with GCC; see the file COPYING3. If not see
|
|
18 <http://www.gnu.org/licenses/>. */
|
|
19
|
|
20 #ifndef GCC_GIMPLIFY_H
|
|
21 #define GCC_GIMPLIFY_H
|
|
22
|
|
23 /* Validation of GIMPLE expressions. Note that these predicates only check
|
|
24 the basic form of the expression, they don't recurse to make sure that
|
|
25 underlying nodes are also of the right form. */
|
|
26 typedef bool (*gimple_predicate)(tree);
|
|
27
|
|
28 /* FIXME we should deduce this from the predicate. */
|
|
29 enum fallback {
|
|
30 fb_none = 0, /* Do not generate a temporary. */
|
|
31
|
|
32 fb_rvalue = 1, /* Generate an rvalue to hold the result of a
|
|
33 gimplified expression. */
|
|
34
|
|
35 fb_lvalue = 2, /* Generate an lvalue to hold the result of a
|
|
36 gimplified expression. */
|
|
37
|
|
38 fb_mayfail = 4, /* Gimplification may fail. Error issued
|
|
39 afterwards. */
|
|
40 fb_either= fb_rvalue | fb_lvalue
|
|
41 };
|
|
42
|
|
43 typedef int fallback_t;
|
|
44
|
|
45 enum gimplify_status {
|
|
46 GS_ERROR = -2, /* Something Bad Seen. */
|
|
47 GS_UNHANDLED = -1, /* A langhook result for "I dunno". */
|
|
48 GS_OK = 0, /* We did something, maybe more to do. */
|
|
49 GS_ALL_DONE = 1 /* The expression is fully gimplified. */
|
|
50 };
|
|
51
|
|
52 extern void free_gimplify_stack (void);
|
|
53 extern void push_gimplify_context (bool in_ssa = false,
|
|
54 bool rhs_cond_ok = false);
|
|
55 extern void pop_gimplify_context (gimple *);
|
|
56 extern gbind *gimple_current_bind_expr (void);
|
|
57 extern vec<gbind *> gimple_bind_expr_stack (void);
|
|
58 extern void gimplify_and_add (tree, gimple_seq *);
|
|
59 extern tree get_formal_tmp_var (tree, gimple_seq *);
|
|
60 extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq *,
|
|
61 bool = true);
|
|
62 extern void declare_vars (tree, gimple *, bool);
|
|
63 extern void gimple_add_tmp_var (tree);
|
|
64 extern void gimple_add_tmp_var_fn (struct function *, tree);
|
|
65 extern tree unshare_expr (tree);
|
|
66 extern tree unshare_expr_without_location (tree);
|
|
67 extern tree voidify_wrapper_expr (tree, tree);
|
|
68 extern tree build_and_jump (tree *);
|
|
69 extern enum gimplify_status gimplify_self_mod_expr (tree *, gimple_seq *,
|
|
70 gimple_seq *, bool, tree);
|
|
71 extern tree gimple_boolify (tree);
|
|
72 extern gimple_predicate rhs_predicate_for (tree);
|
|
73 extern bool gimplify_stmt (tree *, gimple_seq *);
|
|
74 extern void omp_firstprivatize_variable (struct gimplify_omp_ctx *, tree);
|
|
75 extern enum gimplify_status gimplify_expr (tree *, gimple_seq *, gimple_seq *,
|
|
76 bool (*) (tree), fallback_t);
|
|
77
|
|
78 extern void gimplify_type_sizes (tree, gimple_seq *);
|
|
79 extern void gimplify_one_sizepos (tree *, gimple_seq *);
|
|
80 extern gbind *gimplify_body (tree, bool);
|
|
81 extern enum gimplify_status gimplify_arg (tree *, gimple_seq *, location_t,
|
|
82 bool = true);
|
|
83 extern void gimplify_function_tree (tree);
|
|
84 extern enum gimplify_status gimplify_va_arg_expr (tree *, gimple_seq *,
|
|
85 gimple_seq *);
|
131
|
86 extern bool generic_expr_could_trap_p (tree expr);
|
111
|
87 gimple *gimplify_assign (tree, tree, gimple_seq *);
|
|
88
|
|
89 #endif /* GCC_GIMPLIFY_H */
|