Mercurial > hg > CbC > CbC_gcc
annotate gcc/tree-pretty-print.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
rev | line source |
---|---|
0 | 1 /* Pretty formatting of GENERIC trees in C syntax. |
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 | |
3 Free Software Foundation, Inc. | |
4 Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com> | |
5 | |
6 This file is part of GCC. | |
7 | |
8 GCC is free software; you can redistribute it and/or modify it under | |
9 the terms of the GNU General Public License as published by the Free | |
10 Software Foundation; either version 3, or (at your option) any later | |
11 version. | |
12 | |
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GCC; see the file COPYING3. If not see | |
20 <http://www.gnu.org/licenses/>. */ | |
21 | |
22 #include "config.h" | |
23 #include "system.h" | |
24 #include "coretypes.h" | |
25 #include "tm.h" | |
26 #include "tree.h" | |
27 #include "output.h" | |
28 #include "diagnostic.h" | |
29 #include "real.h" | |
30 #include "hashtab.h" | |
31 #include "tree-flow.h" | |
32 #include "langhooks.h" | |
33 #include "tree-iterator.h" | |
34 #include "tree-chrec.h" | |
35 #include "tree-pass.h" | |
36 #include "fixed-value.h" | |
37 #include "value-prof.h" | |
38 #include "predict.h" | |
39 | |
40 /* Local functions, macros and variables. */ | |
41 static const char *op_symbol (const_tree); | |
42 static void pretty_print_string (pretty_printer *, const char*); | |
43 static void newline_and_indent (pretty_printer *, int); | |
44 static void maybe_init_pretty_print (FILE *); | |
45 static void print_struct_decl (pretty_printer *, const_tree, int, int); | |
46 static void do_niy (pretty_printer *, const_tree); | |
47 | |
48 #define INDENT(SPACE) do { \ | |
49 int i; for (i = 0; i<SPACE; i++) pp_space (buffer); } while (0) | |
50 | |
51 #define NIY do_niy(buffer,node) | |
52 | |
53 static pretty_printer buffer; | |
54 static int initialized = 0; | |
55 | |
56 /* Try to print something for an unknown tree code. */ | |
57 | |
58 static void | |
59 do_niy (pretty_printer *buffer, const_tree node) | |
60 { | |
61 int i, len; | |
62 | |
63 pp_string (buffer, "<<< Unknown tree: "); | |
64 pp_string (buffer, tree_code_name[(int) TREE_CODE (node)]); | |
65 | |
66 if (EXPR_P (node)) | |
67 { | |
68 len = TREE_OPERAND_LENGTH (node); | |
69 for (i = 0; i < len; ++i) | |
70 { | |
71 newline_and_indent (buffer, 2); | |
72 dump_generic_node (buffer, TREE_OPERAND (node, i), 2, 0, false); | |
73 } | |
74 } | |
75 | |
76 pp_string (buffer, " >>>\n"); | |
77 } | |
78 | |
79 /* Debugging function to print out a generic expression. */ | |
80 | |
81 void | |
82 debug_generic_expr (tree t) | |
83 { | |
84 print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS); | |
85 fprintf (stderr, "\n"); | |
86 } | |
87 | |
88 /* Debugging function to print out a generic statement. */ | |
89 | |
90 void | |
91 debug_generic_stmt (tree t) | |
92 { | |
93 print_generic_stmt (stderr, t, TDF_VOPS|TDF_MEMSYMS); | |
94 fprintf (stderr, "\n"); | |
95 } | |
96 | |
97 /* Debugging function to print out a chain of trees . */ | |
98 | |
99 void | |
100 debug_tree_chain (tree t) | |
101 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
102 struct pointer_set_t *seen = pointer_set_create (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
103 |
0 | 104 while (t) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
105 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
106 print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 fprintf (stderr, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
108 t = TREE_CHAIN (t); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
109 if (pointer_set_insert (seen, t)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
110 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
111 fprintf (stderr, "... [cycled back to "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
112 print_generic_expr (stderr, t, TDF_VOPS|TDF_MEMSYMS|TDF_UID); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
113 fprintf (stderr, "]"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
114 break; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
115 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
116 } |
0 | 117 fprintf (stderr, "\n"); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
118 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
119 pointer_set_destroy (seen); |
0 | 120 } |
121 | |
122 /* Prints declaration DECL to the FILE with details specified by FLAGS. */ | |
123 void | |
124 print_generic_decl (FILE *file, tree decl, int flags) | |
125 { | |
126 maybe_init_pretty_print (file); | |
127 print_declaration (&buffer, decl, 2, flags); | |
128 pp_write_text_to_stream (&buffer); | |
129 } | |
130 | |
131 /* Print tree T, and its successors, on file FILE. FLAGS specifies details | |
132 to show in the dump. See TDF_* in tree-pass.h. */ | |
133 | |
134 void | |
135 print_generic_stmt (FILE *file, tree t, int flags) | |
136 { | |
137 maybe_init_pretty_print (file); | |
138 dump_generic_node (&buffer, t, 0, flags, true); | |
139 pp_flush (&buffer); | |
140 } | |
141 | |
142 /* Print tree T, and its successors, on file FILE. FLAGS specifies details | |
143 to show in the dump. See TDF_* in tree-pass.h. The output is indented by | |
144 INDENT spaces. */ | |
145 | |
146 void | |
147 print_generic_stmt_indented (FILE *file, tree t, int flags, int indent) | |
148 { | |
149 int i; | |
150 | |
151 maybe_init_pretty_print (file); | |
152 | |
153 for (i = 0; i < indent; i++) | |
154 pp_space (&buffer); | |
155 dump_generic_node (&buffer, t, indent, flags, true); | |
156 pp_flush (&buffer); | |
157 } | |
158 | |
159 /* Print a single expression T on file FILE. FLAGS specifies details to show | |
160 in the dump. See TDF_* in tree-pass.h. */ | |
161 | |
162 void | |
163 print_generic_expr (FILE *file, tree t, int flags) | |
164 { | |
165 maybe_init_pretty_print (file); | |
166 dump_generic_node (&buffer, t, 0, flags, false); | |
167 } | |
168 | |
169 /* Dump the name of a _DECL node and its DECL_UID if TDF_UID is set | |
170 in FLAGS. */ | |
171 | |
172 static void | |
173 dump_decl_name (pretty_printer *buffer, tree node, int flags) | |
174 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
175 if (DECL_NAME (node)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
176 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
177 if ((flags & TDF_ASMNAME) && DECL_ASSEMBLER_NAME_SET_P (node)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
178 pp_tree_identifier (buffer, DECL_ASSEMBLER_NAME (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
179 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
180 pp_tree_identifier (buffer, DECL_NAME (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
181 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
182 if ((flags & TDF_UID) || DECL_NAME (node) == NULL_TREE) |
0 | 183 { |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
184 if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
185 pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
186 else if (TREE_CODE (node) == DEBUG_EXPR_DECL) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
187 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
188 if (flags & TDF_NOUID) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
189 pp_string (buffer, "D#xxxx"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
190 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
191 pp_printf (buffer, "D#%i", DEBUG_TEMP_UID (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
192 } |
0 | 193 else |
194 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
195 char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D'; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
196 if (flags & TDF_NOUID) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
197 pp_printf (buffer, "%c.xxxx", c); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
198 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
199 pp_printf (buffer, "%c.%u", c, DECL_UID (node)); |
0 | 200 } |
201 } | |
202 } | |
203 | |
204 /* Like the above, but used for pretty printing function calls. */ | |
205 | |
206 static void | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
207 dump_function_name (pretty_printer *buffer, tree node, int flags) |
0 | 208 { |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
209 if (TREE_CODE (node) == NOP_EXPR) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
210 node = TREE_OPERAND (node, 0); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
211 if (DECL_NAME (node) && (flags & TDF_ASMNAME) == 0) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
212 pp_string (buffer, lang_hooks.decl_printable_name (node, 1)); |
0 | 213 else |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
214 dump_decl_name (buffer, node, flags); |
0 | 215 } |
216 | |
217 /* Dump a function declaration. NODE is the FUNCTION_TYPE. BUFFER, SPC and | |
218 FLAGS are as in dump_generic_node. */ | |
219 | |
220 static void | |
221 dump_function_declaration (pretty_printer *buffer, tree node, | |
222 int spc, int flags) | |
223 { | |
224 bool wrote_arg = false; | |
225 tree arg; | |
226 | |
227 pp_space (buffer); | |
228 pp_character (buffer, '('); | |
229 | |
230 /* Print the argument types. The last element in the list is a VOID_TYPE. | |
231 The following avoids printing the last element. */ | |
232 arg = TYPE_ARG_TYPES (node); | |
233 while (arg && TREE_CHAIN (arg) && arg != error_mark_node) | |
234 { | |
235 wrote_arg = true; | |
236 dump_generic_node (buffer, TREE_VALUE (arg), spc, flags, false); | |
237 arg = TREE_CHAIN (arg); | |
238 if (TREE_CHAIN (arg) && TREE_CODE (TREE_CHAIN (arg)) == TREE_LIST) | |
239 { | |
240 pp_character (buffer, ','); | |
241 pp_space (buffer); | |
242 } | |
243 } | |
244 | |
245 if (!wrote_arg) | |
246 pp_string (buffer, "void"); | |
247 | |
248 pp_character (buffer, ')'); | |
249 } | |
250 | |
251 /* Dump the domain associated with an array. */ | |
252 | |
253 static void | |
254 dump_array_domain (pretty_printer *buffer, tree domain, int spc, int flags) | |
255 { | |
256 pp_character (buffer, '['); | |
257 if (domain) | |
258 { | |
259 tree min = TYPE_MIN_VALUE (domain); | |
260 tree max = TYPE_MAX_VALUE (domain); | |
261 | |
262 if (min && max | |
263 && integer_zerop (min) | |
264 && host_integerp (max, 0)) | |
265 pp_wide_integer (buffer, TREE_INT_CST_LOW (max) + 1); | |
266 else | |
267 { | |
268 if (min) | |
269 dump_generic_node (buffer, min, spc, flags, false); | |
270 pp_character (buffer, ':'); | |
271 if (max) | |
272 dump_generic_node (buffer, max, spc, flags, false); | |
273 } | |
274 } | |
275 else | |
276 pp_string (buffer, "<unknown>"); | |
277 pp_character (buffer, ']'); | |
278 } | |
279 | |
280 | |
281 /* Dump OpenMP clause CLAUSE. BUFFER, CLAUSE, SPC and FLAGS are as in | |
282 dump_generic_node. */ | |
283 | |
284 static void | |
285 dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags) | |
286 { | |
287 const char *name; | |
288 | |
289 switch (OMP_CLAUSE_CODE (clause)) | |
290 { | |
291 case OMP_CLAUSE_PRIVATE: | |
292 name = "private"; | |
293 goto print_remap; | |
294 case OMP_CLAUSE_SHARED: | |
295 name = "shared"; | |
296 goto print_remap; | |
297 case OMP_CLAUSE_FIRSTPRIVATE: | |
298 name = "firstprivate"; | |
299 goto print_remap; | |
300 case OMP_CLAUSE_LASTPRIVATE: | |
301 name = "lastprivate"; | |
302 goto print_remap; | |
303 case OMP_CLAUSE_COPYIN: | |
304 name = "copyin"; | |
305 goto print_remap; | |
306 case OMP_CLAUSE_COPYPRIVATE: | |
307 name = "copyprivate"; | |
308 goto print_remap; | |
309 print_remap: | |
310 pp_string (buffer, name); | |
311 pp_character (buffer, '('); | |
312 dump_generic_node (buffer, OMP_CLAUSE_DECL (clause), | |
313 spc, flags, false); | |
314 pp_character (buffer, ')'); | |
315 break; | |
316 | |
317 case OMP_CLAUSE_REDUCTION: | |
318 pp_string (buffer, "reduction("); | |
319 pp_string (buffer, op_symbol_code (OMP_CLAUSE_REDUCTION_CODE (clause))); | |
320 pp_character (buffer, ':'); | |
321 dump_generic_node (buffer, OMP_CLAUSE_DECL (clause), | |
322 spc, flags, false); | |
323 pp_character (buffer, ')'); | |
324 break; | |
325 | |
326 case OMP_CLAUSE_IF: | |
327 pp_string (buffer, "if("); | |
328 dump_generic_node (buffer, OMP_CLAUSE_IF_EXPR (clause), | |
329 spc, flags, false); | |
330 pp_character (buffer, ')'); | |
331 break; | |
332 | |
333 case OMP_CLAUSE_NUM_THREADS: | |
334 pp_string (buffer, "num_threads("); | |
335 dump_generic_node (buffer, OMP_CLAUSE_NUM_THREADS_EXPR (clause), | |
336 spc, flags, false); | |
337 pp_character (buffer, ')'); | |
338 break; | |
339 | |
340 case OMP_CLAUSE_NOWAIT: | |
341 pp_string (buffer, "nowait"); | |
342 break; | |
343 case OMP_CLAUSE_ORDERED: | |
344 pp_string (buffer, "ordered"); | |
345 break; | |
346 | |
347 case OMP_CLAUSE_DEFAULT: | |
348 pp_string (buffer, "default("); | |
349 switch (OMP_CLAUSE_DEFAULT_KIND (clause)) | |
350 { | |
351 case OMP_CLAUSE_DEFAULT_UNSPECIFIED: | |
352 break; | |
353 case OMP_CLAUSE_DEFAULT_SHARED: | |
354 pp_string (buffer, "shared"); | |
355 break; | |
356 case OMP_CLAUSE_DEFAULT_NONE: | |
357 pp_string (buffer, "none"); | |
358 break; | |
359 case OMP_CLAUSE_DEFAULT_PRIVATE: | |
360 pp_string (buffer, "private"); | |
361 break; | |
362 case OMP_CLAUSE_DEFAULT_FIRSTPRIVATE: | |
363 pp_string (buffer, "firstprivate"); | |
364 break; | |
365 default: | |
366 gcc_unreachable (); | |
367 } | |
368 pp_character (buffer, ')'); | |
369 break; | |
370 | |
371 case OMP_CLAUSE_SCHEDULE: | |
372 pp_string (buffer, "schedule("); | |
373 switch (OMP_CLAUSE_SCHEDULE_KIND (clause)) | |
374 { | |
375 case OMP_CLAUSE_SCHEDULE_STATIC: | |
376 pp_string (buffer, "static"); | |
377 break; | |
378 case OMP_CLAUSE_SCHEDULE_DYNAMIC: | |
379 pp_string (buffer, "dynamic"); | |
380 break; | |
381 case OMP_CLAUSE_SCHEDULE_GUIDED: | |
382 pp_string (buffer, "guided"); | |
383 break; | |
384 case OMP_CLAUSE_SCHEDULE_RUNTIME: | |
385 pp_string (buffer, "runtime"); | |
386 break; | |
387 case OMP_CLAUSE_SCHEDULE_AUTO: | |
388 pp_string (buffer, "auto"); | |
389 break; | |
390 default: | |
391 gcc_unreachable (); | |
392 } | |
393 if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause)) | |
394 { | |
395 pp_character (buffer, ','); | |
396 dump_generic_node (buffer, | |
397 OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause), | |
398 spc, flags, false); | |
399 } | |
400 pp_character (buffer, ')'); | |
401 break; | |
402 | |
403 case OMP_CLAUSE_UNTIED: | |
404 pp_string (buffer, "untied"); | |
405 break; | |
406 | |
407 case OMP_CLAUSE_COLLAPSE: | |
408 pp_string (buffer, "collapse("); | |
409 dump_generic_node (buffer, | |
410 OMP_CLAUSE_COLLAPSE_EXPR (clause), | |
411 spc, flags, false); | |
412 pp_character (buffer, ')'); | |
413 break; | |
414 | |
415 default: | |
416 /* Should never happen. */ | |
417 dump_generic_node (buffer, clause, spc, flags, false); | |
418 break; | |
419 } | |
420 } | |
421 | |
422 | |
423 /* Dump the list of OpenMP clauses. BUFFER, SPC and FLAGS are as in | |
424 dump_generic_node. */ | |
425 | |
426 void | |
427 dump_omp_clauses (pretty_printer *buffer, tree clause, int spc, int flags) | |
428 { | |
429 if (clause == NULL) | |
430 return; | |
431 | |
432 pp_space (buffer); | |
433 while (1) | |
434 { | |
435 dump_omp_clause (buffer, clause, spc, flags); | |
436 clause = OMP_CLAUSE_CHAIN (clause); | |
437 if (clause == NULL) | |
438 return; | |
439 pp_space (buffer); | |
440 } | |
441 } | |
442 | |
443 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
444 /* Dump location LOC to BUFFER. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
445 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
446 static void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
447 dump_location (pretty_printer *buffer, location_t loc) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
448 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
449 expanded_location xloc = expand_location (loc); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
450 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
451 pp_character (buffer, '['); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
452 if (xloc.file) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
453 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
454 pp_string (buffer, xloc.file); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
455 pp_string (buffer, " : "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
456 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
457 pp_decimal_int (buffer, xloc.line); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
458 pp_string (buffer, "] "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
459 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
460 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
461 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
462 /* Dump lexical block BLOCK. BUFFER, SPC and FLAGS are as in |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
463 dump_generic_node. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
464 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
465 static void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
466 dump_block_node (pretty_printer *buffer, tree block, int spc, int flags) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
467 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
468 tree t; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
469 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
470 pp_printf (buffer, "BLOCK #%d ", BLOCK_NUMBER (block)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
471 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
472 if (flags & TDF_ADDRESS) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
473 pp_printf (buffer, "[%p] ", (void *) block); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
474 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
475 if (BLOCK_ABSTRACT (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
476 pp_string (buffer, "[abstract] "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
477 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
478 if (TREE_ASM_WRITTEN (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
479 pp_string (buffer, "[written] "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
480 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
481 if (flags & TDF_SLIM) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
482 return; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
483 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
484 if (BLOCK_SOURCE_LOCATION (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
485 dump_location (buffer, BLOCK_SOURCE_LOCATION (block)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
486 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
487 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
488 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
489 if (BLOCK_SUPERCONTEXT (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
490 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
491 pp_string (buffer, "SUPERCONTEXT: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
492 dump_generic_node (buffer, BLOCK_SUPERCONTEXT (block), 0, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
493 flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
494 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
495 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
496 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
497 if (BLOCK_SUBBLOCKS (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
498 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
499 pp_string (buffer, "SUBBLOCKS: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
500 for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
501 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
502 dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
503 pp_string (buffer, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
504 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
505 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
506 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
507 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
508 if (BLOCK_CHAIN (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
509 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
510 pp_string (buffer, "SIBLINGS: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
511 for (t = BLOCK_CHAIN (block); t; t = BLOCK_CHAIN (t)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
512 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
513 dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
514 pp_string (buffer, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
515 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
516 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
517 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
518 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
519 if (BLOCK_VARS (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
520 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
521 pp_string (buffer, "VARS: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
522 for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
523 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
524 dump_generic_node (buffer, t, 0, flags, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
525 pp_string (buffer, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
526 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
527 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
528 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
529 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
530 if (VEC_length (tree, BLOCK_NONLOCALIZED_VARS (block)) > 0) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
531 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
532 unsigned i; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
533 VEC(tree,gc) *nlv = BLOCK_NONLOCALIZED_VARS (block); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
534 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
535 pp_string (buffer, "NONLOCALIZED_VARS: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
536 for (i = 0; VEC_iterate (tree, nlv, i, t); i++) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
537 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
538 dump_generic_node (buffer, t, 0, flags, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
539 pp_string (buffer, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
540 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
541 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
542 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
543 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
544 if (BLOCK_ABSTRACT_ORIGIN (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
545 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
546 pp_string (buffer, "ABSTRACT_ORIGIN: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
547 dump_generic_node (buffer, BLOCK_ABSTRACT_ORIGIN (block), 0, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
548 flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
549 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
550 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
551 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
552 if (BLOCK_FRAGMENT_ORIGIN (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
553 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
554 pp_string (buffer, "FRAGMENT_ORIGIN: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
555 dump_generic_node (buffer, BLOCK_FRAGMENT_ORIGIN (block), 0, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
556 flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
557 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
558 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
559 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
560 if (BLOCK_FRAGMENT_CHAIN (block)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
561 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
562 pp_string (buffer, "FRAGMENT_CHAIN: "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
563 for (t = BLOCK_FRAGMENT_CHAIN (block); t; t = BLOCK_FRAGMENT_CHAIN (t)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
564 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
565 dump_generic_node (buffer, t, 0, flags | TDF_SLIM, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
566 pp_string (buffer, " "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
567 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
568 newline_and_indent (buffer, spc + 2); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
569 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
570 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
571 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
572 |
0 | 573 /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of |
574 indent. FLAGS specifies details to show in the dump (see TDF_* in | |
575 tree-pass.h). If IS_STMT is true, the object printed is considered | |
576 to be a statement and it is terminated by ';' if appropriate. */ | |
577 | |
578 int | |
579 dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, | |
580 bool is_stmt) | |
581 { | |
582 tree type; | |
583 tree op0, op1; | |
584 const char *str; | |
585 bool is_expr; | |
586 | |
587 if (node == NULL_TREE) | |
588 return spc; | |
589 | |
590 is_expr = EXPR_P (node); | |
591 | |
592 if (is_stmt && (flags & TDF_STMTADDR)) | |
593 pp_printf (buffer, "<&%p> ", (void *)node); | |
594 | |
595 if ((flags & TDF_LINENO) && EXPR_HAS_LOCATION (node)) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
596 dump_location (buffer, EXPR_LOCATION (node)); |
0 | 597 |
598 switch (TREE_CODE (node)) | |
599 { | |
600 case ERROR_MARK: | |
601 pp_string (buffer, "<<< error >>>"); | |
602 break; | |
603 | |
604 case IDENTIFIER_NODE: | |
605 pp_tree_identifier (buffer, node); | |
606 break; | |
607 | |
608 case TREE_LIST: | |
609 while (node && node != error_mark_node) | |
610 { | |
611 if (TREE_PURPOSE (node)) | |
612 { | |
613 dump_generic_node (buffer, TREE_PURPOSE (node), spc, flags, false); | |
614 pp_space (buffer); | |
615 } | |
616 dump_generic_node (buffer, TREE_VALUE (node), spc, flags, false); | |
617 node = TREE_CHAIN (node); | |
618 if (node && TREE_CODE (node) == TREE_LIST) | |
619 { | |
620 pp_character (buffer, ','); | |
621 pp_space (buffer); | |
622 } | |
623 } | |
624 break; | |
625 | |
626 case TREE_BINFO: | |
627 dump_generic_node (buffer, BINFO_TYPE (node), spc, flags, false); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
628 break; |
0 | 629 |
630 case TREE_VEC: | |
631 { | |
632 size_t i; | |
633 if (TREE_VEC_LENGTH (node) > 0) | |
634 { | |
635 size_t len = TREE_VEC_LENGTH (node); | |
636 for (i = 0; i < len - 1; i++) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
637 { |
0 | 638 dump_generic_node (buffer, TREE_VEC_ELT (node, i), spc, flags, |
639 false); | |
640 pp_character (buffer, ','); | |
641 pp_space (buffer); | |
642 } | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
643 dump_generic_node (buffer, TREE_VEC_ELT (node, len - 1), spc, |
0 | 644 flags, false); |
645 } | |
646 } | |
647 break; | |
648 | |
649 case VOID_TYPE: | |
650 case INTEGER_TYPE: | |
651 case REAL_TYPE: | |
652 case FIXED_POINT_TYPE: | |
653 case COMPLEX_TYPE: | |
654 case VECTOR_TYPE: | |
655 case ENUMERAL_TYPE: | |
656 case BOOLEAN_TYPE: | |
657 { | |
658 unsigned int quals = TYPE_QUALS (node); | |
659 enum tree_code_class tclass; | |
660 | |
661 if (quals & TYPE_QUAL_CONST) | |
662 pp_string (buffer, "const "); | |
663 else if (quals & TYPE_QUAL_VOLATILE) | |
664 pp_string (buffer, "volatile "); | |
665 else if (quals & TYPE_QUAL_RESTRICT) | |
666 pp_string (buffer, "restrict "); | |
667 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
668 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node))) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
669 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
670 pp_string (buffer, "<address-space-"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
671 pp_decimal_int (buffer, TYPE_ADDR_SPACE (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
672 pp_string (buffer, "> "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
673 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
674 |
0 | 675 tclass = TREE_CODE_CLASS (TREE_CODE (node)); |
676 | |
677 if (tclass == tcc_declaration) | |
678 { | |
679 if (DECL_NAME (node)) | |
680 dump_decl_name (buffer, node, flags); | |
681 else | |
682 pp_string (buffer, "<unnamed type decl>"); | |
683 } | |
684 else if (tclass == tcc_type) | |
685 { | |
686 if (TYPE_NAME (node)) | |
687 { | |
688 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE) | |
689 pp_tree_identifier (buffer, TYPE_NAME (node)); | |
690 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL | |
691 && DECL_NAME (TYPE_NAME (node))) | |
692 dump_decl_name (buffer, TYPE_NAME (node), flags); | |
693 else | |
694 pp_string (buffer, "<unnamed type>"); | |
695 } | |
696 else if (TREE_CODE (node) == VECTOR_TYPE) | |
697 { | |
698 pp_string (buffer, "vector "); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
699 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); |
0 | 700 } |
701 else if (TREE_CODE (node) == INTEGER_TYPE) | |
702 { | |
703 pp_string (buffer, (TYPE_UNSIGNED (node) | |
704 ? "<unnamed-unsigned:" | |
705 : "<unnamed-signed:")); | |
706 pp_decimal_int (buffer, TYPE_PRECISION (node)); | |
707 pp_string (buffer, ">"); | |
708 } | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
709 else if (TREE_CODE (node) == COMPLEX_TYPE) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
710 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
711 pp_string (buffer, "__complex__ "); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
712 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
713 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
714 else if (TREE_CODE (node) == REAL_TYPE) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
715 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
716 pp_string (buffer, "<float:"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
717 pp_decimal_int (buffer, TYPE_PRECISION (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
718 pp_string (buffer, ">"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
719 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
720 else if (TREE_CODE (node) == FIXED_POINT_TYPE) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
721 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
722 pp_string (buffer, "<fixed-point-"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
723 pp_string (buffer, TYPE_SATURATING (node) ? "sat:" : "nonsat:"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
724 pp_decimal_int (buffer, TYPE_PRECISION (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
725 pp_string (buffer, ">"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
726 } |
0 | 727 else |
728 pp_string (buffer, "<unnamed type>"); | |
729 } | |
730 break; | |
731 } | |
732 | |
733 case POINTER_TYPE: | |
734 case REFERENCE_TYPE: | |
735 str = (TREE_CODE (node) == POINTER_TYPE ? "*" : "&"); | |
736 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
737 if (TREE_TYPE (node) == NULL) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
738 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
739 pp_string (buffer, str); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
740 pp_string (buffer, "<null type>"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
741 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
742 else if (TREE_CODE (TREE_TYPE (node)) == FUNCTION_TYPE) |
0 | 743 { |
744 tree fnode = TREE_TYPE (node); | |
745 | |
746 dump_generic_node (buffer, TREE_TYPE (fnode), spc, flags, false); | |
747 pp_space (buffer); | |
748 pp_character (buffer, '('); | |
749 pp_string (buffer, str); | |
750 if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) | |
751 dump_decl_name (buffer, TYPE_NAME (node), flags); | |
752 else | |
753 pp_printf (buffer, "<T%x>", TYPE_UID (node)); | |
754 | |
755 pp_character (buffer, ')'); | |
756 dump_function_declaration (buffer, fnode, spc, flags); | |
757 } | |
758 else | |
759 { | |
760 unsigned int quals = TYPE_QUALS (node); | |
761 | |
762 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); | |
763 pp_space (buffer); | |
764 pp_string (buffer, str); | |
765 | |
766 if (quals & TYPE_QUAL_CONST) | |
767 pp_string (buffer, " const"); | |
768 if (quals & TYPE_QUAL_VOLATILE) | |
769 pp_string (buffer, " volatile"); | |
770 if (quals & TYPE_QUAL_RESTRICT) | |
771 pp_string (buffer, " restrict"); | |
772 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
773 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node))) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
774 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
775 pp_string (buffer, " <address-space-"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
776 pp_decimal_int (buffer, TYPE_ADDR_SPACE (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
777 pp_string (buffer, ">"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
778 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
779 |
0 | 780 if (TYPE_REF_CAN_ALIAS_ALL (node)) |
781 pp_string (buffer, " {ref-all}"); | |
782 } | |
783 break; | |
784 | |
785 case OFFSET_TYPE: | |
786 NIY; | |
787 break; | |
788 | |
789 case TARGET_MEM_REF: | |
790 { | |
791 const char *sep = ""; | |
792 tree tmp; | |
793 | |
794 pp_string (buffer, "MEM["); | |
795 | |
796 tmp = TMR_SYMBOL (node); | |
797 if (tmp) | |
798 { | |
799 pp_string (buffer, sep); | |
800 sep = ", "; | |
801 pp_string (buffer, "symbol: "); | |
802 dump_generic_node (buffer, tmp, spc, flags, false); | |
803 } | |
804 tmp = TMR_BASE (node); | |
805 if (tmp) | |
806 { | |
807 pp_string (buffer, sep); | |
808 sep = ", "; | |
809 pp_string (buffer, "base: "); | |
810 dump_generic_node (buffer, tmp, spc, flags, false); | |
811 } | |
812 tmp = TMR_INDEX (node); | |
813 if (tmp) | |
814 { | |
815 pp_string (buffer, sep); | |
816 sep = ", "; | |
817 pp_string (buffer, "index: "); | |
818 dump_generic_node (buffer, tmp, spc, flags, false); | |
819 } | |
820 tmp = TMR_STEP (node); | |
821 if (tmp) | |
822 { | |
823 pp_string (buffer, sep); | |
824 sep = ", "; | |
825 pp_string (buffer, "step: "); | |
826 dump_generic_node (buffer, tmp, spc, flags, false); | |
827 } | |
828 tmp = TMR_OFFSET (node); | |
829 if (tmp) | |
830 { | |
831 pp_string (buffer, sep); | |
832 sep = ", "; | |
833 pp_string (buffer, "offset: "); | |
834 dump_generic_node (buffer, tmp, spc, flags, false); | |
835 } | |
836 pp_string (buffer, "]"); | |
837 if (flags & TDF_DETAILS) | |
838 { | |
839 pp_string (buffer, "{"); | |
840 dump_generic_node (buffer, TMR_ORIGINAL (node), spc, flags, | |
841 false); | |
842 pp_string (buffer, "}"); | |
843 } | |
844 } | |
845 break; | |
846 | |
847 case ARRAY_TYPE: | |
848 { | |
849 tree tmp; | |
850 | |
851 /* Print the innermost component type. */ | |
852 for (tmp = TREE_TYPE (node); TREE_CODE (tmp) == ARRAY_TYPE; | |
853 tmp = TREE_TYPE (tmp)) | |
854 ; | |
855 dump_generic_node (buffer, tmp, spc, flags, false); | |
856 | |
857 /* Print the dimensions. */ | |
858 for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; tmp = TREE_TYPE (tmp)) | |
859 dump_array_domain (buffer, TYPE_DOMAIN (tmp), spc, flags); | |
860 break; | |
861 } | |
862 | |
863 case RECORD_TYPE: | |
864 case UNION_TYPE: | |
865 case QUAL_UNION_TYPE: | |
866 { | |
867 unsigned int quals = TYPE_QUALS (node); | |
868 | |
869 if (quals & TYPE_QUAL_CONST) | |
870 pp_string (buffer, "const "); | |
871 if (quals & TYPE_QUAL_VOLATILE) | |
872 pp_string (buffer, "volatile "); | |
873 | |
874 /* Print the name of the structure. */ | |
875 if (TREE_CODE (node) == RECORD_TYPE) | |
876 pp_string (buffer, "struct "); | |
877 else if (TREE_CODE (node) == UNION_TYPE) | |
878 pp_string (buffer, "union "); | |
879 | |
880 if (TYPE_NAME (node)) | |
881 dump_generic_node (buffer, TYPE_NAME (node), spc, flags, false); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
882 else if (!(flags & TDF_SLIM)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
883 /* FIXME: If we eliminate the 'else' above and attempt |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
884 to show the fields for named types, we may get stuck |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
885 following a cycle of pointers to structs. The alleged |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
886 self-reference check in print_struct_decl will not detect |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
887 cycles involving more than one pointer or struct type. */ |
0 | 888 print_struct_decl (buffer, node, spc, flags); |
889 break; | |
890 } | |
891 | |
892 case LANG_TYPE: | |
893 NIY; | |
894 break; | |
895 | |
896 case INTEGER_CST: | |
897 if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE) | |
898 { | |
899 /* In the case of a pointer, one may want to divide by the | |
900 size of the pointed-to type. Unfortunately, this not | |
901 straightforward. The C front-end maps expressions | |
902 | |
903 (int *) 5 | |
904 int *p; (p + 5) | |
905 | |
906 in such a way that the two INTEGER_CST nodes for "5" have | |
907 different values but identical types. In the latter | |
908 case, the 5 is multiplied by sizeof (int) in c-common.c | |
909 (pointer_int_sum) to convert it to a byte address, and | |
910 yet the type of the node is left unchanged. Argh. What | |
911 is consistent though is that the number value corresponds | |
912 to bytes (UNITS) offset. | |
913 | |
914 NB: Neither of the following divisors can be trivially | |
915 used to recover the original literal: | |
916 | |
917 TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (node))) | |
918 TYPE_PRECISION (TREE_TYPE (TREE_TYPE (node))) */ | |
919 pp_wide_integer (buffer, TREE_INT_CST_LOW (node)); | |
920 pp_string (buffer, "B"); /* pseudo-unit */ | |
921 } | |
922 else if (! host_integerp (node, 0)) | |
923 { | |
924 tree val = node; | |
925 unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (val); | |
926 HOST_WIDE_INT high = TREE_INT_CST_HIGH (val); | |
927 | |
928 if (tree_int_cst_sgn (val) < 0) | |
929 { | |
930 pp_character (buffer, '-'); | |
931 high = ~high + !low; | |
932 low = -low; | |
933 } | |
934 /* Would "%x%0*x" or "%x%*0x" get zero-padding on all | |
935 systems? */ | |
936 sprintf (pp_buffer (buffer)->digit_buffer, | |
937 HOST_WIDE_INT_PRINT_DOUBLE_HEX, | |
938 (unsigned HOST_WIDE_INT) high, low); | |
939 pp_string (buffer, pp_buffer (buffer)->digit_buffer); | |
940 } | |
941 else | |
942 pp_wide_integer (buffer, TREE_INT_CST_LOW (node)); | |
943 break; | |
944 | |
945 case REAL_CST: | |
946 /* Code copied from print_node. */ | |
947 { | |
948 REAL_VALUE_TYPE d; | |
949 if (TREE_OVERFLOW (node)) | |
950 pp_string (buffer, " overflow"); | |
951 | |
952 #if !defined(REAL_IS_NOT_DOUBLE) || defined(REAL_ARITHMETIC) | |
953 d = TREE_REAL_CST (node); | |
954 if (REAL_VALUE_ISINF (d)) | |
955 pp_string (buffer, REAL_VALUE_NEGATIVE (d) ? " -Inf" : " Inf"); | |
956 else if (REAL_VALUE_ISNAN (d)) | |
957 pp_string (buffer, " Nan"); | |
958 else | |
959 { | |
960 char string[100]; | |
961 real_to_decimal (string, &d, sizeof (string), 0, 1); | |
962 pp_string (buffer, string); | |
963 } | |
964 #else | |
965 { | |
966 HOST_WIDE_INT i; | |
967 unsigned char *p = (unsigned char *) &TREE_REAL_CST (node); | |
968 pp_string (buffer, "0x"); | |
969 for (i = 0; i < sizeof TREE_REAL_CST (node); i++) | |
970 output_formatted_integer (buffer, "%02x", *p++); | |
971 } | |
972 #endif | |
973 break; | |
974 } | |
975 | |
976 case FIXED_CST: | |
977 { | |
978 char string[100]; | |
979 fixed_to_decimal (string, TREE_FIXED_CST_PTR (node), sizeof (string)); | |
980 pp_string (buffer, string); | |
981 break; | |
982 } | |
983 | |
984 case COMPLEX_CST: | |
985 pp_string (buffer, "__complex__ ("); | |
986 dump_generic_node (buffer, TREE_REALPART (node), spc, flags, false); | |
987 pp_string (buffer, ", "); | |
988 dump_generic_node (buffer, TREE_IMAGPART (node), spc, flags, false); | |
989 pp_string (buffer, ")"); | |
990 break; | |
991 | |
992 case STRING_CST: | |
993 pp_string (buffer, "\""); | |
994 pretty_print_string (buffer, TREE_STRING_POINTER (node)); | |
995 pp_string (buffer, "\""); | |
996 break; | |
997 | |
998 case VECTOR_CST: | |
999 { | |
1000 tree elt; | |
1001 pp_string (buffer, "{ "); | |
1002 for (elt = TREE_VECTOR_CST_ELTS (node); elt; elt = TREE_CHAIN (elt)) | |
1003 { | |
1004 dump_generic_node (buffer, TREE_VALUE (elt), spc, flags, false); | |
1005 if (TREE_CHAIN (elt)) | |
1006 pp_string (buffer, ", "); | |
1007 } | |
1008 pp_string (buffer, " }"); | |
1009 } | |
1010 break; | |
1011 | |
1012 case FUNCTION_TYPE: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1013 case METHOD_TYPE: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1014 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1015 pp_space (buffer); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1016 if (TREE_CODE (node) == METHOD_TYPE) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1017 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1018 if (TYPE_METHOD_BASETYPE (node)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1019 dump_decl_name (buffer, TYPE_NAME (TYPE_METHOD_BASETYPE (node)), |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1020 flags); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1021 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1022 pp_string (buffer, "<null method basetype>"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1023 pp_string (buffer, "::"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1024 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1025 if (TYPE_NAME (node) && DECL_NAME (TYPE_NAME (node))) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1026 dump_decl_name (buffer, TYPE_NAME (node), flags); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1027 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1028 pp_printf (buffer, "<T%x>", TYPE_UID (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1029 dump_function_declaration (buffer, node, spc, flags); |
0 | 1030 break; |
1031 | |
1032 case FUNCTION_DECL: | |
1033 case CONST_DECL: | |
1034 dump_decl_name (buffer, node, flags); | |
1035 break; | |
1036 | |
1037 case LABEL_DECL: | |
1038 if (DECL_NAME (node)) | |
1039 dump_decl_name (buffer, node, flags); | |
1040 else if (LABEL_DECL_UID (node) != -1) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1041 pp_printf (buffer, "<L%d>", (int) LABEL_DECL_UID (node)); |
0 | 1042 else |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1043 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1044 if (flags & TDF_NOUID) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1045 pp_string (buffer, "<D.xxxx>"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1046 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1047 pp_printf (buffer, "<D.%u>", DECL_UID (node)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1048 } |
0 | 1049 break; |
1050 | |
1051 case TYPE_DECL: | |
1052 if (DECL_IS_BUILTIN (node)) | |
1053 { | |
1054 /* Don't print the declaration of built-in types. */ | |
1055 break; | |
1056 } | |
1057 if (DECL_NAME (node)) | |
1058 dump_decl_name (buffer, node, flags); | |
1059 else | |
1060 { | |
1061 if ((TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE | |
1062 || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE) | |
1063 && TYPE_METHODS (TREE_TYPE (node))) | |
1064 { | |
1065 /* The type is a c++ class: all structures have at least | |
1066 4 methods. */ | |
1067 pp_string (buffer, "class "); | |
1068 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); | |
1069 } | |
1070 else | |
1071 { | |
1072 pp_string (buffer, | |
1073 (TREE_CODE (TREE_TYPE (node)) == UNION_TYPE | |
1074 ? "union" : "struct ")); | |
1075 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); | |
1076 } | |
1077 } | |
1078 break; | |
1079 | |
1080 case VAR_DECL: | |
1081 case PARM_DECL: | |
1082 case FIELD_DECL: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1083 case DEBUG_EXPR_DECL: |
0 | 1084 case NAMESPACE_DECL: |
1085 dump_decl_name (buffer, node, flags); | |
1086 break; | |
1087 | |
1088 case RESULT_DECL: | |
1089 pp_string (buffer, "<retval>"); | |
1090 break; | |
1091 | |
1092 case COMPONENT_REF: | |
1093 op0 = TREE_OPERAND (node, 0); | |
1094 str = "."; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1095 if (op0 && TREE_CODE (op0) == INDIRECT_REF) |
0 | 1096 { |
1097 op0 = TREE_OPERAND (op0, 0); | |
1098 str = "->"; | |
1099 } | |
1100 if (op_prio (op0) < op_prio (node)) | |
1101 pp_character (buffer, '('); | |
1102 dump_generic_node (buffer, op0, spc, flags, false); | |
1103 if (op_prio (op0) < op_prio (node)) | |
1104 pp_character (buffer, ')'); | |
1105 pp_string (buffer, str); | |
1106 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1107 op0 = component_ref_field_offset (node); | |
1108 if (op0 && TREE_CODE (op0) != INTEGER_CST) | |
1109 { | |
1110 pp_string (buffer, "{off: "); | |
1111 dump_generic_node (buffer, op0, spc, flags, false); | |
1112 pp_character (buffer, '}'); | |
1113 } | |
1114 break; | |
1115 | |
1116 case BIT_FIELD_REF: | |
1117 pp_string (buffer, "BIT_FIELD_REF <"); | |
1118 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1119 pp_string (buffer, ", "); | |
1120 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1121 pp_string (buffer, ", "); | |
1122 dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false); | |
1123 pp_string (buffer, ">"); | |
1124 break; | |
1125 | |
1126 case ARRAY_REF: | |
1127 case ARRAY_RANGE_REF: | |
1128 op0 = TREE_OPERAND (node, 0); | |
1129 if (op_prio (op0) < op_prio (node)) | |
1130 pp_character (buffer, '('); | |
1131 dump_generic_node (buffer, op0, spc, flags, false); | |
1132 if (op_prio (op0) < op_prio (node)) | |
1133 pp_character (buffer, ')'); | |
1134 pp_character (buffer, '['); | |
1135 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1136 if (TREE_CODE (node) == ARRAY_RANGE_REF) | |
1137 pp_string (buffer, " ..."); | |
1138 pp_character (buffer, ']'); | |
1139 | |
1140 op0 = array_ref_low_bound (node); | |
1141 op1 = array_ref_element_size (node); | |
1142 | |
1143 if (!integer_zerop (op0) | |
1144 || TREE_OPERAND (node, 2) | |
1145 || TREE_OPERAND (node, 3)) | |
1146 { | |
1147 pp_string (buffer, "{lb: "); | |
1148 dump_generic_node (buffer, op0, spc, flags, false); | |
1149 pp_string (buffer, " sz: "); | |
1150 dump_generic_node (buffer, op1, spc, flags, false); | |
1151 pp_character (buffer, '}'); | |
1152 } | |
1153 break; | |
1154 | |
1155 case CONSTRUCTOR: | |
1156 { | |
1157 unsigned HOST_WIDE_INT ix; | |
1158 tree field, val; | |
1159 bool is_struct_init = FALSE; | |
1160 pp_character (buffer, '{'); | |
1161 if (TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE | |
1162 || TREE_CODE (TREE_TYPE (node)) == UNION_TYPE) | |
1163 is_struct_init = TRUE; | |
1164 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node), ix, field, val) | |
1165 { | |
1166 if (field && is_struct_init) | |
1167 { | |
1168 pp_character (buffer, '.'); | |
1169 dump_generic_node (buffer, field, spc, flags, false); | |
1170 pp_string (buffer, "="); | |
1171 } | |
1172 if (val && TREE_CODE (val) == ADDR_EXPR) | |
1173 if (TREE_CODE (TREE_OPERAND (val, 0)) == FUNCTION_DECL) | |
1174 val = TREE_OPERAND (val, 0); | |
1175 if (val && TREE_CODE (val) == FUNCTION_DECL) | |
1176 dump_decl_name (buffer, val, flags); | |
1177 else | |
1178 dump_generic_node (buffer, val, spc, flags, false); | |
1179 if (ix != VEC_length (constructor_elt, CONSTRUCTOR_ELTS (node)) - 1) | |
1180 { | |
1181 pp_character (buffer, ','); | |
1182 pp_space (buffer); | |
1183 } | |
1184 } | |
1185 pp_character (buffer, '}'); | |
1186 } | |
1187 break; | |
1188 | |
1189 case COMPOUND_EXPR: | |
1190 { | |
1191 tree *tp; | |
1192 if (flags & TDF_SLIM) | |
1193 { | |
1194 pp_string (buffer, "<COMPOUND_EXPR>"); | |
1195 break; | |
1196 } | |
1197 | |
1198 dump_generic_node (buffer, TREE_OPERAND (node, 0), | |
1199 spc, flags, !(flags & TDF_SLIM)); | |
1200 if (flags & TDF_SLIM) | |
1201 newline_and_indent (buffer, spc); | |
1202 else | |
1203 { | |
1204 pp_character (buffer, ','); | |
1205 pp_space (buffer); | |
1206 } | |
1207 | |
1208 for (tp = &TREE_OPERAND (node, 1); | |
1209 TREE_CODE (*tp) == COMPOUND_EXPR; | |
1210 tp = &TREE_OPERAND (*tp, 1)) | |
1211 { | |
1212 dump_generic_node (buffer, TREE_OPERAND (*tp, 0), | |
1213 spc, flags, !(flags & TDF_SLIM)); | |
1214 if (flags & TDF_SLIM) | |
1215 newline_and_indent (buffer, spc); | |
1216 else | |
1217 { | |
1218 pp_character (buffer, ','); | |
1219 pp_space (buffer); | |
1220 } | |
1221 } | |
1222 | |
1223 dump_generic_node (buffer, *tp, spc, flags, !(flags & TDF_SLIM)); | |
1224 } | |
1225 break; | |
1226 | |
1227 case STATEMENT_LIST: | |
1228 { | |
1229 tree_stmt_iterator si; | |
1230 bool first = true; | |
1231 | |
1232 if (flags & TDF_SLIM) | |
1233 { | |
1234 pp_string (buffer, "<STATEMENT_LIST>"); | |
1235 break; | |
1236 } | |
1237 | |
1238 for (si = tsi_start (node); !tsi_end_p (si); tsi_next (&si)) | |
1239 { | |
1240 if (!first) | |
1241 newline_and_indent (buffer, spc); | |
1242 else | |
1243 first = false; | |
1244 dump_generic_node (buffer, tsi_stmt (si), spc, flags, true); | |
1245 } | |
1246 } | |
1247 break; | |
1248 | |
1249 case MODIFY_EXPR: | |
1250 case INIT_EXPR: | |
1251 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, | |
1252 false); | |
1253 pp_space (buffer); | |
1254 pp_character (buffer, '='); | |
1255 if (TREE_CODE (node) == MODIFY_EXPR | |
1256 && MOVE_NONTEMPORAL (node)) | |
1257 pp_string (buffer, "{nt}"); | |
1258 pp_space (buffer); | |
1259 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, | |
1260 false); | |
1261 break; | |
1262 | |
1263 case TARGET_EXPR: | |
1264 pp_string (buffer, "TARGET_EXPR <"); | |
1265 dump_generic_node (buffer, TARGET_EXPR_SLOT (node), spc, flags, false); | |
1266 pp_character (buffer, ','); | |
1267 pp_space (buffer); | |
1268 dump_generic_node (buffer, TARGET_EXPR_INITIAL (node), spc, flags, false); | |
1269 pp_character (buffer, '>'); | |
1270 break; | |
1271 | |
1272 case DECL_EXPR: | |
1273 print_declaration (buffer, DECL_EXPR_DECL (node), spc, flags); | |
1274 is_stmt = false; | |
1275 break; | |
1276 | |
1277 case COND_EXPR: | |
1278 if (TREE_TYPE (node) == NULL || TREE_TYPE (node) == void_type_node) | |
1279 { | |
1280 pp_string (buffer, "if ("); | |
1281 dump_generic_node (buffer, COND_EXPR_COND (node), spc, flags, false); | |
1282 pp_character (buffer, ')'); | |
1283 /* The lowered cond_exprs should always be printed in full. */ | |
1284 if (COND_EXPR_THEN (node) | |
1285 && (IS_EMPTY_STMT (COND_EXPR_THEN (node)) | |
1286 || TREE_CODE (COND_EXPR_THEN (node)) == GOTO_EXPR) | |
1287 && COND_EXPR_ELSE (node) | |
1288 && (IS_EMPTY_STMT (COND_EXPR_ELSE (node)) | |
1289 || TREE_CODE (COND_EXPR_ELSE (node)) == GOTO_EXPR)) | |
1290 { | |
1291 pp_space (buffer); | |
1292 dump_generic_node (buffer, COND_EXPR_THEN (node), | |
1293 0, flags, true); | |
1294 if (!IS_EMPTY_STMT (COND_EXPR_ELSE (node))) | |
1295 { | |
1296 pp_string (buffer, " else "); | |
1297 dump_generic_node (buffer, COND_EXPR_ELSE (node), | |
1298 0, flags, true); | |
1299 } | |
1300 } | |
1301 else if (!(flags & TDF_SLIM)) | |
1302 { | |
1303 /* Output COND_EXPR_THEN. */ | |
1304 if (COND_EXPR_THEN (node)) | |
1305 { | |
1306 newline_and_indent (buffer, spc+2); | |
1307 pp_character (buffer, '{'); | |
1308 newline_and_indent (buffer, spc+4); | |
1309 dump_generic_node (buffer, COND_EXPR_THEN (node), spc+4, | |
1310 flags, true); | |
1311 newline_and_indent (buffer, spc+2); | |
1312 pp_character (buffer, '}'); | |
1313 } | |
1314 | |
1315 /* Output COND_EXPR_ELSE. */ | |
1316 if (COND_EXPR_ELSE (node) | |
1317 && !IS_EMPTY_STMT (COND_EXPR_ELSE (node))) | |
1318 { | |
1319 newline_and_indent (buffer, spc); | |
1320 pp_string (buffer, "else"); | |
1321 newline_and_indent (buffer, spc+2); | |
1322 pp_character (buffer, '{'); | |
1323 newline_and_indent (buffer, spc+4); | |
1324 dump_generic_node (buffer, COND_EXPR_ELSE (node), spc+4, | |
1325 flags, true); | |
1326 newline_and_indent (buffer, spc+2); | |
1327 pp_character (buffer, '}'); | |
1328 } | |
1329 } | |
1330 is_expr = false; | |
1331 } | |
1332 else | |
1333 { | |
1334 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1335 pp_space (buffer); | |
1336 pp_character (buffer, '?'); | |
1337 pp_space (buffer); | |
1338 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1339 pp_space (buffer); | |
1340 pp_character (buffer, ':'); | |
1341 pp_space (buffer); | |
1342 dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false); | |
1343 } | |
1344 break; | |
1345 | |
1346 case BIND_EXPR: | |
1347 pp_character (buffer, '{'); | |
1348 if (!(flags & TDF_SLIM)) | |
1349 { | |
1350 if (BIND_EXPR_VARS (node)) | |
1351 { | |
1352 pp_newline (buffer); | |
1353 | |
1354 for (op0 = BIND_EXPR_VARS (node); op0; op0 = TREE_CHAIN (op0)) | |
1355 { | |
1356 print_declaration (buffer, op0, spc+2, flags); | |
1357 pp_newline (buffer); | |
1358 } | |
1359 } | |
1360 | |
1361 newline_and_indent (buffer, spc+2); | |
1362 dump_generic_node (buffer, BIND_EXPR_BODY (node), spc+2, flags, true); | |
1363 newline_and_indent (buffer, spc); | |
1364 pp_character (buffer, '}'); | |
1365 } | |
1366 is_expr = false; | |
1367 break; | |
1368 | |
1369 case CALL_EXPR: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1370 print_call_name (buffer, CALL_EXPR_FN (node), flags); |
0 | 1371 |
1372 /* Print parameters. */ | |
1373 pp_space (buffer); | |
1374 pp_character (buffer, '('); | |
1375 { | |
1376 tree arg; | |
1377 call_expr_arg_iterator iter; | |
1378 FOR_EACH_CALL_EXPR_ARG (arg, iter, node) | |
1379 { | |
1380 dump_generic_node (buffer, arg, spc, flags, false); | |
1381 if (more_call_expr_args_p (&iter)) | |
1382 { | |
1383 pp_character (buffer, ','); | |
1384 pp_space (buffer); | |
1385 } | |
1386 } | |
1387 } | |
1388 if (CALL_EXPR_VA_ARG_PACK (node)) | |
1389 { | |
1390 if (call_expr_nargs (node) > 0) | |
1391 { | |
1392 pp_character (buffer, ','); | |
1393 pp_space (buffer); | |
1394 } | |
1395 pp_string (buffer, "__builtin_va_arg_pack ()"); | |
1396 } | |
1397 pp_character (buffer, ')'); | |
1398 | |
1399 op1 = CALL_EXPR_STATIC_CHAIN (node); | |
1400 if (op1) | |
1401 { | |
1402 pp_string (buffer, " [static-chain: "); | |
1403 dump_generic_node (buffer, op1, spc, flags, false); | |
1404 pp_character (buffer, ']'); | |
1405 } | |
1406 | |
1407 if (CALL_EXPR_RETURN_SLOT_OPT (node)) | |
1408 pp_string (buffer, " [return slot optimization]"); | |
1409 if (CALL_EXPR_TAILCALL (node)) | |
1410 pp_string (buffer, " [tail call]"); | |
1411 break; | |
1412 | |
1413 case WITH_CLEANUP_EXPR: | |
1414 NIY; | |
1415 break; | |
1416 | |
1417 case CLEANUP_POINT_EXPR: | |
1418 pp_string (buffer, "<<cleanup_point "); | |
1419 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1420 pp_string (buffer, ">>"); | |
1421 break; | |
1422 | |
1423 case PLACEHOLDER_EXPR: | |
1424 pp_string (buffer, "<PLACEHOLDER_EXPR "); | |
1425 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); | |
1426 pp_character (buffer, '>'); | |
1427 break; | |
1428 | |
1429 /* Binary arithmetic and logic expressions. */ | |
1430 case WIDEN_SUM_EXPR: | |
1431 case WIDEN_MULT_EXPR: | |
1432 case MULT_EXPR: | |
1433 case PLUS_EXPR: | |
1434 case POINTER_PLUS_EXPR: | |
1435 case MINUS_EXPR: | |
1436 case TRUNC_DIV_EXPR: | |
1437 case CEIL_DIV_EXPR: | |
1438 case FLOOR_DIV_EXPR: | |
1439 case ROUND_DIV_EXPR: | |
1440 case TRUNC_MOD_EXPR: | |
1441 case CEIL_MOD_EXPR: | |
1442 case FLOOR_MOD_EXPR: | |
1443 case ROUND_MOD_EXPR: | |
1444 case RDIV_EXPR: | |
1445 case EXACT_DIV_EXPR: | |
1446 case LSHIFT_EXPR: | |
1447 case RSHIFT_EXPR: | |
1448 case LROTATE_EXPR: | |
1449 case RROTATE_EXPR: | |
1450 case VEC_LSHIFT_EXPR: | |
1451 case VEC_RSHIFT_EXPR: | |
1452 case BIT_IOR_EXPR: | |
1453 case BIT_XOR_EXPR: | |
1454 case BIT_AND_EXPR: | |
1455 case TRUTH_ANDIF_EXPR: | |
1456 case TRUTH_ORIF_EXPR: | |
1457 case TRUTH_AND_EXPR: | |
1458 case TRUTH_OR_EXPR: | |
1459 case TRUTH_XOR_EXPR: | |
1460 case LT_EXPR: | |
1461 case LE_EXPR: | |
1462 case GT_EXPR: | |
1463 case GE_EXPR: | |
1464 case EQ_EXPR: | |
1465 case NE_EXPR: | |
1466 case UNLT_EXPR: | |
1467 case UNLE_EXPR: | |
1468 case UNGT_EXPR: | |
1469 case UNGE_EXPR: | |
1470 case UNEQ_EXPR: | |
1471 case LTGT_EXPR: | |
1472 case ORDERED_EXPR: | |
1473 case UNORDERED_EXPR: | |
1474 { | |
1475 const char *op = op_symbol (node); | |
1476 op0 = TREE_OPERAND (node, 0); | |
1477 op1 = TREE_OPERAND (node, 1); | |
1478 | |
1479 /* When the operands are expressions with less priority, | |
1480 keep semantics of the tree representation. */ | |
1481 if (op_prio (op0) <= op_prio (node)) | |
1482 { | |
1483 pp_character (buffer, '('); | |
1484 dump_generic_node (buffer, op0, spc, flags, false); | |
1485 pp_character (buffer, ')'); | |
1486 } | |
1487 else | |
1488 dump_generic_node (buffer, op0, spc, flags, false); | |
1489 | |
1490 pp_space (buffer); | |
1491 pp_string (buffer, op); | |
1492 pp_space (buffer); | |
1493 | |
1494 /* When the operands are expressions with less priority, | |
1495 keep semantics of the tree representation. */ | |
1496 if (op_prio (op1) <= op_prio (node)) | |
1497 { | |
1498 pp_character (buffer, '('); | |
1499 dump_generic_node (buffer, op1, spc, flags, false); | |
1500 pp_character (buffer, ')'); | |
1501 } | |
1502 else | |
1503 dump_generic_node (buffer, op1, spc, flags, false); | |
1504 } | |
1505 break; | |
1506 | |
1507 /* Unary arithmetic and logic expressions. */ | |
1508 case NEGATE_EXPR: | |
1509 case BIT_NOT_EXPR: | |
1510 case TRUTH_NOT_EXPR: | |
1511 case ADDR_EXPR: | |
1512 case PREDECREMENT_EXPR: | |
1513 case PREINCREMENT_EXPR: | |
1514 case ALIGN_INDIRECT_REF: | |
1515 case MISALIGNED_INDIRECT_REF: | |
1516 case INDIRECT_REF: | |
1517 if (TREE_CODE (node) == ADDR_EXPR | |
1518 && (TREE_CODE (TREE_OPERAND (node, 0)) == STRING_CST | |
1519 || TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL)) | |
1520 ; /* Do not output '&' for strings and function pointers. */ | |
1521 else | |
1522 pp_string (buffer, op_symbol (node)); | |
1523 | |
1524 if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node)) | |
1525 { | |
1526 pp_character (buffer, '('); | |
1527 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1528 pp_character (buffer, ')'); | |
1529 } | |
1530 else | |
1531 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1532 | |
1533 if (TREE_CODE (node) == MISALIGNED_INDIRECT_REF) | |
1534 { | |
1535 pp_string (buffer, "{misalignment: "); | |
1536 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1537 pp_character (buffer, '}'); | |
1538 } | |
1539 break; | |
1540 | |
1541 case POSTDECREMENT_EXPR: | |
1542 case POSTINCREMENT_EXPR: | |
1543 if (op_prio (TREE_OPERAND (node, 0)) < op_prio (node)) | |
1544 { | |
1545 pp_character (buffer, '('); | |
1546 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1547 pp_character (buffer, ')'); | |
1548 } | |
1549 else | |
1550 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1551 pp_string (buffer, op_symbol (node)); | |
1552 break; | |
1553 | |
1554 case MIN_EXPR: | |
1555 pp_string (buffer, "MIN_EXPR <"); | |
1556 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1557 pp_string (buffer, ", "); | |
1558 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1559 pp_character (buffer, '>'); | |
1560 break; | |
1561 | |
1562 case MAX_EXPR: | |
1563 pp_string (buffer, "MAX_EXPR <"); | |
1564 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1565 pp_string (buffer, ", "); | |
1566 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1567 pp_character (buffer, '>'); | |
1568 break; | |
1569 | |
1570 case ABS_EXPR: | |
1571 pp_string (buffer, "ABS_EXPR <"); | |
1572 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1573 pp_character (buffer, '>'); | |
1574 break; | |
1575 | |
1576 case RANGE_EXPR: | |
1577 NIY; | |
1578 break; | |
1579 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1580 case ADDR_SPACE_CONVERT_EXPR: |
0 | 1581 case FIXED_CONVERT_EXPR: |
1582 case FIX_TRUNC_EXPR: | |
1583 case FLOAT_EXPR: | |
1584 CASE_CONVERT: | |
1585 type = TREE_TYPE (node); | |
1586 op0 = TREE_OPERAND (node, 0); | |
1587 if (type != TREE_TYPE (op0)) | |
1588 { | |
1589 pp_character (buffer, '('); | |
1590 dump_generic_node (buffer, type, spc, flags, false); | |
1591 pp_string (buffer, ") "); | |
1592 } | |
1593 if (op_prio (op0) < op_prio (node)) | |
1594 pp_character (buffer, '('); | |
1595 dump_generic_node (buffer, op0, spc, flags, false); | |
1596 if (op_prio (op0) < op_prio (node)) | |
1597 pp_character (buffer, ')'); | |
1598 break; | |
1599 | |
1600 case VIEW_CONVERT_EXPR: | |
1601 pp_string (buffer, "VIEW_CONVERT_EXPR<"); | |
1602 dump_generic_node (buffer, TREE_TYPE (node), spc, flags, false); | |
1603 pp_string (buffer, ">("); | |
1604 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1605 pp_character (buffer, ')'); | |
1606 break; | |
1607 | |
1608 case PAREN_EXPR: | |
1609 pp_string (buffer, "(("); | |
1610 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1611 pp_string (buffer, "))"); | |
1612 break; | |
1613 | |
1614 case NON_LVALUE_EXPR: | |
1615 pp_string (buffer, "NON_LVALUE_EXPR <"); | |
1616 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1617 pp_character (buffer, '>'); | |
1618 break; | |
1619 | |
1620 case SAVE_EXPR: | |
1621 pp_string (buffer, "SAVE_EXPR <"); | |
1622 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1623 pp_character (buffer, '>'); | |
1624 break; | |
1625 | |
1626 case COMPLEX_EXPR: | |
1627 pp_string (buffer, "COMPLEX_EXPR <"); | |
1628 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1629 pp_string (buffer, ", "); | |
1630 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1631 pp_string (buffer, ">"); | |
1632 break; | |
1633 | |
1634 case CONJ_EXPR: | |
1635 pp_string (buffer, "CONJ_EXPR <"); | |
1636 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1637 pp_string (buffer, ">"); | |
1638 break; | |
1639 | |
1640 case REALPART_EXPR: | |
1641 pp_string (buffer, "REALPART_EXPR <"); | |
1642 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1643 pp_string (buffer, ">"); | |
1644 break; | |
1645 | |
1646 case IMAGPART_EXPR: | |
1647 pp_string (buffer, "IMAGPART_EXPR <"); | |
1648 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1649 pp_string (buffer, ">"); | |
1650 break; | |
1651 | |
1652 case VA_ARG_EXPR: | |
1653 pp_string (buffer, "VA_ARG_EXPR <"); | |
1654 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1655 pp_string (buffer, ">"); | |
1656 break; | |
1657 | |
1658 case TRY_FINALLY_EXPR: | |
1659 case TRY_CATCH_EXPR: | |
1660 pp_string (buffer, "try"); | |
1661 newline_and_indent (buffer, spc+2); | |
1662 pp_string (buffer, "{"); | |
1663 newline_and_indent (buffer, spc+4); | |
1664 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc+4, flags, true); | |
1665 newline_and_indent (buffer, spc+2); | |
1666 pp_string (buffer, "}"); | |
1667 newline_and_indent (buffer, spc); | |
1668 pp_string (buffer, | |
1669 (TREE_CODE (node) == TRY_CATCH_EXPR) ? "catch" : "finally"); | |
1670 newline_and_indent (buffer, spc+2); | |
1671 pp_string (buffer, "{"); | |
1672 newline_and_indent (buffer, spc+4); | |
1673 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc+4, flags, true); | |
1674 newline_and_indent (buffer, spc+2); | |
1675 pp_string (buffer, "}"); | |
1676 is_expr = false; | |
1677 break; | |
1678 | |
1679 case CATCH_EXPR: | |
1680 pp_string (buffer, "catch ("); | |
1681 dump_generic_node (buffer, CATCH_TYPES (node), spc+2, flags, false); | |
1682 pp_string (buffer, ")"); | |
1683 newline_and_indent (buffer, spc+2); | |
1684 pp_string (buffer, "{"); | |
1685 newline_and_indent (buffer, spc+4); | |
1686 dump_generic_node (buffer, CATCH_BODY (node), spc+4, flags, true); | |
1687 newline_and_indent (buffer, spc+2); | |
1688 pp_string (buffer, "}"); | |
1689 is_expr = false; | |
1690 break; | |
1691 | |
1692 case EH_FILTER_EXPR: | |
1693 pp_string (buffer, "<<<eh_filter ("); | |
1694 dump_generic_node (buffer, EH_FILTER_TYPES (node), spc+2, flags, false); | |
1695 pp_string (buffer, ")>>>"); | |
1696 newline_and_indent (buffer, spc+2); | |
1697 pp_string (buffer, "{"); | |
1698 newline_and_indent (buffer, spc+4); | |
1699 dump_generic_node (buffer, EH_FILTER_FAILURE (node), spc+4, flags, true); | |
1700 newline_and_indent (buffer, spc+2); | |
1701 pp_string (buffer, "}"); | |
1702 is_expr = false; | |
1703 break; | |
1704 | |
1705 case LABEL_EXPR: | |
1706 op0 = TREE_OPERAND (node, 0); | |
1707 /* If this is for break or continue, don't bother printing it. */ | |
1708 if (DECL_NAME (op0)) | |
1709 { | |
1710 const char *name = IDENTIFIER_POINTER (DECL_NAME (op0)); | |
1711 if (strcmp (name, "break") == 0 | |
1712 || strcmp (name, "continue") == 0) | |
1713 break; | |
1714 } | |
1715 dump_generic_node (buffer, op0, spc, flags, false); | |
1716 pp_character (buffer, ':'); | |
1717 if (DECL_NONLOCAL (op0)) | |
1718 pp_string (buffer, " [non-local]"); | |
1719 break; | |
1720 | |
1721 case LOOP_EXPR: | |
1722 pp_string (buffer, "while (1)"); | |
1723 if (!(flags & TDF_SLIM)) | |
1724 { | |
1725 newline_and_indent (buffer, spc+2); | |
1726 pp_character (buffer, '{'); | |
1727 newline_and_indent (buffer, spc+4); | |
1728 dump_generic_node (buffer, LOOP_EXPR_BODY (node), spc+4, flags, true); | |
1729 newline_and_indent (buffer, spc+2); | |
1730 pp_character (buffer, '}'); | |
1731 } | |
1732 is_expr = false; | |
1733 break; | |
1734 | |
1735 case PREDICT_EXPR: | |
1736 pp_string (buffer, "// predicted "); | |
1737 if (PREDICT_EXPR_OUTCOME (node)) | |
1738 pp_string (buffer, "likely by "); | |
1739 else | |
1740 pp_string (buffer, "unlikely by "); | |
1741 pp_string (buffer, predictor_name (PREDICT_EXPR_PREDICTOR (node))); | |
1742 pp_string (buffer, " predictor."); | |
1743 break; | |
1744 | |
1745 case RETURN_EXPR: | |
1746 pp_string (buffer, "return"); | |
1747 op0 = TREE_OPERAND (node, 0); | |
1748 if (op0) | |
1749 { | |
1750 pp_space (buffer); | |
1751 if (TREE_CODE (op0) == MODIFY_EXPR) | |
1752 dump_generic_node (buffer, TREE_OPERAND (op0, 1), | |
1753 spc, flags, false); | |
1754 else | |
1755 dump_generic_node (buffer, op0, spc, flags, false); | |
1756 } | |
1757 break; | |
1758 | |
1759 case EXIT_EXPR: | |
1760 pp_string (buffer, "if ("); | |
1761 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1762 pp_string (buffer, ") break"); | |
1763 break; | |
1764 | |
1765 case SWITCH_EXPR: | |
1766 pp_string (buffer, "switch ("); | |
1767 dump_generic_node (buffer, SWITCH_COND (node), spc, flags, false); | |
1768 pp_character (buffer, ')'); | |
1769 if (!(flags & TDF_SLIM)) | |
1770 { | |
1771 newline_and_indent (buffer, spc+2); | |
1772 pp_character (buffer, '{'); | |
1773 if (SWITCH_BODY (node)) | |
1774 { | |
1775 newline_and_indent (buffer, spc+4); | |
1776 dump_generic_node (buffer, SWITCH_BODY (node), spc+4, flags, | |
1777 true); | |
1778 } | |
1779 else | |
1780 { | |
1781 tree vec = SWITCH_LABELS (node); | |
1782 size_t i, n = TREE_VEC_LENGTH (vec); | |
1783 for (i = 0; i < n; ++i) | |
1784 { | |
1785 tree elt = TREE_VEC_ELT (vec, i); | |
1786 newline_and_indent (buffer, spc+4); | |
1787 if (elt) | |
1788 { | |
1789 dump_generic_node (buffer, elt, spc+4, flags, false); | |
1790 pp_string (buffer, " goto "); | |
1791 dump_generic_node (buffer, CASE_LABEL (elt), spc+4, | |
1792 flags, true); | |
1793 pp_semicolon (buffer); | |
1794 } | |
1795 else | |
1796 pp_string (buffer, "case ???: goto ???;"); | |
1797 } | |
1798 } | |
1799 newline_and_indent (buffer, spc+2); | |
1800 pp_character (buffer, '}'); | |
1801 } | |
1802 is_expr = false; | |
1803 break; | |
1804 | |
1805 case GOTO_EXPR: | |
1806 op0 = GOTO_DESTINATION (node); | |
1807 if (TREE_CODE (op0) != SSA_NAME && DECL_P (op0) && DECL_NAME (op0)) | |
1808 { | |
1809 const char *name = IDENTIFIER_POINTER (DECL_NAME (op0)); | |
1810 if (strcmp (name, "break") == 0 | |
1811 || strcmp (name, "continue") == 0) | |
1812 { | |
1813 pp_string (buffer, name); | |
1814 break; | |
1815 } | |
1816 } | |
1817 pp_string (buffer, "goto "); | |
1818 dump_generic_node (buffer, op0, spc, flags, false); | |
1819 break; | |
1820 | |
1821 case ASM_EXPR: | |
1822 pp_string (buffer, "__asm__"); | |
1823 if (ASM_VOLATILE_P (node)) | |
1824 pp_string (buffer, " __volatile__"); | |
1825 pp_character (buffer, '('); | |
1826 dump_generic_node (buffer, ASM_STRING (node), spc, flags, false); | |
1827 pp_character (buffer, ':'); | |
1828 dump_generic_node (buffer, ASM_OUTPUTS (node), spc, flags, false); | |
1829 pp_character (buffer, ':'); | |
1830 dump_generic_node (buffer, ASM_INPUTS (node), spc, flags, false); | |
1831 if (ASM_CLOBBERS (node)) | |
1832 { | |
1833 pp_character (buffer, ':'); | |
1834 dump_generic_node (buffer, ASM_CLOBBERS (node), spc, flags, false); | |
1835 } | |
1836 pp_string (buffer, ")"); | |
1837 break; | |
1838 | |
1839 case CASE_LABEL_EXPR: | |
1840 if (CASE_LOW (node) && CASE_HIGH (node)) | |
1841 { | |
1842 pp_string (buffer, "case "); | |
1843 dump_generic_node (buffer, CASE_LOW (node), spc, flags, false); | |
1844 pp_string (buffer, " ... "); | |
1845 dump_generic_node (buffer, CASE_HIGH (node), spc, flags, false); | |
1846 } | |
1847 else if (CASE_LOW (node)) | |
1848 { | |
1849 pp_string (buffer, "case "); | |
1850 dump_generic_node (buffer, CASE_LOW (node), spc, flags, false); | |
1851 } | |
1852 else | |
1853 pp_string (buffer, "default"); | |
1854 pp_character (buffer, ':'); | |
1855 break; | |
1856 | |
1857 case OBJ_TYPE_REF: | |
1858 pp_string (buffer, "OBJ_TYPE_REF("); | |
1859 dump_generic_node (buffer, OBJ_TYPE_REF_EXPR (node), spc, flags, false); | |
1860 pp_character (buffer, ';'); | |
1861 dump_generic_node (buffer, OBJ_TYPE_REF_OBJECT (node), spc, flags, false); | |
1862 pp_character (buffer, '-'); | |
1863 pp_character (buffer, '>'); | |
1864 dump_generic_node (buffer, OBJ_TYPE_REF_TOKEN (node), spc, flags, false); | |
1865 pp_character (buffer, ')'); | |
1866 break; | |
1867 | |
1868 case SSA_NAME: | |
1869 dump_generic_node (buffer, SSA_NAME_VAR (node), spc, flags, false); | |
1870 pp_string (buffer, "_"); | |
1871 pp_decimal_int (buffer, SSA_NAME_VERSION (node)); | |
1872 if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (node)) | |
1873 pp_string (buffer, "(ab)"); | |
1874 else if (SSA_NAME_IS_DEFAULT_DEF (node)) | |
1875 pp_string (buffer, "(D)"); | |
1876 break; | |
1877 | |
1878 case WITH_SIZE_EXPR: | |
1879 pp_string (buffer, "WITH_SIZE_EXPR <"); | |
1880 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1881 pp_string (buffer, ", "); | |
1882 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1883 pp_string (buffer, ">"); | |
1884 break; | |
1885 | |
1886 case ASSERT_EXPR: | |
1887 pp_string (buffer, "ASSERT_EXPR <"); | |
1888 dump_generic_node (buffer, ASSERT_EXPR_VAR (node), spc, flags, false); | |
1889 pp_string (buffer, ", "); | |
1890 dump_generic_node (buffer, ASSERT_EXPR_COND (node), spc, flags, false); | |
1891 pp_string (buffer, ">"); | |
1892 break; | |
1893 | |
1894 case SCEV_KNOWN: | |
1895 pp_string (buffer, "scev_known"); | |
1896 break; | |
1897 | |
1898 case SCEV_NOT_KNOWN: | |
1899 pp_string (buffer, "scev_not_known"); | |
1900 break; | |
1901 | |
1902 case POLYNOMIAL_CHREC: | |
1903 pp_string (buffer, "{"); | |
1904 dump_generic_node (buffer, CHREC_LEFT (node), spc, flags, false); | |
1905 pp_string (buffer, ", +, "); | |
1906 dump_generic_node (buffer, CHREC_RIGHT (node), spc, flags, false); | |
1907 pp_string (buffer, "}_"); | |
1908 dump_generic_node (buffer, CHREC_VAR (node), spc, flags, false); | |
1909 is_stmt = false; | |
1910 break; | |
1911 | |
1912 case REALIGN_LOAD_EXPR: | |
1913 pp_string (buffer, "REALIGN_LOAD <"); | |
1914 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1915 pp_string (buffer, ", "); | |
1916 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1917 pp_string (buffer, ", "); | |
1918 dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false); | |
1919 pp_string (buffer, ">"); | |
1920 break; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1921 |
0 | 1922 case VEC_COND_EXPR: |
1923 pp_string (buffer, " VEC_COND_EXPR < "); | |
1924 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1925 pp_string (buffer, " , "); | |
1926 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1927 pp_string (buffer, " , "); | |
1928 dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false); | |
1929 pp_string (buffer, " > "); | |
1930 break; | |
1931 | |
1932 case DOT_PROD_EXPR: | |
1933 pp_string (buffer, " DOT_PROD_EXPR < "); | |
1934 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
1935 pp_string (buffer, ", "); | |
1936 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
1937 pp_string (buffer, ", "); | |
1938 dump_generic_node (buffer, TREE_OPERAND (node, 2), spc, flags, false); | |
1939 pp_string (buffer, " > "); | |
1940 break; | |
1941 | |
1942 case OMP_PARALLEL: | |
1943 pp_string (buffer, "#pragma omp parallel"); | |
1944 dump_omp_clauses (buffer, OMP_PARALLEL_CLAUSES (node), spc, flags); | |
1945 | |
1946 dump_omp_body: | |
1947 if (!(flags & TDF_SLIM) && OMP_BODY (node)) | |
1948 { | |
1949 newline_and_indent (buffer, spc + 2); | |
1950 pp_character (buffer, '{'); | |
1951 newline_and_indent (buffer, spc + 4); | |
1952 dump_generic_node (buffer, OMP_BODY (node), spc + 4, flags, false); | |
1953 newline_and_indent (buffer, spc + 2); | |
1954 pp_character (buffer, '}'); | |
1955 } | |
1956 is_expr = false; | |
1957 break; | |
1958 | |
1959 case OMP_TASK: | |
1960 pp_string (buffer, "#pragma omp task"); | |
1961 dump_omp_clauses (buffer, OMP_TASK_CLAUSES (node), spc, flags); | |
1962 goto dump_omp_body; | |
1963 | |
1964 case OMP_FOR: | |
1965 pp_string (buffer, "#pragma omp for"); | |
1966 dump_omp_clauses (buffer, OMP_FOR_CLAUSES (node), spc, flags); | |
1967 | |
1968 if (!(flags & TDF_SLIM)) | |
1969 { | |
1970 int i; | |
1971 | |
1972 if (OMP_FOR_PRE_BODY (node)) | |
1973 { | |
1974 newline_and_indent (buffer, spc + 2); | |
1975 pp_character (buffer, '{'); | |
1976 spc += 4; | |
1977 newline_and_indent (buffer, spc); | |
1978 dump_generic_node (buffer, OMP_FOR_PRE_BODY (node), | |
1979 spc, flags, false); | |
1980 } | |
1981 spc -= 2; | |
1982 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (node)); i++) | |
1983 { | |
1984 spc += 2; | |
1985 newline_and_indent (buffer, spc); | |
1986 pp_string (buffer, "for ("); | |
1987 dump_generic_node (buffer, TREE_VEC_ELT (OMP_FOR_INIT (node), i), | |
1988 spc, flags, false); | |
1989 pp_string (buffer, "; "); | |
1990 dump_generic_node (buffer, TREE_VEC_ELT (OMP_FOR_COND (node), i), | |
1991 spc, flags, false); | |
1992 pp_string (buffer, "; "); | |
1993 dump_generic_node (buffer, TREE_VEC_ELT (OMP_FOR_INCR (node), i), | |
1994 spc, flags, false); | |
1995 pp_string (buffer, ")"); | |
1996 } | |
1997 if (OMP_FOR_BODY (node)) | |
1998 { | |
1999 newline_and_indent (buffer, spc + 2); | |
2000 pp_character (buffer, '{'); | |
2001 newline_and_indent (buffer, spc + 4); | |
2002 dump_generic_node (buffer, OMP_FOR_BODY (node), spc + 4, flags, | |
2003 false); | |
2004 newline_and_indent (buffer, spc + 2); | |
2005 pp_character (buffer, '}'); | |
2006 } | |
2007 spc -= 2 * TREE_VEC_LENGTH (OMP_FOR_INIT (node)) - 2; | |
2008 if (OMP_FOR_PRE_BODY (node)) | |
2009 { | |
2010 spc -= 4; | |
2011 newline_and_indent (buffer, spc + 2); | |
2012 pp_character (buffer, '}'); | |
2013 } | |
2014 } | |
2015 is_expr = false; | |
2016 break; | |
2017 | |
2018 case OMP_SECTIONS: | |
2019 pp_string (buffer, "#pragma omp sections"); | |
2020 dump_omp_clauses (buffer, OMP_SECTIONS_CLAUSES (node), spc, flags); | |
2021 goto dump_omp_body; | |
2022 | |
2023 case OMP_SECTION: | |
2024 pp_string (buffer, "#pragma omp section"); | |
2025 goto dump_omp_body; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2026 |
0 | 2027 case OMP_MASTER: |
2028 pp_string (buffer, "#pragma omp master"); | |
2029 goto dump_omp_body; | |
2030 | |
2031 case OMP_ORDERED: | |
2032 pp_string (buffer, "#pragma omp ordered"); | |
2033 goto dump_omp_body; | |
2034 | |
2035 case OMP_CRITICAL: | |
2036 pp_string (buffer, "#pragma omp critical"); | |
2037 if (OMP_CRITICAL_NAME (node)) | |
2038 { | |
2039 pp_space (buffer); | |
2040 pp_character (buffer, '('); | |
2041 dump_generic_node (buffer, OMP_CRITICAL_NAME (node), spc, | |
2042 flags, false); | |
2043 pp_character (buffer, ')'); | |
2044 } | |
2045 goto dump_omp_body; | |
2046 | |
2047 case OMP_ATOMIC: | |
2048 pp_string (buffer, "#pragma omp atomic"); | |
2049 newline_and_indent (buffer, spc + 2); | |
2050 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2051 pp_space (buffer); | |
2052 pp_character (buffer, '='); | |
2053 pp_space (buffer); | |
2054 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2055 break; | |
2056 | |
2057 case OMP_SINGLE: | |
2058 pp_string (buffer, "#pragma omp single"); | |
2059 dump_omp_clauses (buffer, OMP_SINGLE_CLAUSES (node), spc, flags); | |
2060 goto dump_omp_body; | |
2061 | |
2062 case OMP_CLAUSE: | |
2063 dump_omp_clause (buffer, node, spc, flags); | |
2064 is_expr = false; | |
2065 break; | |
2066 | |
2067 case REDUC_MAX_EXPR: | |
2068 pp_string (buffer, " REDUC_MAX_EXPR < "); | |
2069 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2070 pp_string (buffer, " > "); | |
2071 break; | |
2072 | |
2073 case REDUC_MIN_EXPR: | |
2074 pp_string (buffer, " REDUC_MIN_EXPR < "); | |
2075 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2076 pp_string (buffer, " > "); | |
2077 break; | |
2078 | |
2079 case REDUC_PLUS_EXPR: | |
2080 pp_string (buffer, " REDUC_PLUS_EXPR < "); | |
2081 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2082 pp_string (buffer, " > "); | |
2083 break; | |
2084 | |
2085 case VEC_WIDEN_MULT_HI_EXPR: | |
2086 pp_string (buffer, " VEC_WIDEN_MULT_HI_EXPR < "); | |
2087 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2088 pp_string (buffer, ", "); | |
2089 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2090 pp_string (buffer, " > "); | |
2091 break; | |
2092 | |
2093 case VEC_WIDEN_MULT_LO_EXPR: | |
2094 pp_string (buffer, " VEC_WIDEN_MULT_LO_EXPR < "); | |
2095 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2096 pp_string (buffer, ", "); | |
2097 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2098 pp_string (buffer, " > "); | |
2099 break; | |
2100 | |
2101 case VEC_UNPACK_HI_EXPR: | |
2102 pp_string (buffer, " VEC_UNPACK_HI_EXPR < "); | |
2103 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2104 pp_string (buffer, " > "); | |
2105 break; | |
2106 | |
2107 case VEC_UNPACK_LO_EXPR: | |
2108 pp_string (buffer, " VEC_UNPACK_LO_EXPR < "); | |
2109 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2110 pp_string (buffer, " > "); | |
2111 break; | |
2112 | |
2113 case VEC_UNPACK_FLOAT_HI_EXPR: | |
2114 pp_string (buffer, " VEC_UNPACK_FLOAT_HI_EXPR < "); | |
2115 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2116 pp_string (buffer, " > "); | |
2117 break; | |
2118 | |
2119 case VEC_UNPACK_FLOAT_LO_EXPR: | |
2120 pp_string (buffer, " VEC_UNPACK_FLOAT_LO_EXPR < "); | |
2121 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2122 pp_string (buffer, " > "); | |
2123 break; | |
2124 | |
2125 case VEC_PACK_TRUNC_EXPR: | |
2126 pp_string (buffer, " VEC_PACK_TRUNC_EXPR < "); | |
2127 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2128 pp_string (buffer, ", "); | |
2129 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2130 pp_string (buffer, " > "); | |
2131 break; | |
2132 | |
2133 case VEC_PACK_SAT_EXPR: | |
2134 pp_string (buffer, " VEC_PACK_SAT_EXPR < "); | |
2135 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2136 pp_string (buffer, ", "); | |
2137 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2138 pp_string (buffer, " > "); | |
2139 break; | |
2140 | |
2141 case VEC_PACK_FIX_TRUNC_EXPR: | |
2142 pp_string (buffer, " VEC_PACK_FIX_TRUNC_EXPR < "); | |
2143 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2144 pp_string (buffer, ", "); | |
2145 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2146 pp_string (buffer, " > "); | |
2147 break; | |
2148 | |
2149 case BLOCK: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2150 dump_block_node (buffer, node, spc, flags); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2151 break; |
0 | 2152 |
2153 case VEC_EXTRACT_EVEN_EXPR: | |
2154 pp_string (buffer, " VEC_EXTRACT_EVEN_EXPR < "); | |
2155 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2156 pp_string (buffer, ", "); | |
2157 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2158 pp_string (buffer, " > "); | |
2159 break; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2160 |
0 | 2161 case VEC_EXTRACT_ODD_EXPR: |
2162 pp_string (buffer, " VEC_EXTRACT_ODD_EXPR < "); | |
2163 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2164 pp_string (buffer, ", "); | |
2165 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2166 pp_string (buffer, " > "); | |
2167 break; | |
2168 | |
2169 case VEC_INTERLEAVE_HIGH_EXPR: | |
2170 pp_string (buffer, " VEC_INTERLEAVE_HIGH_EXPR < "); | |
2171 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2172 pp_string (buffer, ", "); | |
2173 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2174 pp_string (buffer, " > "); | |
2175 break; | |
2176 | |
2177 case VEC_INTERLEAVE_LOW_EXPR: | |
2178 pp_string (buffer, " VEC_INTERLEAVE_LOW_EXPR < "); | |
2179 dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false); | |
2180 pp_string (buffer, ", "); | |
2181 dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false); | |
2182 pp_string (buffer, " > "); | |
2183 break; | |
2184 | |
2185 default: | |
2186 NIY; | |
2187 } | |
2188 | |
2189 if (is_stmt && is_expr) | |
2190 pp_semicolon (buffer); | |
2191 | |
2192 /* If we're building a diagnostic, the formatted text will be written | |
2193 into BUFFER's stream by the caller; otherwise, write it now. */ | |
2194 if (!(flags & TDF_DIAGNOSTIC)) | |
2195 pp_write_text_to_stream (buffer); | |
2196 | |
2197 return spc; | |
2198 } | |
2199 | |
2200 /* Print the declaration of a variable. */ | |
2201 | |
2202 void | |
2203 print_declaration (pretty_printer *buffer, tree t, int spc, int flags) | |
2204 { | |
2205 INDENT (spc); | |
2206 | |
2207 if (TREE_CODE (t) == TYPE_DECL) | |
2208 pp_string (buffer, "typedef "); | |
2209 | |
2210 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL) && DECL_REGISTER (t)) | |
2211 pp_string (buffer, "register "); | |
2212 | |
2213 if (TREE_PUBLIC (t) && DECL_EXTERNAL (t)) | |
2214 pp_string (buffer, "extern "); | |
2215 else if (TREE_STATIC (t)) | |
2216 pp_string (buffer, "static "); | |
2217 | |
2218 /* Print the type and name. */ | |
2219 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE) | |
2220 { | |
2221 tree tmp; | |
2222 | |
2223 /* Print array's type. */ | |
2224 tmp = TREE_TYPE (t); | |
2225 while (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) | |
2226 tmp = TREE_TYPE (tmp); | |
2227 dump_generic_node (buffer, TREE_TYPE (tmp), spc, flags, false); | |
2228 | |
2229 /* Print variable's name. */ | |
2230 pp_space (buffer); | |
2231 dump_generic_node (buffer, t, spc, flags, false); | |
2232 | |
2233 /* Print the dimensions. */ | |
2234 tmp = TREE_TYPE (t); | |
2235 while (TREE_CODE (tmp) == ARRAY_TYPE) | |
2236 { | |
2237 dump_array_domain (buffer, TYPE_DOMAIN (tmp), spc, flags); | |
2238 tmp = TREE_TYPE (tmp); | |
2239 } | |
2240 } | |
2241 else if (TREE_CODE (t) == FUNCTION_DECL) | |
2242 { | |
2243 dump_generic_node (buffer, TREE_TYPE (TREE_TYPE (t)), spc, flags, false); | |
2244 pp_space (buffer); | |
2245 dump_decl_name (buffer, t, flags); | |
2246 dump_function_declaration (buffer, TREE_TYPE (t), spc, flags); | |
2247 } | |
2248 else | |
2249 { | |
2250 /* Print type declaration. */ | |
2251 dump_generic_node (buffer, TREE_TYPE (t), spc, flags, false); | |
2252 | |
2253 /* Print variable's name. */ | |
2254 pp_space (buffer); | |
2255 dump_generic_node (buffer, t, spc, flags, false); | |
2256 } | |
2257 | |
2258 if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t)) | |
2259 { | |
2260 pp_string (buffer, " __asm__ "); | |
2261 pp_character (buffer, '('); | |
2262 dump_generic_node (buffer, DECL_ASSEMBLER_NAME (t), spc, flags, false); | |
2263 pp_character (buffer, ')'); | |
2264 } | |
2265 | |
2266 /* The initial value of a function serves to determine whether the function | |
2267 is declared or defined. So the following does not apply to function | |
2268 nodes. */ | |
2269 if (TREE_CODE (t) != FUNCTION_DECL) | |
2270 { | |
2271 /* Print the initial value. */ | |
2272 if (DECL_INITIAL (t)) | |
2273 { | |
2274 pp_space (buffer); | |
2275 pp_character (buffer, '='); | |
2276 pp_space (buffer); | |
2277 dump_generic_node (buffer, DECL_INITIAL (t), spc, flags, false); | |
2278 } | |
2279 } | |
2280 | |
2281 if (TREE_CODE (t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (t)) | |
2282 { | |
2283 pp_string (buffer, " [value-expr: "); | |
2284 dump_generic_node (buffer, DECL_VALUE_EXPR (t), spc, flags, false); | |
2285 pp_character (buffer, ']'); | |
2286 } | |
2287 | |
2288 pp_character (buffer, ';'); | |
2289 } | |
2290 | |
2291 | |
2292 /* Prints a structure: name, fields, and methods. | |
2293 FIXME: Still incomplete. */ | |
2294 | |
2295 static void | |
2296 print_struct_decl (pretty_printer *buffer, const_tree node, int spc, int flags) | |
2297 { | |
2298 /* Print the name of the structure. */ | |
2299 if (TYPE_NAME (node)) | |
2300 { | |
2301 INDENT (spc); | |
2302 if (TREE_CODE (node) == RECORD_TYPE) | |
2303 pp_string (buffer, "struct "); | |
2304 else if ((TREE_CODE (node) == UNION_TYPE | |
2305 || TREE_CODE (node) == QUAL_UNION_TYPE)) | |
2306 pp_string (buffer, "union "); | |
2307 | |
2308 dump_generic_node (buffer, TYPE_NAME (node), spc, 0, false); | |
2309 } | |
2310 | |
2311 /* Print the contents of the structure. */ | |
2312 pp_newline (buffer); | |
2313 INDENT (spc); | |
2314 pp_character (buffer, '{'); | |
2315 pp_newline (buffer); | |
2316 | |
2317 /* Print the fields of the structure. */ | |
2318 { | |
2319 tree tmp; | |
2320 tmp = TYPE_FIELDS (node); | |
2321 while (tmp) | |
2322 { | |
2323 /* Avoid to print recursively the structure. */ | |
2324 /* FIXME : Not implemented correctly..., | |
2325 what about the case when we have a cycle in the contain graph? ... | |
2326 Maybe this could be solved by looking at the scope in which the | |
2327 structure was declared. */ | |
2328 if (TREE_TYPE (tmp) != node | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2329 && (TREE_CODE (TREE_TYPE (tmp)) != POINTER_TYPE |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2330 || TREE_TYPE (TREE_TYPE (tmp)) != node)) |
0 | 2331 { |
2332 print_declaration (buffer, tmp, spc+2, flags); | |
2333 pp_newline (buffer); | |
2334 } | |
2335 tmp = TREE_CHAIN (tmp); | |
2336 } | |
2337 } | |
2338 INDENT (spc); | |
2339 pp_character (buffer, '}'); | |
2340 } | |
2341 | |
2342 /* Return the priority of the operator CODE. | |
2343 | |
2344 From lowest to highest precedence with either left-to-right (L-R) | |
2345 or right-to-left (R-L) associativity]: | |
2346 | |
2347 1 [L-R] , | |
2348 2 [R-L] = += -= *= /= %= &= ^= |= <<= >>= | |
2349 3 [R-L] ?: | |
2350 4 [L-R] || | |
2351 5 [L-R] && | |
2352 6 [L-R] | | |
2353 7 [L-R] ^ | |
2354 8 [L-R] & | |
2355 9 [L-R] == != | |
2356 10 [L-R] < <= > >= | |
2357 11 [L-R] << >> | |
2358 12 [L-R] + - | |
2359 13 [L-R] * / % | |
2360 14 [R-L] ! ~ ++ -- + - * & (type) sizeof | |
2361 15 [L-R] fn() [] -> . | |
2362 | |
2363 unary +, - and * have higher precedence than the corresponding binary | |
2364 operators. */ | |
2365 | |
2366 int | |
2367 op_code_prio (enum tree_code code) | |
2368 { | |
2369 switch (code) | |
2370 { | |
2371 case TREE_LIST: | |
2372 case COMPOUND_EXPR: | |
2373 case BIND_EXPR: | |
2374 return 1; | |
2375 | |
2376 case MODIFY_EXPR: | |
2377 case INIT_EXPR: | |
2378 return 2; | |
2379 | |
2380 case COND_EXPR: | |
2381 return 3; | |
2382 | |
2383 case TRUTH_OR_EXPR: | |
2384 case TRUTH_ORIF_EXPR: | |
2385 return 4; | |
2386 | |
2387 case TRUTH_AND_EXPR: | |
2388 case TRUTH_ANDIF_EXPR: | |
2389 return 5; | |
2390 | |
2391 case BIT_IOR_EXPR: | |
2392 return 6; | |
2393 | |
2394 case BIT_XOR_EXPR: | |
2395 case TRUTH_XOR_EXPR: | |
2396 return 7; | |
2397 | |
2398 case BIT_AND_EXPR: | |
2399 return 8; | |
2400 | |
2401 case EQ_EXPR: | |
2402 case NE_EXPR: | |
2403 return 9; | |
2404 | |
2405 case UNLT_EXPR: | |
2406 case UNLE_EXPR: | |
2407 case UNGT_EXPR: | |
2408 case UNGE_EXPR: | |
2409 case UNEQ_EXPR: | |
2410 case LTGT_EXPR: | |
2411 case ORDERED_EXPR: | |
2412 case UNORDERED_EXPR: | |
2413 case LT_EXPR: | |
2414 case LE_EXPR: | |
2415 case GT_EXPR: | |
2416 case GE_EXPR: | |
2417 return 10; | |
2418 | |
2419 case LSHIFT_EXPR: | |
2420 case RSHIFT_EXPR: | |
2421 case LROTATE_EXPR: | |
2422 case RROTATE_EXPR: | |
2423 return 11; | |
2424 | |
2425 case WIDEN_SUM_EXPR: | |
2426 case PLUS_EXPR: | |
2427 case POINTER_PLUS_EXPR: | |
2428 case MINUS_EXPR: | |
2429 return 12; | |
2430 | |
2431 case VEC_WIDEN_MULT_HI_EXPR: | |
2432 case VEC_WIDEN_MULT_LO_EXPR: | |
2433 case WIDEN_MULT_EXPR: | |
2434 case DOT_PROD_EXPR: | |
2435 case MULT_EXPR: | |
2436 case TRUNC_DIV_EXPR: | |
2437 case CEIL_DIV_EXPR: | |
2438 case FLOOR_DIV_EXPR: | |
2439 case ROUND_DIV_EXPR: | |
2440 case RDIV_EXPR: | |
2441 case EXACT_DIV_EXPR: | |
2442 case TRUNC_MOD_EXPR: | |
2443 case CEIL_MOD_EXPR: | |
2444 case FLOOR_MOD_EXPR: | |
2445 case ROUND_MOD_EXPR: | |
2446 return 13; | |
2447 | |
2448 case TRUTH_NOT_EXPR: | |
2449 case BIT_NOT_EXPR: | |
2450 case POSTINCREMENT_EXPR: | |
2451 case POSTDECREMENT_EXPR: | |
2452 case PREINCREMENT_EXPR: | |
2453 case PREDECREMENT_EXPR: | |
2454 case NEGATE_EXPR: | |
2455 case ALIGN_INDIRECT_REF: | |
2456 case MISALIGNED_INDIRECT_REF: | |
2457 case INDIRECT_REF: | |
2458 case ADDR_EXPR: | |
2459 case FLOAT_EXPR: | |
2460 CASE_CONVERT: | |
2461 case FIX_TRUNC_EXPR: | |
2462 case TARGET_EXPR: | |
2463 return 14; | |
2464 | |
2465 case CALL_EXPR: | |
2466 case ARRAY_REF: | |
2467 case ARRAY_RANGE_REF: | |
2468 case COMPONENT_REF: | |
2469 return 15; | |
2470 | |
2471 /* Special expressions. */ | |
2472 case MIN_EXPR: | |
2473 case MAX_EXPR: | |
2474 case ABS_EXPR: | |
2475 case REALPART_EXPR: | |
2476 case IMAGPART_EXPR: | |
2477 case REDUC_MAX_EXPR: | |
2478 case REDUC_MIN_EXPR: | |
2479 case REDUC_PLUS_EXPR: | |
2480 case VEC_LSHIFT_EXPR: | |
2481 case VEC_RSHIFT_EXPR: | |
2482 case VEC_UNPACK_HI_EXPR: | |
2483 case VEC_UNPACK_LO_EXPR: | |
2484 case VEC_UNPACK_FLOAT_HI_EXPR: | |
2485 case VEC_UNPACK_FLOAT_LO_EXPR: | |
2486 case VEC_PACK_TRUNC_EXPR: | |
2487 case VEC_PACK_SAT_EXPR: | |
2488 return 16; | |
2489 | |
2490 default: | |
2491 /* Return an arbitrarily high precedence to avoid surrounding single | |
2492 VAR_DECLs in ()s. */ | |
2493 return 9999; | |
2494 } | |
2495 } | |
2496 | |
2497 /* Return the priority of the operator OP. */ | |
2498 | |
2499 int | |
2500 op_prio (const_tree op) | |
2501 { | |
2502 enum tree_code code; | |
2503 | |
2504 if (op == NULL) | |
2505 return 9999; | |
2506 | |
2507 code = TREE_CODE (op); | |
2508 if (code == SAVE_EXPR || code == NON_LVALUE_EXPR) | |
2509 return op_prio (TREE_OPERAND (op, 0)); | |
2510 | |
2511 return op_code_prio (code); | |
2512 } | |
2513 | |
2514 /* Return the symbol associated with operator CODE. */ | |
2515 | |
2516 const char * | |
2517 op_symbol_code (enum tree_code code) | |
2518 { | |
2519 switch (code) | |
2520 { | |
2521 case MODIFY_EXPR: | |
2522 return "="; | |
2523 | |
2524 case TRUTH_OR_EXPR: | |
2525 case TRUTH_ORIF_EXPR: | |
2526 return "||"; | |
2527 | |
2528 case TRUTH_AND_EXPR: | |
2529 case TRUTH_ANDIF_EXPR: | |
2530 return "&&"; | |
2531 | |
2532 case BIT_IOR_EXPR: | |
2533 return "|"; | |
2534 | |
2535 case TRUTH_XOR_EXPR: | |
2536 case BIT_XOR_EXPR: | |
2537 return "^"; | |
2538 | |
2539 case ADDR_EXPR: | |
2540 case BIT_AND_EXPR: | |
2541 return "&"; | |
2542 | |
2543 case ORDERED_EXPR: | |
2544 return "ord"; | |
2545 case UNORDERED_EXPR: | |
2546 return "unord"; | |
2547 | |
2548 case EQ_EXPR: | |
2549 return "=="; | |
2550 case UNEQ_EXPR: | |
2551 return "u=="; | |
2552 | |
2553 case NE_EXPR: | |
2554 return "!="; | |
2555 | |
2556 case LT_EXPR: | |
2557 return "<"; | |
2558 case UNLT_EXPR: | |
2559 return "u<"; | |
2560 | |
2561 case LE_EXPR: | |
2562 return "<="; | |
2563 case UNLE_EXPR: | |
2564 return "u<="; | |
2565 | |
2566 case GT_EXPR: | |
2567 return ">"; | |
2568 case UNGT_EXPR: | |
2569 return "u>"; | |
2570 | |
2571 case GE_EXPR: | |
2572 return ">="; | |
2573 case UNGE_EXPR: | |
2574 return "u>="; | |
2575 | |
2576 case LTGT_EXPR: | |
2577 return "<>"; | |
2578 | |
2579 case LSHIFT_EXPR: | |
2580 return "<<"; | |
2581 | |
2582 case RSHIFT_EXPR: | |
2583 return ">>"; | |
2584 | |
2585 case LROTATE_EXPR: | |
2586 return "r<<"; | |
2587 | |
2588 case RROTATE_EXPR: | |
2589 return "r>>"; | |
2590 | |
2591 case VEC_LSHIFT_EXPR: | |
2592 return "v<<"; | |
2593 | |
2594 case VEC_RSHIFT_EXPR: | |
2595 return "v>>"; | |
2596 | |
2597 case POINTER_PLUS_EXPR: | |
2598 return "+"; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2599 |
0 | 2600 case PLUS_EXPR: |
2601 return "+"; | |
2602 | |
2603 case REDUC_PLUS_EXPR: | |
2604 return "r+"; | |
2605 | |
2606 case WIDEN_SUM_EXPR: | |
2607 return "w+"; | |
2608 | |
2609 case WIDEN_MULT_EXPR: | |
2610 return "w*"; | |
2611 | |
2612 case NEGATE_EXPR: | |
2613 case MINUS_EXPR: | |
2614 return "-"; | |
2615 | |
2616 case BIT_NOT_EXPR: | |
2617 return "~"; | |
2618 | |
2619 case TRUTH_NOT_EXPR: | |
2620 return "!"; | |
2621 | |
2622 case MULT_EXPR: | |
2623 case INDIRECT_REF: | |
2624 return "*"; | |
2625 | |
2626 case ALIGN_INDIRECT_REF: | |
2627 return "A*"; | |
2628 | |
2629 case MISALIGNED_INDIRECT_REF: | |
2630 return "M*"; | |
2631 | |
2632 case TRUNC_DIV_EXPR: | |
2633 case RDIV_EXPR: | |
2634 return "/"; | |
2635 | |
2636 case CEIL_DIV_EXPR: | |
2637 return "/[cl]"; | |
2638 | |
2639 case FLOOR_DIV_EXPR: | |
2640 return "/[fl]"; | |
2641 | |
2642 case ROUND_DIV_EXPR: | |
2643 return "/[rd]"; | |
2644 | |
2645 case EXACT_DIV_EXPR: | |
2646 return "/[ex]"; | |
2647 | |
2648 case TRUNC_MOD_EXPR: | |
2649 return "%"; | |
2650 | |
2651 case CEIL_MOD_EXPR: | |
2652 return "%[cl]"; | |
2653 | |
2654 case FLOOR_MOD_EXPR: | |
2655 return "%[fl]"; | |
2656 | |
2657 case ROUND_MOD_EXPR: | |
2658 return "%[rd]"; | |
2659 | |
2660 case PREDECREMENT_EXPR: | |
2661 return " --"; | |
2662 | |
2663 case PREINCREMENT_EXPR: | |
2664 return " ++"; | |
2665 | |
2666 case POSTDECREMENT_EXPR: | |
2667 return "-- "; | |
2668 | |
2669 case POSTINCREMENT_EXPR: | |
2670 return "++ "; | |
2671 | |
2672 case MAX_EXPR: | |
2673 return "max"; | |
2674 | |
2675 case MIN_EXPR: | |
2676 return "min"; | |
2677 | |
2678 default: | |
2679 return "<<< ??? >>>"; | |
2680 } | |
2681 } | |
2682 | |
2683 /* Return the symbol associated with operator OP. */ | |
2684 | |
2685 static const char * | |
2686 op_symbol (const_tree op) | |
2687 { | |
2688 return op_symbol_code (TREE_CODE (op)); | |
2689 } | |
2690 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2691 /* Prints the name of a call. NODE is the CALL_EXPR_FN of a CALL_EXPR or |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2692 the gimple_call_fn of a GIMPLE_CALL. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2693 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2694 void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2695 print_call_name (pretty_printer *buffer, tree node, int flags) |
0 | 2696 { |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2697 tree op0 = node; |
0 | 2698 |
2699 if (TREE_CODE (op0) == NON_LVALUE_EXPR) | |
2700 op0 = TREE_OPERAND (op0, 0); | |
2701 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2702 again: |
0 | 2703 switch (TREE_CODE (op0)) |
2704 { | |
2705 case VAR_DECL: | |
2706 case PARM_DECL: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2707 case FUNCTION_DECL: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2708 dump_function_name (buffer, op0, flags); |
0 | 2709 break; |
2710 | |
2711 case ADDR_EXPR: | |
2712 case INDIRECT_REF: | |
2713 case NOP_EXPR: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2714 op0 = TREE_OPERAND (op0, 0); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2715 goto again; |
0 | 2716 |
2717 case COND_EXPR: | |
2718 pp_string (buffer, "("); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2719 dump_generic_node (buffer, TREE_OPERAND (op0, 0), 0, flags, false); |
0 | 2720 pp_string (buffer, ") ? "); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2721 dump_generic_node (buffer, TREE_OPERAND (op0, 1), 0, flags, false); |
0 | 2722 pp_string (buffer, " : "); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2723 dump_generic_node (buffer, TREE_OPERAND (op0, 2), 0, flags, false); |
0 | 2724 break; |
2725 | |
2726 case ARRAY_REF: | |
2727 if (TREE_CODE (TREE_OPERAND (op0, 0)) == VAR_DECL) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2728 dump_function_name (buffer, TREE_OPERAND (op0, 0), flags); |
0 | 2729 else |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2730 dump_generic_node (buffer, op0, 0, flags, false); |
0 | 2731 break; |
2732 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2733 case COMPONENT_REF: |
0 | 2734 case SSA_NAME: |
2735 case OBJ_TYPE_REF: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2736 dump_generic_node (buffer, op0, 0, flags, false); |
0 | 2737 break; |
2738 | |
2739 default: | |
2740 NIY; | |
2741 } | |
2742 } | |
2743 | |
2744 /* Parses the string STR and replaces new-lines by '\n', tabs by '\t', ... */ | |
2745 | |
2746 static void | |
2747 pretty_print_string (pretty_printer *buffer, const char *str) | |
2748 { | |
2749 if (str == NULL) | |
2750 return; | |
2751 | |
2752 while (*str) | |
2753 { | |
2754 switch (str[0]) | |
2755 { | |
2756 case '\b': | |
2757 pp_string (buffer, "\\b"); | |
2758 break; | |
2759 | |
2760 case '\f': | |
2761 pp_string (buffer, "\\f"); | |
2762 break; | |
2763 | |
2764 case '\n': | |
2765 pp_string (buffer, "\\n"); | |
2766 break; | |
2767 | |
2768 case '\r': | |
2769 pp_string (buffer, "\\r"); | |
2770 break; | |
2771 | |
2772 case '\t': | |
2773 pp_string (buffer, "\\t"); | |
2774 break; | |
2775 | |
2776 case '\v': | |
2777 pp_string (buffer, "\\v"); | |
2778 break; | |
2779 | |
2780 case '\\': | |
2781 pp_string (buffer, "\\\\"); | |
2782 break; | |
2783 | |
2784 case '\"': | |
2785 pp_string (buffer, "\\\""); | |
2786 break; | |
2787 | |
2788 case '\'': | |
2789 pp_string (buffer, "\\'"); | |
2790 break; | |
2791 | |
2792 /* No need to handle \0; the loop terminates on \0. */ | |
2793 | |
2794 case '\1': | |
2795 pp_string (buffer, "\\1"); | |
2796 break; | |
2797 | |
2798 case '\2': | |
2799 pp_string (buffer, "\\2"); | |
2800 break; | |
2801 | |
2802 case '\3': | |
2803 pp_string (buffer, "\\3"); | |
2804 break; | |
2805 | |
2806 case '\4': | |
2807 pp_string (buffer, "\\4"); | |
2808 break; | |
2809 | |
2810 case '\5': | |
2811 pp_string (buffer, "\\5"); | |
2812 break; | |
2813 | |
2814 case '\6': | |
2815 pp_string (buffer, "\\6"); | |
2816 break; | |
2817 | |
2818 case '\7': | |
2819 pp_string (buffer, "\\7"); | |
2820 break; | |
2821 | |
2822 default: | |
2823 pp_character (buffer, str[0]); | |
2824 break; | |
2825 } | |
2826 str++; | |
2827 } | |
2828 } | |
2829 | |
2830 static void | |
2831 maybe_init_pretty_print (FILE *file) | |
2832 { | |
2833 if (!initialized) | |
2834 { | |
2835 pp_construct (&buffer, /* prefix */NULL, /* line-width */0); | |
2836 pp_needs_newline (&buffer) = true; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2837 pp_translate_identifiers (&buffer) = false; |
0 | 2838 initialized = 1; |
2839 } | |
2840 | |
2841 buffer.buffer->stream = file; | |
2842 } | |
2843 | |
2844 static void | |
2845 newline_and_indent (pretty_printer *buffer, int spc) | |
2846 { | |
2847 pp_newline (buffer); | |
2848 INDENT (spc); | |
2849 } |