PandA-2024.02
raw_writer.cpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
45 #include "raw_writer.hpp"
46 
47 #include "custom_map.hpp"
48 #include "custom_set.hpp"
49 #include "exceptions.hpp"
50 #include "ext_tree_node.hpp"
51 #include "token_interface.hpp"
52 #include "tree_basic_block.hpp"
53 #include "tree_node.hpp"
54 #include "tree_reindex.hpp"
55 
56 #include <cstddef>
57 #include <list>
58 #include <utility>
59 #include <vector>
60 
64 #define WRITE_NFIELD_STRING(os, field_name, field_value) os << " " << (field_name) << ": \"" << (field_value) << "\""
65 
69 #define WRITE_NFIELD(os, name, field) os << " " << (name) << ": " << field
70 
74 #define WRITE_UFIELD(os, field) os << " " << field
75 
79 #define WRITE_UFIELD_STRING(os, field) os << " \"" << (field) << "\""
80 
84 #define WRITE_STRGLNGT_IDENTIFIER(os, field) \
85  os << " " \
86  << "strg: \"" << (field) << "\" lngt: " << (field).size()
87 
91 #define WRITE_STRGLNGT_STRING(os, field) \
92  ((os) << " " \
93  << "strg: \"" << (field) << "\" lngt: " << (field).size() + 1)
94 
98 #define WRITE_SRCP(os, include_name, line_number, column_number) \
99  os << " " \
100  << "srcp: \"" << (include_name) << "\":" << (line_number) << ":" << column_number
101 
102 raw_writer::raw_writer(std::ostream& _os) : os(_os)
103 {
104 }
105 
106 void raw_writer::write_when_not_null(const std::string& str, const tree_nodeRef& t) const
107 {
108  if(t)
109  {
110  os << " " << str << ": @" << GET_INDEX_NODE(t);
111  }
112 }
113 
114 void raw_writer::write_when_not_null_bloc(const std::string& str, const blocRef& t)
115 {
116  if(t)
117  {
118  os << " " << str << ":";
119  }
120  t->visit(this);
121 }
122 
123 void raw_writer::write_when_not_null_point_to(const std::string& type, const PointToSolutionRef& solution) const
124 {
125  if(solution->anything)
126  {
127  os << " " << type << " : \"anything\"";
128  }
129  if(solution->escaped)
130  {
131  os << " " << type << " : \"escaped\"";
132  }
133  if(solution->ipa_escaped)
134  {
135  os << " " << type << " : \"ipa_escaped\"";
136  }
137  if(solution->nonlocal)
138  {
139  os << " " << type << " : \"nonlocal\"";
140  }
141  if(solution->null)
142  {
143  os << " " << type << " : \"null\"";
144  }
145  const std::vector<tree_nodeRef>& variables = solution->variables;
146  std::vector<tree_nodeRef>::const_iterator variable, variable_end = variables.end();
147  for(variable = variables.begin(); variable != variable_end; ++variable)
148  {
149  write_when_not_null(type + "_vars", *variable);
150  }
151 }
152 
153 void raw_writer::operator()(const tree_node* obj, unsigned int&)
154 {
155  os << obj->get_kind_text();
156 }
157 
158 void raw_writer::operator()(const WeightedNode* obj, unsigned int& mask)
159 {
160  mask = NO_VISIT;
161  obj->tree_node::visit(this);
164  // WRITE_NFIELD(os, STOK(TOK_TIME_WEIGHT), obj->recursive_weight);
165  // WRITE_NFIELD(os, STOK(TOK_SIZE_WEIGHT), obj->instruction_size);
166 }
167 
168 void raw_writer::operator()(const tree_reindex* obj, unsigned int&)
169 {
170  THROW_ERROR("tree_node not supported: " + std::string(obj->get_kind_text()));
171 }
172 
173 void raw_writer::operator()(const attr* obj, unsigned int& mask)
174 {
175  mask = NO_VISIT;
176  for(const auto attr : obj->list_attr)
177  {
178  WRITE_TOKEN2(os, attr);
179  }
180 }
181 
182 void raw_writer::operator()(const srcp* obj, unsigned int& mask)
183 {
184  mask = NO_VISIT;
185  if(obj->line_number || obj->column_number || !obj->include_name.empty())
186  {
188  }
189 }
190 
191 void raw_writer::operator()(const decl_node* obj, unsigned int& mask)
192 {
193  mask = NO_VISIT;
194  obj->tree_node::visit(this);
200  obj->srcp::visit(this);
202  if(obj->artificial_flag)
203  {
205  }
206  if(obj->operating_system_flag)
207  {
209  }
210  if(obj->library_system_flag)
211  {
213  }
214  if(obj->libbambu_flag)
215  {
217  }
219  if(obj->C_flag)
220  {
221  WRITE_TOKEN(os, TOK_C);
222  }
223  if(obj->uid != 0)
224  {
225  WRITE_NFIELD(os, STOK(TOK_UID), obj->uid);
226  }
227 }
228 
229 void raw_writer::operator()(const expr_node* obj, unsigned int& mask)
230 {
231  mask = NO_VISIT;
232  obj->WeightedNode::visit(this);
234  obj->srcp::visit(this);
235 }
236 
237 void raw_writer::operator()(const gimple_node* obj, unsigned int& mask)
238 {
239  mask = NO_VISIT;
240  obj->WeightedNode::visit(this);
243 
246 
247  for(const auto& vuse : obj->vuses)
248  {
250  }
251 
253  for(const auto& vover : obj->vovers)
254  {
256  }
257  obj->srcp::visit(this);
258  auto vend2 = obj->pragmas.end();
259  for(auto i = obj->pragmas.begin(); i != vend2; ++i)
260  {
262  }
263 }
264 
265 void raw_writer::operator()(const unary_expr* obj, unsigned int& mask)
266 {
267  mask = NO_VISIT;
268  obj->expr_node::visit(this);
270 }
271 
272 void raw_writer::operator()(const binary_expr* obj, unsigned int& mask)
273 {
274  mask = NO_VISIT;
275  obj->expr_node::visit(this);
278 }
279 
280 void raw_writer::operator()(const ternary_expr* obj, unsigned int& mask)
281 {
282  mask = NO_VISIT;
283  obj->expr_node::visit(this);
287 }
288 
289 void raw_writer::operator()(const quaternary_expr* obj, unsigned int& mask)
290 {
291  mask = NO_VISIT;
292  obj->expr_node::visit(this);
297 }
298 
299 void raw_writer::operator()(const type_node* obj, unsigned int& mask)
300 {
301  mask = NO_VISIT;
302  obj->tree_node::visit(this);
304  {
306  }
311  if(obj->algn != 0)
312  {
313  WRITE_NFIELD(os, STOK(TOK_ALGN), obj->algn);
314  }
315  if(obj->packed_flag)
316  {
318  }
319  if(obj->system_flag)
320  {
322  }
323  if(obj->libbambu_flag)
324  {
326  }
327 }
328 
329 void raw_writer::operator()(const memory_tag* obj, unsigned int& mask)
330 {
331  mask = NO_VISIT;
332  obj->decl_node::visit(this);
333  auto vend = obj->list_of_aliases.end();
334  for(auto i = obj->list_of_aliases.begin(); i != vend; ++i)
335  {
337  }
338 }
339 
340 void raw_writer::operator()(const cst_node* obj, unsigned int& mask)
341 {
342  mask = NO_VISIT;
343  obj->tree_node::visit(this);
345 }
346 
347 void raw_writer::operator()(const error_mark* obj, unsigned int& mask)
348 {
349  mask = NO_VISIT;
350  obj->tree_node::visit(this);
351 }
352 
353 void raw_writer::operator()(const array_type* obj, unsigned int& mask)
354 {
355  mask = NO_VISIT;
356  obj->type_node::visit(this);
359 }
360 
361 void raw_writer::operator()(const gimple_asm* obj, unsigned int& mask)
362 {
363  mask = NO_VISIT;
364  obj->gimple_node::visit(this);
365  if(obj->volatile_flag)
366  {
368  }
373 }
374 
375 void raw_writer::operator()(const baselink* obj, unsigned int& mask)
376 {
377  mask = NO_VISIT;
378  obj->tree_node::visit(this);
380 }
381 
382 void raw_writer::operator()(const gimple_bind* obj, unsigned int& mask)
383 {
384  mask = NO_VISIT;
385  obj->expr_node::visit(this);
386  auto vend = obj->list_of_vars.end();
387  for(auto i = obj->list_of_vars.begin(); i != vend; ++i)
388  {
390  }
392 }
393 
394 void raw_writer::operator()(const binfo* obj, unsigned int& mask)
395 {
396  mask = NO_VISIT;
397  obj->tree_node::visit(this);
399  if(obj->virt_flag)
400  {
402  }
404  auto vend = obj->list_of_access_binf.end();
405  for(auto i = obj->list_of_access_binf.begin(); i != vend; ++i)
406  {
407  WRITE_TOKEN2(os, i->first);
408  write_when_not_null(STOK(TOK_BINF), i->second);
409  }
410 }
411 
412 void raw_writer::operator()(const block* obj, unsigned int& mask)
413 {
414  mask = NO_VISIT;
415  obj->tree_node::visit(this);
416  if(obj->bl_flag)
417  {
418  WRITE_UFIELD_STRING(os, obj->bl);
419  }
420 }
421 
422 void raw_writer::operator()(const call_expr* obj, unsigned int& mask)
423 {
424  mask = NO_VISIT;
425  obj->expr_node::visit(this);
427  std::vector<tree_nodeRef>::const_iterator arg, arg_end = obj->args.end();
428  for(arg = obj->args.begin(); arg != arg_end; ++arg)
429  {
431  }
432 }
433 
434 void raw_writer::operator()(const aggr_init_expr* obj, unsigned int& mask)
435 {
436  mask = NO_VISIT;
437  obj->call_expr::visit(this);
438  WRITE_NFIELD(os, STOK(TOK_CTOR), obj->ctor);
440 }
441 
442 void raw_writer::operator()(const gimple_call* obj, unsigned int& mask)
443 {
444  mask = NO_VISIT;
445  obj->gimple_node::visit(this);
447  std::vector<tree_nodeRef>::const_iterator arg, arg_end = obj->args.end();
448  for(arg = obj->args.begin(); arg != arg_end; ++arg)
449  {
451  }
454 }
455 
456 void raw_writer::operator()(const case_label_expr* obj, unsigned int& mask)
457 {
458  mask = NO_VISIT;
459  obj->expr_node::visit(this);
462  if(obj->default_flag)
463  {
465  }
467 }
468 
469 void raw_writer::operator()(const cast_expr* obj, unsigned int& mask)
470 {
471  mask = NO_VISIT;
472  obj->expr_node::visit(this);
474 }
475 
476 void raw_writer::operator()(const complex_cst* obj, unsigned int& mask)
477 {
478  mask = NO_VISIT;
479  obj->cst_node::visit(this);
482 }
483 
484 void raw_writer::operator()(const complex_type* obj, unsigned int& mask)
485 {
486  mask = NO_VISIT;
487  obj->type_node::visit(this);
488  if(obj->unsigned_flag)
489  {
491  }
492  if(obj->real_flag)
493  {
495  }
496 }
497 
498 void raw_writer::operator()(const gimple_cond* obj, unsigned int& mask)
499 {
500  mask = NO_VISIT;
501  obj->gimple_node::visit(this);
503 }
504 
505 void raw_writer::operator()(const const_decl* obj, unsigned int& mask)
506 {
507  mask = NO_VISIT;
508  obj->decl_node::visit(this);
510 }
511 
512 void raw_writer::operator()(const constructor* obj, unsigned int& mask)
513 {
514  mask = NO_VISIT;
515  obj->tree_node::visit(this);
517  auto vend = obj->list_of_idx_valu.end();
518  for(auto i = obj->list_of_idx_valu.begin(); i != vend; ++i)
519  {
520  write_when_not_null(STOK(TOK_IDX), i->first);
521  write_when_not_null(STOK(TOK_VALU), i->second);
522  }
523 }
524 
525 void raw_writer::operator()(const enumeral_type* obj, unsigned int& mask)
526 {
527  mask = NO_VISIT;
528  obj->type_node::visit(this);
529  if(obj->prec != 0)
530  {
531  WRITE_NFIELD(os, STOK(TOK_PREC), obj->prec);
532  }
533  if(obj->unsigned_flag)
534  {
536  }
540 }
541 
542 void raw_writer::operator()(const expr_stmt* obj, unsigned int& mask)
543 {
544  mask = NO_VISIT;
545  obj->tree_node::visit(this);
546  if(obj->line != -1)
547  {
548  WRITE_NFIELD(os, STOK(TOK_LINE), obj->line);
549  }
552 }
553 
554 void raw_writer::operator()(const field_decl* obj, unsigned int& mask)
555 {
556  mask = NO_VISIT;
557  obj->decl_node::visit(this);
558  obj->attr::visit(this);
561  if(obj->algn != 0)
562  {
563  WRITE_NFIELD(os, STOK(TOK_ALGN), obj->algn);
564  }
565  if(obj->packed_flag)
566  {
568  }
571 }
572 
573 void raw_writer::operator()(const function_decl* obj, unsigned int& mask)
574 {
575  mask = NO_VISIT;
576  obj->decl_node::visit(this);
577  if(obj->operator_flag)
578  {
580  }
581  auto vend = obj->list_of_op_names.end();
582  for(auto i = obj->list_of_op_names.begin(); i != vend; ++i)
583  {
584  WRITE_UFIELD_STRING(os, *i);
585  }
586  obj->attr::visit(this);
589 
590  if(obj->fixd_flag)
591  {
592  WRITE_NFIELD(os, STOK(TOK_FIXD), obj->fixd);
593  }
594  if(obj->virt_flag)
595  {
596  WRITE_NFIELD(os, STOK(TOK_VIRT), obj->virt);
597  }
599  auto vend2 = obj->list_of_args.end();
600  for(auto i = obj->list_of_args.begin(); i != vend2; ++i)
601  {
603  }
604 
605  if(obj->undefined_flag)
606  {
608  }
609  if(obj->builtin_flag)
610  {
612  }
613  if(obj->static_flag)
614  {
616  }
617  if(obj->hwcall_flag)
618  {
620  }
621  if(obj->reverse_restrict_flag)
622  {
624  }
625  if(obj->writing_memory)
626  {
628  }
629  if(obj->reading_memory)
630  {
632  }
633  if(obj->pipeline_enabled)
634  {
636  }
637  if(obj->simple_pipeline)
638  {
640  }
641  if(obj->pipeline_enabled && !obj->simple_pipeline)
642  {
644  }
645 #if HAVE_FROM_PRAGMA_BUILT
646  if(obj->omp_atomic)
647  {
649  }
650  if(obj->omp_for_wrapper)
651  {
653  }
654  if(obj->omp_body_loop)
655  {
657  }
658  if(!obj->omp_critical.empty())
659  {
660  WRITE_UFIELD_STRING(os, obj->omp_critical);
661  }
662 #endif
665 }
666 
667 void raw_writer::operator()(const function_type* obj, unsigned int& mask)
668 {
669  mask = NO_VISIT;
670  obj->type_node::visit(this);
673  if(obj->varargs_flag)
674  {
676  }
677 }
678 
679 void raw_writer::operator()(const gimple_assign* obj, unsigned int& mask)
680 {
681  mask = NO_VISIT;
682  obj->gimple_node::visit(this);
686  if(obj->init_assignment)
687  {
689  }
692  if(obj->clobber)
693  {
695  }
696  if(obj->temporary_address)
697  {
699  }
700 }
701 
702 void raw_writer::operator()(const gimple_goto* obj, unsigned int& mask)
703 {
704  mask = NO_VISIT;
705  obj->gimple_node::visit(this);
707 }
708 
709 void raw_writer::operator()(const handler* obj, unsigned int& mask)
710 {
711  mask = NO_VISIT;
712  obj->tree_node::visit(this);
713  if(obj->line != -1)
714  {
715  WRITE_NFIELD(os, STOK(TOK_LINE), obj->line);
716  }
718 }
719 
720 void raw_writer::operator()(const identifier_node* obj, unsigned int& mask)
721 {
722  mask = NO_VISIT;
723  obj->tree_node::visit(this);
724  if(obj->operator_flag)
725  {
727  }
728  else
729  {
731  }
732 }
733 
734 void raw_writer::operator()(const integer_cst* obj, unsigned int& mask)
735 {
736  mask = NO_VISIT;
737  obj->cst_node::visit(this);
739 }
740 
741 void raw_writer::operator()(const integer_type* obj, unsigned int& mask)
742 {
743  mask = NO_VISIT;
744  obj->type_node::visit(this);
745  if(obj->prec != 0)
746  {
747  WRITE_NFIELD(os, STOK(TOK_PREC), obj->prec);
748  }
749  if(!obj->str.empty())
750  {
751  WRITE_UFIELD(os, obj->str);
752  }
753  if(obj->unsigned_flag)
754  {
756  }
759 }
760 
761 void raw_writer::operator()(const gimple_label* obj, unsigned int& mask)
762 {
763  mask = NO_VISIT;
764  obj->gimple_node::visit(this);
766 }
767 
768 void raw_writer::operator()(const method_type* obj, unsigned int& mask)
769 {
770  mask = NO_VISIT;
771  obj->function_type::visit(this);
773 }
774 
775 void raw_writer::operator()(const namespace_decl* obj, unsigned int& mask)
776 {
777  mask = NO_VISIT;
778  obj->decl_node::visit(this);
780 }
781 
782 void raw_writer::operator()(const overload* obj, unsigned int& mask)
783 {
784  mask = NO_VISIT;
785  obj->tree_node::visit(this);
788 }
789 
790 void raw_writer::operator()(const parm_decl* obj, unsigned int& mask)
791 {
792  mask = NO_VISIT;
793  obj->decl_node::visit(this);
796  if(obj->algn != 0)
797  {
798  WRITE_NFIELD(os, STOK(TOK_ALGN), obj->algn);
799  }
800  if(obj->packed_flag)
801  {
803  }
804  WRITE_NFIELD(os, STOK(TOK_USED), obj->used);
805  if(obj->register_flag)
806  {
808  }
809  if(obj->readonly_flag)
810  {
812  }
814 }
815 
816 void raw_writer::operator()(const gimple_phi* obj, unsigned int& mask)
817 {
818  mask = NO_VISIT;
819  obj->gimple_node::visit(this);
821  for(const auto& def_edge : obj->CGetDefEdgesList())
822  {
823  write_when_not_null(STOK(TOK_DEF), def_edge.first);
824  WRITE_NFIELD(os, STOK(TOK_EDGE), def_edge.second);
825  }
826  if(obj->virtual_flag)
827  {
829  }
830 }
831 
832 void raw_writer::operator()(const pointer_type* obj, unsigned int& mask)
833 {
834  mask = NO_VISIT;
835  obj->type_node::visit(this);
837 }
838 
839 void raw_writer::operator()(const real_cst* obj, unsigned int& mask)
840 {
841  mask = NO_VISIT;
842  obj->cst_node::visit(this);
843  if(obj->overflow_flag)
844  {
846  }
847  if(!obj->valr.empty())
848  {
850  }
851  if(!obj->valx.empty())
852  {
854  }
855 }
856 
857 void raw_writer::operator()(const real_type* obj, unsigned int& mask)
858 {
859  mask = NO_VISIT;
860  obj->type_node::visit(this);
861  WRITE_NFIELD(os, STOK(TOK_PREC), obj->prec);
862 }
863 
864 void raw_writer::operator()(const record_type* obj, unsigned int& mask)
865 {
866  mask = NO_VISIT;
867  obj->type_node::visit(this);
870 
871  if(obj->ptrmem_flag)
872  {
874  }
879  if(obj->spec_flag)
880  {
882  }
883  if(obj->struct_flag)
884  {
886  }
887  auto vend1 = obj->list_of_flds.end();
888  for(auto i = obj->list_of_flds.begin(); i != vend1; ++i)
889  {
891  }
892  auto vend2 = obj->list_of_fncs.end();
893  for(auto i = obj->list_of_fncs.begin(); i != vend2; ++i)
894  {
896  }
898 }
899 
900 void raw_writer::operator()(const reference_type* obj, unsigned int& mask)
901 {
902  mask = NO_VISIT;
903  obj->type_node::visit(this);
905 }
906 
907 void raw_writer::operator()(const result_decl* obj, unsigned int& mask)
908 {
909  mask = NO_VISIT;
910  obj->decl_node::visit(this);
913  if(obj->algn != 0)
914  {
915  WRITE_NFIELD(os, STOK(TOK_ALGN), obj->algn);
916  }
917  if(obj->packed_flag)
918  {
920  }
922 }
923 
924 void raw_writer::operator()(const gimple_return* obj, unsigned int& mask)
925 {
926  mask = NO_VISIT;
927  obj->gimple_node::visit(this);
929 }
930 
931 void raw_writer::operator()(const return_stmt* obj, unsigned int& mask)
932 {
933  mask = NO_VISIT;
934  obj->tree_node::visit(this);
935  if(obj->line != -1)
936  {
937  WRITE_NFIELD(os, STOK(TOK_LINE), obj->line);
938  }
940 }
941 
942 void raw_writer::operator()(const scope_ref* obj, unsigned int& mask)
943 {
944  mask = NO_VISIT;
945  obj->expr_node::visit(this);
948 }
949 
950 void raw_writer::operator()(const ssa_name* obj, unsigned int& mask)
951 {
952  mask = NO_VISIT;
953  obj->tree_node::visit(this);
956  if(obj->vers != 0)
957  {
958  WRITE_NFIELD(os, STOK(TOK_VERS), obj->vers);
959  }
960  if(obj->orig_vers != 0)
961  {
963  }
965  if(obj->volatile_flag)
966  {
968  }
969  else
970  {
971  for(const auto& def_stmt : obj->CGetDefStmts())
972  {
974  }
975  }
976  for(const auto& use_stmt : obj->CGetUseStmts())
977  {
978  for(size_t counter = 0; counter < use_stmt.second; counter++)
979  {
980  write_when_not_null(STOK(TOK_USE_STMT), use_stmt.first);
981  }
982  }
983  if(obj->virtual_flag)
984  {
986  }
987  if(obj->default_flag)
988  {
990  }
993  if(!obj->bit_values.empty())
994  {
996  }
997 }
998 
999 void raw_writer::operator()(const statement_list* obj, unsigned int& mask)
1000 {
1001  mask = NO_VISIT;
1002  obj->tree_node::visit(this);
1003  auto vend = obj->list_of_stmt.end();
1004  for(auto i = obj->list_of_stmt.begin(); i != vend; ++i)
1005  {
1007  }
1008  auto mend = obj->list_of_bloc.end();
1009  for(auto i = obj->list_of_bloc.begin(); i != mend; ++i)
1010  {
1011  write_when_not_null_bloc(STOK(TOK_BLOC), i->second);
1012  }
1013 }
1014 
1015 void raw_writer::operator()(const string_cst* obj, unsigned int& mask)
1016 {
1017  mask = NO_VISIT;
1018  obj->cst_node::visit(this);
1019  WRITE_STRGLNGT_STRING(os, obj->strg);
1020 }
1021 
1022 void raw_writer::operator()(const gimple_switch* obj, unsigned int& mask)
1023 {
1024  mask = NO_VISIT;
1025  obj->gimple_node::visit(this);
1028 }
1029 
1030 void raw_writer::operator()(const target_expr* obj, unsigned int& mask)
1031 {
1032  mask = NO_VISIT;
1033  obj->expr_node::visit(this);
1037 }
1038 
1039 void raw_writer::operator()(const lut_expr* obj, unsigned int& mask)
1040 {
1041  mask = NO_VISIT;
1042  obj->expr_node::visit(this);
1052 }
1053 
1054 void raw_writer::operator()(const template_decl* obj, unsigned int& mask)
1055 {
1056  mask = NO_VISIT;
1057  obj->decl_node::visit(this);
1062 }
1063 
1064 void raw_writer::operator()(const template_parm_index* obj, unsigned int& mask)
1065 {
1066  mask = NO_VISIT;
1067  obj->tree_node::visit(this);
1070  if(obj->constant_flag)
1071  {
1073  }
1074  if(obj->readonly_flag)
1075  {
1077  }
1078  WRITE_NFIELD(os, STOK(TOK_IDX), obj->idx);
1079  WRITE_NFIELD(os, STOK(TOK_LEVEL), obj->level);
1081 }
1082 
1083 void raw_writer::operator()(const tree_list* obj, unsigned int& mask)
1084 {
1085  mask = NO_VISIT;
1086  obj->tree_node::visit(this);
1090 }
1091 
1092 void raw_writer::operator()(const tree_vec* obj, unsigned int& mask)
1093 {
1094  mask = NO_VISIT;
1095  obj->tree_node::visit(this);
1096  if(obj->lngt != 0)
1097  {
1098  WRITE_NFIELD(os, STOK(TOK_LNGT), obj->lngt);
1099  }
1100  auto vend = obj->list_of_op.end();
1101  for(auto i = obj->list_of_op.begin(); i != vend; ++i)
1102  {
1104  }
1105 }
1106 
1107 void raw_writer::operator()(const try_block* obj, unsigned int& mask)
1108 {
1109  mask = NO_VISIT;
1110  obj->tree_node::visit(this);
1111  if(obj->line != -1)
1112  {
1113  WRITE_NFIELD(os, STOK(TOK_LINE), obj->line);
1114  }
1118 }
1119 
1120 void raw_writer::operator()(const type_decl* obj, unsigned int& mask)
1121 {
1122  mask = NO_VISIT;
1123  obj->decl_node::visit(this);
1126 }
1127 
1128 void raw_writer::operator()(const union_type* obj, unsigned int& mask)
1129 {
1130  mask = NO_VISIT;
1131  obj->type_node::visit(this);
1133  auto vend1 = obj->list_of_flds.end();
1134  for(auto i = obj->list_of_flds.begin(); i != vend1; ++i)
1135  {
1137  }
1138  auto vend2 = obj->list_of_fncs.end();
1139  for(auto i = obj->list_of_fncs.begin(); i != vend2; ++i)
1140  {
1142  }
1144 }
1145 
1146 void raw_writer::operator()(const var_decl* obj, unsigned int& mask)
1147 {
1148  mask = NO_VISIT;
1149  obj->decl_node::visit(this);
1150 
1151  if(obj->use_tmpl != -1)
1152  {
1154  }
1155  obj->attr::visit(this);
1156  if(obj->static_static_flag)
1157  {
1160  }
1161  if(obj->extern_flag)
1162  {
1164  }
1165  if(obj->static_flag)
1166  {
1168  }
1171  if(obj->algn != 0)
1172  {
1173  WRITE_NFIELD(os, STOK(TOK_ALGN), obj->algn);
1174  }
1175  if(obj->packed_flag)
1176  {
1178  }
1179  WRITE_NFIELD(os, STOK(TOK_USED), obj->used);
1180  if(obj->register_flag)
1181  {
1183  }
1184  if(obj->readonly_flag)
1185  {
1187  }
1188  if(!obj->bit_values.empty())
1189  {
1191  }
1194  var_end = obj->defs.end();
1195  for(var = obj->defs.begin(); var != var_end; ++var)
1196  {
1198  }
1199  var_end = obj->uses.end();
1200  for(var = obj->uses.begin(); var != var_end; ++var)
1201  {
1203  }
1204  var_end = obj->addressings.end();
1205  for(var = obj->addressings.begin(); var != var_end; ++var)
1206  {
1208  }
1209  if(obj->addr_taken)
1210  {
1212  }
1213  if(obj->addr_not_taken)
1214  {
1216  }
1217 }
1218 
1219 void raw_writer::operator()(const vector_cst* obj, unsigned int& mask)
1220 {
1221  mask = NO_VISIT;
1222  obj->cst_node::visit(this);
1223  auto vend = obj->list_of_valu.end();
1224  for(auto i = obj->list_of_valu.begin(); i != vend; ++i)
1225  {
1227  }
1228 }
1229 
1230 void raw_writer::operator()(const type_argument_pack* obj, unsigned int& mask)
1231 {
1232  mask = NO_VISIT;
1233  obj->type_node::visit(this);
1235 }
1236 
1237 void raw_writer::operator()(const nontype_argument_pack* obj, unsigned int& mask)
1238 {
1239  mask = NO_VISIT;
1240  obj->expr_node::visit(this);
1242 }
1243 
1244 void raw_writer::operator()(const type_pack_expansion* obj, unsigned int& mask)
1245 {
1246  mask = NO_VISIT;
1247  obj->type_node::visit(this);
1251 }
1252 
1253 void raw_writer::operator()(const expr_pack_expansion* obj, unsigned int& mask)
1254 {
1255  mask = NO_VISIT;
1256  obj->expr_node::visit(this);
1260 }
1261 
1262 void raw_writer::operator()(const vector_type* obj, unsigned int& mask)
1263 {
1264  mask = NO_VISIT;
1265  obj->type_node::visit(this);
1267 }
1268 
1269 void raw_writer::operator()(const target_mem_ref* obj, unsigned int& mask)
1270 {
1271  mask = NO_VISIT;
1272  obj->WeightedNode::visit(this);
1281 }
1282 
1283 void raw_writer::operator()(const target_mem_ref461* obj, unsigned int& mask)
1284 {
1285  mask = NO_VISIT;
1286  obj->WeightedNode::visit(this);
1293 }
1294 
1295 void raw_writer::operator()(const bloc* obj, unsigned int& mask)
1296 {
1297  mask = NO_VISIT;
1298  WRITE_UFIELD(os, obj->number);
1299  if(obj->hpl)
1300  {
1302  }
1304  auto vend1 = obj->list_of_pred.end();
1305  for(auto i = obj->list_of_pred.begin(); i != vend1; ++i)
1306  {
1307  if(*i == bloc::ENTRY_BLOCK_ID)
1308  {
1310  }
1311  else
1312  {
1313  WRITE_NFIELD(os, STOK(TOK_PRED), *i);
1314  }
1315  }
1316  auto vend2 = obj->list_of_succ.end();
1317  for(auto i = obj->list_of_succ.begin(); i != vend2; ++i)
1318  {
1319  if(*i == bloc::EXIT_BLOCK_ID)
1320  {
1322  }
1323  else
1324  {
1325  WRITE_NFIELD(os, STOK(TOK_SUCC), *i);
1326  }
1327  }
1328  if(obj->true_edge > 0)
1329  {
1331  }
1332  if(obj->false_edge > 0)
1333  {
1335  }
1336  for(const auto& phi : obj->CGetPhiList())
1337  {
1339  }
1340  for(const auto& stmt : obj->CGetStmtList())
1341  {
1343  }
1344 }
1345 
1346 void raw_writer::operator()(const gimple_while* obj, unsigned int& mask)
1347 {
1348  mask = NO_VISIT;
1349  obj->gimple_node::visit(this);
1351 }
1352 
1353 void raw_writer::operator()(const gimple_for* obj, unsigned int& mask)
1354 {
1355  mask = NO_VISIT;
1356  obj->gimple_while::visit(this);
1359 }
1360 
1361 void raw_writer::operator()(const gimple_multi_way_if* obj, unsigned int& mask)
1362 {
1363  mask = NO_VISIT;
1364  obj->gimple_node::visit(this);
1365  for(const auto& cond : obj->list_of_cond)
1366  {
1367  write_when_not_null(STOK(TOK_OP), cond.first);
1368  WRITE_NFIELD(os, STOK(TOK_BLOC), cond.second);
1369  }
1370 }
1371 
1372 void raw_writer::operator()(const null_node* obj, unsigned int& mask)
1373 {
1374  mask = NO_VISIT;
1375  obj->tree_node::visit(this);
1376 }
1377 
1378 void raw_writer::operator()(const gimple_pragma* obj, unsigned int& mask)
1379 {
1380  mask = NO_VISIT;
1381  obj->gimple_node::visit(this);
1382  WRITE_NFIELD(os, STOK(TOK_IS_BLOCK), (obj->is_block ? "true" : "false"));
1383  WRITE_NFIELD(os, STOK(TOK_OPEN), (obj->is_opening ? "true" : "false"));
1384  WRITE_NFIELD(os, STOK(TOK_LINE), obj->line);
1387 }
1388 
1389 void raw_writer::operator()(const omp_pragma* obj, unsigned int& mask)
1390 {
1391  mask = NO_VISIT;
1392  obj->tree_node::visit(this);
1393 }
1394 
1395 void raw_writer::operator()(const omp_parallel_pragma* obj, unsigned int& mask)
1396 {
1397  mask = NO_VISIT;
1398  obj->omp_pragma::visit(this);
1399  WRITE_NFIELD(os, STOK(TOK_PRAGMA_OMP_SHORTCUT), (obj->is_shortcut ? "true" : "false"));
1400 }
1401 
1402 void raw_writer::operator()(const omp_sections_pragma* obj, unsigned int& mask)
1403 {
1404  mask = NO_VISIT;
1405  obj->omp_pragma::visit(this);
1406  WRITE_NFIELD(os, STOK(TOK_PRAGMA_OMP_SHORTCUT), (obj->is_shortcut ? "true" : "false"));
1407 }
1408 
1409 void raw_writer::operator()(const omp_parallel_sections_pragma* obj, unsigned int& mask)
1410 {
1411  mask = NO_VISIT;
1412  obj->omp_pragma::visit(this);
1415 }
1416 
1417 void raw_writer::operator()(const omp_section_pragma* obj, unsigned int& mask)
1418 {
1419  mask = NO_VISIT;
1420  obj->omp_pragma::visit(this);
1421 }
1422 
1423 void raw_writer::operator()(const omp_for_pragma* obj, unsigned int& mask)
1424 {
1425  mask = NO_VISIT;
1426  obj->omp_pragma::visit(this);
1427 }
1428 
1429 void raw_writer::operator()(const omp_simd_pragma* obj, unsigned int& mask)
1430 {
1431  mask = NO_VISIT;
1432  obj->omp_pragma::visit(this);
1433 }
1434 
1435 void raw_writer::operator()(const omp_declare_simd_pragma* obj, unsigned int& mask)
1436 {
1437  mask = NO_VISIT;
1438  obj->omp_pragma::visit(this);
1439 }
1440 
1441 void raw_writer::operator()(const omp_target_pragma* obj, unsigned int& mask)
1442 {
1443  mask = NO_VISIT;
1444  obj->omp_pragma::visit(this);
1445 }
1446 
1447 void raw_writer::operator()(const omp_critical_pragma* obj, unsigned int& mask)
1448 {
1449  mask = NO_VISIT;
1450  obj->omp_pragma::visit(this);
1451 }
1452 
1453 void raw_writer::operator()(const omp_task_pragma* obj, unsigned int& mask)
1454 {
1455  mask = NO_VISIT;
1456  obj->omp_pragma::visit(this);
1457 }
1458 
1459 void raw_writer::operator()(const map_pragma* obj, unsigned int& mask)
1460 {
1461  mask = NO_VISIT;
1462  obj->tree_node::visit(this);
1463 }
1464 
1465 void raw_writer::operator()(const call_hw_pragma* obj, unsigned int& mask)
1466 {
1467  mask = NO_VISIT;
1468  obj->tree_node::visit(this);
1471 }
1472 
1473 void raw_writer::operator()(const call_point_hw_pragma* obj, unsigned int& mask)
1474 {
1475  mask = NO_VISIT;
1476  obj->tree_node::visit(this);
1480 }
1481 
1482 void raw_writer::operator()(const issue_pragma* obj, unsigned int& mask)
1483 {
1484  mask = NO_VISIT;
1485  obj->tree_node::visit(this);
1486 }
1487 
1488 void raw_writer::operator()(const blackbox_pragma* obj, unsigned int& mask)
1489 {
1490  mask = NO_VISIT;
1491  obj->issue_pragma::visit(this);
1492 }
1493 
1494 void raw_writer::operator()(const profiling_pragma* obj, unsigned int& mask)
1495 {
1496  mask = NO_VISIT;
1497  obj->tree_node::visit(this);
1498 }
1499 
1500 void raw_writer::operator()(const statistical_profiling* obj, unsigned int& mask)
1501 {
1502  mask = NO_VISIT;
1503  obj->profiling_pragma::visit(this);
1504 }
struct definition of the type_decl tree node.
Definition: tree_node.hpp:5470
bool static_static_flag
to manage C++ code with static member
Definition: tree_node.hpp:5675
tree_nodeRef ptd
ptd field points to the node for the type pointed to.
Definition: tree_node.hpp:3909
This struct specifies the integer_cst node.
Definition: tree_node.hpp:3242
bool libbambu_flag
it is true when this is a declared inside libbambu
Definition: tree_node.hpp:1371
const TreeNodeSet CGetDefStmts() const
Return the set of definition statements.
Definition: tree_node.cpp:1274
tree_nodeRef in
in is the operand 2: ASM_INPUTS, this represents the inputs for the statement.
Definition: tree_node.hpp:1591
tree_nodeRef op
the label
Definition: tree_node.hpp:3351
struct definition of the const_decl tree node.
Definition: tree_node.hpp:2386
This struct implements the target_expr node.
Definition: tree_node.hpp:4815
integer_cst_t value
The value of the integer cast.
Definition: tree_node.hpp:3253
bool default_flag
default_flag is true if the label is a &#39;default&#39; label
Definition: tree_node.hpp:2025
int line
line is the line number where the compound_stmt is defined.
Definition: tree_node.hpp:5417
tree_nodeRef attributes
Definition: tree_node.hpp:912
tree_nodeRef min
min: tree-dump.c use the macro TYPE_MIN_VALUE
Definition: tree_node.hpp:3304
tree_nodeRef init
init field holds the value to initialize a variable to.
Definition: tree_node.hpp:4279
tree_nodeRef op2
second operand
Definition: tree_node.hpp:6056
const TreeNodeMap< size_t > & CGetUseStmts() const
Return the use stmts.
Definition: tree_node.cpp:1343
const DefEdgeList & CGetDefEdgesList() const
Return the list of def edges.
Definition: tree_node.cpp:1011
bool operating_system_flag
operating system flag: it&#39;s true when this is a variable of operating system library ...
Definition: tree_node.hpp:924
tree_nodeRef size
size field holds the size of datum, in bits.
Definition: tree_node.hpp:3678
int used
used is nonzero if the name is used in its scope (macro TREE_USED)
Definition: tree_node.hpp:3690
This struct specifies the field bloc (basic block).
void write_when_not_null_point_to(const std::string &type, const PointToSolutionRef &solution) const
Write a point to solution when is not null.
Definition: raw_writer.cpp:123
unsigned int prec
prec field is the number of bits used by this type (macro TYPE_PRECISION)
Definition: tree_node.hpp:3292
std::vector< tree_nodeRef > list_of_fncs
list_of_fncs is a chain of methods_decl for the fields of the struct.
Definition: tree_node.hpp:5560
struct definition of the vector_type tree node.
Definition: tree_node.hpp:5938
unsigned int algn
algn field holds the alignment required for the datum, in bits.
Definition: tree_node.hpp:5710
struct definition of the array_type tree node.
Definition: tree_node.hpp:1520
tree_nodeRef max
max: tree-dump.c use the macro TYPE_MAX_VALUE
Definition: tree_node.hpp:3307
tree_nodeRef unql
unql field, in any member of such a chain, points to the start of the chain.
Definition: tree_node.hpp:1343
tree_nodeRef tmpl_parms
tmpl_parms holds template parameters It is a TREE_LIST, his VALU field is a TREE_VEC whose LIST_OF_OP...
Definition: tree_node.hpp:2828
struct definition of the real_type tree node.
Definition: tree_node.hpp:4039
#define STOK(token)
Macro used to convert a token symbol into the corresponding string.
tree_nodeRef decl
Definition: tree_node.hpp:5079
const unsigned int number
number is the index of the basic block.
tree_nodeRef name
name field contains info on the name used in the program for this type.It is either a TYPE_DECL node...
Definition: tree_node.hpp:1337
bool anything
True if it is not possible to determine where the pointer points to.
Definition: tree_node.hpp:1004
bool recursive
True if this mapping pragma has to be considered recursive.
bool virtual_flag
flag for virtual phi
Definition: tree_node.hpp:3775
bool writing_memory
True if function write in memory somehow.
Definition: tree_node.hpp:2780
tree_nodeRef next
Is the next statement.
Definition: tree_node.hpp:2606
#define WRITE_NFIELD_STRING(os, field_name, field_value)
Macro which writes on an output stream a named field of string type.
Definition: raw_writer.cpp:64
int ctor
operand count
Definition: tree_node.hpp:1925
tree_nodeRef bfld
binf field are information about this type, as a base type for itself.
Definition: tree_node.hpp:4109
unsigned int algn
algn field holds the alignment required for the datum, in bits.
Definition: tree_node.hpp:4291
tree_nodeRef op1
The second operand of the binary expression.
Definition: tree_node.hpp:3024
Any erroneous construct is parsed into a node of this type.
Definition: tree_node.hpp:1462
bool volatile_flag
volatile_flag is true if the node is public: it means that the name is accessible from outside...
Definition: tree_node.hpp:1582
bool temporary_address
Definition: tree_node.hpp:3033
std::string str
FIXME: add the meaning of this field.
Definition: tree_node.hpp:3295
This struct specifies the statement_list node.
Definition: tree_node.hpp:4662
std::string valr
valr is the real value
Definition: tree_node.hpp:4004
tree_nodeRef name
name field contains an identifier_node used to represent a name.
Definition: tree_node.hpp:883
bool packed_flag
Indicated that objects of this type should be laid out in as compact a way as possible.
Definition: tree_node.hpp:1365
#define WRITE_TOKEN2(os, token)
Second version of WRITE_TOKEN.
tree_nodeRef elts
field elts is the type of an vector element (tree-dump.c use the macro TREE_TYPE) ...
Definition: tree_node.hpp:5946
tree_nodeRef idx
INDEX register.
Definition: tree_node.hpp:4955
std::vector< std::pair< tree_nodeRef, tree_nodeRef > > list_of_idx_valu
store the list initializers: <index, value>
Definition: tree_node.hpp:2445
A HANDLER wraps a catch handler for the HANDLER_TYPE.
Definition: tree_node.hpp:3141
unsigned int column_number
column_number holds the column number.
Definition: tree_node.hpp:850
tree_nodeRef param_packs
PACK_EXPANSION_PARAMETER_PACKS.
Definition: tree_node.hpp:2197
tree_nodeRef op
op is casted node
Definition: tree_node.hpp:2065
unsigned int line_number
line_number holds a line number.
Definition: tree_node.hpp:845
struct definition of the source position.
Definition: tree_node.hpp:832
std::vector< unsigned int > list_of_succ
list_of_succ is the list of successors.
tree_nodeRef type
type of the expression
Definition: tree_node.hpp:4873
tree_nodeRef orig
For any sort of a ..._DECL node, this points to the original (abstract) decl node which this decl is ...
Definition: tree_node.hpp:899
Represents an argument pack of types (or templates).
Definition: tree_node.hpp:5139
tree_nodeRef op1
first operand
Definition: tree_node.hpp:6053
bool is_shortcut
flag to check if this pragma is shortcut with a OpenMP sections pragma
struct definition of the function_decl tree node.
Definition: tree_node.hpp:2759
tree_nodeRef size
size field contains a tree that is an expression for the size in bits.
Definition: tree_node.hpp:1349
struct definition of the method_type tree node.
Definition: tree_node.hpp:3452
tree_nodeRef decl
it is the target of an initialization
Definition: tree_node.hpp:4822
std::vector< tree_nodeRef > list_of_flds
list_of_flds is a chain of field_decl for the fields of the struct, and var_decl, type_decl and const...
Definition: tree_node.hpp:4090
tree_nodeRef var
var is the variable being referenced (macro SSA_NAME_VAR).
Definition: tree_node.hpp:4543
tree_nodeRef arg
PACK_EXPANSION_EXTRA_ARGS.
Definition: tree_node.hpp:2200
TreeVocabularyTokenTypes_TokenEnum qual
qual is the set of type qualifiers for this type.
Definition: tree_node.hpp:1328
bool is_shortcut
flag to check if this pragma is shortcut with a OpenMP parallel pragma
std::list< tree_nodeRef > list_of_stmt
list_of_stmt field is the list of statements. If this field is null then the list_of_bloc field is no...
Definition: tree_node.hpp:4670
tree_nodeRef refd
refd field references to the node for the type referenced to.
Definition: tree_node.hpp:4233
tree_nodeRef imag
imag is the TREE_IMAGPART which content is other constant node.
Definition: tree_node.hpp:2248
bool undefined_flag
undefined_flag means external reference: do not allocate storage, and refer to a definition elsewhere...
Definition: tree_node.hpp:2848
tree_nodeRef prms
prms field is a list of types of arguments expected, this list is made of tree_list nodes...
Definition: tree_node.hpp:2981
tree_nodeRef mngl
mngl field contains the name of the object as the assembler will see it.
Definition: tree_node.hpp:890
This struct specifies the gimple_label node.
Definition: tree_node.hpp:3343
tree_nodeRef size
size field holds the size of datum, in bits.
Definition: tree_node.hpp:5704
This struct specifies the string_cst node.
Definition: tree_node.hpp:4724
exceptions managed by PandA
tree_nodeRef op4
fourth operand
Definition: tree_node.hpp:6062
tree_nodeRef op2
The third operand of the ternary expression.
Definition: tree_node.hpp:1253
tree_nodeRef crnt
Is the current function declaration.
Definition: tree_node.hpp:3629
tree_nodeRef op1
The second operand of the Quaternary expression.
Definition: tree_node.hpp:1287
struct definition of the union_type tree node.
Definition: tree_node.hpp:5540
std::vector< tree_nodeRef > list_of_valu
list_of_valu is a list of value of the TREE_VECTOR_CST_ELTS vector elements.
Definition: tree_node.hpp:5896
A simple interface to token object of the raw files.
void write_when_not_null_bloc(const std::string &str, const blocRef &t)
Write the field when t is not null.
Definition: raw_writer.cpp:114
tree_nodeRef fn
fn field is the initial declaration for this function declaration
Definition: tree_node.hpp:2815
struct definition of the unary node structures.
Definition: tree_node.hpp:1177
bool system_flag
system flag: it&#39;s true when this is a system variable
Definition: tree_node.hpp:1368
tree_nodeRef type
type field is the type of the node
Definition: tree_node.hpp:2442
tree_nodeRef smt_ann
symbol_memory_tag annotation
Definition: tree_node.hpp:2679
std::string bit_values
for each bit of the var_decl tells if it is equal to U,X,0,1 meaningful only in case the variable is ...
Definition: tree_node.hpp:5732
struct definition of the record_type tree node.
Definition: tree_node.hpp:4078
tree_nodeRef op6
sixth operand
Definition: tree_node.hpp:6068
tree_nodeRef op0
The first operand of the binary expression.
Definition: tree_node.hpp:3021
tree_nodeRef size
size field holds the size of datum, in bits.
Definition: tree_node.hpp:4285
GIMPLE_BIND <VARS, BLOCK, BODY> represents a lexical scope.
Definition: tree_node.hpp:1664
tree_nodeRef scpe
The function to which this gimple_node belongs.
Definition: tree_node.hpp:1131
std::map< unsigned int, blocRef > list_of_bloc
list_of_bloc field is the list of basic block. If this field is null then the list_of_stmt field is n...
Definition: tree_node.hpp:4673
static const unsigned int EXIT_BLOCK_ID
constant identifying the exit basic block
unsigned int prec
prec field is the number of bits used by this type (tree-dump.c use the macro TYPE_PRECISION) ...
Definition: tree_node.hpp:2526
std::string ID_implementation
The identifier of the implementation.
tree_nodeRef base
BASE register.
Definition: tree_node.hpp:4949
tree_nodeRef op
PACK_EXPANSION_PATTERN.
Definition: tree_node.hpp:2194
#define GET_INDEX_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
Definition: tree_node.hpp:361
tree_nodeRef op1
The second operand of the binary expression.
Definition: tree_node.hpp:1217
struct definition of the ternary node structures.
Definition: tree_node.hpp:1239
bool ptrmem_flag
true when ptrmem obj is considered
Definition: tree_node.hpp:4118
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
Definition: tree_node.hpp:2835
This struct specifies the gimple_cond node.
Definition: tree_node.hpp:2345
tree_nodeRef clas
clas field is the type of "self".
Definition: tree_node.hpp:3466
#define WRITE_UFIELD_STRING(os, field)
Macro which writes on an output stream an unnamed field.
Definition: raw_writer.cpp:79
struct definition of the function_type tree node.
Definition: tree_node.hpp:2960
std::string valx
valx field
Definition: tree_node.hpp:4007
unsigned int algn
algn field holds the alignment required for the datum, in bits.
Definition: tree_node.hpp:2666
const std::list< tree_nodeRef > & CGetPhiList() const
Return the list of phi.
tree_nodeRef op7
seventh operand
Definition: tree_node.hpp:6071
tree_nodeRef op1
op1 is the operand 1 (macro CASE_HIGH) of the case label expression
Definition: tree_node.hpp:2022
std::vector< tree_nodeRef > args
The arguments of the gimple_call.
Definition: tree_node.hpp:1968
raw_writer(std::ostream &_os)
default constructor
Definition: raw_writer.cpp:102
std::string str
str is the operand 0: ASM_STRING. ASM_STRING returns a STRING_CST for the instruction (e...
Definition: tree_node.hpp:1585
tree_nodeRef argt
argt field is the type in which the argument is actually passed, which may be different from its type...
Definition: tree_node.hpp:3672
struct definition of the parm_decl tree node.
Definition: tree_node.hpp:3660
Data structure describing a basic block at tree level.
This class is used to perform the re-index of all tree nodes.
int line
line is the line number where the compound_stmt is defined.
Definition: tree_node.hpp:2600
tree_nodeRef chan
chan field: the decls in one binding context are chained through this field.
Definition: tree_node.hpp:936
AGGR_INIT_EXPRs have a variably-sized representation similar to that of CALL_EXPRs.
Definition: tree_node.hpp:1919
Constructor: return an aggregate value made from specified components.
Definition: tree_node.hpp:2434
tree_nodeRef bpos
bpos field is the field position, counting in bytes, of the byte containing the bit closest to the be...
Definition: tree_node.hpp:2674
This struct specifies the binfo node.
Definition: tree_node.hpp:1713
struct definition of the template_decl tree node.
Definition: tree_node.hpp:4993
redefinition of map to manage ordered/unordered structures
This struct represents a try-block statement.
Definition: tree_node.hpp:5409
bool varargs_flag
varargs flag: tells if function is of varargs type
Definition: tree_node.hpp:2968
CustomOrderedSet< TreeVocabularyTokenTypes_TokenEnum > list_attr
list of TOKEN, represented as int, associated to the tree_node
Definition: tree_node.hpp:777
tree_nodeRef binf
type context
Definition: tree_node.hpp:4112
bool real_flag
true when the complex base type is a float (macro COMPLEX_FLOAT_TYPE_P)
Definition: tree_node.hpp:2296
std::string include_name
include_name is a filename string, this can be the location of a reference, if no definition has been...
Definition: tree_node.hpp:839
tree_nodeRef init
init field holds the value to initialize a variable to.
Definition: tree_node.hpp:2654
tree_nodeRef domn
field domn is the type to index by (tree-dump.c use the macro TYPE_DOMAIN).
Definition: tree_node.hpp:1534
tree_nodeRef spcs
prms field holds the specialization parameters vector.
Definition: tree_node.hpp:5009
Abstract pure class for the tree structure.
Definition: tree_node.hpp:139
std::ostream & os
tree_node visitors
Definition: raw_writer.hpp:94
tree_nodeRef arg
arguments stored in the argument pack
Definition: tree_node.hpp:5185
tree_nodeRef res
res is the new SSA_NAME node created by the PHI node.
Definition: tree_node.hpp:3772
bool builtin_flag
flag true when the function is a builtin
Definition: tree_node.hpp:2853
struct definition of the label_decl tree node.
Definition: tree_node.hpp:3529
struct definition of the label_decl tree node.
Definition: tree_node.hpp:5659
std::vector< tree_nodeRef > args
The arguments of the call_expr.
Definition: tree_node.hpp:1882
tree_nodeRef op3
The fourth operand of the Quaternary expression.
Definition: tree_node.hpp:1293
Directive represinting mapping of a software function on a component.
struct definition of the result_decl tree node.
Definition: tree_node.hpp:4266
This struct specifies the vector_cst node.
Definition: tree_node.hpp:5888
const std::string TI_getTokenName(const TreeVocabularyTokenTypes_TokenEnum i)
Return the name associated with the token.
std::string HW_component
The name of the component.
tree_nodeRef scpe
context/scope of the type object.
Definition: tree_node.hpp:1355
tree_nodeRef memuse
whole memory operand use
Definition: tree_node.hpp:1087
TreeNodeSet vovers
vovers of this statement
Definition: tree_node.hpp:1112
virtual std::string get_kind_text() const =0
Virtual function returning the name of the actual class.
This struct specifies the gimple_phi node.
Definition: tree_node.hpp:3742
unsigned int loop_id
loop identifier coming from GCC
bool volatile_flag
in case a ssa_name is never defined this Boolean member is true
Definition: tree_node.hpp:4553
bool ipa_escaped
True if the points to includes the IPA escaped solution.
Definition: tree_node.hpp:1010
This struct represents a list-like node for chaining overloading candidates.
Definition: tree_node.hpp:3621
bool artificial_flag
artificial_flag field is used to indicate that this decl_node represents a compiler-generated entity...
Definition: tree_node.hpp:918
struct definition of the Quaternary node structures.
Definition: tree_node.hpp:1276
int use_tmpl
use_tmpl indicates whether or not (and how) a template was expanded for this VAR_DECL.
Definition: tree_node.hpp:5672
const std::list< tree_nodeRef > & CGetStmtList() const
Return the list of stmt.
bool unsigned_flag
unsigned means an unsigned type (macro TYPE_UNSIGNED)
Definition: tree_node.hpp:3301
tree_nodeRef init
it is the initializer for the target
Definition: tree_node.hpp:4825
bool fixd_flag
flags used to know if fixd is set
Definition: tree_node.hpp:2771
tree_nodeRef body
is the body of the handler
Definition: tree_node.hpp:3152
unsigned int bb_index
The basic block to which this gimple_node belongs.
Definition: tree_node.hpp:1134
bool unsigned_flag
unsigned means an unsigned type (tree-dump.c use the macro TYPE_UNSIGNED)
Definition: tree_node.hpp:2532
This struct specifies the gimple_assign node (GCC 4.3 tree node).
Definition: tree_node.hpp:3015
tree_nodeRef type
type field is the actual data type node being inherited in this basetype.(BINFO_TYPE) ...
Definition: tree_node.hpp:1721
tree_nodeRef tmpl_parms
tmpl_parms holds template parameters It is a TREE_LIST, his VALU field is a TREE_VEC whose LIST_OF_OP...
Definition: tree_node.hpp:4130
std::vector< tree_nodeRef > list_of_aliases
list of aliases associated with the memory tag.
Definition: tree_node.hpp:1403
bool libbambu_flag
it is true when this is a declared inside libbambu
Definition: tree_node.hpp:930
CustomUnorderedSet< tree_nodeRef > addressings
The set of gimple node which addresses this variable.
Definition: tree_node.hpp:5746
bool library_system_flag
library system flag: it&#39;s true when this is a variable of a standard library (e.g libmath) ...
Definition: tree_node.hpp:927
bool register_flag
register_flag means declared &#39;register&#39; (macro DECL_REGISTER)
Definition: tree_node.hpp:5722
bool is_block
attribute for pragma: true when the pragma refers to a block
This struct specifies super class for constant nodes.
Definition: tree_node.hpp:1431
tree_nodeRef tmpl_parms
tmpl_parms holds template parameters It is a TREE_LIST, his VALU field is a TREE_VEC whose LIST_OF_OP...
Definition: tree_node.hpp:5481
Directive represinting mapping of a function call on a component.
bool escaped
True if the points to includes the local escaped solution.
Definition: tree_node.hpp:1007
std::vector< std::pair< TreeVocabularyTokenTypes_TokenEnum, tree_nodeRef > > list_of_access_binf
is the list of pair access binf: baseinfo vector.
Definition: tree_node.hpp:1730
bool C_flag
is true when the declaration has the C attribute
Definition: tree_node.hpp:939
std::string HW_component
The name of the component.
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
Definition: tree_node.hpp:4136
unsigned int hpl
store the relation between the phi defs inserted in the live_out set and phi uses ...
tree_nodeRef max
max: tree-dump.c use the macro TYPE_MAX_VALUE
Definition: tree_node.hpp:2538
Low-level memory addressing.
Definition: tree_node.hpp:4938
bool reverse_restrict_flag
True if parameters are not alias after its invocation.
Definition: tree_node.hpp:2777
This struct specifies the gimple_return node.
Definition: tree_node.hpp:4354
tree_nodeRef body
body field is the saved representation of the body of the entire function.
Definition: tree_node.hpp:2870
bool readonly_flag
readonly_flag means read-onlyy parameter (macro TREE_READONLY)
Definition: tree_node.hpp:3702
unsigned int uid
The uid.
Definition: tree_node.hpp:942
tree_nodeRef idx
INDEX register.
Definition: tree_node.hpp:4882
tree_nodeRef expr
Is the expression of the statement.
Definition: tree_node.hpp:4398
bool simple_pipeline
True if the pipeline does not contain any unbounded operation.
Definition: tree_node.hpp:2789
redefinition of set to manage ordered/unordered structures
tree_nodeRef prms
prms field holds the template parameters vector.
Definition: tree_node.hpp:5012
bool addr_taken
True when we are able to prove that its address is taken and escape from a the function in which is d...
Definition: tree_node.hpp:5686
bool is_opening
attribute for pragma: true when the pragma refers to an opening pragma
std::string line
this is the string-based form of the pragma
tree_nodeRef out
out is the operand 1: ASM_OUTPUTS, this represents the outputs for the statement. ...
Definition: tree_node.hpp:1588
Represents an expression that will be expanded into a list of expressions when instantiated with one ...
Definition: tree_node.hpp:2186
#define WRITE_TOKEN(os, token)
Macro which writes on an output stream a token.
tree_nodeRef slot
slot is the slot which was allocated for this expression
Definition: tree_node.hpp:1928
std::list< std::pair< tree_nodeRef, unsigned int > > list_of_cond
The list of pair condition basic block.
bool default_flag
Nonzero if this SSA_NAME is the default definition for the underlying symbol.
Definition: tree_node.hpp:4565
bool register_flag
register_flag means declared &#39;register&#39; (macro DECL_REGISTER)
Definition: tree_node.hpp:3696
struct definition of the function_decl tree node.
Definition: tree_node.hpp:3179
tree_nodeRef op3
third operand
Definition: tree_node.hpp:6059
tree_nodeRef chan
purp is the TREE_CHAIN field: tree_list nodes are made into lists by chaining through the TREE_CHAIN ...
Definition: tree_node.hpp:5269
tree_nodeRef param_packs
PACK_EXPANSION_PARAMETER_PACKS.
Definition: tree_node.hpp:2152
tree_nodeRef base
BASE register.
Definition: tree_node.hpp:4879
tree_nodeRef fn
fn is the operand 0 of the call expression: this is the function
Definition: tree_node.hpp:1879
tree_nodeRef retn
retn field is the type of value returned.
Definition: tree_node.hpp:2974
struct definition of the field_decl tree node.
Definition: tree_node.hpp:2640
tree_nodeRef step
STEP integer constant.
Definition: tree_node.hpp:4958
bool reading_memory
True if function read from memory somehow.
Definition: tree_node.hpp:2783
tree_nodeRef op0
the branch var
Definition: tree_node.hpp:4781
struct definition of the complex_type tree node.
Definition: tree_node.hpp:2282
tree_nodeRef predicate
The predicate.
Definition: tree_node.hpp:3027
tree_nodeRef arg
PACK_EXPANSION_EXTRA_ARGS.
Definition: tree_node.hpp:2155
std::vector< tree_nodeRef > list_of_vars
vars is the operand 0 (GIMPLE_BIND_VARS), this is a chain of VAR_DECL nodes for the variables...
Definition: tree_node.hpp:1672
Classes specification of the tree_node data structures.
void write_when_not_null(const std::string &str, const tree_nodeRef &t) const
Write the field when t is not null.
Definition: raw_writer.cpp:106
GIMPLE_SWITCH <INDEX, DEFAULT_LAB, LAB1, ..., LABN> represents the multiway branch: ...
Definition: tree_node.hpp:4773
bool virt_flag
virt_flag is true if the node is a virtual declaration (macro TREE_VIA_VIRTUAL)
Definition: tree_node.hpp:1724
CustomUnorderedSet< tree_nodeRef > uses
The set of gimple node which read this variable.
Definition: tree_node.hpp:5743
tree_nodeRef cls
If pointer mem struct type.
Definition: tree_node.hpp:4102
tree_nodeRef op0
The first operand of the ternary expression.
Definition: tree_node.hpp:2353
struct definition of the field attr on function_decl, field_decl, var_decl tree node.
Definition: tree_node.hpp:774
#define THROW_ERROR(str_expr)
helper function used to throw an error in a standard way
Definition: exceptions.hpp:263
bool static_flag
static_flag is true if function has been defined (macro TREE_STATIC)
Definition: tree_node.hpp:2864
tree_nodeRef smt_ann
symbol_memory_tag annotation
Definition: tree_node.hpp:4296
bool init_assignment
Definition: tree_node.hpp:3029
tree_nodeRef offset
OFFSET integer constant.
Definition: tree_node.hpp:4888
tree_nodeRef memdef
whole memory operand def
Definition: tree_node.hpp:1090
struct definition of the pointer_type tree node.
Definition: tree_node.hpp:3896
tree_nodeRef got
got field is the operand 2 (macro CASE_LABEL) of the case label expression
Definition: tree_node.hpp:2028
unsigned int algn
algn field is the alignment necessary for objects of this type.
Definition: tree_node.hpp:1362
tree_nodeRef binf
binf field are information about this type, as a base type for itself.
Definition: tree_node.hpp:5567
std::vector< tree_nodeRef > list_of_fncs
list_of_fncs is a chain of methods_decl for the fields of the struct.
Definition: tree_node.hpp:4096
PointToSolutionRef use_set
point to solution
Definition: tree_node.hpp:4604
tree_nodeRef op0
true table constant
Definition: tree_node.hpp:6050
tree_nodeRef tag
result of the tree level alias analysis
Definition: tree_node.hpp:4894
tree_nodeRef orig
original memory access
Definition: tree_node.hpp:4891
tree_nodeRef op0
The parallel part (the tree_node is a omp_parallel_pragma one)
This struct specifies the block node.
Definition: tree_node.hpp:1820
tree_nodeRef op0
The first operand of the binary expression.
Definition: tree_node.hpp:1214
tree_nodeRef dcls
declarations
Definition: tree_node.hpp:3539
std::vector< tree_nodeRef > list_of_args
args field holds a chain of parm_decl nodes for the arguments.
Definition: tree_node.hpp:2841
int line
line is the line number where the compound_stmt is defined.
Definition: tree_node.hpp:3149
struct definition of common part of WeightedNode (gimple_assign, expr_node)
Definition: tree_node.hpp:738
tree_nodeRef min
min: tree-dump.c use the macro TYPE_MIN_VALUE
Definition: tree_node.hpp:2535
struct definition of the reference_type tree node.
Definition: tree_node.hpp:4220
This struct specifies the cast_expr node.
Definition: tree_node.hpp:2057
tree_nodeRef hdlr
Is the handler of the statement.
Definition: tree_node.hpp:5423
bool operator_flag
it is true when the function_decl is an operator
Definition: tree_node.hpp:2765
bool overflow_flag
overflow_flag means there was an overflow in folding, and no warning has been issued for this subexpr...
Definition: tree_node.hpp:4001
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
Definition: tree_node.hpp:5487
bool readonly_flag
readonly_flag means readonly parameter (macro TREE_READONLY)
Definition: tree_node.hpp:5728
int initiation_time
Used for pipelined with unbounded operations.
Definition: tree_node.hpp:2792
std::string bl
May contain the string "block".
Definition: tree_node.hpp:1831
struct definition of the common part of an expression
Definition: tree_node.hpp:973
tree_nodeRef type
type of the expression
Definition: tree_node.hpp:4946
std::vector< tree_nodeRef > list_of_flds
list_of_flds is a chain of field_decl for the fields of the struct, and var_decl, type_decl and const...
Definition: tree_node.hpp:5554
tree_nodeRef cnst
field cnst holds the value of a constant (tree-dump.c use the macro DECL_INITIAL) ...
Definition: tree_node.hpp:2396
int fixd
Is the result of THUNK_FIXED_OFFSET(t) for this tree node.
Definition: tree_node.hpp:2809
bool virtual_flag
flag for virtual SSA
Definition: tree_node.hpp:4556
unsigned int vers
vers is the SSA version number of this SSA name.
Definition: tree_node.hpp:4547
bool nonlocal
True if the points to includes any global memory.
Definition: tree_node.hpp:1013
tree_nodeRef init
init field holds the value to initialize a variable to.
Definition: tree_node.hpp:5698
This struct specifies the lut_expr node.
Definition: tree_node.hpp:6042
tree_nodeRef directive
this node represents the directive of the pragma
PointToSolutionRef clobbered_set
The clobbered set of this gimple node.
Definition: tree_node.hpp:1128
This struct specifies the complex_cst node.
Definition: tree_node.hpp:2237
tree_nodeRef type
type of the expression
Definition: tree_node.hpp:981
bool static_flag
to manage standard static attribute
Definition: tree_node.hpp:5678
tree_nodeRef csts
csts is a list in which each element&#39;s TREE_PURPOSE is a name and the TREE_VALUE is the value (an int...
Definition: tree_node.hpp:2545
struct definition of the type node structures.
Definition: tree_node.hpp:1318
bool unsigned_flag
unsigned means an unsigned type (macro TYPE_UNSIGNED)
Definition: tree_node.hpp:2293
This struct specifies the tree_list node.
Definition: tree_node.hpp:5255
tree_nodeRef rslt
rslt is null for struct templates and declaration for object to be created for non-struct templates ...
Definition: tree_node.hpp:5003
Class specification of the tree_reindex support class.
tree_nodeRef clnp
it is the cleanup for this node
Definition: tree_node.hpp:4828
static const unsigned int ENTRY_BLOCK_ID
constant identifying the entry basic block
CustomUnorderedSet< tree_nodeRef > defs
The set of gimple node which writes this variable.
Definition: tree_node.hpp:5740
This struct represent a statement expression.
Definition: tree_node.hpp:2592
int used
used is nonzero if the name is used in its scope (macro TREE_USED)
Definition: tree_node.hpp:5716
This struct specifies the call_expr node.
Definition: tree_node.hpp:1873
std::string strg
strg is the TREE_STRING_POINTER.
Definition: tree_node.hpp:4732
tree_nodeRef op1
initialization
unsigned int algn
algn field holds the alignment required for the datum, in bits.
Definition: tree_node.hpp:3684
tree_nodeRef scope
this node defines the scope of the pragma
#define WRITE_STRGLNGT_STRING(os, field)
Macro which writes on an output stream a string with its length.
Definition: raw_writer.cpp:91
tree_nodeRef body
Is the body of the statement.
Definition: tree_node.hpp:5420
tree_nodeRef min
minimum values this SSA may reach
Definition: tree_node.hpp:4592
tree_nodeRef op0
The first operand of the binary expression.
Definition: tree_node.hpp:4471
tree_nodeRef op0
op0 is the operand 0 (macro CASE_LOW) of the case label expression
Definition: tree_node.hpp:2019
tree_nodeRef step
STEP integer constant.
Definition: tree_node.hpp:4885
This struct specifies reference to particular overloaded struct method The tree walker structure of t...
Definition: tree_node.hpp:4463
struct definition of the common part of a gimple with virtual operands
Definition: tree_node.hpp:1078
bool bl_flag
used to know if bl string is set
Definition: tree_node.hpp:1828
This struct represent a &#39;return&#39; statement.
Definition: tree_node.hpp:4387
This struct specifies a multi-way-if construct.
std::string ID_implementation
The identifier of the implementation.
This struct specifies the real_cst node.
Definition: tree_node.hpp:3990
std::vector< tree_nodeRef > list_of_op
list_of_op is the array of tree node stored in tree_vec node.(macro TREE_VEC_ELT) ...
Definition: tree_node.hpp:5310
tree_nodeRef op0
The first operand of the Quaternary expression.
Definition: tree_node.hpp:1284
tree_nodeRef op0
The first operand of the ternary expression.
Definition: tree_node.hpp:1247
char str[25]
Definition: fixedptc.c:8
tree_nodeRef op1
The sections part (the tree_node is a omp_sections_pragma one)
int virt
Is the result of tree_low_cst (THUNK_VIRTUAL_OFFSET (t), 0) for this node.
Definition: tree_node.hpp:2812
PointToSolutionRef use_set
The point-to set used by this gimple node.
Definition: tree_node.hpp:1125
tree_nodeRef vfld
FIXME: check the meaning.
Definition: tree_node.hpp:4124
tree_nodeRef idx2
INDEX register.
Definition: tree_node.hpp:4961
This struct specifies the case_label_expr node.
Definition: tree_node.hpp:2011
tree_nodeRef type
type field holds the data type of the object, when relevant.
Definition: tree_node.hpp:907
tree_nodeRef op1
The second operand of the binary expression.
Definition: tree_node.hpp:4474
bool struct_flag
true when a struct is considered
Definition: tree_node.hpp:4121
Classes specification of the tree_node data structures not present in the gcc.
tree_nodeRef inst
inst field holds the template instantiation vector.
Definition: tree_node.hpp:5006
unsigned int true_edge
in case the last statement is a gimple_cond associated with an if statement this member contains the ...
std::vector< unsigned int > list_of_pred
list_of_pred is the list of predecessors.
bool pipeline_enabled
True if pipelining is enabled for the function.
Definition: tree_node.hpp:2786
Low-level memory addressing.
Definition: tree_node.hpp:4865
bool spec_flag
true when a spec is considered
Definition: tree_node.hpp:4115
tree_nodeRef clob
clob is the operand 3: ASM_CLOBBERS, this represents the clobbers for the statement.
Definition: tree_node.hpp:1594
bool null
True if the points to includes nothing.
Definition: tree_node.hpp:1016
tree node writer.
tree_nodeRef valu
purp is the TREE_VALUE field which stores the elements of the list.
Definition: tree_node.hpp:5266
tree_nodeRef purp
purp is the TREE_PURPOSE field occasionally used as well to get the effect of Lisp association lists...
Definition: tree_node.hpp:5263
int line
line is the line number where the compound_stmt is defined.
Definition: tree_node.hpp:4395
std::string bit_values
for each bit of the SSA variable tells if it is equal to U,X,0,1
Definition: tree_node.hpp:4598
std::string strg
Store the identifier string associated with the identifier_node.
Definition: tree_node.hpp:3189
This struct specifies the ssa_name node.
Definition: tree_node.hpp:4523
TreeNodeSet vuses
vuses of this statement
Definition: tree_node.hpp:1102
tree_nodeRef next
Is the next statement.
Definition: tree_node.hpp:5426
tree_nodeRef vdef
vdef of this statement
Definition: tree_node.hpp:1093
tree_nodeRef elts
field elts is the type of an array element (tree-dump.c use the macro TREE_TYPE)
Definition: tree_node.hpp:1530
tree_nodeRef ptd
If pointer mem point to type.
Definition: tree_node.hpp:4099
tree_nodeRef op
op field is the operand of this node
Definition: tree_node.hpp:4362
This struct specifies the gimple_goto node.
Definition: tree_node.hpp:3089
tree_nodeRef expr
Is the statement given by the expression.
Definition: tree_node.hpp:2603
const bool operator_flag
Store true if the identifier_node is an operator.
Definition: tree_node.hpp:3186
This struct specifies the for expression Used to represent a for construct.
struct definition of the integer_type tree node.
Definition: tree_node.hpp:2513
struct definition of the integer_type tree node.
Definition: tree_node.hpp:3279
unsigned counter[N_THREADS]
Definition: data.c:3
#define WRITE_NFIELD(os, name, field)
Macro which writes on an output stream a named field.
Definition: raw_writer.cpp:69
tree_nodeRef op1
the vec of CASE_LABEL_EXPRs
Definition: tree_node.hpp:4784
#define NO_VISIT
constant used to avoid member visit
Definition: visitor.hpp:69
std::vector< tree_nodeRef > variables
Set of variables that this pointer may point to.
Definition: tree_node.hpp:1019
tree_nodeRef op2
postincrement
tree_nodeRef type
starting from GCC 4.7.2 ssa_name has a type
Definition: tree_node.hpp:4540
bool virt_flag
flags used to know if virt is set
Definition: tree_node.hpp:2774
size_t lngt
lngt is the length of the array (list_of_op) stored in tree_vec node.(macro TREE_VEC_LENGTH) ...
Definition: tree_node.hpp:5307
tree_nodeRef op
PACK_EXPANSION_PATTERN.
Definition: tree_node.hpp:2149
struct definition of the binary node structures.
Definition: tree_node.hpp:1206
tree_nodeRef smt_ann
symbol_memory_tag annotation
Definition: tree_node.hpp:3707
tree_nodeRef type
type field is the type of the node
Definition: tree_node.hpp:1439
#define WRITE_SRCP(os, include_name, line_number, column_number)
Macro which writes on an output stream the srcp fields.
Definition: raw_writer.cpp:98
This struct specifies the tree_vec node.
Definition: tree_node.hpp:5299
unsigned int orig_vers
original SSA version number from GCC
Definition: tree_node.hpp:4550
#define WRITE_UFIELD(os, field)
Macro which writes on an output stream an unnamed field.
Definition: raw_writer.cpp:74
bool packed_flag
Indicates this field should be bit-packed.
Definition: tree_node.hpp:921
tree_nodeRef arg
arguments stored in the argument pack
Definition: tree_node.hpp:5147
tree_nodeRef op8
eighth operand
Definition: tree_node.hpp:6074
tree_nodeRef op
op field is the operand of the unary expression
Definition: tree_node.hpp:1185
tree_nodeRef smt_ann
symbol_memory_tag annotation
Definition: tree_node.hpp:5737
tree_nodeRef body
body is the operand 1 (GIMPLE_BIND_BODY), this is the body, the expression to be computed using the v...
Definition: tree_node.hpp:1676
tree_nodeRef op0
The boolean condition.
tree_nodeRef symbol
static or global variable
Definition: tree_node.hpp:4876
tree_nodeRef scpe
scope declaration
Definition: tree_node.hpp:910
tree_nodeRef real
real is the TREE_REALPART which content is other constant node.
Definition: tree_node.hpp:2245
This struct specifies the gimple_asm node.
Definition: tree_node.hpp:1574
tree_nodeRef inline_body
java inline body
Definition: tree_node.hpp:2875
tree_nodeRef op1
The second operand of the ternary expression.
Definition: tree_node.hpp:1250
bool extern_flag
a variable can be extern
Definition: tree_node.hpp:5681
tree_nodeRef op
the label
Definition: tree_node.hpp:3097
#define WRITE_STRGLNGT_IDENTIFIER(os, field)
Macro which writes on an output stream a string with its length.
Definition: raw_writer.cpp:84
tree_nodeRef max
maximum values this SSA may reach
Definition: tree_node.hpp:4595
tree_nodeRef size
size field holds the size of datum, in bits.
Definition: tree_node.hpp:2660
tree_nodeRef type
Definition: tree_node.hpp:5078
This struct specifies the gimple_call node.
Definition: tree_node.hpp:1959
tree_nodeRef op5
fifth operand
Definition: tree_node.hpp:6065
tree_nodeRef offset
OFFSET integer constant.
Definition: tree_node.hpp:4952
struct definition of the declaration node structures.
Definition: tree_node.hpp:877
bool addr_not_taken
True when we are able to prove that its address is not taken and do not escape.
Definition: tree_node.hpp:5690
int bases
The number of basetypes for NODE.
Definition: tree_node.hpp:1727
tree_nodeRef op2
The third operand of the Quaternary expression.
Definition: tree_node.hpp:1290
tree_nodeRef chan
Is the chain.
Definition: tree_node.hpp:3632
unsigned int false_edge
in case the last statement is a gimple_cond associated with an if statement this member contains the ...
std::vector< std::string > list_of_op_names
store the list of operator names
Definition: tree_node.hpp:2768
bool hwcall_flag
flag true when the function is marked as hwcall
Definition: tree_node.hpp:2858
unsigned int prec
prec field is the number of bits used by this type.
Definition: tree_node.hpp:4052
This struct specifies the while expression Used to represent a while construct.
std::vector< tree_nodeRef > pragmas
list of pragmas associated to the function
Definition: tree_node.hpp:1122
tree_nodeRef fn
fn is the operand 0 of the call expression: this is the function
Definition: tree_node.hpp:1965
Represents a type expression that will be expanded into a list of types when instantiated with one or...
Definition: tree_node.hpp:2141
Memory tags used in tree-ssa to represent memory locations in virtual SSA.
Definition: tree_node.hpp:1393

Generated on Mon Feb 12 2024 13:02:55 for PandA-2024.02 by doxygen 1.8.13