Mercurial > hg > CbC > CbC_gcc
annotate gcc/tree-ssa-operands.h @ 128:fe568345ddd5
fix CbC-example
author | mir3636 |
---|---|
date | Wed, 11 Apr 2018 19:32:28 +0900 |
parents | 04ced10e8804 |
children | 84e7813d76e9 |
rev | line source |
---|---|
0 | 1 /* SSA operand management for trees. |
111 | 2 Copyright (C) 2003-2017 Free Software Foundation, Inc. |
0 | 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_TREE_SSA_OPERANDS_H | |
21 #define GCC_TREE_SSA_OPERANDS_H | |
22 | |
23 /* Interface to SSA operands. */ | |
24 | |
25 | |
26 /* This represents a pointer to a DEF operand. */ | |
27 typedef tree *def_operand_p; | |
28 | |
29 /* This represents a pointer to a USE operand. */ | |
30 typedef ssa_use_operand_t *use_operand_p; | |
31 | |
32 /* NULL operand types. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
33 #define NULL_USE_OPERAND_P ((use_operand_p)NULL) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
34 #define NULL_DEF_OPERAND_P ((def_operand_p)NULL) |
0 | 35 |
36 /* This represents the USE operands of a stmt. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
37 struct use_optype_d |
0 | 38 { |
39 struct use_optype_d *next; | |
111 | 40 struct ssa_use_operand_t use_ptr; |
0 | 41 }; |
42 typedef struct use_optype_d *use_optype_p; | |
43 | |
44 /* This structure represents a variable sized buffer which is allocated by the | |
45 operand memory manager. Operands are suballocated out of this block. The | |
46 MEM array varies in size. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
47 |
111 | 48 struct GTY((chain_next("%h.next"))) ssa_operand_memory_d { |
0 | 49 struct ssa_operand_memory_d *next; |
50 char mem[1]; | |
51 }; | |
52 | |
53 /* Per-function operand caches. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
54 struct GTY(()) ssa_operands { |
0 | 55 struct ssa_operand_memory_d *operand_memory; |
56 unsigned operand_memory_index; | |
57 /* Current size of the operand memory buffer. */ | |
58 unsigned int ssa_operand_mem_size; | |
59 | |
60 bool ops_active; | |
61 | |
62 struct use_optype_d * GTY ((skip (""))) free_uses; | |
63 }; | |
64 | |
65 #define USE_FROM_PTR(PTR) get_use_from_ptr (PTR) | |
66 #define DEF_FROM_PTR(PTR) get_def_from_ptr (PTR) | |
67 #define SET_USE(USE, V) set_ssa_use_from_ptr (USE, V) | |
68 #define SET_DEF(DEF, V) ((*(DEF)) = (V)) | |
69 | |
70 #define USE_STMT(USE) (USE)->loc.stmt | |
71 | |
72 #define USE_OP_PTR(OP) (&((OP)->use_ptr)) | |
73 #define USE_OP(OP) (USE_FROM_PTR (USE_OP_PTR (OP))) | |
74 | |
75 #define PHI_RESULT_PTR(PHI) gimple_phi_result_ptr (PHI) | |
76 #define PHI_RESULT(PHI) DEF_FROM_PTR (PHI_RESULT_PTR (PHI)) | |
77 #define SET_PHI_RESULT(PHI, V) SET_DEF (PHI_RESULT_PTR (PHI), (V)) | |
111 | 78 /* |
79 #define PHI_ARG_DEF(PHI, I) USE_FROM_PTR (PHI_ARG_DEF_PTR ((PHI), (I))) | |
80 */ | |
0 | 81 #define PHI_ARG_DEF_PTR(PHI, I) gimple_phi_arg_imm_use_ptr ((PHI), (I)) |
111 | 82 #define PHI_ARG_DEF(PHI, I) gimple_phi_arg_def ((PHI), (I)) |
0 | 83 #define SET_PHI_ARG_DEF(PHI, I, V) \ |
84 SET_USE (PHI_ARG_DEF_PTR ((PHI), (I)), (V)) | |
85 #define PHI_ARG_DEF_FROM_EDGE(PHI, E) \ | |
86 PHI_ARG_DEF ((PHI), (E)->dest_idx) | |
87 #define PHI_ARG_DEF_PTR_FROM_EDGE(PHI, E) \ | |
88 PHI_ARG_DEF_PTR ((PHI), (E)->dest_idx) | |
89 #define PHI_ARG_INDEX_FROM_USE(USE) phi_arg_index_from_use (USE) | |
90 | |
91 | |
111 | 92 extern bool ssa_operands_active (struct function *); |
93 extern void init_ssa_operands (struct function *fn); | |
94 extern void fini_ssa_operands (struct function *); | |
95 extern bool verify_ssa_operands (struct function *, gimple *stmt); | |
96 extern void free_stmt_operands (struct function *, gimple *); | |
97 extern void update_stmt_operands (struct function *, gimple *); | |
98 extern void swap_ssa_operands (gimple *, tree *, tree *); | |
0 | 99 extern bool verify_imm_links (FILE *f, tree var); |
100 | |
111 | 101 extern void dump_immediate_uses_for (FILE *file, tree var); |
0 | 102 extern void dump_immediate_uses (FILE *file); |
103 extern void debug_immediate_uses (void); | |
104 extern void debug_immediate_uses_for (tree var); | |
105 | |
111 | 106 extern void unlink_stmt_vdef (gimple *); |
0 | 107 |
111 | 108 /* Return the tree pointed-to by USE. */ |
109 static inline tree | |
110 get_use_from_ptr (use_operand_p use) | |
111 { | |
112 return *(use->use); | |
113 } | |
0 | 114 |
111 | 115 /* Return the tree pointed-to by DEF. */ |
116 static inline tree | |
117 get_def_from_ptr (def_operand_p def) | |
118 { | |
119 return *def; | |
120 } | |
0 | 121 |
122 #endif /* GCC_TREE_SSA_OPERANDS_H */ |