Line data Source code
1 : /* run-rtl-passes.cc - Run RTL passes directly from frontend
2 : Copyright (C) 2016-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
6 : GCC is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation; either version 3, or (at your option) any later
9 : version.
10 :
11 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with GCC; see the file COPYING3. If not see
18 : <http://www.gnu.org/licenses/>. */
19 :
20 : #include "config.h"
21 : #include "system.h"
22 : #include "coretypes.h"
23 : #include "target.h"
24 : #include "rtl.h"
25 : #include "function.h"
26 : #include "basic-block.h"
27 : #include "tree-pass.h"
28 : #include "context.h"
29 : #include "pass_manager.h"
30 : #include "bitmap.h"
31 : #include "df.h"
32 : #include "regs.h"
33 : #include "output.h"
34 : #include "debug.h" /* for debug_hooks. */
35 : #include "insn-attr-common.h" /* for INSN_SCHEDULING. */
36 : #include "insn-attr.h" /* for init_sched_attrs. */
37 : #include "run-rtl-passes.h"
38 :
39 : /* Run the backend passes, starting at the given pass.
40 : Take ownership of INITIAL_PASS_NAME. */
41 :
42 : void
43 23 : run_rtl_passes (char *initial_pass_name)
44 : {
45 23 : cfun->pass_startwith = initial_pass_name;
46 23 : max_regno = max_reg_num ();
47 :
48 : /* cgraphunit.cc normally handles this. */
49 23 : switch_to_section (text_section);
50 23 : (*debug_hooks->assembly_start) ();
51 :
52 23 : if (initial_pass_name)
53 : {
54 : /* Pass "expand" normally sets this up. */
55 : #ifdef INSN_SCHEDULING
56 21 : init_sched_attrs ();
57 : #endif
58 21 : bitmap_obstack_initialize (NULL);
59 21 : bitmap_obstack_initialize (®_obstack);
60 21 : opt_pass *rest_of_compilation
61 21 : = g->get_passes ()->get_rest_of_compilation ();
62 21 : gcc_assert (rest_of_compilation);
63 21 : execute_pass_list (cfun, rest_of_compilation);
64 :
65 21 : opt_pass *clean_slate = g->get_passes ()->get_clean_slate ();
66 21 : gcc_assert (clean_slate);
67 21 : execute_pass_list (cfun, clean_slate);
68 21 : bitmap_obstack_release (®_obstack);
69 : }
70 : else
71 : {
72 2 : opt_pass *clean_slate = g->get_passes ()->get_clean_slate ();
73 2 : gcc_assert (clean_slate);
74 2 : execute_pass_list (cfun, clean_slate);
75 : }
76 :
77 23 : cfun->curr_properties |= PROP_rtl;
78 23 : free (initial_pass_name);
79 23 : }
|