57 #define CHECK_AND_ADD(Tree_Node, visit_index) \ 59 if((Tree_Node) && remap.find(GET_INDEX_NODE(Tree_Node)) == remap.end()) \ 61 SET_VISIT_INDEX(mask, visit_index); \ 62 unsigned int node_id = GET_INDEX_NODE(Tree_Node); \ 63 remap[node_id] = TM->new_tree_node_id(node_id); \ 64 not_yet_remapped.insert(node_id); \ 68 void tree_node_reached::operator()(
const tree_node* obj,
unsigned int&)
73 void tree_node_reached::operator()(
const tree_reindex*,
unsigned int& mask)
79 void tree_node_reached::operator()(
const WeightedNode* obj,
unsigned int& mask)
81 tree_node_mask::operator()(obj, mask);
84 void tree_node_reached::operator()(
const attr* obj,
unsigned int& mask)
86 tree_node_mask::operator()(obj, mask);
89 void tree_node_reached::operator()(
const srcp* obj,
unsigned int& mask)
91 tree_node_mask::operator()(obj, mask);
94 void tree_node_reached::operator()(
const decl_node* obj,
unsigned int& mask)
96 tree_node_mask::operator()(obj, mask);
106 void tree_node_reached::operator()(
const expr_node* obj,
unsigned int& mask)
108 tree_node_mask::operator()(obj, mask);
112 void tree_node_reached::operator()(
const gimple_node* obj,
unsigned int& mask)
114 tree_node_mask::operator()(obj, mask);
117 for(
const auto& vuse : obj->
vuses)
122 for(
const auto& vover : obj->
vovers)
126 for(
const auto& i : obj->
pragmas)
140 void tree_node_reached::operator()(
const unary_expr* obj,
unsigned int& mask)
142 tree_node_mask::operator()(obj, mask);
146 void tree_node_reached::operator()(
const binary_expr* obj,
unsigned int& mask)
148 tree_node_mask::operator()(obj, mask);
153 void tree_node_reached::operator()(
const ternary_expr* obj,
unsigned int& mask)
155 tree_node_mask::operator()(obj, mask);
161 void tree_node_reached::operator()(
const quaternary_expr* obj,
unsigned int& mask)
163 tree_node_mask::operator()(obj, mask);
170 void tree_node_reached::operator()(
const type_node* obj,
unsigned int& mask)
172 tree_node_mask::operator()(obj, mask);
179 void tree_node_reached::operator()(
const memory_tag* obj,
unsigned int& mask)
181 tree_node_mask::operator()(obj, mask);
187 void tree_node_reached::operator()(
const cst_node* obj,
unsigned int& mask)
189 tree_node_mask::operator()(obj, mask);
193 void tree_node_reached::operator()(
const error_mark* obj,
unsigned int& mask)
195 tree_node_mask::operator()(obj, mask);
198 void tree_node_reached::operator()(
const array_type* obj,
unsigned int& mask)
200 tree_node_mask::operator()(obj, mask);
205 void tree_node_reached::operator()(
const gimple_asm* obj,
unsigned int& mask)
207 tree_node_mask::operator()(obj, mask);
213 void tree_node_reached::operator()(
const baselink* obj,
unsigned int& mask)
215 tree_node_mask::operator()(obj, mask);
219 void tree_node_reached::operator()(
const gimple_bind* obj,
unsigned int& mask)
221 tree_node_mask::operator()(obj, mask);
228 void tree_node_reached::operator()(
const binfo* obj,
unsigned int& mask)
230 tree_node_mask::operator()(obj, mask);
237 void tree_node_reached::operator()(
const block* obj,
unsigned int& mask)
239 tree_node_mask::operator()(obj, mask);
242 void tree_node_reached::operator()(
const call_expr* obj,
unsigned int& mask)
244 tree_node_mask::operator()(obj, mask);
246 std::vector<tree_nodeRef>::const_iterator
arg, arg_end = obj->
args.end();
247 for(arg = obj->
args.begin(); arg != arg_end; ++
arg)
251 void tree_node_reached::operator()(
const aggr_init_expr* obj,
unsigned int& mask)
253 tree_node_mask::operator()(obj, mask);
257 void tree_node_reached::operator()(
const gimple_call* obj,
unsigned int& mask)
259 tree_node_mask::operator()(obj, mask);
261 std::vector<tree_nodeRef>::const_iterator
arg, arg_end = obj->
args.end();
262 for(arg = obj->
args.begin(); arg != arg_end; ++
arg)
266 void tree_node_reached::operator()(
const case_label_expr* obj,
unsigned int& mask)
268 tree_node_mask::operator()(obj, mask);
274 void tree_node_reached::operator()(
const cast_expr* obj,
unsigned int& mask)
276 tree_node_mask::operator()(obj, mask);
280 void tree_node_reached::operator()(
const complex_cst* obj,
unsigned int& mask)
282 tree_node_mask::operator()(obj, mask);
287 void tree_node_reached::operator()(
const complex_type* obj,
unsigned int& mask)
289 tree_node_mask::operator()(obj, mask);
292 void tree_node_reached::operator()(
const gimple_cond* obj,
unsigned int& mask)
294 tree_node_mask::operator()(obj, mask);
298 void tree_node_reached::operator()(
const const_decl* obj,
unsigned int& mask)
300 tree_node_mask::operator()(obj, mask);
304 void tree_node_reached::operator()(
const constructor* obj,
unsigned int& mask)
306 tree_node_mask::operator()(obj, mask);
316 void tree_node_reached::operator()(
const enumeral_type* obj,
unsigned int& mask)
318 tree_node_mask::operator()(obj, mask);
324 void tree_node_reached::operator()(
const expr_stmt* obj,
unsigned int& mask)
326 tree_node_mask::operator()(obj, mask);
332 void tree_node_reached::operator()(
const field_decl* obj,
unsigned int& mask)
334 tree_node_mask::operator()(obj, mask);
341 void tree_node_reached::operator()(
const function_decl* obj,
unsigned int& mask)
343 tree_node_mask::operator()(obj, mask);
352 for(
auto i = obj->
list_of_args.begin(); i != vend2; ++i)
359 void tree_node_reached::operator()(
const function_type* obj,
unsigned int& mask)
361 tree_node_mask::operator()(obj, mask);
366 void tree_node_reached::operator()(
const gimple_assign* obj,
unsigned int& mask)
368 tree_node_mask::operator()(obj, mask);
374 void tree_node_reached::operator()(
const gimple_goto* obj,
unsigned int& mask)
376 tree_node_mask::operator()(obj, mask);
380 void tree_node_reached::operator()(
const handler* obj,
unsigned int& mask)
382 tree_node_mask::operator()(obj, mask);
387 void tree_node_reached::operator()(
const identifier_node*,
unsigned int& mask)
392 void tree_node_reached::operator()(
const integer_cst* obj,
unsigned int& mask)
394 tree_node_mask::operator()(obj, mask);
397 void tree_node_reached::operator()(
const integer_type* obj,
unsigned int& mask)
399 tree_node_mask::operator()(obj, mask);
404 void tree_node_reached::operator()(
const gimple_label* obj,
unsigned int& mask)
406 tree_node_mask::operator()(obj, mask);
410 void tree_node_reached::operator()(
const method_type* obj,
unsigned int& mask)
412 tree_node_mask::operator()(obj, mask);
416 void tree_node_reached::operator()(
const namespace_decl* obj,
unsigned int& mask)
418 tree_node_mask::operator()(obj, mask);
422 void tree_node_reached::operator()(
const overload* obj,
unsigned int& mask)
424 tree_node_mask::operator()(obj, mask);
430 void tree_node_reached::operator()(
const parm_decl* obj,
unsigned int& mask)
432 tree_node_mask::operator()(obj, mask);
438 void tree_node_reached::operator()(
const gimple_phi* obj,
unsigned int& mask)
440 tree_node_mask::operator()(obj, mask);
447 void tree_node_reached::operator()(
const pointer_type* obj,
unsigned int& mask)
449 tree_node_mask::operator()(obj, mask);
453 void tree_node_reached::operator()(
const real_cst* obj,
unsigned int& mask)
455 tree_node_mask::operator()(obj, mask);
458 void tree_node_reached::operator()(
const real_type* obj,
unsigned int& mask)
460 tree_node_mask::operator()(obj, mask);
463 void tree_node_reached::operator()(
const record_type* obj,
unsigned int& mask)
465 tree_node_mask::operator()(obj, mask);
474 for(
auto i = obj->
list_of_flds.begin(); i != vend1; ++i)
477 for(
auto i = obj->
list_of_fncs.begin(); i != vend2; ++i)
482 void tree_node_reached::operator()(
const reference_type* obj,
unsigned int& mask)
484 tree_node_mask::operator()(obj, mask);
488 void tree_node_reached::operator()(
const result_decl* obj,
unsigned int& mask)
490 tree_node_mask::operator()(obj, mask);
496 void tree_node_reached::operator()(
const gimple_return* obj,
unsigned int& mask)
498 tree_node_mask::operator()(obj, mask);
502 void tree_node_reached::operator()(
const return_stmt* obj,
unsigned int& mask)
504 tree_node_mask::operator()(obj, mask);
509 void tree_node_reached::operator()(
const scope_ref* obj,
unsigned int& mask)
511 tree_node_mask::operator()(obj, mask);
516 void tree_node_reached::operator()(
const ssa_name* obj,
unsigned int& mask)
518 tree_node_mask::operator()(obj, mask);
536 void tree_node_reached::operator()(
const statement_list* obj,
unsigned int& mask)
538 tree_node_mask::operator()(obj, mask);
545 void tree_node_reached::operator()(
const string_cst* obj,
unsigned int& mask)
547 tree_node_mask::operator()(obj, mask);
550 void tree_node_reached::operator()(
const gimple_switch* obj,
unsigned int& mask)
552 tree_node_mask::operator()(obj, mask);
557 void tree_node_reached::operator()(
const target_expr* obj,
unsigned int& mask)
559 tree_node_mask::operator()(obj, mask);
565 void tree_node_reached::operator()(
const lut_expr* obj,
unsigned int& mask)
567 tree_node_mask::operator()(obj, mask);
579 void tree_node_reached::operator()(
const template_decl* obj,
unsigned int& mask)
581 tree_node_mask::operator()(obj, mask);
590 tree_node_mask::operator()(obj, mask);
595 void tree_node_reached::operator()(
const tree_list* obj,
unsigned int& mask)
597 tree_node_mask::operator()(obj, mask);
604 void tree_node_reached::operator()(
const tree_vec* obj,
unsigned int& mask)
606 tree_node_mask::operator()(obj, mask);
609 for(
auto i = obj->
list_of_op.begin(); i != vend; ++i)
613 void tree_node_reached::operator()(
const try_block* obj,
unsigned int& mask)
615 tree_node_mask::operator()(obj, mask);
622 void tree_node_reached::operator()(
const type_decl* obj,
unsigned int& mask)
624 tree_node_mask::operator()(obj, mask);
629 void tree_node_reached::operator()(
const union_type* obj,
unsigned int& mask)
631 tree_node_mask::operator()(obj, mask);
633 for(
auto i = obj->
list_of_flds.begin(); i != vend1; ++i)
636 for(
auto i = obj->
list_of_fncs.begin(); i != vend2; ++i)
641 void tree_node_reached::operator()(
const var_decl* obj,
unsigned int& mask)
643 tree_node_mask::operator()(obj, mask);
650 void tree_node_reached::operator()(
const vector_cst* obj,
unsigned int& mask)
652 tree_node_mask::operator()(obj, mask);
660 tree_node_mask::operator()(obj, mask);
666 tree_node_mask::operator()(obj, mask);
672 tree_node_mask::operator()(obj, mask);
680 tree_node_mask::operator()(obj, mask);
686 void tree_node_reached::operator()(
const vector_type* obj,
unsigned int& mask)
688 tree_node_mask::operator()(obj, mask);
692 void tree_node_reached::operator()(
const target_mem_ref* obj,
unsigned int& mask)
694 tree_node_mask::operator()(obj, mask);
706 void tree_node_reached::operator()(
const target_mem_ref461* obj,
unsigned int& mask)
708 tree_node_mask::operator()(obj, mask);
718 void tree_node_reached::operator()(
const bloc* obj,
unsigned int& mask)
720 tree_node_mask::operator()(obj, mask);
727 void tree_node_reached::operator()(
const gimple_while* obj,
unsigned int& mask)
729 tree_node_mask::operator()(obj, mask);
733 void tree_node_reached::operator()(
const gimple_for* obj,
unsigned int& mask)
735 tree_node_mask::operator()(obj, mask);
742 tree_node_mask::operator()(obj, mask);
747 void tree_node_reached::operator()(
const gimple_pragma* obj,
unsigned int& mask)
749 tree_node_mask::operator()(obj, mask);
754 void tree_node_reached::operator()(
const null_node* obj,
unsigned int& mask)
756 tree_node_mask::operator()(obj, mask);
759 void tree_node_reached::operator()(
const omp_pragma* obj,
unsigned int& mask)
761 tree_node_mask::operator()(obj, mask);
766 tree_node_mask::operator()(obj, mask);
769 void tree_node_reached::operator()(
const omp_for_pragma* obj,
unsigned int& mask)
771 tree_node_mask::operator()(obj, mask);
774 void tree_node_reached::operator()(
const omp_simd_pragma* obj,
unsigned int& mask)
776 tree_node_mask::operator()(obj, mask);
779 void tree_node_reached::operator()(
const omp_target_pragma* obj,
unsigned int& mask)
781 tree_node_mask::operator()(obj, mask);
786 tree_node_mask::operator()(obj, mask);
789 void tree_node_reached::operator()(
const omp_task_pragma* obj,
unsigned int& mask)
791 tree_node_mask::operator()(obj, mask);
796 tree_node_mask::operator()(obj, mask);
801 tree_node_mask::operator()(obj, mask);
806 tree_node_mask::operator()(obj, mask);
813 tree_node_mask::operator()(obj, mask);
816 void tree_node_reached::operator()(
const map_pragma* obj,
unsigned int& mask)
818 tree_node_mask::operator()(obj, mask);
821 void tree_node_reached::operator()(
const call_hw_pragma* obj,
unsigned int& mask)
823 tree_node_mask::operator()(obj, mask);
828 tree_node_mask::operator()(obj, mask);
831 void tree_node_reached::operator()(
const issue_pragma* obj,
unsigned int& mask)
833 tree_node_mask::operator()(obj, mask);
836 void tree_node_reached::operator()(
const profiling_pragma* obj,
unsigned int& mask)
838 tree_node_mask::operator()(obj, mask);
841 void tree_node_reached::operator()(
const blackbox_pragma* obj,
unsigned int& mask)
843 tree_node_mask::operator()(obj, mask);
848 tree_node_mask::operator()(obj, mask);
851 #define CREATE_TREE_NODE_CASE_BODY(tree_node_name, node_id) \ 853 auto tnn = new tree_node_name(node_id); \ 854 tree_nodeRef cur = tree_nodeRef(tnn); \ 855 if(dynamic_cast<function_decl*>(tnn)) \ 857 TM->add_function(node_id, cur); \ 859 TM->AddTreeNode(node_id, cur); \ 860 curr_tree_node_ptr = tnn; \ 863 curr_tree_node_ptr = nullptr; \ 864 source_tn = tree_nodeRef(); \ 876 case array_range_ref_K:
898 case bit_field_ref_K:
902 case bit_ior_concat_expr_K:
916 case aggr_init_expr_K:
922 case case_label_expr_K:
928 case ceil_div_expr_K:
930 case ceil_mod_expr_K:
936 case type_pack_expansion_K:
938 case cleanup_point_expr_K:
946 case component_ref_K:
948 case compound_expr_K:
960 case ctor_initializer_K:
962 case eh_filter_expr_K:
964 case enumeral_type_K:
970 case exact_div_expr_K:
980 case fix_ceil_expr_K:
982 case fix_floor_expr_K:
984 case fix_round_expr_K:
986 case fix_trunc_expr_K:
990 case floor_div_expr_K:
992 case floor_mod_expr_K:
994 case function_decl_K:
996 case function_type_K:
1000 case gimple_assign_K:
1006 case gimple_label_K:
1008 case goto_subroutine_K:
1014 case imagpart_expr_K:
1016 case indirect_ref_K:
1018 case misaligned_indirect_ref_K:
1026 case integer_type_K:
1038 case lrotate_expr_K:
1060 case mult_highpart_expr_K:
1062 case namespace_decl_K:
1070 case non_lvalue_expr_K:
1074 case obj_type_ref_K:
1078 case ordered_expr_K:
1086 case placeholder_expr_K:
1090 case pointer_plus_expr_K:
1092 case pointer_type_K:
1094 case postdecrement_expr_K:
1096 case postincrement_expr_K:
1098 case predecrement_expr_K:
1100 case preincrement_expr_K:
1102 case qual_union_type_K:
1112 case realpart_expr_K:
1118 case reduc_max_expr_K:
1120 case reduc_min_expr_K:
1122 case reduc_plus_expr_K:
1124 case reference_expr_K:
1126 case reference_type_K:
1128 case reinterpret_cast_expr_K:
1134 case gimple_return_K:
1138 case round_div_expr_K:
1140 case round_mod_expr_K:
1142 case rrotate_expr_K:
1158 case statement_list_K:
1160 case static_cast_expr_K:
1164 case gimple_switch_K:
1168 case target_mem_ref_K:
1170 case target_mem_ref461_K:
1174 case template_decl_K:
1176 case template_id_expr_K:
1178 case template_parm_index_K:
1180 case template_type_parm_K:
1182 case ternary_plus_expr_K:
1184 case ternary_pm_expr_K:
1186 case ternary_mp_expr_K:
1188 case ternary_mm_expr_K:
1192 case translation_unit_decl_K:
1198 case trunc_div_expr_K:
1200 case trunc_mod_expr_K:
1202 case truth_and_expr_K:
1204 case truth_andif_expr_K:
1206 case truth_not_expr_K:
1208 case truth_or_expr_K:
1210 case truth_orif_expr_K:
1212 case truth_xor_expr_K:
1216 case try_catch_expr_K:
1222 case typename_type_K:
1224 case type_argument_pack_K:
1226 case nontype_argument_pack_K:
1228 case expr_pack_expansion_K:
1242 case unordered_expr_K:
1252 case vec_new_expr_K:
1254 case vec_cond_expr_K:
1256 case vec_perm_expr_K:
1258 case dot_prod_expr_K:
1260 case vec_lshift_expr_K:
1262 case vec_rshift_expr_K:
1264 case widen_mult_hi_expr_K:
1266 case widen_mult_lo_expr_K:
1268 case vec_unpack_hi_expr_K:
1270 case vec_unpack_lo_expr_K:
1272 case vec_unpack_float_hi_expr_K:
1274 case vec_unpack_float_lo_expr_K:
1276 case vec_pack_trunc_expr_K:
1278 case vec_pack_sat_expr_K:
1280 case vec_pack_fix_trunc_expr_K:
1282 case vec_extracteven_expr_K:
1284 case vec_extractodd_expr_K:
1286 case vec_interleavehigh_expr_K:
1288 case vec_interleavelow_expr_K:
1296 case view_convert_expr_K:
1298 case gimple_predict_K:
1304 case with_cleanup_expr_K:
1306 case with_size_expr_K:
1308 case gimple_while_K:
1312 case gimple_pragma_K:
1316 case omp_declare_simd_pragma_K:
1318 case omp_atomic_pragma_K:
1320 case omp_for_pragma_K:
1322 case omp_parallel_pragma_K:
1324 case omp_sections_pragma_K:
1326 case omp_parallel_sections_pragma_K:
1328 case omp_section_pragma_K:
1330 case omp_simd_pragma_K:
1332 case omp_target_pragma_K:
1334 case omp_critical_pragma_K:
1336 case omp_task_pragma_K:
1340 case call_hw_pragma_K:
1342 case call_point_hw_pragma_K:
1344 case issue_pragma_K:
1346 case profiling_pragma_K:
1348 case blackbox_pragma_K:
1350 case statistical_profiling_K:
1356 case identifier_node_K:
1359 if(GetPointer<identifier_node>(tn)->operator_flag)
1367 TM->AddTreeNode(node_id, cur);
1370 case widen_sum_expr_K:
1372 case widen_mult_expr_K:
1374 case gimple_multi_way_if_K:
1376 case extract_bit_expr_K:
1378 case sat_plus_expr_K:
1380 case sat_minus_expr_K:
1386 case extractvalue_expr_K:
1388 case insertvalue_expr_K:
1390 case extractelement_expr_K:
1392 case insertelement_expr_K:
1402 case tree_reindex_K:
1409 void tree_node_index_factory::operator()(
const tree_node* obj,
unsigned int&)
1414 void tree_node_index_factory::operator()(
const tree_reindex* obj,
unsigned int&)
1419 void tree_node_index_factory::operator()(
const attr* obj,
unsigned int& mask)
1421 THROW_ASSERT(obj == dynamic_cast<attr*>(curr_tree_node_ptr),
"wrong factory setup");
1422 tree_node_mask::operator()(obj, mask);
1427 (TOK_NEW)(TOK_DELETE)(TOK_ASSIGN)(TOK_MEMBER)(TOK_PUBLIC)(TOK_PROTECTED)(TOK_PRIVATE)(TOK_NORETURN)(TOK_VOLATILE)( \ 1428 TOK_NOINLINE)(TOK_ALWAYS_INLINE)(TOK_USED)(TOK_UNUSED)(TOK_CONST)(TOK_TRANSPARENT_UNION)(TOK_CONSTRUCTOR)( \ 1429 TOK_DESTRUCTOR)(TOK_MODE)(TOK_SECTION)(TOK_ALIGNED)(TOK_WEAK)(TOK_ALIAS)(TOK_NO_INSTRUMENT_FUNCTION)( \ 1430 TOK_MALLOC)(TOK_NO_STACK_LIMIT)(TOK_PURE)(TOK_DEPRECATED)(TOK_VECTOR_SIZE)(TOK_VISIBILITY)(TOK_TLS_MODEL)( \ 1431 TOK_NONNULL)(TOK_NOTHROW)(TOK_MAY_ALIAS)(TOK_WARN_UNUSED_RESULT)(TOK_FORMAT)(TOK_FORMAT_ARG)(TOK_NULL)( \ 1432 TOK_GLOBAL_INIT)(TOK_GLOBAL_FINI)(TOK_CONVERSION)(TOK_VIRTUAL)(TOK_LSHIFT)(TOK_MUTABLE)(TOK_PSEUDO_TMPL)( \ 1433 TOK_VECNEW)(TOK_VECDELETE)(TOK_POS)(TOK_NEG)(TOK_ADDR)(TOK_DEREF)(TOK_LNOT)(TOK_NOT)(TOK_PREINC)(TOK_PREDEC)( \ 1434 TOK_PLUSASSIGN)(TOK_PLUS)(TOK_MINUSASSIGN)(TOK_MINUS)(TOK_MULTASSIGN)(TOK_MULT)(TOK_DIVASSIGN)(TOK_DIV)( \ 1435 TOK_MODASSIGN)(TOK_MOD)(TOK_ANDASSIGN)(TOK_AND)(TOK_ORASSIGN)(TOK_OR)(TOK_XORASSIGN)(TOK_XOR)( \ 1436 TOK_LSHIFTASSIGN)(TOK_RSHIFTASSIGN)(TOK_RSHIFT)(TOK_EQ)(TOK_NE)(TOK_LT)(TOK_GT)(TOK_LE)(TOK_GE)(TOK_LAND)( \ 1437 TOK_LOR)(TOK_COMPOUND)(TOK_MEMREF)(TOK_REF)(TOK_SUBS)(TOK_POSTINC)(TOK_POSTDEC)(TOK_CALL)(TOK_THUNK)( \ 1438 TOK_THIS_ADJUSTING)(TOK_RESULT_ADJUSTING)(TOK_BITFIELD) 1439 #define ATTR_MACRO(r, data, elem) \ 1440 attr_p = GetPointer<attr>(source_tn)->list_attr.find(TOK(elem)) != GetPointer<attr>(source_tn)->list_attr.end(); \ 1442 dynamic_cast<attr*>(curr_tree_node_ptr)->list_attr.insert(TOK(elem)); 1449 #define SET_NODE_ID(field, type) \ 1450 if(GetPointer<type>(source_tn)->field) \ 1452 unsigned int node_id = GET_INDEX_NODE(GetPointer<type>(source_tn)->field); \ 1453 THROW_ASSERT(remap.find(node_id) != remap.end(), "missing an index: " + std::to_string(node_id)); \ 1454 node_id = remap.find(node_id)->second; \ 1455 dynamic_cast<type*>(curr_tree_node_ptr)->field = TM->GetTreeReindex(node_id); \ 1458 #define SEQ_SET_NODE_ID(list_field, type) \ 1459 if(!GetPointer<type>(source_tn)->list_field.empty()) \ 1461 for(const auto& i : GetPointer<type>(source_tn)->list_field) \ 1463 unsigned int node_id = GET_INDEX_NODE(i); \ 1464 THROW_ASSERT(remap.find(node_id) != remap.end(), "missing an index: " + std::to_string(node_id)); \ 1465 node_id = remap.find(node_id)->second; \ 1466 dynamic_cast<type*>(curr_tree_node_ptr)->list_field.push_back(TM->GetTreeReindex(node_id)); \ 1470 #define SET_SET_NODE_ID(list_field, type) \ 1471 if(!GetPointer<type>(source_tn)->list_field.empty()) \ 1473 for(const auto& i : GetPointer<type>(source_tn)->list_field) \ 1475 unsigned int node_id = GET_INDEX_NODE(i); \ 1476 THROW_ASSERT(remap.find(node_id) != remap.end(), "missing an index: " + std::to_string(node_id)); \ 1477 node_id = remap.find(node_id)->second; \ 1478 dynamic_cast<type*>(curr_tree_node_ptr)->list_field.insert(TM->GetTreeReindex(node_id)); \ 1482 #define LSEQ_SET_NODE_ID(list_field, type) \ 1483 if(!GetPointer<type>(source_tn)->list_field.empty()) \ 1485 std::list<tree_nodeRef>::const_iterator vend = GetPointer<type>(source_tn)->list_field.end(); \ 1486 for(std::list<tree_nodeRef>::const_iterator i = GetPointer<type>(source_tn)->list_field.begin(); i != vend; ++i) \ 1488 unsigned int node_id = GET_INDEX_NODE(*i); \ 1489 THROW_ASSERT(remap.find(node_id) != remap.end(), "missing an index: " + std::to_string(node_id)); \ 1490 node_id = remap.find(node_id)->second; \ 1491 dynamic_cast<type*>(curr_tree_node_ptr)->list_field.push_back(TM->GetTreeReindex(node_id)); \ 1495 #define SET_VALUE(field, type) (dynamic_cast<type*>(curr_tree_node_ptr)->field = GetPointer<type>(source_tn)->field) 1497 void tree_node_index_factory::operator()(
const srcp* obj,
unsigned int& mask)
1499 THROW_ASSERT(obj == dynamic_cast<srcp*>(curr_tree_node_ptr),
"wrong factory setup");
1500 tree_node_mask::operator()(obj, mask);
1506 void tree_node_index_factory::operator()(
const WeightedNode* obj,
unsigned int& mask)
1508 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1509 tree_node_mask::operator()(obj, mask);
1512 void tree_node_index_factory::operator()(
const decl_node* obj,
unsigned int& mask)
1514 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1515 tree_node_mask::operator()(obj, mask);
1532 void tree_node_index_factory::operator()(
const expr_node* obj,
unsigned int& mask)
1534 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1535 tree_node_mask::operator()(obj, mask);
1539 void tree_node_index_factory::operator()(
const gimple_node* obj,
unsigned int& mask)
1541 tree_node_mask::operator()(obj, mask);
1564 void tree_node_index_factory::operator()(
const unary_expr* obj,
unsigned int& mask)
1566 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1567 tree_node_mask::operator()(obj, mask);
1571 void tree_node_index_factory::operator()(
const binary_expr* obj,
unsigned int& mask)
1573 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1574 tree_node_mask::operator()(obj, mask);
1579 void tree_node_index_factory::operator()(
const ternary_expr* obj,
unsigned int& mask)
1581 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1582 tree_node_mask::operator()(obj, mask);
1588 void tree_node_index_factory::operator()(
const quaternary_expr* obj,
unsigned int& mask)
1590 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1591 tree_node_mask::operator()(obj, mask);
1598 void tree_node_index_factory::operator()(
const type_node* obj,
unsigned int& mask)
1600 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1601 tree_node_mask::operator()(obj, mask);
1612 void tree_node_index_factory::operator()(
const memory_tag* obj,
unsigned int& mask)
1614 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1615 tree_node_mask::operator()(obj, mask);
1619 void tree_node_index_factory::operator()(
const cst_node* obj,
unsigned int& mask)
1621 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1622 tree_node_mask::operator()(obj, mask);
1626 void tree_node_index_factory::operator()(
const error_mark* obj,
unsigned int& mask)
1628 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1629 tree_node_mask::operator()(obj, mask);
1632 void tree_node_index_factory::operator()(
const array_type* obj,
unsigned int& mask)
1634 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1635 tree_node_mask::operator()(obj, mask);
1640 void tree_node_index_factory::operator()(
const gimple_asm* obj,
unsigned int& mask)
1642 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1643 tree_node_mask::operator()(obj, mask);
1651 void tree_node_index_factory::operator()(
const baselink* obj,
unsigned int& mask)
1653 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1654 tree_node_mask::operator()(obj, mask);
1658 void tree_node_index_factory::operator()(
const gimple_bind* obj,
unsigned int& mask)
1660 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1661 tree_node_mask::operator()(obj, mask);
1666 void tree_node_index_factory::operator()(
const binfo* obj,
unsigned int& mask)
1668 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1669 tree_node_mask::operator()(obj, mask);
1673 if(!GetPointer<binfo>(source_tn)->list_of_access_binf.empty())
1675 auto vend = GetPointer<binfo>(source_tn)->list_of_access_binf.end();
1676 for(
auto i = GetPointer<binfo>(source_tn)->list_of_access_binf.begin(); i != vend; ++i)
1680 node_id =
remap.find(node_id)->second;
1681 dynamic_cast<binfo*
>(curr_tree_node_ptr)->add_access_binf(
TM->GetTreeReindex(node_id), i->first);
1686 void tree_node_index_factory::operator()(
const block* obj,
unsigned int& mask)
1688 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1689 tree_node_mask::operator()(obj, mask);
1694 void tree_node_index_factory::operator()(
const call_expr* obj,
unsigned int& mask)
1696 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1697 tree_node_mask::operator()(obj, mask);
1702 void tree_node_index_factory::operator()(
const aggr_init_expr* obj,
unsigned int& mask)
1704 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1705 tree_node_mask::operator()(obj, mask);
1710 void tree_node_index_factory::operator()(
const gimple_call* obj,
unsigned int& mask)
1712 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1713 tree_node_mask::operator()(obj, mask);
1718 void tree_node_index_factory::operator()(
const case_label_expr* obj,
unsigned int& mask)
1720 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1721 tree_node_mask::operator()(obj, mask);
1728 void tree_node_index_factory::operator()(
const cast_expr* obj,
unsigned int& mask)
1730 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1731 tree_node_mask::operator()(obj, mask);
1735 void tree_node_index_factory::operator()(
const complex_cst* obj,
unsigned int& mask)
1737 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1738 tree_node_mask::operator()(obj, mask);
1743 void tree_node_index_factory::operator()(
const complex_type* obj,
unsigned int& mask)
1745 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1746 tree_node_mask::operator()(obj, mask);
1751 void tree_node_index_factory::operator()(
const gimple_cond* obj,
unsigned int& mask)
1753 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1754 tree_node_mask::operator()(obj, mask);
1758 void tree_node_index_factory::operator()(
const const_decl* obj,
unsigned int& mask)
1760 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1761 tree_node_mask::operator()(obj, mask);
1765 void tree_node_index_factory::operator()(
const constructor* obj,
unsigned int& mask)
1767 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1768 tree_node_mask::operator()(obj, mask);
1770 if(!GetPointer<constructor>(source_tn)->list_of_idx_valu.empty())
1772 auto vend = GetPointer<constructor>(source_tn)->list_of_idx_valu.end();
1773 for(
auto i = GetPointer<constructor>(source_tn)->list_of_idx_valu.begin(); i != vend; ++i)
1778 node_id1 = node_id1 ?
remap.find(node_id1)->second : 0;
1780 node_id2 =
remap.find(node_id2)->second;
1784 ->add_idx_valu(
TM->GetTreeReindex(node_id1),
TM->GetTreeReindex(node_id2));
1788 dynamic_cast<constructor*
>(curr_tree_node_ptr)->add_valu(
TM->GetTreeReindex(node_id2));
1794 void tree_node_index_factory::operator()(
const enumeral_type* obj,
unsigned int& mask)
1796 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1797 tree_node_mask::operator()(obj, mask);
1805 void tree_node_index_factory::operator()(
const expr_stmt* obj,
unsigned int& mask)
1807 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1808 tree_node_mask::operator()(obj, mask);
1815 void tree_node_index_factory::operator()(
const field_decl* obj,
unsigned int& mask)
1817 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1818 tree_node_mask::operator()(obj, mask);
1826 void tree_node_index_factory::operator()(
const function_decl* obj,
unsigned int& mask)
1828 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1829 tree_node_mask::operator()(obj, mask);
1831 if(!GetPointer<function_decl>(source_tn)->list_of_op_names.empty())
1833 auto vend = GetPointer<function_decl>(source_tn)->list_of_op_names.end();
1834 for(
auto i = GetPointer<function_decl>(source_tn)->list_of_op_names.begin(); i != vend; ++i)
1859 #if HAVE_FROM_PRAGMA_BUILT 1869 void tree_node_index_factory::operator()(
const function_type* obj,
unsigned int& mask)
1871 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1872 tree_node_mask::operator()(obj, mask);
1878 void tree_node_index_factory::operator()(
const gimple_assign* obj,
unsigned int& mask)
1880 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1881 tree_node_mask::operator()(obj, mask);
1890 void tree_node_index_factory::operator()(
const gimple_goto* obj,
unsigned int& mask)
1892 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1893 tree_node_mask::operator()(obj, mask);
1897 void tree_node_index_factory::operator()(
const handler* obj,
unsigned int& mask)
1899 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1900 tree_node_mask::operator()(obj, mask);
1906 void tree_node_index_factory::operator()(
const identifier_node* obj,
unsigned int& mask)
1908 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1909 tree_node_mask::operator()(obj, mask);
1910 THROW_ERROR(
"Use find_identifier_nodeID to find identifier_node objects");
1913 void tree_node_index_factory::operator()(
const integer_cst* obj,
unsigned int& mask)
1915 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1916 tree_node_mask::operator()(obj, mask);
1920 void tree_node_index_factory::operator()(
const integer_type* obj,
unsigned int& mask)
1922 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1923 tree_node_mask::operator()(obj, mask);
1931 void tree_node_index_factory::operator()(
const gimple_label* obj,
unsigned int& mask)
1933 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1934 tree_node_mask::operator()(obj, mask);
1938 void tree_node_index_factory::operator()(
const method_type* obj,
unsigned int& mask)
1940 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1941 tree_node_mask::operator()(obj, mask);
1945 void tree_node_index_factory::operator()(
const namespace_decl* obj,
unsigned int& mask)
1947 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1948 tree_node_mask::operator()(obj, mask);
1952 void tree_node_index_factory::operator()(
const overload* obj,
unsigned int& mask)
1954 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1955 tree_node_mask::operator()(obj, mask);
1961 void tree_node_index_factory::operator()(
const parm_decl* obj,
unsigned int& mask)
1963 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1964 tree_node_mask::operator()(obj, mask);
1974 void tree_node_index_factory::operator()(
const gimple_phi* obj,
unsigned int& mask)
1976 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1977 tree_node_mask::operator()(obj, mask);
1980 for(
const auto& def_edge : GetPointer<gimple_phi>(source_tn)->CGetDefEdgesList())
1984 node_id =
remap.find(node_id)->second;
1985 dynamic_cast<gimple_phi*
>(curr_tree_node_ptr)
1991 void tree_node_index_factory::operator()(
const pointer_type* obj,
unsigned int& mask)
1993 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
1994 tree_node_mask::operator()(obj, mask);
1998 void tree_node_index_factory::operator()(
const real_cst* obj,
unsigned int& mask)
2000 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2001 tree_node_mask::operator()(obj, mask);
2007 void tree_node_index_factory::operator()(
const real_type* obj,
unsigned int& mask)
2009 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2010 tree_node_mask::operator()(obj, mask);
2014 void tree_node_index_factory::operator()(
const record_type* obj,
unsigned int& mask)
2016 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2017 tree_node_mask::operator()(obj, mask);
2033 void tree_node_index_factory::operator()(
const reference_type* obj,
unsigned int& mask)
2035 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2036 tree_node_mask::operator()(obj, mask);
2040 void tree_node_index_factory::operator()(
const result_decl* obj,
unsigned int& mask)
2042 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2043 tree_node_mask::operator()(obj, mask);
2050 void tree_node_index_factory::operator()(
const gimple_return* obj,
unsigned int& mask)
2052 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2053 tree_node_mask::operator()(obj, mask);
2057 void tree_node_index_factory::operator()(
const return_stmt* obj,
unsigned int& mask)
2059 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2060 tree_node_mask::operator()(obj, mask);
2066 void tree_node_index_factory::operator()(
const scope_ref* obj,
unsigned int& mask)
2068 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2069 tree_node_mask::operator()(obj, mask);
2074 void tree_node_index_factory::operator()(
const ssa_name* obj,
unsigned int& mask)
2076 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2077 tree_node_mask::operator()(obj, mask);
2093 for(
const auto& def_stmt : GetPointer<const ssa_name>(source_tn)->CGetDefStmts())
2095 unsigned int node_id = def_stmt->index;
2097 node_id =
remap.find(node_id)->second;
2098 dynamic_cast<ssa_name*
>(curr_tree_node_ptr)->AddDefStmt(
TM->GetTreeReindex(node_id));
2105 void tree_node_index_factory::operator()(
const statement_list* obj,
unsigned int& mask)
2107 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2108 tree_node_mask::operator()(obj, mask);
2110 auto mend = GetPointer<statement_list>(source_tn)->list_of_bloc.end();
2111 for(
auto i = GetPointer<statement_list>(source_tn)->list_of_bloc.begin(); i != mend; ++i)
2113 curr_bloc =
new bloc(i->first);
2114 source_bloc = i->second;
2115 curr_bloc->visit(
this);
2116 dynamic_cast<statement_list*
>(curr_tree_node_ptr)->add_bloc(blocRef(curr_bloc));
2117 curr_bloc =
nullptr;
2118 source_bloc = blocRef();
2122 void tree_node_index_factory::operator()(
const string_cst* obj,
unsigned int& mask)
2124 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2125 tree_node_mask::operator()(obj, mask);
2129 void tree_node_index_factory::operator()(
const gimple_switch* obj,
unsigned int& mask)
2131 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2132 tree_node_mask::operator()(obj, mask);
2137 void tree_node_index_factory::operator()(
const target_expr* obj,
unsigned int& mask)
2139 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2140 tree_node_mask::operator()(obj, mask);
2146 void tree_node_index_factory::operator()(
const lut_expr* obj,
unsigned int& mask)
2148 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2149 tree_node_mask::operator()(obj, mask);
2161 void tree_node_index_factory::operator()(
const template_decl* obj,
unsigned int& mask)
2163 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2164 tree_node_mask::operator()(obj, mask);
2171 void tree_node_index_factory::operator()(
const template_parm_index* obj,
unsigned int& mask)
2173 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2174 tree_node_mask::operator()(obj, mask);
2184 void tree_node_index_factory::operator()(
const tree_list* obj,
unsigned int& mask)
2186 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2187 tree_node_mask::operator()(obj, mask);
2194 void tree_node_index_factory::operator()(
const tree_vec* obj,
unsigned int& mask)
2196 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2197 tree_node_mask::operator()(obj, mask);
2203 void tree_node_index_factory::operator()(
const try_block* obj,
unsigned int& mask)
2205 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2206 tree_node_mask::operator()(obj, mask);
2214 void tree_node_index_factory::operator()(
const type_decl* obj,
unsigned int& mask)
2216 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2217 tree_node_mask::operator()(obj, mask);
2222 void tree_node_index_factory::operator()(
const union_type* obj,
unsigned int& mask)
2224 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2225 tree_node_mask::operator()(obj, mask);
2231 void tree_node_index_factory::operator()(
const var_decl* obj,
unsigned int& mask)
2233 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2234 tree_node_mask::operator()(obj, mask);
2253 void tree_node_index_factory::operator()(
const vector_cst* obj,
unsigned int& mask)
2255 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2256 tree_node_mask::operator()(obj, mask);
2260 void tree_node_index_factory::operator()(
const type_argument_pack* obj,
unsigned int& mask)
2262 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2263 tree_node_mask::operator()(obj, mask);
2269 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2270 tree_node_mask::operator()(obj, mask);
2274 void tree_node_index_factory::operator()(
const type_pack_expansion* obj,
unsigned int& mask)
2276 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2277 tree_node_mask::operator()(obj, mask);
2283 void tree_node_index_factory::operator()(
const expr_pack_expansion* obj,
unsigned int& mask)
2285 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2286 tree_node_mask::operator()(obj, mask);
2292 void tree_node_index_factory::operator()(
const vector_type* obj,
unsigned int& mask)
2294 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2295 tree_node_mask::operator()(obj, mask);
2299 void tree_node_index_factory::operator()(
const target_mem_ref* obj,
unsigned int& mask)
2301 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2302 tree_node_mask::operator()(obj, mask);
2314 void tree_node_index_factory::operator()(
const target_mem_ref461* obj,
unsigned int& mask)
2316 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2317 tree_node_mask::operator()(obj, mask);
2327 void tree_node_index_factory::operator()(
const bloc* obj,
unsigned int& mask)
2329 tree_node_mask::operator()(obj, mask);
2330 curr_bloc->hpl = source_bloc->hpl;
2331 curr_bloc->loop_id = source_bloc->loop_id;
2332 curr_bloc->list_of_pred = source_bloc->list_of_pred;
2333 curr_bloc->list_of_succ = source_bloc->list_of_succ;
2334 curr_bloc->true_edge = source_bloc->true_edge;
2335 curr_bloc->false_edge = source_bloc->false_edge;
2336 for(
const auto&
phi : source_bloc->CGetPhiList())
2340 node_id =
remap.find(node_id)->second;
2341 curr_bloc->AddPhi(
TM->GetTreeReindex(node_id));
2343 for(
const auto& stmt : source_bloc->CGetStmtList())
2347 node_id =
remap.find(node_id)->second;
2352 void tree_node_index_factory::operator()(
const gimple_while* obj,
unsigned int& mask)
2354 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2355 tree_node_mask::operator()(obj, mask);
2359 void tree_node_index_factory::operator()(
const gimple_for* obj,
unsigned int& mask)
2361 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2362 tree_node_mask::operator()(obj, mask);
2367 void tree_node_index_factory::operator()(
const gimple_multi_way_if* obj,
unsigned int& mask)
2369 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2370 tree_node_mask::operator()(obj, mask);
2371 if(!GetPointer<gimple_multi_way_if>(source_tn)->list_of_cond.empty())
2373 for(
const auto& cond : GetPointer<gimple_multi_way_if>(source_tn)->list_of_cond)
2375 unsigned int node_id = cond.first->index;
2377 node_id =
remap.find(node_id)->second;
2378 dynamic_cast<gimple_multi_way_if*
>(curr_tree_node_ptr)->add_cond(
TM->GetTreeReindex(node_id), cond.second);
2383 void tree_node_index_factory::operator()(
const null_node* obj,
unsigned int& mask)
2385 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2386 tree_node_mask::operator()(obj, mask);
2389 void tree_node_index_factory::operator()(
const gimple_pragma* obj,
unsigned int& mask)
2391 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2392 tree_node_mask::operator()(obj, mask);
2400 void tree_node_index_factory::operator()(
const omp_pragma* obj,
unsigned int& mask)
2402 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2403 tree_node_mask::operator()(obj, mask);
2406 void tree_node_index_factory::operator()(
const omp_parallel_pragma* obj,
unsigned int& mask)
2408 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2409 tree_node_mask::operator()(obj, mask);
2411 if(!GetPointer<omp_parallel_pragma>(source_tn)->clauses.empty())
2413 auto vend = GetPointer<omp_parallel_pragma>(source_tn)->clauses.end();
2414 for(
auto i = GetPointer<omp_parallel_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2421 void tree_node_index_factory::operator()(
const omp_for_pragma* obj,
unsigned int& mask)
2423 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2424 tree_node_mask::operator()(obj, mask);
2425 if(!GetPointer<omp_for_pragma>(source_tn)->clauses.empty())
2427 auto vend = GetPointer<omp_for_pragma>(source_tn)->clauses.end();
2428 for(
auto i = GetPointer<omp_for_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2430 dynamic_cast<omp_for_pragma*
>(curr_tree_node_ptr)->clauses[i->first] = i->second;
2437 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2438 tree_node_mask::operator()(obj, mask);
2439 if(!GetPointer<omp_declare_simd_pragma>(source_tn)->clauses.empty())
2441 auto vend = GetPointer<omp_declare_simd_pragma>(source_tn)->clauses.end();
2442 for(
auto i = GetPointer<omp_declare_simd_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2449 void tree_node_index_factory::operator()(
const omp_simd_pragma* obj,
unsigned int& mask)
2451 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2452 tree_node_mask::operator()(obj, mask);
2453 if(!GetPointer<omp_simd_pragma>(source_tn)->clauses.empty())
2455 auto vend = GetPointer<omp_simd_pragma>(source_tn)->clauses.end();
2456 for(
auto i = GetPointer<omp_simd_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2458 dynamic_cast<omp_simd_pragma*
>(curr_tree_node_ptr)->clauses[i->first] = i->second;
2463 void tree_node_index_factory::operator()(
const omp_target_pragma* obj,
unsigned int& mask)
2465 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2466 tree_node_mask::operator()(obj, mask);
2467 if(!GetPointer<omp_target_pragma>(source_tn)->clauses.empty())
2469 auto vend = GetPointer<omp_target_pragma>(source_tn)->clauses.end();
2470 for(
auto i = GetPointer<omp_target_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2472 dynamic_cast<omp_target_pragma*
>(curr_tree_node_ptr)->clauses[i->first] = i->second;
2477 void tree_node_index_factory::operator()(
const omp_critical_pragma* obj,
unsigned int& mask)
2479 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2480 tree_node_mask::operator()(obj, mask);
2481 if(!GetPointer<omp_critical_pragma>(source_tn)->clauses.empty())
2483 auto vend = GetPointer<omp_critical_pragma>(source_tn)->clauses.end();
2484 for(
auto i = GetPointer<omp_critical_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2491 void tree_node_index_factory::operator()(
const omp_task_pragma* obj,
unsigned int& mask)
2493 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2494 tree_node_mask::operator()(obj, mask);
2495 if(!GetPointer<omp_task_pragma>(source_tn)->clauses.empty())
2497 auto vend = GetPointer<omp_task_pragma>(source_tn)->clauses.end();
2498 for(
auto i = GetPointer<omp_task_pragma>(source_tn)->clauses.begin(); i != vend; ++i)
2500 dynamic_cast<omp_task_pragma*
>(curr_tree_node_ptr)->clauses[i->first] = i->second;
2505 void tree_node_index_factory::operator()(
const omp_sections_pragma* obj,
unsigned int& mask)
2507 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2508 tree_node_mask::operator()(obj, mask);
2514 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2515 tree_node_mask::operator()(obj, mask);
2520 void tree_node_index_factory::operator()(
const omp_section_pragma* obj,
unsigned int& mask)
2522 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2523 tree_node_mask::operator()(obj, mask);
2526 void tree_node_index_factory::operator()(
const map_pragma* obj,
unsigned int& mask)
2528 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2529 tree_node_mask::operator()(obj, mask);
2532 void tree_node_index_factory::operator()(
const call_hw_pragma* obj,
unsigned int& mask)
2534 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2535 tree_node_mask::operator()(obj, mask);
2541 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2542 tree_node_mask::operator()(obj, mask);
2548 void tree_node_index_factory::operator()(
const issue_pragma* obj,
unsigned int& mask)
2550 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2551 tree_node_mask::operator()(obj, mask);
2554 void tree_node_index_factory::operator()(
const profiling_pragma* obj,
unsigned int& mask)
2556 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2557 tree_node_mask::operator()(obj, mask);
2560 void tree_node_index_factory::operator()(
const blackbox_pragma* obj,
unsigned int& mask)
2562 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2563 tree_node_mask::operator()(obj, mask);
2568 THROW_ASSERT(obj == curr_tree_node_ptr,
"wrong factory setup");
2569 tree_node_mask::operator()(obj, mask);
struct definition of the type_decl tree node.
tree_nodeRef ptd
ptd field points to the node for the type pointed to.
This struct specifies the integer_cst node.
const TreeNodeSet CGetDefStmts() const
Return the set of definition statements.
tree_nodeRef in
in is the operand 2: ASM_INPUTS, this represents the inputs for the statement.
struct definition of the const_decl tree node.
This struct implements the target_expr node.
tree_nodeRef min
min: tree-dump.c use the macro TYPE_MIN_VALUE
tree_nodeRef init
init field holds the value to initialize a variable to.
tree_nodeRef op2
second operand
const DefEdgeList & CGetDefEdgesList() const
Return the list of def edges.
tree_nodeRef size
size field holds the size of datum, in bits.
() 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
This struct specifies the field bloc (basic block).
() 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.
struct definition of the vector_type tree node.
struct definition of the array_type tree node.
tree_nodeRef max
max: tree-dump.c use the macro TYPE_MAX_VALUE
tree_nodeRef unql
unql field, in any member of such a chain, points to the start of the chain.
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...
struct definition of the real_type tree node.
tree_nodeRef name
name field contains info on the name used in the program for this type.It is either a TYPE_DECL node...
tree_nodeRef type
is the type of the baselink
tree_nodeRef next
Is the next statement.
tree_nodeRef bfld
binf field are information about this type, as a base type for itself.
tree_nodeRef op1
The second operand of the binary expression.
Any erroneous construct is parsed into a node of this type.
char base
This version is stamped on May 10, 2016.
This struct specifies the statement_list node.
tree_nodeRef name
name field contains an identifier_node used to represent a name.
tree_nodeRef elts
field elts is the type of an vector element (tree-dump.c use the macro TREE_TYPE) ...
tree_nodeRef idx
INDEX register.
std::vector< std::pair< tree_nodeRef, tree_nodeRef > > list_of_idx_valu
store the list initializers: <index, value>
#define SET_VALUE(field, type)
A HANDLER wraps a catch handler for the HANDLER_TYPE.
tree_nodeRef param_packs
PACK_EXPANSION_PARAMETER_PACKS.
tree_nodeRef op
op is casted node
struct definition of the source position.
tree_nodeRef type
type of the expression
tree_nodeRef orig
For any sort of a ..._DECL node, this points to the original (abstract) decl node which this decl is ...
Represents an argument pack of types (or templates).
tree_nodeRef op1
first operand
DefEdgeList list_of_def_edge
store the list pairs: <def, edge>.
struct definition of the function_decl tree node.
tree_nodeRef size
size field contains a tree that is an expression for the size in bits.
struct definition of the method_type tree node.
tree_nodeRef decl
it is the target of an initialization
TreeNodeSet def_stmts
in case ssa_name is not volatile the statement which defines it; statements could be more than one be...
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...
tree_nodeRef var
var is the variable being referenced (macro SSA_NAME_VAR).
tree_nodeRef arg
PACK_EXPANSION_EXTRA_ARGS.
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...
tree_nodeRef refd
refd field references to the node for the type referenced to.
tree_nodeRef imag
imag is the TREE_IMAGPART which content is other constant node.
tree_nodeRef prms
prms field is a list of types of arguments expected, this list is made of tree_list nodes...
tree_nodeRef mngl
mngl field contains the name of the object as the assembler will see it.
This struct specifies the gimple_label node.
tree_nodeRef size
size field holds the size of datum, in bits.
This struct specifies the string_cst node.
exceptions managed by PandA
tree_nodeRef op4
fourth operand
tree_nodeRef op2
The third operand of the ternary expression.
tree_nodeRef crnt
Is the current function declaration.
tree_nodeRef op1
The second operand of the Quaternary expression.
struct definition of the union_type tree node.
std::vector< tree_nodeRef > list_of_valu
list_of_valu is a list of value of the TREE_VECTOR_CST_ELTS vector elements.
A simple interface to token object of the raw files.
tree_nodeRef fn
fn field is the initial declaration for this function declaration
struct definition of the unary node structures.
tree_nodeRef type
type field is the type of the node
tree_nodeRef smt_ann
symbol_memory_tag annotation
const tree_managerRef TM
tree manager
struct definition of the record_type tree node.
tree_nodeRef op6
sixth operand
tree_nodeRef op0
The first operand of the binary expression.
tree_nodeRef size
size field holds the size of datum, in bits.
GIMPLE_BIND <VARS, BLOCK, BODY> represents a lexical scope.
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...
tree_nodeRef base
BASE register.
tree_nodeRef op
PACK_EXPANSION_PATTERN.
#define GET_INDEX_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
tree_nodeRef op1
The second operand of the binary expression.
struct definition of the ternary node structures.
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
#define ATTR_MACRO(r, data, elem)
This struct specifies the gimple_cond node.
tree_nodeRef clas
clas field is the type of "self".
#define SET_SET_NODE_ID(list_field, type)
struct definition of the function_type tree node.
const std::list< tree_nodeRef > & CGetPhiList() const
Return the list of phi.
tree_nodeRef op7
seventh operand
tree_nodeRef op1
op1 is the operand 1 (macro CASE_HIGH) of the case label expression
std::vector< tree_nodeRef > args
The arguments of the gimple_call.
tree_nodeRef argt
argt field is the type in which the argument is actually passed, which may be different from its type...
struct definition of the parm_decl tree node.
Data structure describing a basic block at tree level.
This class is used to perform the re-index of all tree nodes.
tree_nodeRef chan
chan field: the decls in one binding context are chained through this field.
AGGR_INIT_EXPRs have a variably-sized representation similar to that of CALL_EXPRs.
Constructor: return an aggregate value made from specified components.
tree_nodeRef bpos
bpos field is the field position, counting in bytes, of the byte containing the bit closest to the be...
This struct specifies the binfo node.
struct definition of the template_decl tree node.
void create_tree_node(const unsigned int node_id, const tree_nodeRef &tn)
tree_node visitors
#define SET_VISIT_INDEX(mask, index)
macro used to selectively allow member visit
This struct represents a try-block statement.
tree_nodeRef binf
type context
tree_nodeRef init
init field holds the value to initialize a variable to.
tree_nodeRef domn
field domn is the type to index by (tree-dump.c use the macro TYPE_DOMAIN).
tree_nodeRef spcs
prms field holds the specialization parameters vector.
Abstract pure class for the tree structure.
tree_nodeRef arg
arguments stored in the argument pack
tree_nodeRef res
res is the new SSA_NAME node created by the PHI node.
virtual enum kind get_kind() const =0
Virtual function returning the type of the actual class.
struct definition of the label_decl tree node.
void line(int x1, int y1, int x2, int y2, unsigned int color)
struct definition of the label_decl tree node.
std::vector< tree_nodeRef > args
The arguments of the call_expr.
tree_nodeRef op3
The fourth operand of the Quaternary expression.
Directive represinting mapping of a software function on a component.
struct definition of the result_decl tree node.
This struct specifies the vector_cst node.
tree_nodeRef scpe
context/scope of the type object.
tree_nodeRef memuse
whole memory operand use
TreeNodeSet vovers
vovers of this statement
virtual std::string get_kind_text() const =0
Virtual function returning the name of the actual class.
This struct specifies the gimple_phi node.
() label_decl() using_decl(translation_unit_decl)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
This struct represents a list-like node for chaining overloading candidates.
struct definition of the Quaternary node structures.
const std::list< tree_nodeRef > & CGetStmtList() const
Return the list of stmt.
tree_nodeRef init
it is the initializer for the target
tree_nodeRef body
is the body of the handler
#define SEQ_SET_NODE_ID(list_field, type)
CustomUnorderedMapUnstable< unsigned int, unsigned int > & remap
tree_node visitors
This struct specifies the gimple_assign node (GCC 4.3 tree node).
tree_nodeRef type
type field is the actual data type node being inherited in this basetype.(BINFO_TYPE) ...
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...
std::vector< tree_nodeRef > list_of_aliases
list of aliases associated with the memory tag.
const tree_nodeRef & actual_tree_node
Represent the actual reference to the tree_node.
#define LSEQ_SET_NODE_ID(list_field, type)
This C++ header file contains common macros for the tree structure.
This struct specifies super class for constant nodes.
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...
Directive represinting mapping of a function call on a component.
std::vector< std::pair< TreeVocabularyTokenTypes_TokenEnum, tree_nodeRef > > list_of_access_binf
is the list of pair access binf: baseinfo vector.
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
tree_nodeRef max
max: tree-dump.c use the macro TYPE_MAX_VALUE
Low-level memory addressing.
This struct specifies the gimple_return node.
tree_nodeRef body
body field is the saved representation of the body of the entire function.
tree_nodeRef idx
INDEX register.
tree_nodeRef expr
Is the expression of the statement.
std::pair< tree_nodeRef, unsigned int > DefEdge
The type of the def edge.
tree_nodeRef prms
prms field holds the template parameters vector.
refcount< application_manager > application_managerRef
refcount definition of the class
tree_nodeRef out
out is the operand 1: ASM_OUTPUTS, this represents the outputs for the statement. ...
Represents an expression that will be expanded into a list of expressions when instantiated with one ...
tree_nodeRef slot
slot is the slot which was allocated for this expression
This struct represents a reference to a member function or member functions from a base class...
std::list< std::pair< tree_nodeRef, unsigned int > > list_of_cond
The list of pair condition basic block.
struct definition of the function_decl tree node.
tree_nodeRef op3
third operand
tree_nodeRef chan
purp is the TREE_CHAIN field: tree_list nodes are made into lists by chaining through the TREE_CHAIN ...
tree_nodeRef param_packs
PACK_EXPANSION_PARAMETER_PACKS.
unsigned offset[NUM_VERTICES+1]
tree_nodeRef base
BASE register.
tree_nodeRef fn
fn is the operand 0 of the call expression: this is the function
tree_nodeRef retn
retn field is the type of value returned.
struct definition of the field_decl tree node.
tree_nodeRef step
STEP integer constant.
tree_nodeRef op0
the branch var
struct definition of the complex_type tree node.
tree_nodeRef predicate
The predicate.
tree_nodeRef arg
PACK_EXPANSION_EXTRA_ARGS.
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...
Classes specification of the tree_node data structures.
GIMPLE_SWITCH <INDEX, DEFAULT_LAB, LAB1, ..., LABN> represents the multiway branch: ...
tree_nodeRef cls
If pointer mem struct type.
tree_nodeRef op0
The first operand of the ternary expression.
struct definition of the field attr on function_decl, field_decl, var_decl tree node.
tree node merger classess.
#define THROW_ERROR(str_expr)
helper function used to throw an error in a standard way
tree_nodeRef smt_ann
symbol_memory_tag annotation
tree_nodeRef offset
OFFSET integer constant.
tree_nodeRef memdef
whole memory operand def
struct definition of the pointer_type tree node.
tree_nodeRef got
got field is the operand 2 (macro CASE_LABEL) of the case label expression
tree_nodeRef binf
binf field are information about this type, as a base type for itself.
std::vector< tree_nodeRef > list_of_fncs
list_of_fncs is a chain of methods_decl for the fields of the struct.
PointToSolutionRef use_set
point to solution
tree_nodeRef op0
true table constant
tree_nodeRef tag
result of the tree level alias analysis
tree_nodeRef orig
original memory access
tree_nodeRef op0
The parallel part (the tree_node is a omp_parallel_pragma one)
BOOST_PP_SEQ_FOR_EACH(OPERATOR_MACRO, BOOST_PP_EMPTY, VISITED_OBJ_SEQ1)
virtual template object functor
This struct specifies the block node.
tree_nodeRef op0
The first operand of the binary expression.
#define CREATE_TREE_NODE_CASE_BODY(tree_node_name, node_id)
tree_nodeRef dcls
declarations
std::vector< tree_nodeRef > list_of_args
args field holds a chain of parm_decl nodes for the arguments.
struct definition of common part of WeightedNode (gimple_assign, expr_node)
tree_nodeRef min
min: tree-dump.c use the macro TYPE_MIN_VALUE
struct definition of the reference_type tree node.
This struct specifies the cast_expr node.
tree_nodeRef hdlr
Is the handler of the statement.
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
void init(int bucket[BUCKETSIZE])
struct definition of the common part of an expression
tree_nodeRef type
type of the expression
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...
tree_nodeRef cnst
field cnst holds the value of a constant (tree-dump.c use the macro DECL_INITIAL) ...
#define CHECK_AND_ADD(Tree_Node, visit_index)
void add(int accelnum, int startidx, int endidx)
tree_nodeRef init
init field holds the value to initialize a variable to.
This struct specifies the lut_expr node.
tree_nodeRef directive
this node represents the directive of the pragma
PointToSolutionRef clobbered_set
The clobbered set of this gimple node.
This struct specifies the complex_cst node.
tree_nodeRef type
type of the expression
tree_nodeRef csts
csts is a list in which each element's TREE_PURPOSE is a name and the TREE_VALUE is the value (an int...
struct definition of the type node structures.
This struct specifies the tree_list node.
tree_nodeRef rslt
rslt is null for struct templates and declaration for object to be created for non-struct templates ...
Class specification of the tree_reindex support class.
tree_nodeRef clnp
it is the cleanup for this node
This struct represent a statement expression.
This struct specifies the call_expr node.
tree_nodeRef op1
initialization
tree_nodeRef scope
this node defines the scope of the pragma
tree_nodeRef body
Is the body of the statement.
tree_nodeRef min
minimum values this SSA may reach
tree_nodeRef op0
The first operand of the binary expression.
tree_nodeRef op0
op0 is the operand 0 (macro CASE_LOW) of the case label expression
tree_nodeRef step
STEP integer constant.
This struct specifies reference to particular overloaded struct method The tree walker structure of t...
struct definition of the common part of a gimple with virtual operands
This struct represent a 'return' statement.
This struct specifies a multi-way-if construct.
This struct specifies the real_cst node.
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) ...
tree_nodeRef op0
The first operand of the Quaternary expression.
tree_nodeRef op0
The first operand of the ternary expression.
tree_nodeRef op1
The sections part (the tree_node is a omp_sections_pragma one)
PointToSolutionRef use_set
The point-to set used by this gimple node.
tree_nodeRef vfld
FIXME: check the meaning.
tree_nodeRef idx2
INDEX register.
This struct specifies the case_label_expr node.
tree_nodeRef type
type field holds the data type of the object, when relevant.
tree_nodeRef op1
The second operand of the binary expression.
Classes specification of the tree_node data structures not present in the gcc.
tree_nodeRef inst
inst field holds the template instantiation vector.
Low-level memory addressing.
tree_nodeRef clob
clob is the operand 3: ASM_CLOBBERS, this represents the clobbers for the statement.
refcount< tree_node > tree_nodeRef
RefCount type definition of the tree_node class structure.
tree_nodeRef valu
purp is the TREE_VALUE field which stores the elements of the list.
tree_nodeRef purp
purp is the TREE_PURPOSE field occasionally used as well to get the effect of Lisp association lists...
std::list< tree_nodeRef > list_of_phi
list_of_phi is a list of eventual phi node presents in the basic block.
This struct specifies the ssa_name node.
TreeNodeSet vuses
vuses of this statement
tree_nodeRef next
Is the next statement.
tree_nodeRef vdef
vdef of this statement
tree_nodeRef elts
field elts is the type of an array element (tree-dump.c use the macro TREE_TYPE)
tree_nodeRef ptd
If pointer mem point to type.
tree_nodeRef op
op field is the operand of this node
This struct specifies the gimple_goto node.
tree_nodeRef expr
Is the statement given by the expression.
This struct specifies the for expression Used to represent a for construct.
struct definition of the integer_type tree node.
struct definition of the integer_type tree node.
tree_nodeRef op1
the vec of CASE_LABEL_EXPRs
#define NO_VISIT
constant used to avoid member visit
std::vector< tree_nodeRef > variables
Set of variables that this pointer may point to.
This struct specifies a hint for branch prediction.
tree_nodeRef op2
postincrement
tree_nodeRef type
starting from GCC 4.7.2 ssa_name has a type
tree_nodeRef op
PACK_EXPANSION_PATTERN.
struct definition of the binary node structures.
tree_nodeRef smt_ann
symbol_memory_tag annotation
tree_nodeRef type
type field is the type of the node
This struct specifies the tree_vec node.
tree_nodeRef arg
arguments stored in the argument pack
tree_nodeRef op8
eighth operand
tree_nodeRef op
op field is the operand of the unary expression
tree_nodeRef smt_ann
symbol_memory_tag annotation
tree_nodeRef body
body is the operand 1 (GIMPLE_BIND_BODY), this is the body, the expression to be computed using the v...
tree_nodeRef op0
The boolean condition.
tree_nodeRef symbol
static or global variable
tree_nodeRef scpe
scope declaration
tree_nodeRef real
real is the TREE_REALPART which content is other constant node.
This struct specifies the gimple_asm node.
tree_nodeRef inline_body
java inline body
tree_nodeRef op1
The second operand of the ternary expression.
tree_nodeRef max
maximum values this SSA may reach
tree_nodeRef size
size field holds the size of datum, in bits.
This struct specifies the gimple_call node.
std::list< tree_nodeRef > list_of_stmt
list_of_stmt is the list of statements stored in the basic block.
tree_nodeRef op5
fifth operand
tree_nodeRef offset
OFFSET integer constant.
struct definition of the declaration node structures.
tree_nodeRef op2
The third operand of the Quaternary expression.
Class specification of the manager of the tree structures extracted from the raw file.
tree_nodeRef chan
Is the chain.
This struct specifies the while expression Used to represent a while construct.
std::vector< tree_nodeRef > pragmas
list of pragmas associated to the function
tree_nodeRef fn
fn is the operand 0 of the call expression: this is the function
Represents a type expression that will be expanded into a list of types when instantiated with one or...
Memory tags used in tree-ssa to represent memory locations in virtual SSA.
#define SET_NODE_ID(field, type)
#define THROW_ASSERT(cond, str_expr)
helper function used to check an assert and if needed to throw an error in a standard way ...