/* parsing language hook */ static void slang_parse_file () { int i; for(i = 0; i<num_in_fnames; ++i) { parse_program(in_fnames[i]); } #if 0 tree char_p = build_pointer_type (char_type_node); tree puts_type = build_function_type_list (integer_type_node, char_p, NULL_TREE); tree puts_fndecl = build_function_decl ("puts", true, puts_type); tree main_type = build_function_type_list (integer_type_node, NULL_TREE); tree main_fndecl = build_function_decl ("main", false, main_type); const char *msg = "HelloWorld , ... This is pradeeps compiler"; tree hello_str = build_string_literal (strlen(msg) + 1, msg); tree call = build_call_expr (puts_fndecl,1, hello_str); tree block = make_node(BLOCK); tree c1 = build_pointer_type (char_type_node); tree stmts = NULL_TREE ;//alloc_stmt_list (); append_to_statement_list (call, &stmts); build_function (main_fndecl, stmts, block); FILE *fd = fopen("/home/pradeep/Desktop/dump.txt","w"); gimplify_function_tree (main_fndecl); dump_function_to_file (main_fndecl, fd, 0); fclose(fd); cgraph_finalize_function (main_fndecl, false); current_function_decl = NULL_TREE; pop_cfun(); #endif }
bool cgraph_process_new_functions (void) { bool output = false; tree fndecl; struct cgraph_node *node; /* Note that this queue may grow as its being processed, as the new functions may generate new ones. */ while (cgraph_new_nodes) { node = cgraph_new_nodes; fndecl = node->decl; cgraph_new_nodes = cgraph_new_nodes->next_needed; switch (cgraph_state) { case CGRAPH_STATE_CONSTRUCTION: /* At construction time we just need to finalize function and move it into reachable functions list. */ node->next_needed = NULL; cgraph_finalize_function (fndecl, false); cgraph_mark_reachable_node (node); output = true; break; case CGRAPH_STATE_IPA: case CGRAPH_STATE_IPA_SSA: /* When IPA optimization already started, do all essential transformations that has been already performed on the whole cgraph but not on this function. */ gimple_register_cfg_hooks (); if (!node->analyzed) cgraph_analyze_function (node); push_cfun (DECL_STRUCT_FUNCTION (fndecl)); current_function_decl = fndecl; compute_inline_parameters (node); if ((cgraph_state == CGRAPH_STATE_IPA_SSA && !gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl))) /* When not optimizing, be sure we run early local passes anyway to expand OMP. */ || !optimize) execute_pass_list (pass_early_local_passes.pass.sub); free_dominance_info (CDI_POST_DOMINATORS); free_dominance_info (CDI_DOMINATORS); pop_cfun (); current_function_decl = NULL; break; case CGRAPH_STATE_EXPANSION: /* Functions created during expansion shall be compiled directly. */ node->output = 0; cgraph_expand_function (node); break; default: gcc_unreachable (); break; } cgraph_call_function_insertion_hooks (node); } return output; }