PandA-2024.02
tree_node.hpp
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  */
47 #ifndef TREE_NODE_HPP
48 #define TREE_NODE_HPP
49 
51 #include "config_HAVE_FROM_PRAGMA_BUILT.hpp"
52 #include "config_HAVE_UNORDERED.hpp"
53 
54 #include <cstddef> // for size_t
55 #include <functional> // for binary_function
56 #include <iosfwd> // for ostream
57 #include <list> // for list
58 #include <memory> // for allocator_traits...
59 #include <string> // for string
60 #include <utility> // for pair
61 #include <vector> // for vector
62 
63 #include "custom_map.hpp" // for CustomMap
64 #include "custom_set.hpp"
65 #include "exceptions.hpp" // for throw_error
66 #include "panda_types.hpp"
67 #include "refcount.hpp" // for GetPointer, refc...
68 #include "tree_common.hpp" // for GET_KIND, BINARY...
69 
79 template <class value>
80 class TreeNodeMap;
83 
87 #define GET_KIND_TEXT(meth) \
88  std::string get_kind_text() const override \
89  { \
90  return std::string(#meth); \
91  }
92 
93 #define NON_LEAF_TREE_NODES \
94  (tree_node)(WeightedNode)(attr)(srcp)(PointToSolution)(decl_node)(expr_node)(gimple_node)(unary_expr)(binary_expr)( \
95  ternary_expr)(quaternary_expr)(type_node)(memory_tag)(cst_node)
96 
98 #define VISITED_OBJ_SEQ1 \
99  NON_LEAF_TREE_NODES UNARY_EXPRESSION_TREE_NODES BINARY_EXPRESSION_TREE_NODES TERNARY_EXPRESSION_TREE_NODES
100 #define VISITED_OBJ_SEQ2 \
101  QUATERNARY_EXPRESSION_TREE_NODES GIMPLE_NODES MISCELLANEOUS_EXPR_TREE_NODES MISCELLANEOUS_OBJ_TREE_NODES \
102  TYPE_NODE_TREE_NODES CONST_OBJ_TREE_NODES DECL_NODE_TREE_NODES BASIC_BLOCK_TREE_NODES \
103  PANDA_EXTENSION_TREE_NODES
104 
106 #define OBJ_SPECIALIZED_SEQ \
107  (tree_node)(WeightedNode)(attr)(srcp)(decl_node)(expr_node)(gimple_node)(unary_expr)(binary_expr)(ternary_expr)( \
108  quaternary_expr)(type_node)(memory_tag)(cst_node)(error_mark)(array_type)(gimple_asm)(baselink)(gimple_bind)( \
109  binfo)(block)(call_expr)(aggr_init_expr)(gimple_call)(case_label_expr)(cast_expr)(complex_cst)(complex_type)( \
110  gimple_cond)(const_decl)(constructor)(enumeral_type)(expr_stmt)(field_decl)(function_decl)(function_type)( \
111  gimple_assign)(gimple_goto)(handler)(identifier_node)(integer_cst)(integer_type)(gimple_label)(lut_expr)( \
112  method_type)(namespace_decl)(overload)(parm_decl)(gimple_phi)(pointer_type)(real_cst)(real_type)(record_type)( \
113  reference_type)(result_decl)(gimple_return)(return_stmt)(type_pack_expansion)(expr_pack_expansion)(scope_ref)( \
114  ssa_name)(statement_list)(string_cst)(gimple_switch)(template_decl)(template_parm_index)(tree_list)(tree_vec)( \
115  try_block)(type_decl)(union_type)(var_decl)(vector_cst)(vector_type)(type_argument_pack)( \
116  nontype_argument_pack)(target_expr)(target_mem_ref)(target_mem_ref461)(bloc)(null_node)(gimple_pragma)( \
117  issue_pragma)(blackbox_pragma)(profiling_pragma)(statistical_profiling)(map_pragma)(call_hw_pragma)( \
118  call_point_hw_pragma)(omp_pragma)(omp_critical_pragma)(omp_declare_simd_pragma)(omp_for_pragma)( \
119  omp_parallel_pragma)(omp_sections_pragma)(omp_parallel_sections_pragma)(omp_section_pragma)(omp_simd_pragma)( \
120  omp_target_pragma)(omp_task_pragma)(gimple_while)(gimple_for)(gimple_multi_way_if)(tree_reindex)
121 
122 #define OBJ_NOT_SPECIALIZED_SEQ \
123  (translation_unit_decl)(label_decl)(void_type)(template_type_parm)(set_type)(qual_union_type)(offset_type)( \
124  lang_type)(CharType)(nullptr_type)(boolean_type)(typename_type)(none)(vec_new_expr) \
125  UNARY_EXPRESSION_TREE_NODES BINARY_EXPRESSION_TREE_NODES TERNARY_EXPRESSION_TREE_NODES(ctor_initializer)( \
126  trait_expr)(template_id_expr)(placeholder_expr)(new_expr)(gimple_resx)(gimple_predict)(gimple_nop) \
127  QUATERNARY_EXPRESSION_TREE_NODES(modop_expr)(PointToSolution)(omp_atomic_pragma)(using_decl)(void_cst)
128 
129 #include "visitor.hpp"
130 
132 {
133 };
134 
140 {
141  public:
146  const unsigned int index;
147 
151  explicit tree_node(unsigned int i) : index(i)
152  {
153  }
154 
156  virtual ~tree_node() = default;
157 
161  virtual enum kind get_kind() const = 0;
162 
166  virtual std::string get_kind_text() const = 0;
167 
172  virtual void visit(tree_node_visitor* const v) const;
173 
179  friend std::ostream& operator<<(std::ostream& os, const tree_node* tn);
180 
186  friend std::ostream& operator<<(std::ostream& os, const tree_nodeRef& tn);
187 
192  std::string ToString() const;
193 
199  static enum kind get_kind(const std::string& name);
200 
206  static std::string GetString(const enum kind k);
207 };
208 
214 
215 class TreeNodeConstSorter : std::binary_function<tree_nodeConstRef, tree_nodeConstRef, bool>
216 {
217  public:
222 
229  bool operator()(const tree_nodeConstRef& x, const tree_nodeConstRef& y) const;
230 };
231 
235 #if HAVE_UNORDERED
236 struct TreeNodeConstHash : public std::unary_function<tree_nodeConstRef, size_t>
237 {
238  size_t operator()(tree_nodeConstRef tn) const
239  {
240  std::hash<unsigned int> hasher;
241  return hasher(tn->index);
242  }
243 };
244 
245 struct TreeNodeConstEqualTo : public std::binary_function<tree_nodeConstRef, tree_nodeConstRef, bool>
246 {
247  public:
251  TreeNodeConstEqualTo();
252 
259  bool operator()(const tree_nodeConstRef x, const tree_nodeConstRef y) const;
260 };
261 
262 class TreeNodeConstSet : public CustomUnorderedSet<tree_nodeConstRef, TreeNodeConstHash, TreeNodeConstEqualTo>
263 {
264 };
265 #else
266 
267 class TreeNodeConstSet : public OrderedSetStd<tree_nodeConstRef, TreeNodeConstSorter>
268 {
269  public:
274 };
275 #endif
276 
280 #if HAVE_UNORDERED
281 struct TreeNodeHash : public std::unary_function<tree_nodeRef, size_t>
282 {
283  size_t operator()(tree_nodeRef tn) const
284  {
285  std::hash<unsigned int> hasher;
286  return hasher(tn->index);
287  }
288 };
289 
290 class TreeNodeSet : public UnorderedSetStd<tree_nodeRef, TreeNodeHash, TreeNodeConstEqualTo>
291 {
292 };
293 #else
294 class TreeNodeSorter : std::binary_function<tree_nodeRef, tree_nodeRef, bool>
295 {
296  public:
300  TreeNodeSorter();
301 
308  bool operator()(const tree_nodeRef& x, const tree_nodeRef& y) const;
309 };
310 
311 class TreeNodeSet : public OrderedSetStd<tree_nodeRef, TreeNodeSorter>
312 {
313  public:
317  TreeNodeSet();
318 };
319 #endif
320 
324 #if HAVE_UNORDERED
325 template <typename value>
326 class TreeNodeMap : public UnorderedMapStd<tree_nodeRef, value, TreeNodeHash, TreeNodeConstEqualTo>
327 {
328 };
329 #else
330 template <typename value>
332 class TreeNodeMap : public OrderedMapStd<tree_nodeRef, value, TreeNodeSorter>
333 {
334 };
335 #endif
336 
342 #ifndef NDEBUG
343 #define GET_NODE(t) \
344  ((t) ? ((t)->get_kind() == tree_reindex_K ? (GetPointerS<tree_reindex>(t))->actual_tree_node : \
345  throw_error(t, #t, __PRETTY_FUNCTION__, __FILE__, __LINE__)) : \
346  throw_error(t, #t, __PRETTY_FUNCTION__, __FILE__, __LINE__))
347 #define GET_CONST_NODE(t) \
348  ((t) ? ((t)->get_kind() == tree_reindex_K ? (GetPointerS<const tree_reindex>(t))->actual_tree_node : \
349  throw_error(t, #t, __PRETTY_FUNCTION__, __FILE__, __LINE__)) : \
350  throw_error(t, #t, __PRETTY_FUNCTION__, __FILE__, __LINE__))
351 #else
352 #define GET_NODE(t) (GetPointerS<tree_reindex>(t))->actual_tree_node
353 #define GET_CONST_NODE(t) (GetPointerS<const tree_reindex>(t))->actual_tree_node
354 #endif
355 
361 #define GET_INDEX_NODE(t) (GET_NODE(t))->index
362 // unsigned int GET_INDEX_NODE(const tree_nodeRef& t);
363 #define GET_INDEX_CONST_NODE(t) (GET_CONST_NODE(t))->index
364 // unsigned int GET_INDEX_CONST_NODE(const tree_nodeConstRef& t);
365 
371 #define CASE_UNARY_EXPRESSION \
372  abs_expr_K: \
373  case addr_expr_K: \
374  case alignof_expr_K: \
375  case arrow_expr_K: \
376  case bit_not_expr_K: \
377  case buffer_ref_K: \
378  case card_expr_K: \
379  case cleanup_point_expr_K: \
380  case conj_expr_K: \
381  case convert_expr_K: \
382  case exit_expr_K: \
383  case fix_ceil_expr_K: \
384  case fix_floor_expr_K: \
385  case fix_round_expr_K: \
386  case fix_trunc_expr_K: \
387  case float_expr_K: \
388  case imagpart_expr_K: \
389  case indirect_ref_K: \
390  case misaligned_indirect_ref_K: \
391  case loop_expr_K: \
392  case negate_expr_K: \
393  case non_lvalue_expr_K: \
394  case nop_expr_K: \
395  case paren_expr_K: \
396  case realpart_expr_K: \
397  case reference_expr_K: \
398  case reinterpret_cast_expr_K: \
399  case sizeof_expr_K: \
400  case static_cast_expr_K: \
401  case throw_expr_K: \
402  case truth_not_expr_K: \
403  case unsave_expr_K: \
404  case va_arg_expr_K: \
405  case view_convert_expr_K: \
406  case reduc_max_expr_K: \
407  case reduc_min_expr_K: \
408  case reduc_plus_expr_K: \
409  case vec_unpack_hi_expr_K: \
410  case vec_unpack_lo_expr_K: \
411  case vec_unpack_float_hi_expr_K: \
412  case vec_unpack_float_lo_expr_K
413 
419 #define CASE_NON_ADDR_UNARY_EXPRESSION \
420  abs_expr_K: \
421  case alignof_expr_K: \
422  case arrow_expr_K: \
423  case bit_not_expr_K: \
424  case buffer_ref_K: \
425  case card_expr_K: \
426  case cleanup_point_expr_K: \
427  case conj_expr_K: \
428  case convert_expr_K: \
429  case exit_expr_K: \
430  case fix_ceil_expr_K: \
431  case fix_floor_expr_K: \
432  case fix_round_expr_K: \
433  case fix_trunc_expr_K: \
434  case float_expr_K: \
435  case imagpart_expr_K: \
436  case indirect_ref_K: \
437  case misaligned_indirect_ref_K: \
438  case loop_expr_K: \
439  case negate_expr_K: \
440  case non_lvalue_expr_K: \
441  case nop_expr_K: \
442  case realpart_expr_K: \
443  case reference_expr_K: \
444  case reinterpret_cast_expr_K: \
445  case sizeof_expr_K: \
446  case static_cast_expr_K: \
447  case throw_expr_K: \
448  case truth_not_expr_K: \
449  case unsave_expr_K: \
450  case va_arg_expr_K: \
451  case view_convert_expr_K: \
452  case reduc_max_expr_K: \
453  case reduc_min_expr_K: \
454  case reduc_plus_expr_K: \
455  case vec_unpack_hi_expr_K: \
456  case vec_unpack_lo_expr_K: \
457  case vec_unpack_float_hi_expr_K: \
458  case vec_unpack_float_lo_expr_K
459 
463 #define CASE_BINARY_EXPRESSION \
464  assert_expr_K: \
465  case bit_and_expr_K: \
466  case bit_ior_expr_K: \
467  case bit_xor_expr_K: \
468  case catch_expr_K: \
469  case ceil_div_expr_K: \
470  case ceil_mod_expr_K: \
471  case complex_expr_K: \
472  case compound_expr_K: \
473  case eh_filter_expr_K: \
474  case eq_expr_K: \
475  case exact_div_expr_K: \
476  case fdesc_expr_K: \
477  case floor_div_expr_K: \
478  case floor_mod_expr_K: \
479  case ge_expr_K: \
480  case gt_expr_K: \
481  case goto_subroutine_K: \
482  case in_expr_K: \
483  case init_expr_K: \
484  case le_expr_K: \
485  case lrotate_expr_K: \
486  case lshift_expr_K: \
487  case lt_expr_K: \
488  case max_expr_K: \
489  case mem_ref_K: \
490  case min_expr_K: \
491  case minus_expr_K: \
492  case modify_expr_K: \
493  case mult_expr_K: \
494  case mult_highpart_expr_K: \
495  case ne_expr_K: \
496  case ordered_expr_K: \
497  case plus_expr_K: \
498  case pointer_plus_expr_K: \
499  case postdecrement_expr_K: \
500  case postincrement_expr_K: \
501  case predecrement_expr_K: \
502  case preincrement_expr_K: \
503  case range_expr_K: \
504  case rdiv_expr_K: \
505  case round_div_expr_K: \
506  case round_mod_expr_K: \
507  case rrotate_expr_K: \
508  case rshift_expr_K: \
509  case set_le_expr_K: \
510  case trunc_div_expr_K: \
511  case trunc_mod_expr_K: \
512  case truth_and_expr_K: \
513  case truth_andif_expr_K: \
514  case truth_or_expr_K: \
515  case truth_orif_expr_K: \
516  case truth_xor_expr_K: \
517  case try_catch_expr_K: \
518  case try_finally_K: \
519  case uneq_expr_K: \
520  case ltgt_expr_K: \
521  case unge_expr_K: \
522  case ungt_expr_K: \
523  case unle_expr_K: \
524  case unlt_expr_K: \
525  case unordered_expr_K: \
526  case widen_sum_expr_K: \
527  case widen_mult_expr_K: \
528  case with_size_expr_K: \
529  case vec_lshift_expr_K: \
530  case vec_rshift_expr_K: \
531  case widen_mult_hi_expr_K: \
532  case widen_mult_lo_expr_K: \
533  case vec_pack_trunc_expr_K: \
534  case vec_pack_sat_expr_K: \
535  case vec_pack_fix_trunc_expr_K: \
536  case vec_extracteven_expr_K: \
537  case vec_extractodd_expr_K: \
538  case vec_interleavehigh_expr_K: \
539  case vec_interleavelow_expr_K: \
540  case extract_bit_expr_K: \
541  case sat_plus_expr_K: \
542  case sat_minus_expr_K: \
543  case extractvalue_expr_K: \
544  case extractelement_expr_K: \
545  case frem_expr_K
546 
550 #define CASE_TERNARY_EXPRESSION \
551  component_ref_K: \
552  case bit_field_ref_K: \
553  case bit_ior_concat_expr_K: \
554  case vtable_ref_K: \
555  case with_cleanup_expr_K: \
556  case obj_type_ref_K: \
557  case save_expr_K: \
558  case cond_expr_K: \
559  case vec_cond_expr_K: \
560  case vec_perm_expr_K: \
561  case dot_prod_expr_K: \
562  case ternary_plus_expr_K: \
563  case ternary_pm_expr_K: \
564  case ternary_mp_expr_K: \
565  case ternary_mm_expr_K: \
566  case fshl_expr_K: \
567  case fshr_expr_K: \
568  case insertvalue_expr_K: \
569  case insertelement_expr_K
570 
574 #define CASE_QUATERNARY_EXPRESSION \
575  array_range_ref_K: \
576  case array_ref_K
577 
581 #define CASE_TYPE_NODES \
582  array_type_K: \
583  case boolean_type_K: \
584  case CharType_K: \
585  case nullptr_type_K: \
586  case type_pack_expansion_K: \
587  case complex_type_K: \
588  case enumeral_type_K: \
589  case function_type_K: \
590  case integer_type_K: \
591  case lang_type_K: \
592  case method_type_K: \
593  case offset_type_K: \
594  case pointer_type_K: \
595  case qual_union_type_K: \
596  case real_type_K: \
597  case record_type_K: \
598  case reference_type_K: \
599  case set_type_K: \
600  case template_type_parm_K: \
601  case typename_type_K: \
602  case union_type_K: \
603  case vector_type_K: \
604  case void_type_K: \
605  case type_argument_pack_K
606 
610 #define CASE_PRAGMA_NODES \
611  issue_pragma_K: \
612  case blackbox_pragma_K: \
613  case profiling_pragma_K: \
614  case statistical_profiling_K: \
615  case map_pragma_K: \
616  case call_hw_pragma_K: \
617  case call_point_hw_pragma_K: \
618  case omp_pragma_K: \
619  case null_node_K: \
620  case omp_atomic_pragma_K: \
621  case omp_critical_pragma_K: \
622  case omp_declare_simd_pragma_K: \
623  case omp_for_pragma_K: \
624  case omp_parallel_pragma_K: \
625  case omp_sections_pragma_K: \
626  case omp_parallel_sections_pragma_K: \
627  case omp_section_pragma_K: \
628  case omp_simd_pragma_K: \
629  case omp_target_pragma_K: \
630  case omp_task_pragma_K
631 
635 #define CASE_FAKE_NODES \
636  last_tree_K: \
637  case none_K: \
638  case placeholder_expr_K: \
639  case tree_reindex_K
640 
644 #define CASE_CPP_NODES \
645  baselink_K: \
646  case ctor_initializer_K: \
647  case do_stmt_K: \
648  case expr_stmt_K: \
649  case if_stmt_K: \
650  case for_stmt_K: \
651  case handler_K: \
652  case modop_expr_K: \
653  case new_expr_K: \
654  case overload_K: \
655  case return_stmt_K: \
656  case scope_ref_K: \
657  case template_id_expr_K: \
658  case template_parm_index_K: \
659  case trait_expr_K: \
660  case try_block_K: \
661  case vec_new_expr_K: \
662  case while_stmt_K: \
663  case nontype_argument_pack_K: \
664  case cast_expr_K: \
665  case expr_pack_expansion_K
666 
672 #define CASE_DECL_NODES \
673  const_decl_K: \
674  case field_decl_K: \
675  case function_decl_K: \
676  case label_decl_K: \
677  case namespace_decl_K: \
678  case parm_decl_K: \
679  case result_decl_K: \
680  case translation_unit_decl_K: \
681  case type_decl_K: \
682  case using_decl_K: \
683  case var_decl_K: \
684  case template_decl_K
685 
689 #define CASE_CST_NODES \
690  complex_cst_K: \
691  case integer_cst_K: \
692  case real_cst_K: \
693  case string_cst_K: \
694  case vector_cst_K: \
695  case void_cst_K
696 
700 #define CASE_GIMPLE_NODES \
701  gimple_asm_K: \
702  case gimple_assign_K: \
703  case gimple_bind_K: \
704  case gimple_call_K: \
705  case gimple_cond_K: \
706  case gimple_for_K: \
707  case gimple_goto_K: \
708  case gimple_label_K: \
709  case gimple_multi_way_if_K: \
710  case gimple_nop_K: \
711  case gimple_phi_K: \
712  case gimple_pragma_K: \
713  case gimple_predict_K: \
714  case gimple_resx_K: \
715  case gimple_return_K: \
716  case gimple_switch_K: \
717  case gimple_while_K
718 
720 #define CREATE_TREE_NODE_CLASS(class_name, superclass) \
721  struct class_name : public superclass \
722  { \
723  GET_KIND_TEXT(class_name) \
724  GET_KIND(class_name) \
725  virtual void visit(tree_node_visitor* const v) const override; \
726  enum \
727  { \
728  GETID(superclass) = 0 \
729  }; \
730  explicit class_name(unsigned int i) : superclass(i) \
731  { \
732  } \
733  }
734 
738 struct WeightedNode : public tree_node
739 {
741  enum
742  {
744  };
745 
749  explicit WeightedNode(unsigned int i);
750 
755  void visit(tree_node_visitor* const v) const override;
756 };
757 
774 struct attr
775 {
778 
782  virtual ~attr();
783 
789  {
790  list_attr.insert(a);
791  }
792 
794  bool is_constructor() const;
795 
797  bool is_destructor() const;
798 
800  bool is_member() const;
801 
803  bool is_call() const;
804 
806  bool is_new() const;
807 
809  bool is_public() const;
810 
812  bool is_private() const;
813 
815  bool is_protected() const;
816 
818  bool is_bitfield() const;
819 
824  virtual void visit(tree_node_visitor* const v) const;
825 };
826 
832 struct srcp
833 {
839  std::string include_name;
840 
845  unsigned int line_number;
846 
850  unsigned int column_number;
851 
855  srcp() : line_number(0), column_number(0)
856  {
857  }
858 
862  virtual ~srcp();
863 
868  virtual void visit(tree_node_visitor* const v) const;
869 };
870 
877 struct decl_node : public srcp, public tree_node
878 {
884 
891 
900 
908 
911 
913 
919 
922 
925 
928 
931 
937 
939  bool C_flag;
940 
942  unsigned int uid;
943 
947  explicit decl_node(unsigned int i);
948 
953  void visit(tree_node_visitor* const v) const override;
954 
956  enum
957  {
958  GETID(srcp) = 0,
959  GETID(tree_node),
960  GETID(name),
961  GETID(mngl),
962  GETID(orig),
963  GETID(type),
964  GETID(scpe),
965  GETID(chan),
966  GETID(attributes)
967  };
968 };
969 
973 struct expr_node : public srcp, public WeightedNode
974 {
976  explicit expr_node(unsigned int i) : WeightedNode(i)
977  {
978  }
979 
982 
987  void visit(tree_node_visitor* const v) const override;
988 
990  enum
991  {
992  GETID(srcp) = 0,
994  GETID(type)
995  };
996 };
997 
1002 {
1004  bool anything;
1005 
1007  bool escaped;
1008 
1011 
1013  bool nonlocal;
1014 
1016  bool null;
1017 
1019  std::vector<tree_nodeRef> variables;
1020 
1024  PointToSolution();
1025 
1029  virtual ~PointToSolution();
1030 
1035  void Add(const std::string& variable);
1036 
1041  void Add(const tree_nodeRef& variable);
1042 
1047  bool is_a_singleton() const;
1048 
1053  bool is_fully_resolved() const;
1054 
1059  std::string ToString() const;
1060 
1065  virtual void visit(tree_node_visitor* const v) const;
1066 
1068  enum
1069  {
1070  GETID(variables) = 0
1071  };
1072 };
1074 
1078 struct gimple_node : public srcp, public WeightedNode
1079 {
1084  explicit gimple_node(unsigned int i);
1085 
1088 
1091 
1094 
1099  void SetVdef(const tree_nodeRef& vdef);
1100 
1103 
1109  bool AddVuse(const tree_nodeRef& vuse);
1110 
1113 
1119  bool AddVover(const tree_nodeRef& vover);
1120 
1122  std::vector<tree_nodeRef> pragmas;
1123 
1126 
1129 
1132 
1134  unsigned int bb_index;
1135 
1137  std::string operation;
1138 
1143  void visit(tree_node_visitor* const v) const override;
1144 
1146  enum
1147  {
1148  GETID(srcp) = 0,
1150  GETID(memuse),
1151  GETID(memdef),
1152  GETID(vuses),
1153  GETID(vdef),
1154  GETID(vovers),
1155  GETID(pragmas),
1156  GETID(use_set),
1157  GETID(clobbered_set),
1158  GETID(scpe)
1159  };
1160 
1167 
1169  bool keep;
1170 };
1171 
1177 struct unary_expr : public expr_node
1178 {
1180  explicit unary_expr(unsigned int i) : expr_node(i)
1181  {
1182  }
1183 
1186 
1191  void visit(tree_node_visitor* const v) const override;
1192 
1194  enum
1195  {
1197  GETID(op)
1198  };
1199 };
1200 
1206 struct binary_expr : public expr_node
1207 {
1209  explicit binary_expr(unsigned int i) : expr_node(i)
1210  {
1211  }
1212 
1215 
1218 
1223  void visit(tree_node_visitor* const v) const override;
1224 
1226  enum
1227  {
1229  GETID(op0),
1230  GETID(op1)
1231  };
1232 };
1233 
1239 struct ternary_expr : public expr_node
1240 {
1242  explicit ternary_expr(unsigned int i) : expr_node(i)
1243  {
1244  }
1245 
1248 
1251 
1254 
1259  void visit(tree_node_visitor* const v) const override;
1260 
1262  enum
1263  {
1265  GETID(op0),
1266  GETID(op1),
1267  GETID(op2)
1268  };
1269 };
1270 
1277 {
1279  explicit quaternary_expr(unsigned int i) : expr_node(i)
1280  {
1281  }
1282 
1285 
1288 
1291 
1294 
1299  void visit(tree_node_visitor* const v) const override;
1300 
1302  enum
1303  {
1305  GETID(op0),
1306  GETID(op1),
1307  GETID(op2),
1308  GETID(op3)
1309  };
1310 };
1311 
1318 struct type_node : public tree_node
1319 {
1321  explicit type_node(unsigned int i);
1322 
1329 
1338 
1344 
1350 
1356 
1362  unsigned int algn;
1363 
1366 
1369 
1372 
1377  void visit(tree_node_visitor* const v) const override;
1378 
1380  enum
1381  {
1383  GETID(name),
1384  GETID(unql),
1385  GETID(size),
1386  GETID(scpe)
1387  };
1388 };
1389 
1393 struct memory_tag : public decl_node
1394 {
1396  explicit memory_tag(unsigned int i) : decl_node(i)
1397  {
1398  }
1399 
1403  std::vector<tree_nodeRef> list_of_aliases;
1404 
1409  void add_alias(const tree_nodeRef a)
1410  {
1411  list_of_aliases.push_back(a);
1412  }
1413 
1418  void visit(tree_node_visitor* const v) const override;
1419 
1421  enum
1422  {
1424  GETID(list_of_aliases)
1425  };
1426 };
1427 
1432 {
1434  explicit cst_node(unsigned int i) : tree_node(i)
1435  {
1436  }
1437 
1440 
1445  void visit(tree_node_visitor* const v) const override;
1446 
1448  enum
1449  {
1451  GETID(type)
1452  };
1453 };
1454 
1463 {
1465  explicit error_mark(unsigned int i) : tree_node(i)
1466  {
1467  }
1468 
1471 
1472 
1478  void visit(tree_node_visitor* const v) const override;
1479 
1481  enum
1482  {
1484  };
1485 };
1486 
1493 
1500 
1506 CREATE_TREE_NODE_CLASS(array_range_ref, quaternary_expr);
1507 
1514 
1520 struct array_type : public type_node
1521 {
1523  explicit array_type(unsigned int i) : type_node(i)
1524  {
1525  }
1526 
1527  /*type_node fields are in the parent class: type_node*/
1528 
1531 
1535 
1538 
1539 
1541 
1542 
1546  void visit(tree_node_visitor* const v) const override;
1547 
1549  enum
1550  {
1552  GETID(elts),
1553  GETID(domn)
1554  };
1555 };
1556 
1560 CREATE_TREE_NODE_CLASS(alignof_expr, unary_expr);
1561 
1565 CREATE_TREE_NODE_CLASS(arrow_expr, unary_expr);
1566 
1574 struct gimple_asm : public gimple_node
1575 {
1577  explicit gimple_asm(unsigned int i) : gimple_node(i), volatile_flag(false)
1578  {
1579  }
1580 
1583 
1585  std::string str;
1586 
1589 
1592 
1595 
1598 
1599 
1601 
1602 
1606  void visit(tree_node_visitor* const v) const override;
1607 
1609  enum
1610  {
1612  GETID(out),
1613  GETID(in),
1614  GETID(clob)
1615  };
1616 };
1617 
1621 CREATE_TREE_NODE_CLASS(assert_expr, binary_expr);
1622 
1627 struct baselink : public tree_node
1628 {
1630  explicit baselink(unsigned int i) : tree_node(i)
1631  {
1632  }
1633 
1636 
1639 
1640 
1642 
1643 
1647  void visit(tree_node_visitor* const v) const override;
1648 
1650  enum
1651  {
1653  GETID(type)
1654  };
1655 };
1656 
1664 struct gimple_bind : public expr_node
1665 {
1667  explicit gimple_bind(unsigned int i) : expr_node(i)
1668  {
1669  }
1670 
1672  std::vector<tree_nodeRef> list_of_vars;
1673 
1677 
1682  void add_vars(const tree_nodeRef& a)
1683  {
1684  list_of_vars.push_back(a);
1685  }
1686 
1689 
1690 
1692 
1693 
1697  void visit(tree_node_visitor* const v) const override;
1698 
1700  enum
1701  {
1703  GETID(list_of_vars),
1704  GETID(body)
1705  };
1706 };
1707 
1713 struct binfo : public tree_node
1714 {
1716  explicit binfo(unsigned int i) : tree_node(i), virt_flag(false), bases(0)
1717  {
1718  }
1719 
1722 
1725 
1727  int bases;
1728 
1730  std::vector<std::pair<TreeVocabularyTokenTypes_TokenEnum, tree_nodeRef>> list_of_access_binf;
1731 
1736  tree_nodeRef get_base(size_t i) const
1737  {
1738  return list_of_access_binf[i].second;
1739  }
1740 
1742  size_t get_baseinfo_size() const
1743  {
1744  return list_of_access_binf.size();
1745  }
1746 
1752  void add_access_binf(const tree_nodeRef& binf, TreeVocabularyTokenTypes_TokenEnum access);
1753 
1756 
1757 
1758  GET_KIND(binfo)
1759 
1760 
1764  void visit(tree_node_visitor* const v) const override;
1765 
1767  enum
1768  {
1770  GETID(type),
1771  GETID(list_of_access_binf)
1772  };
1773 };
1774 
1779 CREATE_TREE_NODE_CLASS(bit_and_expr, binary_expr);
1780 
1788 CREATE_TREE_NODE_CLASS(bit_field_ref, ternary_expr);
1789 
1794 CREATE_TREE_NODE_CLASS(bit_ior_expr, binary_expr);
1795 
1800 CREATE_TREE_NODE_CLASS(bit_ior_concat_expr, ternary_expr);
1801 
1806 CREATE_TREE_NODE_CLASS(bit_not_expr, unary_expr);
1807 
1812 CREATE_TREE_NODE_CLASS(bit_xor_expr, binary_expr);
1813 
1820 struct block : public tree_node
1821 {
1823  explicit block(unsigned int i) : tree_node(i), bl_flag(false)
1824  {
1825  }
1826 
1828  bool bl_flag;
1829 
1831  std::string bl;
1832 
1835 
1836 
1837  GET_KIND(block)
1838 
1839 
1843  void visit(tree_node_visitor* const v) const override;
1844 
1846  enum
1847  {
1849  };
1850 };
1851 
1857 CREATE_TREE_NODE_CLASS(boolean_type, type_node);
1858 
1863 CREATE_TREE_NODE_CLASS(buffer_ref, unary_expr);
1864 
1873 struct call_expr : public expr_node
1874 {
1876  explicit call_expr(unsigned int i);
1877 
1880 
1882  std::vector<tree_nodeRef> args;
1883 
1888  void AddArg(const tree_nodeRef& arg);
1889 
1892 
1893 
1895 
1896 
1900  void visit(tree_node_visitor* const v) const override;
1901 
1903  enum
1904  {
1906  GETID(type),
1907  GETID(fn),
1908  GETID(args)
1909  };
1910 };
1911 
1919 struct aggr_init_expr : public call_expr
1920 {
1922  explicit aggr_init_expr(unsigned int i);
1923 
1925  int ctor;
1926 
1929 
1932 
1933 
1935 
1936 
1940  void visit(tree_node_visitor* const v) const override;
1941 
1943  enum
1944  {
1946  GETID(ctor),
1947  GETID(slot)
1948  };
1949 };
1950 
1959 struct gimple_call : public gimple_node
1960 {
1962  explicit gimple_call(unsigned int i);
1963 
1966 
1968  std::vector<tree_nodeRef> args;
1969 
1974  void AddArg(const tree_nodeRef& arg);
1975 
1978 
1979 
1981 
1982 
1986  void visit(tree_node_visitor* const v) const override;
1987 
1989  enum
1990  {
1992  GETID(type),
1993  GETID(fn),
1994  GETID(args)
1995  };
1996 };
1997 
2003 
2012 {
2014  explicit case_label_expr(unsigned int i) : expr_node(i), default_flag(false)
2015  {
2016  }
2017 
2020 
2023 
2026 
2029 
2032 
2033 
2035 
2036 
2040  void visit(tree_node_visitor* const v) const override;
2041 
2043  enum
2044  {
2046  GETID(op0),
2047  GETID(op1),
2048  GETID(got)
2049  };
2050 };
2051 
2057 struct cast_expr : public expr_node
2058 {
2060  explicit cast_expr(unsigned int i) : expr_node(i)
2061  {
2062  }
2063 
2066 
2069 
2070 
2072 
2073 
2077  void visit(tree_node_visitor* const v) const override;
2078 
2080  enum
2081  {
2083  GETID(op)
2084  };
2085 };
2086 
2092 CREATE_TREE_NODE_CLASS(catch_expr, binary_expr);
2093 
2098 CREATE_TREE_NODE_CLASS(ceil_div_expr, binary_expr);
2099 
2104 CREATE_TREE_NODE_CLASS(ceil_mod_expr, binary_expr);
2105 
2112 
2116 CREATE_TREE_NODE_CLASS(nullptr_type, type_node);
2117 
2142 {
2144  explicit type_pack_expansion(unsigned int i) : type_node(i)
2145  {
2146  }
2147 
2150 
2153 
2156 
2159 
2160 
2162 
2163 
2167  void visit(tree_node_visitor* const v) const override;
2168 
2170  enum
2171  {
2173  GETID(op),
2174  GETID(param_packs),
2175  GETID(arg)
2176  };
2177 };
2178 
2187 {
2189  explicit expr_pack_expansion(unsigned int i) : expr_node(i)
2190  {
2191  }
2192 
2195 
2198 
2201 
2204 
2205 
2207 
2208 
2212  void visit(tree_node_visitor* const v) const override;
2213 
2215  enum
2216  {
2218  GETID(op),
2219  GETID(param_packs),
2220  GETID(arg)
2221  };
2222 };
2223 
2229 CREATE_TREE_NODE_CLASS(cleanup_point_expr, unary_expr);
2230 
2237 struct complex_cst : public cst_node
2238 {
2240  explicit complex_cst(unsigned int i) : cst_node(i)
2241  {
2242  }
2243 
2246 
2249 
2252 
2253 
2255 
2256 
2260  void visit(tree_node_visitor* const v) const override;
2261 
2263  enum
2264  {
2266  GETID(real),
2267  GETID(imag)
2268  };
2269 };
2270 
2275 CREATE_TREE_NODE_CLASS(complex_expr, binary_expr);
2276 
2282 struct complex_type : public type_node
2283 {
2285  explicit complex_type(unsigned int i) : type_node(i), unsigned_flag(false), real_flag(false)
2286  {
2287  }
2288 
2294 
2297 
2300 
2301 
2303 
2304 
2308  void visit(tree_node_visitor* const v) const override;
2309 
2311  enum
2312  {
2314  };
2315 };
2316 
2322 CREATE_TREE_NODE_CLASS(component_ref, ternary_expr);
2323 
2329 CREATE_TREE_NODE_CLASS(compound_expr, binary_expr);
2330 
2340 
2345 struct gimple_cond : public gimple_node
2346 {
2348  explicit gimple_cond(unsigned int i) : gimple_node(i)
2349  {
2350  }
2351 
2354 
2357 
2358 
2360 
2361 
2365  void visit(tree_node_visitor* const v) const override;
2366 
2368  enum
2369  {
2371  GETID(op0)
2372  };
2373 };
2374 
2380 
2386 struct const_decl : public decl_node
2387 {
2389  explicit const_decl(unsigned int i) : decl_node(i)
2390  {
2391  }
2392 
2393  /*decl_node fields are in the parent class*/
2394 
2397 
2400 
2401 
2403 
2404 
2408  void visit(tree_node_visitor* const v) const override;
2409 
2411  enum
2412  {
2414  GETID(cnst)
2415  };
2416 };
2417 
2434 struct constructor : public tree_node
2435 {
2437  explicit constructor(unsigned int i) : tree_node(i)
2438  {
2439  }
2440 
2443 
2445  std::vector<std::pair<tree_nodeRef, tree_nodeRef>> list_of_idx_valu;
2446 
2452  void add_idx_valu(const tree_nodeRef& idx, const tree_nodeRef& valu)
2453  {
2454  list_of_idx_valu.push_back(std::pair<tree_nodeRef, tree_nodeRef>(idx, valu));
2455  }
2456 
2461  void add_valu(const tree_nodeRef& valu)
2462  {
2463  list_of_idx_valu.push_back(std::pair<tree_nodeRef, tree_nodeRef>(tree_nodeRef(), valu));
2464  }
2465 
2468 
2469 
2471 
2472 
2476  void visit(tree_node_visitor* const v) const override;
2477 
2479  enum
2480  {
2482  GETID(type),
2483  GETID(list_of_idx_valu)
2484  };
2485 };
2486 
2492 CREATE_TREE_NODE_CLASS(convert_expr, unary_expr);
2493 
2498 CREATE_TREE_NODE_CLASS(ctor_initializer, tree_node);
2499 
2506 CREATE_TREE_NODE_CLASS(eh_filter_expr, binary_expr);
2507 
2513 struct enumeral_type : public type_node
2514 {
2516  explicit enumeral_type(unsigned int i) : type_node(i), prec(0), unsigned_flag(false)
2517  {
2518  }
2519 
2520  /*type_node fields are in the parent class*/
2521 
2526  unsigned int prec;
2527 
2533 
2536 
2539 
2546 
2549 
2550 
2552 
2553 
2557  void visit(tree_node_visitor* const v) const override;
2558 
2560  enum
2561  {
2563  GETID(min),
2564  GETID(max),
2565  GETID(csts)
2566  };
2567 };
2568 
2575 
2580 CREATE_TREE_NODE_CLASS(exact_div_expr, binary_expr);
2581 
2588 
2592 struct expr_stmt : public tree_node
2593 {
2595  explicit expr_stmt(unsigned int i) : tree_node(i), line(-1)
2596  {
2597  }
2598 
2600  int line;
2601 
2604 
2607 
2610 
2611 
2613 
2614 
2618  void visit(tree_node_visitor* const v) const override;
2619 
2621  enum
2622  {
2624  GETID(expr),
2625  GETID(next)
2626  };
2627 };
2628 
2633 CREATE_TREE_NODE_CLASS(fdesc_expr, binary_expr);
2634 
2640 struct field_decl : public decl_node, public attr
2641 {
2643  explicit field_decl(unsigned int i) : decl_node(i), algn(0)
2644  {
2645  }
2646 
2647  /*decl_node fields are in the parent class: decl_node*/
2648  /*attr fields are in the parent class: attr*/
2649 
2655 
2661 
2666  unsigned int algn;
2667 
2675 
2680 
2686 
2689 
2690 
2692 
2693 
2697  void visit(tree_node_visitor* const v) const override;
2698 
2700  enum
2701  {
2703  GETID(attr),
2704  GETID(init),
2705  GETID(size),
2706  GETID(bpos),
2707  GETID(smt_ann)
2708  };
2709 };
2710 
2715 CREATE_TREE_NODE_CLASS(fix_ceil_expr, unary_expr);
2716 
2721 CREATE_TREE_NODE_CLASS(fix_floor_expr, unary_expr);
2722 
2727 CREATE_TREE_NODE_CLASS(fix_round_expr, unary_expr);
2728 
2733 CREATE_TREE_NODE_CLASS(fix_trunc_expr, unary_expr);
2734 
2739 CREATE_TREE_NODE_CLASS(float_expr, unary_expr);
2740 
2745 CREATE_TREE_NODE_CLASS(floor_div_expr, binary_expr);
2746 
2751 CREATE_TREE_NODE_CLASS(floor_mod_expr, binary_expr);
2752 
2759 struct function_decl : public decl_node, public attr
2760 {
2762  explicit function_decl(unsigned int i);
2763 
2766 
2768  std::vector<std::string> list_of_op_names;
2769 
2772 
2775 
2778 
2781 
2784 
2787 
2790 
2793 
2794 #if HAVE_FROM_PRAGMA_BUILT
2795  size_t omp_for_wrapper;
2797 
2799  bool omp_body_loop;
2800 
2802  std::string omp_critical;
2803 
2805  bool omp_atomic;
2806 #endif
2807 
2809  int fixd;
2810 
2812  int virt;
2813 
2816 
2818  std::string bit_values;
2819 
2821  RangeRef range;
2822 
2829 
2836 
2841  std::vector<tree_nodeRef> list_of_args;
2842 
2849 
2854 
2859 
2865 
2871 
2876 
2881  void add(std::string a)
2882  {
2883  list_of_op_names.push_back(a);
2884  }
2885 
2890  void AddArg(const tree_nodeRef& a);
2891 
2893  bool is_constructor();
2894 
2896  bool is_destructor();
2897 
2899  bool is_operator() const;
2900 
2902  bool is_public();
2903 
2905  bool is_private();
2906 
2908  bool is_protected();
2909 
2911  bool is_pipelined();
2912 
2913  void set_pipelining(bool v);
2914 
2915  bool is_simple_pipeline();
2916 
2917  void set_simple_pipeline(bool v);
2918 
2919  int get_initiation_time();
2920 
2921  void set_initiation_time(int time);
2922 
2925 
2926 
2928 
2929 
2933  void visit(tree_node_visitor* const v) const override;
2934 
2936  enum
2937  {
2939  GETID(attr),
2940  GETID(fn),
2941  GETID(tmpl_parms),
2942  GETID(tmpl_args),
2943  GETID(list_of_args),
2944  GETID(body),
2945  GETID(inline_body)
2946  };
2947 };
2948 
2960 struct function_type : public type_node
2961 {
2963  explicit function_type(unsigned int i) : type_node(i), varargs_flag(false)
2964  {
2965  }
2966 
2969 
2975 
2982 
2985 
2986 
2988 
2989 
2993  void visit(tree_node_visitor* const v) const override;
2994 
2996  enum
2997  {
2999  GETID(retn),
3000  GETID(prms)
3001  };
3002 };
3003 
3010 
3016 {
3018  explicit gimple_assign(unsigned int i);
3019 
3022 
3025 
3028 
3030 
3031  bool clobber;
3032 
3034 
3037 
3038 
3040 
3041 
3045  void visit(tree_node_visitor* const v) const override;
3046 
3048  enum
3049  {
3051  GETID(op0),
3052  GETID(op1),
3053  GETID(orig),
3054  GETID(predicate)
3055  };
3056 };
3057 
3058 struct gimple_nop : public gimple_node
3059 {
3061  explicit gimple_nop(unsigned int i) : gimple_node(i)
3062  {
3063  }
3064 
3067 
3068 
3070 
3071 
3075  void visit(tree_node_visitor* const v) const override;
3076 
3078  enum
3079  {
3081  };
3082 };
3083 
3089 struct gimple_goto : public gimple_node
3090 {
3092  explicit gimple_goto(unsigned int i) : gimple_node(i)
3093  {
3094  }
3095 
3098 
3101 
3102 
3104 
3105 
3109  void visit(tree_node_visitor* const v) const override;
3110 
3112  enum
3113  {
3115  GETID(op)
3116  };
3117 };
3118 
3126 CREATE_TREE_NODE_CLASS(goto_subroutine, binary_expr);
3127 
3134 
3141 struct handler : public tree_node
3142 {
3144  explicit handler(unsigned int i) : tree_node(i), line(-1)
3145  {
3146  }
3147 
3149  int line;
3150 
3153 
3156 
3157 
3158  GET_KIND(handler)
3159 
3160 
3164  void visit(tree_node_visitor* const v) const override;
3165 
3167  enum
3168  {
3170  GETID(body)
3171  };
3172 };
3173 
3180 {
3182  identifier_node(unsigned int node_id, std::string _strg, tree_manager* TM);
3183  identifier_node(unsigned int node_id, bool _operator_flag, tree_manager* TM);
3184 
3186  const bool operator_flag;
3187 
3189  std::string strg;
3190 
3193 
3194 
3196 
3197 
3201  void visit(tree_node_visitor* const v) const override;
3202 
3204  enum
3205  {
3207  };
3208 };
3209 
3214 CREATE_TREE_NODE_CLASS(imagpart_expr, unary_expr);
3215 
3220 CREATE_TREE_NODE_CLASS(indirect_ref, unary_expr);
3221 
3225 CREATE_TREE_NODE_CLASS(misaligned_indirect_ref, unary_expr);
3226 
3232 
3238 
3242 struct integer_cst : public cst_node
3243 {
3245 #pragma GCC diagnostic push
3246 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
3247  explicit integer_cst(unsigned int i) : cst_node(i), value(0)
3248  {
3249  }
3250 #pragma GCC diagnostic pop
3251 
3254 
3257 
3258 
3260 
3261 
3265  void visit(tree_node_visitor* const v) const override;
3266 
3268  enum
3269  {
3271  };
3272 };
3273 
3279 struct integer_type : public type_node
3280 {
3282  explicit integer_type(unsigned int i) : type_node(i), prec(0), unsigned_flag(false)
3283  {
3284  }
3285 
3286  /*type_node fields are in the parent class: type_node*/
3287 
3292  unsigned int prec;
3293 
3295  std::string str;
3296 
3302 
3305 
3308 
3311 
3312 
3314 
3315 
3319  void visit(tree_node_visitor* const v) const override;
3320 
3322  enum
3323  {
3325  GETID(min),
3326  GETID(max)
3327  };
3328 };
3329 
3335 CREATE_TREE_NODE_CLASS(label_decl, decl_node);
3336 
3343 struct gimple_label : public gimple_node
3344 {
3346  explicit gimple_label(unsigned int i) : gimple_node(i)
3347  {
3348  }
3349 
3352 
3355 
3356 
3358 
3359 
3363  void visit(tree_node_visitor* const v) const override;
3364 
3366  enum
3367  {
3369  GETID(op)
3370  };
3371 };
3372 
3378 CREATE_TREE_NODE_CLASS(lang_type, type_node);
3379 
3386 
3393 
3401 CREATE_TREE_NODE_CLASS(lrotate_expr, binary_expr);
3402 
3410 CREATE_TREE_NODE_CLASS(lshift_expr, binary_expr);
3411 
3418 
3424 
3429 
3441 
3453 {
3455  explicit method_type(unsigned int i) : function_type(i)
3456  {
3457  }
3458 
3459  // type_node fields are in the parent class: type_node
3460  // return type and parameters are in the parent class function_type
3461 
3467 
3470 
3471 
3473 
3474 
3478  void visit(tree_node_visitor* const v) const override;
3479 
3481  enum
3482  {
3484  GETID(clas)
3485  };
3486 };
3487 
3492 
3497 CREATE_TREE_NODE_CLASS(minus_expr, binary_expr);
3498 
3503 CREATE_TREE_NODE_CLASS(modify_expr, binary_expr);
3504 
3509 CREATE_TREE_NODE_CLASS(modop_expr, expr_node);
3510 
3516 
3522 CREATE_TREE_NODE_CLASS(mult_highpart_expr, binary_expr);
3523 
3529 struct namespace_decl : public decl_node
3530 {
3532  explicit namespace_decl(unsigned int i) : decl_node(i)
3533  {
3534  }
3535 
3536  /*decl_node fields are in the parent class*/
3537 
3540 
3543 
3544 
3546 
3547 
3551  void visit(tree_node_visitor* const v) const override;
3552 
3554  enum
3555  {
3557  GETID(dcls)
3558  };
3559 };
3560 
3567 
3572 CREATE_TREE_NODE_CLASS(negate_expr, unary_expr);
3573 
3578 
3583 CREATE_TREE_NODE_CLASS(non_lvalue_expr, unary_expr);
3584 
3590 
3603 CREATE_TREE_NODE_CLASS(obj_type_ref, ternary_expr);
3604 
3610 CREATE_TREE_NODE_CLASS(offset_type, type_node);
3611 
3616 CREATE_TREE_NODE_CLASS(ordered_expr, binary_expr);
3617 
3621 struct overload : public tree_node
3622 {
3624  explicit overload(unsigned int i) : tree_node(i)
3625  {
3626  }
3627 
3630 
3633 
3636 
3637 
3639 
3640 
3644  void visit(tree_node_visitor* const v) const override;
3645 
3647  enum
3648  {
3650  GETID(crnt),
3651  GETID(chan)
3652  };
3653 };
3654 
3660 struct parm_decl : public decl_node
3661 {
3663  explicit parm_decl(unsigned int i);
3664 
3665  /*decl_node fields are in the parent class: decl_node*/
3666 
3673 
3679 
3684  unsigned int algn;
3685 
3690  int used;
3691 
3697 
3703 
3708 
3710  RangeRef range;
3711 
3714 
3715 
3717 
3718 
3722  void visit(tree_node_visitor* const v) const override;
3723 
3725  enum
3726  {
3728  GETID(argt),
3729  GETID(size),
3730  GETID(smt_ann)
3731  };
3732 };
3733 
3742 struct gimple_phi : public gimple_node
3743 {
3744  public:
3745  friend class tree_manager;
3746  friend class string_cst_fix;
3747  friend class parm2ssa;
3748 
3750  using DefEdge = std::pair<tree_nodeRef, unsigned int>;
3751 
3753  using DefEdgeList = std::list<DefEdge>;
3754 
3755  private:
3760 
3763 
3764  public:
3769  explicit gimple_phi(unsigned int i);
3770 
3773 
3776 
3781  const DefEdgeList& CGetDefEdgesList() const;
3782 
3789  void RemoveDefEdge(const tree_managerRef& TM, const DefEdge& to_be_removed);
3790 
3797  void AddDefEdge(const tree_managerRef& TM, const DefEdge& def_edge);
3798 
3805  void ReplaceDefEdge(const tree_managerRef& TM, const DefEdge& old_def_edge, const DefEdge& new_def_edge);
3806 
3813  void SetDefEdgeList(const tree_managerRef& TM, DefEdgeList new_list_of_def_edge);
3814 
3817 
3818 
3820 
3821 
3825  void visit(tree_node_visitor* const v) const override;
3826 
3828  enum
3829  {
3831  GETID(res),
3832  GETID(list_of_def_edge)
3833  };
3834 
3838  void SetSSAUsesComputed();
3839 };
3840 
3847 {
3849  explicit gimple_predict(unsigned int index);
3850 
3853 
3854 
3856 
3857 
3861  void visit(tree_node_visitor* const v) const override;
3862 
3864  enum
3865  {
3867  };
3868 };
3869 
3877 CREATE_TREE_NODE_CLASS(placeholder_expr, expr_node);
3878 
3884 
3889 CREATE_TREE_NODE_CLASS(pointer_plus_expr, binary_expr);
3890 
3896 struct pointer_type : public type_node
3897 {
3899  explicit pointer_type(unsigned int i) : type_node(i)
3900  {
3901  }
3902 
3903  /*type_node fields are in the parent class*/
3904 
3910 
3913 
3914 
3916 
3917 
3921  void visit(tree_node_visitor* const v) const override;
3922 
3924  enum
3925  {
3927  GETID(ptd)
3928  };
3929 };
3930 
3936 CREATE_TREE_NODE_CLASS(postdecrement_expr, binary_expr);
3937 
3943 CREATE_TREE_NODE_CLASS(postincrement_expr, binary_expr);
3944 
3950 CREATE_TREE_NODE_CLASS(predecrement_expr, binary_expr);
3951 
3957 CREATE_TREE_NODE_CLASS(preincrement_expr, binary_expr);
3958 
3964 CREATE_TREE_NODE_CLASS(qual_union_type, type_node);
3965 
3970 CREATE_TREE_NODE_CLASS(range_expr, binary_expr);
3971 
3976 CREATE_TREE_NODE_CLASS(paren_expr, unary_expr);
3977 
3983 
3990 struct real_cst : public cst_node
3991 {
3993  explicit real_cst(unsigned int i) : cst_node(i), overflow_flag(false)
3994  {
3995  }
3996 
4002 
4004  std::string valr;
4005 
4007  std::string valx;
4008 
4011 
4012 
4014 
4015 
4019  void visit(tree_node_visitor* const v) const override;
4020 
4022  enum
4023  {
4025  };
4026 };
4027 
4032 CREATE_TREE_NODE_CLASS(realpart_expr, unary_expr);
4033 
4039 struct real_type : public type_node
4040 {
4042  explicit real_type(unsigned int i) : type_node(i), prec(0)
4043  {
4044  }
4045 
4046  /*type_node fields are in the parent class*/
4047 
4052  unsigned int prec;
4053 
4056 
4057 
4059 
4060 
4064  void visit(tree_node_visitor* const v) const override;
4065 
4067  enum
4068  {
4070  };
4071 };
4072 
4078 struct record_type : public type_node
4079 {
4081  explicit record_type(unsigned int i) : type_node(i), spec_flag(false), ptrmem_flag(false), struct_flag(false)
4082  {
4083  }
4084 
4090  std::vector<tree_nodeRef> list_of_flds;
4091 
4096  std::vector<tree_nodeRef> list_of_fncs;
4097 
4100 
4103 
4110 
4113 
4116 
4119 
4122 
4125 
4131 
4137 
4142  void add_flds(const tree_nodeRef& a)
4143  {
4144  list_of_flds.push_back(a);
4145  }
4146 
4151  void add_fncs(const tree_nodeRef& a)
4152  {
4153  list_of_fncs.push_back(a);
4154  }
4155 
4161  tree_nodeRef get_field(integer_cst_t offset);
4162 
4167  std::string get_maybe_name() const;
4168 
4171 
4172 
4174 
4175 
4179  void visit(tree_node_visitor* const v) const override;
4180 
4182  enum
4183  {
4185  GETID(vfld),
4186  GETID(list_of_flds),
4187  GETID(list_of_fncs),
4188  GETID(ptd),
4189  GETID(cls),
4190  GETID(bfld),
4191  GETID(binf),
4192  GETID(tmpl_parms),
4193  GETID(tmpl_args)
4194  };
4195 };
4196 
4205 CREATE_TREE_NODE_CLASS(reduc_max_expr, unary_expr);
4206 CREATE_TREE_NODE_CLASS(reduc_min_expr, unary_expr);
4207 CREATE_TREE_NODE_CLASS(reduc_plus_expr, unary_expr);
4208 
4213 CREATE_TREE_NODE_CLASS(reference_expr, unary_expr);
4214 
4220 struct reference_type : public type_node
4221 {
4223  explicit reference_type(unsigned int i) : type_node(i)
4224  {
4225  }
4226 
4227  /*type_node fields are in the parent class*/
4228 
4234 
4237 
4238 
4240 
4241 
4245  void visit(tree_node_visitor* const v) const override;
4246 
4248  enum
4249  {
4251  GETID(refd)
4252  };
4253 };
4254 
4259 CREATE_TREE_NODE_CLASS(reinterpret_cast_expr, unary_expr);
4260 
4266 struct result_decl : public decl_node
4267 {
4269  explicit result_decl(unsigned int i) : decl_node(i), algn(0)
4270  {
4271  }
4272 
4273  /*decl_node fields are in the parent class*/
4274 
4280 
4286 
4291  unsigned int algn;
4292 
4297 
4300 
4301 
4303 
4304 
4308  void visit(tree_node_visitor* const v) const override;
4309 
4311  enum
4312  {
4314  GETID(init),
4315  GETID(size),
4316  GETID(smt_ann)
4317  };
4318 };
4319 
4320 struct gimple_resx : public gimple_node
4321 {
4323  explicit gimple_resx(unsigned int i) : gimple_node(i)
4324  {
4325  }
4326 
4329 
4330 
4332 
4333 
4337  void visit(tree_node_visitor* const v) const override;
4338 
4340  enum
4341  {
4343  };
4344 };
4345 
4355 {
4357  explicit gimple_return(unsigned int i) : gimple_node(i)
4358  {
4359  }
4360 
4363 
4366 
4367 
4369 
4370 
4374  void visit(tree_node_visitor* const v) const override;
4375 
4377  enum
4378  {
4380  GETID(op)
4381  };
4382 };
4383 
4387 struct return_stmt : public tree_node
4388 {
4390  explicit return_stmt(unsigned int i) : tree_node(i), line(-1)
4391  {
4392  }
4393 
4395  int line;
4396 
4399 
4402 
4403 
4405 
4406 
4410  void visit(tree_node_visitor* const v) const override;
4411 
4413  enum
4414  {
4416  GETID(expr)
4417  };
4418 };
4419 
4424 CREATE_TREE_NODE_CLASS(round_div_expr, binary_expr);
4425 
4430 CREATE_TREE_NODE_CLASS(round_mod_expr, binary_expr);
4431 
4439 CREATE_TREE_NODE_CLASS(rrotate_expr, binary_expr);
4440 
4448 CREATE_TREE_NODE_CLASS(rshift_expr, binary_expr);
4449 
4457 
4463 struct scope_ref : public expr_node
4464 {
4466  explicit scope_ref(unsigned int i) : expr_node(i)
4467  {
4468  }
4469 
4472 
4475 
4478 
4479 
4481 
4482 
4486  void visit(tree_node_visitor* const v) const override;
4487 
4489  enum
4490  {
4492  GETID(op0),
4493  GETID(op1)
4494  };
4495 };
4496 
4501 CREATE_TREE_NODE_CLASS(set_le_expr, binary_expr);
4502 
4509 
4514 CREATE_TREE_NODE_CLASS(sizeof_expr, unary_expr);
4515 
4523 struct ssa_name : public tree_node
4524 {
4525  private:
4530 
4534 
4535  public:
4537  explicit ssa_name(unsigned int i);
4538 
4541 
4544 
4547  unsigned int vers;
4548 
4550  unsigned int orig_vers;
4551 
4554 
4557 
4566 
4571  void AddUseStmt(const tree_nodeRef& use_stmt);
4572 
4577  const TreeNodeMap<size_t>& CGetUseStmts() const;
4578 
4583  size_t CGetNumberUses() const;
4584 
4589  void RemoveUse(const tree_nodeRef& use_stmt);
4590 
4593 
4596 
4598  std::string bit_values;
4599 
4601  RangeRef range;
4602 
4605 
4610  void SetDefStmt(const tree_nodeRef& def);
4611 
4616  void AddDefStmt(const tree_nodeRef& def);
4617 
4620 
4621 
4623 
4624 
4628  void visit(tree_node_visitor* const v) const override;
4629 
4634  const tree_nodeRef CGetDefStmt() const;
4635 
4640  const TreeNodeSet CGetDefStmts() const;
4641 
4643  enum
4644  {
4646  GETID(type),
4647  GETID(var),
4648  GETID(use_stmts),
4649  GETID(def_stmts),
4650  GETID(min),
4651  GETID(max),
4652  GETID(use_set)
4653  };
4654 };
4655 
4662 struct statement_list : public tree_node
4663 {
4665  explicit statement_list(unsigned int i) : tree_node(i)
4666  {
4667  }
4668 
4670  std::list<tree_nodeRef> list_of_stmt;
4671 
4673  std::map<unsigned int, blocRef> list_of_bloc;
4674 
4679  void add_bloc(const blocRef& a);
4680 
4685  void add_stmt(const tree_nodeRef& a)
4686  {
4687  list_of_stmt.push_back(a);
4688  }
4689 
4692 
4693 
4695 
4696 
4700  void visit(tree_node_visitor* const v) const override;
4701 
4703  enum
4704  {
4706  GETID(list_of_stmt),
4707  GETID(list_of_bloc)
4708  };
4709 };
4710 
4716 CREATE_TREE_NODE_CLASS(static_cast_expr, unary_expr);
4717 
4724 struct string_cst : public cst_node
4725 {
4727  explicit string_cst(unsigned int i) : cst_node(i), lngt(-1)
4728  {
4729  }
4730 
4732  std::string strg;
4733 
4735  int lngt;
4736 
4739 
4740 
4742 
4743 
4747  void visit(tree_node_visitor* const v) const override;
4748 
4750  enum
4751  {
4753  };
4754 };
4755 
4774 {
4776  explicit gimple_switch(unsigned int i) : gimple_node(i)
4777  {
4778  }
4779 
4782 
4785 
4788 
4789 
4791 
4792 
4796  void visit(tree_node_visitor* const v) const override;
4797 
4799  enum
4800  {
4802  GETID(op0),
4803  GETID(op1)
4804  };
4805 };
4806 
4815 struct target_expr : public expr_node
4816 {
4817  explicit target_expr(unsigned int i) : expr_node(i)
4818  {
4819  }
4820 
4823 
4826 
4829 
4832 
4833 
4835 
4836 
4840  void visit(tree_node_visitor* const v) const override;
4841 
4843  enum
4844  {
4846  GETID(decl),
4847  GETID(init),
4848  GETID(clnp)
4849  };
4850 };
4866 {
4868  explicit target_mem_ref(unsigned int i) : WeightedNode(i)
4869  {
4870  }
4871 
4874 
4877 
4880 
4883 
4886 
4889 
4892 
4895 
4898 
4899 
4901 
4902 
4906  void visit(tree_node_visitor* const v) const override;
4907 
4909  enum
4910  {
4912  GETID(type),
4913  GETID(symbol),
4914  GETID(base),
4915  GETID(idx),
4916  GETID(step),
4917  GETID(offset),
4918  GETID(orig),
4919  GETID(tag)
4920  };
4921 };
4922 
4939 {
4941  explicit target_mem_ref461(unsigned int i) : WeightedNode(i)
4942  {
4943  }
4944 
4947 
4950 
4953 
4956 
4959 
4962 
4965 
4966 
4968 
4969 
4973  void visit(tree_node_visitor* const v) const override;
4974 
4976  enum
4977  {
4979  GETID(type),
4980  GETID(base),
4981  GETID(idx),
4982  GETID(idx2),
4983  GETID(step),
4984  GETID(offset)
4985  };
4986 };
4987 
4993 struct template_decl : public decl_node
4994 {
4996  explicit template_decl(unsigned int i) : decl_node(i)
4997  {
4998  }
4999 
5000  /*decl_node fields are in the parent class: decl_node*/
5001 
5004 
5007 
5010 
5013 
5016 
5017 
5019 
5020 
5024  void visit(tree_node_visitor* const v) const override;
5025 
5027  enum
5028  {
5030  GETID(rslt),
5031  GETID(inst),
5032  GETID(base),
5033  GETID(spcs),
5034  GETID(prms)
5035  };
5036 };
5037 
5042 
5043 /* Index into a template parameter list. The TEMPLATE_PARM_IDX gives
5044  the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL
5045  gives the level (from 1) of the parameter.
5046 
5047  Here's an example:
5048 
5049  template <class T> // Index 0, Level 1.
5050  struct S
5051  {
5052  template <class U, // Index 0, Level 2.
5053  class V> // Index 1, Level 2.
5054  void f();
5055  };
5056 
5057  The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended
5058  from this one. The first descendant will have the same IDX, but
5059  its LEVEL will be one less. The TREE_CHAIN field is used to chain
5060  together the descendants. The TEMPLATE_PARM_DECL is the
5061  declaration of this parameter, either a TYPE_DECL or CONST_DECL.
5062  The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant
5063  parent, i.e., the LEVEL that the parameter originally had when it
5064  was declared. For example, if we instantiate S<int>, we will have:
5065 
5066  struct S<int>
5067  {
5068  template <class U, // Index 0, Level 1, Orig Level 2
5069  class V> // Index 1, Level 1, Orig Level 2
5070  void f();
5071  };
5072 
5073  The LEVEL is the level of the parameter when we are worrying about
5074  the types of things; the ORIG_LEVEL is the level when we are
5075  worrying about instantiating things. */
5077 {
5082  int idx;
5083  int level;
5085 
5087  explicit template_parm_index(unsigned int i)
5088  : tree_node(i), constant_flag(false), readonly_flag(false), idx(0), level(0), orig_level(0)
5089  {
5090  }
5091 
5094 
5095 
5097 
5098 
5102  void visit(tree_node_visitor* const v) const override;
5103 
5105  enum
5106  {
5108  GETID(type),
5109  GETID(decl)
5110  };
5111 };
5112 
5118 CREATE_TREE_NODE_CLASS(template_type_parm, type_node);
5119 
5140 {
5142  explicit type_argument_pack(unsigned int i) : type_node(i)
5143  {
5144  }
5145 
5148 
5151 
5152 
5154 
5155 
5159  void visit(tree_node_visitor* const v) const override;
5160 
5162  enum
5163  {
5165  GETID(arg)
5166  };
5167 };
5168 
5169 /* Represents an argument pack of values, which can be used either for
5170  non-type template arguments or function call arguments.
5171 
5172  NONTYPE_ARGUMENT_PACK plays precisely the same role as
5173  TYPE_ARGUMENT_PACK, but will be used for packing non-type template
5174  arguments (e.g., "int... Dimensions") or function arguments ("const
5175  Args&... args"). */
5176 
5178 {
5180  explicit nontype_argument_pack(unsigned int i) : expr_node(i)
5181  {
5182  }
5183 
5186 
5189 
5190 
5192 
5193 
5197  void visit(tree_node_visitor* const v) const override;
5198 
5200  enum
5201  {
5203  GETID(arg)
5204  };
5205 };
5206 
5211 CREATE_TREE_NODE_CLASS(ternary_plus_expr, ternary_expr);
5212 
5217 CREATE_TREE_NODE_CLASS(ternary_pm_expr, ternary_expr);
5218 
5223 CREATE_TREE_NODE_CLASS(ternary_mp_expr, ternary_expr);
5224 
5229 CREATE_TREE_NODE_CLASS(ternary_mm_expr, ternary_expr);
5230 
5234 CREATE_TREE_NODE_CLASS(throw_expr, unary_expr);
5235 
5239 CREATE_TREE_NODE_CLASS(trait_expr, tree_node);
5240 
5246 CREATE_TREE_NODE_CLASS(translation_unit_decl, decl_node);
5247 
5255 struct tree_list : public WeightedNode
5256 {
5258  explicit tree_list(unsigned int i) : WeightedNode(i)
5259  {
5260  }
5261 
5264 
5267 
5270 
5273 
5274 
5276 
5277 
5281  void visit(tree_node_visitor* const v) const override;
5282 
5284  enum
5285  {
5287  GETID(purp),
5288  GETID(valu),
5289  GETID(chan)
5290  };
5291 };
5292 
5299 struct tree_vec : public tree_node
5300 {
5302  explicit tree_vec(unsigned int i) : tree_node(i), lngt(0)
5303  {
5304  }
5305 
5307  size_t lngt;
5308 
5310  std::vector<tree_nodeRef> list_of_op;
5311 
5316  void add_op(const tree_nodeRef& a)
5317  {
5318  list_of_op.push_back(a);
5319  }
5320 
5322  size_t get_number_of_op() const
5323  {
5324  return list_of_op.size();
5325  }
5326 
5328  tree_nodeRef get_op(size_t n) const
5329  {
5330  return list_of_op[n];
5331  }
5332 
5335 
5336 
5338 
5339 
5343  void visit(tree_node_visitor* const v) const override;
5344 
5346  enum
5347  {
5349  GETID(list_of_op)
5350  };
5351 };
5352 
5357 CREATE_TREE_NODE_CLASS(trunc_div_expr, binary_expr);
5358 
5363 CREATE_TREE_NODE_CLASS(trunc_mod_expr, binary_expr);
5364 
5370 CREATE_TREE_NODE_CLASS(truth_and_expr, binary_expr);
5371 
5377 CREATE_TREE_NODE_CLASS(truth_andif_expr, binary_expr);
5378 
5384 CREATE_TREE_NODE_CLASS(truth_not_expr, unary_expr);
5385 
5390 CREATE_TREE_NODE_CLASS(truth_or_expr, binary_expr);
5391 
5397 CREATE_TREE_NODE_CLASS(truth_orif_expr, binary_expr);
5398 
5404 CREATE_TREE_NODE_CLASS(truth_xor_expr, binary_expr);
5405 
5409 struct try_block : public tree_node
5410 {
5412  explicit try_block(unsigned int i) : tree_node(i), line(-1)
5413  {
5414  }
5415 
5417  int line;
5418 
5421 
5424 
5427 
5430 
5431 
5433 
5434 
5438  void visit(tree_node_visitor* const v) const override;
5439 
5441  enum
5442  {
5444  GETID(body),
5445  GETID(hdlr),
5446  GETID(next)
5447  };
5448 };
5449 
5455 CREATE_TREE_NODE_CLASS(try_catch_expr, binary_expr);
5456 
5463 CREATE_TREE_NODE_CLASS(try_finally, binary_expr);
5464 
5470 struct type_decl : public decl_node
5471 {
5473  explicit type_decl(unsigned int i) : decl_node(i)
5474  {
5475  }
5476 
5482 
5488 
5491 
5492 
5494 
5495 
5499  void visit(tree_node_visitor* const v) const override;
5500 
5502  enum
5503  {
5505  GETID(tmpl_parms),
5506  GETID(tmpl_args)
5507  };
5508 };
5509 
5516 
5522 
5528 
5534 
5540 struct union_type : public type_node
5541 {
5543  explicit union_type(unsigned int i) : type_node(i)
5544  {
5545  }
5546 
5547  /*type_node fields are in the parent class*/
5548 
5554  std::vector<tree_nodeRef> list_of_flds;
5555 
5560  std::vector<tree_nodeRef> list_of_fncs;
5561 
5568 
5573  void add_flds(const tree_nodeRef& a)
5574  {
5575  list_of_flds.push_back(a);
5576  }
5577 
5582  void add_fncs(const tree_nodeRef& a)
5583  {
5584  list_of_fncs.push_back(a);
5585  }
5586 
5589 
5590 
5592 
5593 
5597  void visit(tree_node_visitor* const v) const override;
5598 
5600  enum
5601  {
5603  GETID(list_of_flds),
5604  GETID(list_of_fncs),
5605  GETID(binf)
5606  };
5607 };
5608 
5614 
5620 
5625 CREATE_TREE_NODE_CLASS(unordered_expr, binary_expr);
5626 
5637 CREATE_TREE_NODE_CLASS(unsave_expr, unary_expr);
5638 
5646 
5651 CREATE_TREE_NODE_CLASS(va_arg_expr, unary_expr);
5652 
5659 struct var_decl : public decl_node, public attr
5660 {
5662  explicit var_decl(unsigned int i);
5663 
5664  /*decl_node fields are in the parent class: decl_node*/
5665 
5673 
5676 
5679 
5682 
5687 
5691 
5692  /*attr fields are in the parent class: attr*/
5693 
5699 
5705 
5710  unsigned int algn;
5711 
5716  int used;
5717 
5723 
5729 
5732  std::string bit_values;
5733 
5738 
5741 
5744 
5747 
5750 
5751 
5753 
5754 
5758  void visit(tree_node_visitor* const v) const override;
5759 
5761  enum
5762  {
5764  GETID(attr),
5765  GETID(init),
5766  GETID(size),
5767  GETID(smt_ann)
5768  };
5769 };
5770 
5782 CREATE_TREE_NODE_CLASS(dot_prod_expr, ternary_expr);
5783 
5795 CREATE_TREE_NODE_CLASS(vec_cond_expr, ternary_expr);
5796 
5810 CREATE_TREE_NODE_CLASS(vec_perm_expr, ternary_expr);
5811 
5817 CREATE_TREE_NODE_CLASS(vec_lshift_expr, binary_expr);
5818 CREATE_TREE_NODE_CLASS(vec_rshift_expr, binary_expr);
5819 
5827 CREATE_TREE_NODE_CLASS(widen_mult_hi_expr, binary_expr);
5828 CREATE_TREE_NODE_CLASS(widen_mult_lo_expr, binary_expr);
5829 
5836 CREATE_TREE_NODE_CLASS(vec_unpack_hi_expr, unary_expr);
5837 CREATE_TREE_NODE_CLASS(vec_unpack_lo_expr, unary_expr);
5838 
5845 CREATE_TREE_NODE_CLASS(vec_unpack_float_hi_expr, unary_expr);
5846 CREATE_TREE_NODE_CLASS(vec_unpack_float_lo_expr, unary_expr);
5847 
5854 CREATE_TREE_NODE_CLASS(vec_pack_trunc_expr, binary_expr);
5855 CREATE_TREE_NODE_CLASS(vec_pack_sat_expr, binary_expr);
5856 
5863 CREATE_TREE_NODE_CLASS(vec_pack_fix_trunc_expr, binary_expr);
5864 
5868 CREATE_TREE_NODE_CLASS(vec_extracteven_expr, binary_expr);
5869 CREATE_TREE_NODE_CLASS(vec_extractodd_expr, binary_expr);
5870 
5874 CREATE_TREE_NODE_CLASS(vec_interleavehigh_expr, binary_expr);
5875 CREATE_TREE_NODE_CLASS(vec_interleavelow_expr, binary_expr);
5876 
5880 CREATE_TREE_NODE_CLASS(vec_new_expr, expr_node);
5881 
5888 struct vector_cst : public cst_node
5889 {
5891  explicit vector_cst(unsigned int i) : cst_node(i)
5892  {
5893  }
5894 
5896  std::vector<tree_nodeRef> list_of_valu;
5897 
5902  void add_valu(const tree_nodeRef& a)
5903  {
5904  list_of_valu.push_back(a);
5905  }
5906 
5909 
5910 
5912 
5913 
5917  void visit(tree_node_visitor* const v) const override;
5918 
5920  enum
5921  {
5923  GETID(list_of_valu)
5924  };
5925 };
5926 
5930 CREATE_TREE_NODE_CLASS(void_cst, cst_node);
5931 
5938 struct vector_type : public type_node
5939 {
5941  explicit vector_type(unsigned int i) : type_node(i)
5942  {
5943  }
5944 
5947 
5950 
5951 
5953 
5954 
5958  void visit(tree_node_visitor* const v) const override;
5959 
5961  enum
5962  {
5964  GETID(elts)
5965  };
5966 };
5967 
5978 CREATE_TREE_NODE_CLASS(view_convert_expr, unary_expr);
5979 
5985 CREATE_TREE_NODE_CLASS(void_type, type_node);
5986 
5995 
6007 CREATE_TREE_NODE_CLASS(with_cleanup_expr, ternary_expr);
6008 
6016 CREATE_TREE_NODE_CLASS(with_size_expr, binary_expr);
6017 
6027 CREATE_TREE_NODE_CLASS(widen_sum_expr, binary_expr);
6028 
6036 CREATE_TREE_NODE_CLASS(widen_mult_expr, binary_expr);
6037 
6042 struct lut_expr : public expr_node
6043 {
6045  explicit lut_expr(unsigned int i) : expr_node(i)
6046  {
6047  }
6048 
6051 
6054 
6057 
6060 
6063 
6066 
6069 
6072 
6075 
6078 
6079 
6081 
6082 
6086  void visit(tree_node_visitor* const v) const override;
6087 
6089  enum
6090  {
6092  GETID(op0),
6093  GETID(op1),
6094  GETID(op2),
6095  GETID(op3),
6096  GETID(op4),
6097  GETID(op5),
6098  GETID(op6),
6099  GETID(op7),
6100  GETID(op8)
6101  };
6102 };
6103 
6110 CREATE_TREE_NODE_CLASS(extract_bit_expr, binary_expr);
6111 
6116 CREATE_TREE_NODE_CLASS(sat_plus_expr, binary_expr);
6117 
6122 CREATE_TREE_NODE_CLASS(sat_minus_expr, binary_expr);
6123 
6129 
6135 
6140 CREATE_TREE_NODE_CLASS(extractvalue_expr, binary_expr);
6141 
6146 CREATE_TREE_NODE_CLASS(insertvalue_expr, ternary_expr);
6147 
6152 CREATE_TREE_NODE_CLASS(extractelement_expr, binary_expr);
6153 
6158 CREATE_TREE_NODE_CLASS(insertelement_expr, ternary_expr);
6159 
6165 
6166 #endif
struct definition of the type_decl tree node.
Definition: tree_node.hpp:5470
gimple_switch(unsigned int i)
constructor
Definition: tree_node.hpp:4776
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
return_stmt(unsigned int i)
constructor
Definition: tree_node.hpp:4390
This struct specifies a point-to solution.
Definition: tree_node.hpp:1001
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
pointer_type(unsigned int i)
constructor
Definition: tree_node.hpp:3899
binfo(unsigned int i)
constructor
Definition: tree_node.hpp:1716
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
REF_FORWARD_DECL(bloc)
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
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
lut_expr(unsigned int i)
constructor
Definition: tree_node.hpp:6045
() label_decl()() modop_expr() new_expr() placeholder_expr()() boolean_type() CharType() nullptr_type() lang_type() offset_type() qual_union_type() set_type() template_type_parm() typename_type(void_type)) void tree_node
Definition: tree_node.cpp:168
This struct specifies the field bloc (basic block).
enumeral_type(unsigned int i)
constructor
Definition: tree_node.hpp:2516
unsigned int prec
prec field is the number of bits used by this type (macro TYPE_PRECISION)
Definition: tree_node.hpp:3292
() label_decl()() modop_expr() new_expr() placeholder_expr() template_id_expr(vec_new_expr)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
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
RangeRef range
Range information about numerical values of the SSA variable.
Definition: tree_node.hpp:4601
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 get_op(size_t n) const
return the n-th (from 0 to size() -1) operand of tree_vec
Definition: tree_node.hpp:5328
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
tree_nodeRef decl
Definition: tree_node.hpp:5079
std::unordered_set< _Value, _Hash, _Pred, _Alloc > UnorderedSetStd
Autoheader include.
Definition: custom_set.hpp:56
cast_expr(unsigned int i)
constructor
Definition: tree_node.hpp:2060
quaternary_expr(unsigned int i)
constructor
Definition: tree_node.hpp:1279
template_decl(unsigned int i)
constructor
Definition: tree_node.hpp:4996
cst_node(unsigned int i)
constructor
Definition: tree_node.hpp:1434
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
size_t get_number_of_op() const
returns the number of operands
Definition: tree_node.hpp:5322
void add(const TreeVocabularyTokenTypes_TokenEnum a)
Add an attribute to list of attribute.
Definition: tree_node.hpp:788
void add_fncs(const tree_nodeRef &a)
Add a methods_decl to list of fncs.
Definition: tree_node.hpp:5582
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
void add_flds(const tree_nodeRef &a)
Add a field_decl to list of flds.
Definition: tree_node.hpp:5573
int ctor
operand count
Definition: tree_node.hpp:1925
namespace_decl(unsigned int i)
constructor
Definition: tree_node.hpp:3532
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
void add_valu(const tree_nodeRef &a)
Add a value to list of value.
Definition: tree_node.hpp:5902
type_pack_expansion(unsigned int i)
constructor
Definition: tree_node.hpp:2144
tree_nodeRef op1
The second operand of the binary expression.
Definition: tree_node.hpp:3024
tree_nodeRef get_base(size_t i) const
return the i-th element of baseinfo
Definition: tree_node.hpp:1736
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
char base
This version is stamped on May 10, 2016.
Definition: nussinov.c:24
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
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
CONSTREF_FORWARD_DECL(tree_node)
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
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
DefEdgeList list_of_def_edge
store the list pairs: <def, edge>.
Definition: tree_node.hpp:3759
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
srcp()
constructor
Definition: tree_node.hpp:855
This class manages the tree structures extracted from the raw file.
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
TreeNodeSet def_stmts
in case ssa_name is not volatile the statement which defines it; statements could be more than one be...
Definition: tree_node.hpp:4533
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
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
std::list< DefEdge > DefEdgeList
The type of the def edge list.
Definition: tree_node.hpp:3753
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
Definition: Range.hpp:63
exceptions managed by PandA
overload(unsigned int i)
constructor
Definition: tree_node.hpp:3624
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
scope_ref(unsigned int i)
constructor
Definition: tree_node.hpp:4466
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
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
tree_nodeRef base
BASE register.
Definition: tree_node.hpp:4949
ternary_expr(unsigned int i)
constructor
Definition: tree_node.hpp:1242
tree_nodeRef op
PACK_EXPANSION_PATTERN.
Definition: tree_node.hpp:2194
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
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
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:2818
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
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
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
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
void add_stmt(const tree_nodeRef &a)
Add a value to list of stmt.
Definition: tree_node.hpp:4685
struct definition of the label_decl tree node.
Definition: tree_node.hpp:3529
A set of const tree node.
Definition: tree_node.hpp:267
union_type(unsigned int i)
constructor
Definition: tree_node.hpp:5543
vector_cst(unsigned int i)
constructor
Definition: tree_node.hpp:5891
void line(int x1, int y1, int x2, int y2, unsigned int color)
Definition: main.c:110
gimple_nop(unsigned int i)
constructor
Definition: tree_node.hpp:3061
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
gimple_resx(unsigned int i)
constructor
Definition: tree_node.hpp:4323
tree_nodeRef op3
The fourth operand of the Quaternary expression.
Definition: tree_node.hpp:1293
void add_valu(const tree_nodeRef &valu)
Add a pair <null, value> to the list of idx_val.
Definition: tree_node.hpp:2461
std::string ToString(ActorGraphBackend_Type actor_graph_backend_type)
Header include.
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
integer_cst(unsigned int i)
constructor
Definition: tree_node.hpp:3247
Pre-analysis step.
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
This struct specifies the gimple_phi node.
Definition: tree_node.hpp:3742
() label_decl() using_decl(translation_unit_decl)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
size_t get_baseinfo_size() const
return the size of baseinfo vector
Definition: tree_node.hpp:1742
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
int lngt
lngt is the TREE_STRING_LENGTH.
Definition: tree_node.hpp:4735
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
bool unsigned_flag
unsigned means an unsigned type (macro TYPE_UNSIGNED)
Definition: tree_node.hpp:3301
void add_alias(const tree_nodeRef a)
Add an alias to the list of aliases.
Definition: tree_node.hpp:1409
tree_nodeRef init
it is the initializer for the target
Definition: tree_node.hpp:4825
std::set< Key, Compare, Alloc > OrderedSetStd
Definition: custom_set.hpp:59
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
object visitor template.
Definition: visitor.hpp:106
unsigned int bb_index
The basic block to which this gimple_node belongs.
Definition: tree_node.hpp:1134
TreeNodeMap< size_t > use_stmts
The uses of this SSA: it is a map since the same SSA can be used multiple times in the same statement...
Definition: tree_node.hpp:4529
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
gimple_goto(unsigned int i)
constructor
Definition: tree_node.hpp:3092
#define GET_KIND(meth)
Macro which define a function that return the parameter as a enum kind.
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
RangeRef range
Range information about bounds of the function parameter (valid for real_type too) ...
Definition: tree_node.hpp:3710
static const uint32_t k[]
Definition: sha-256.c:22
This C++ header file contains common macros for the tree structure.
This struct specifies super class for constant nodes.
Definition: tree_node.hpp:1431
#define GET_KIND_TEXT(meth)
Macro which defines the get_kind_text function that returns the parameter as a string.
Definition: tree_node.hpp:87
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
bool escaped
True if the points to includes the local escaped solution.
Definition: tree_node.hpp:1007
real_type(unsigned int i)
constructor
Definition: tree_node.hpp:4042
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
gimple_label(unsigned int i)
constructor
Definition: tree_node.hpp:3346
bool C_flag
is true when the declaration has the C attribute
Definition: tree_node.hpp:939
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
decl_node
Definition: tree_node.cpp:163
tree_nodeRef max
max: tree-dump.c use the macro TYPE_MAX_VALUE
Definition: tree_node.hpp:2538
const unsigned int index
Represent the index read from the raw file and the index-1 of the vector of tree_node associated to t...
Definition: tree_node.hpp:146
Low-level memory addressing.
Definition: tree_node.hpp:4938
memory_tag(unsigned int i)
constructor
Definition: tree_node.hpp:1396
bool reverse_restrict_flag
True if parameters are not alias after its invocation.
Definition: tree_node.hpp:2777
std::string operation
The operation.
Definition: tree_node.hpp:1137
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
#define index(x, y)
Definition: Keccak.c:74
kind
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
std::pair< tree_nodeRef, unsigned int > DefEdge
The type of the def edge.
Definition: tree_node.hpp:3750
void add_op(const tree_nodeRef &a)
Add a value to list of operands.
Definition: tree_node.hpp:5316
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
tree_nodeRef out
out is the operand 1: ASM_OUTPUTS, this represents the outputs for the statement. ...
Definition: tree_node.hpp:1588
integer_type(unsigned int i)
constructor
Definition: tree_node.hpp:3282
Represents an expression that will be expanded into a list of expressions when instantiated with one ...
Definition: tree_node.hpp:2186
tree_nodeRef slot
slot is the slot which was allocated for this expression
Definition: tree_node.hpp:1928
const_decl(unsigned int i)
constructor
Definition: tree_node.hpp:2389
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
type_decl(unsigned int i)
constructor
Definition: tree_node.hpp:5473
string_cst(unsigned int i)
constructor
Definition: tree_node.hpp:4727
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
#define GETID(field)
return the id given a super class or a class member
tree_nodeRef param_packs
PACK_EXPANSION_PARAMETER_PACKS.
Definition: tree_node.hpp:2152
unsigned offset[NUM_VERTICES+1]
Definition: graph.h:3
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
gimple_asm(unsigned int i)
constructor
Definition: tree_node.hpp:1577
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
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
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
A set of tree node.
Definition: tree_node.hpp:294
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
void add_flds(const tree_nodeRef &a)
Add a field_decl to list of flds.
Definition: tree_node.hpp:4142
This struct specifies the block node.
Definition: tree_node.hpp:1820
nontype_argument_pack(unsigned int i)
constructor
Definition: tree_node.hpp:5180
() label_decl()() modop_expr() new_expr() placeholder_expr() type_node
Definition: tree_node.cpp:166
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
TreeVocabularyTokenTypes_TokenEnum
Template definition of refcount.
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
Definition: APInt.hpp:53
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
handler(unsigned int i)
constructor
Definition: tree_node.hpp:3144
void add_vars(const tree_nodeRef &a)
Add a var to list of vars.
Definition: tree_node.hpp:1682
Pre-analysis step.
Definition: parm2ssa.hpp:66
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
field_decl(unsigned int i)
constructor
Definition: tree_node.hpp:2643
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
type_argument_pack(unsigned int i)
constructor
Definition: tree_node.hpp:5142
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
std::map< _Key, _Tp, _Compare, _Alloc > OrderedMapStd
Definition: custom_map.hpp:60
unsigned int vers
vers is the SSA version number of this SSA name.
Definition: tree_node.hpp:4547
binary_expr(unsigned int i)
constructor
Definition: tree_node.hpp:1209
record_type(unsigned int i)
constructor
Definition: tree_node.hpp:4081
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
template_parm_index(unsigned int i)
constructor
Definition: tree_node.hpp:5087
This struct specifies the lut_expr node.
Definition: tree_node.hpp:6042
reference_type(unsigned int i)
constructor
Definition: tree_node.hpp:4223
constructor(unsigned int i)
constructor
Definition: tree_node.hpp:2437
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
tree_nodeRef clnp
it is the cleanup for this node
Definition: tree_node.hpp:4828
void add_fncs(const tree_nodeRef &a)
Add a methods_decl to list of fncs.
Definition: tree_node.hpp:4151
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
tree_list(unsigned int i)
constructor
Definition: tree_node.hpp:5258
int used
used is nonzero if the name is used in its scope (macro TREE_USED)
Definition: tree_node.hpp:5716
gimple_bind(unsigned int i)
constructor
Definition: tree_node.hpp:1667
#define CREATE_TREE_NODE_CLASS(class_name, superclass)
macro to create simple tree classes
Definition: tree_node.hpp:720
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
error_mark(unsigned int i)
constructor
Definition: tree_node.hpp:1465
unsigned int algn
algn field holds the alignment required for the datum, in bits.
Definition: tree_node.hpp:3684
target_expr(unsigned int i)
Definition: tree_node.hpp:4817
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_node(unsigned int i)
Constructor.
Definition: tree_node.hpp:151
bool updated_ssa_uses
True if SSA uses are updated.
Definition: tree_node.hpp:3762
method_type(unsigned int i)
constructor
Definition: tree_node.hpp:3455
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_vec(unsigned int i)
constructor
Definition: tree_node.hpp:5302
tree_nodeRef step
STEP integer constant.
Definition: tree_node.hpp:4885
void add_idx_valu(const tree_nodeRef &idx, const tree_nodeRef &valu)
Add a pair <index value>=""> to the list of idx_val.
Definition: tree_node.hpp:2452
This struct specifies reference to particular overloaded struct method The tree walker structure of t...
Definition: tree_node.hpp:4463
std::unordered_map< T, U, Hash, Eq, Alloc > UnorderedMapStd
Autoheader include.
Definition: custom_map.hpp:56
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 the real_cst node.
Definition: tree_node.hpp:3990
bool artificial
this field is true if the gimple_node was created artificially to handle some specific situations...
Definition: tree_node.hpp:1166
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
real_cst(unsigned int i)
constructor
Definition: tree_node.hpp:3993
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
gimple_cond(unsigned int i)
constructor
Definition: tree_node.hpp:2348
int virt
Is the result of tree_low_cst (THUNK_VIRTUAL_OFFSET (t), 0) for this node.
Definition: tree_node.hpp:2812
complex_cst(unsigned int i)
constructor
Definition: tree_node.hpp:2240
std::ostream & operator<<(std::ostream &OS, const Range &R)
Definition: Range.cpp:2523
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
tree_nodeRef inst
inst field holds the template instantiation vector.
Definition: tree_node.hpp:5006
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
function_type(unsigned int i)
constructor
Definition: tree_node.hpp:2963
expr_pack_expansion(unsigned int i)
constructor
Definition: tree_node.hpp:2189
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_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
refcount< tree_node > tree_nodeRef
RefCount type definition of the tree_node class structure.
Definition: tree_node.hpp:212
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
RangeRef range
Range information about bounds of the function return value (valid for real_type too) ...
Definition: tree_node.hpp:2821
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
tree_nodeRef op1
the vec of CASE_LABEL_EXPRs
Definition: tree_node.hpp:4784
x
Return the smallest n such that 2^n >= _x.
statement_list(unsigned int i)
constructor
Definition: tree_node.hpp:4665
expr_stmt(unsigned int i)
constructor
Definition: tree_node.hpp:2595
std::vector< tree_nodeRef > variables
Set of variables that this pointer may point to.
Definition: tree_node.hpp:1019
This struct specifies a hint for branch prediction.
Definition: tree_node.hpp:3846
block(unsigned int i)
constructor
Definition: tree_node.hpp:1823
void add(std::string a)
Add a string to list of attribute.
Definition: tree_node.hpp:2881
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
array_type(unsigned int i)
constructor
Definition: tree_node.hpp:1523
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
complex_type(unsigned int i)
constructor
Definition: tree_node.hpp:2285
tree_nodeRef op
PACK_EXPANSION_PATTERN.
Definition: tree_node.hpp:2149
case_label_expr(unsigned int i)
constructor
Definition: tree_node.hpp:2014
gimple_return(unsigned int i)
constructor
Definition: tree_node.hpp:4357
expr_node(unsigned int i)
constructor
Definition: tree_node.hpp:976
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
This struct specifies the tree_vec node.
Definition: tree_node.hpp:5299
Visitor/walker design pattern.
unsigned int orig_vers
original SSA version number from GCC
Definition: tree_node.hpp:4550
bool packed_flag
Indicates this field should be bit-packed.
Definition: tree_node.hpp:921
bool keep
when true CSE and Bit Value optimization will not remove from the IR
Definition: tree_node.hpp:1169
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
target_mem_ref(unsigned int i)
constructor
Definition: tree_node.hpp:4868
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
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
A map with key tree_nodeRef.
Definition: tree_helper.hpp:65
tree_nodeRef chan
Is the chain.
Definition: tree_node.hpp:3632
try_block(unsigned int i)
constructor
Definition: tree_node.hpp:5412
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
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
vector_type(unsigned int i)
constructor
Definition: tree_node.hpp:5941
result_decl(unsigned int i)
constructor
Definition: tree_node.hpp:4269
unary_expr(unsigned int i)
constructor
Definition: tree_node.hpp:1180
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
target_mem_ref461(unsigned int i)
constructor
Definition: tree_node.hpp:4941

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