Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
deced1e2
Commit
deced1e2
authored
Jun 10, 2011
by
Xinliang David Li
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
re checking -fdump-passes
From-SVN: r174930
parent
71fb4f92
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
164 additions
and
7 deletions
+164
-7
gcc/ChangeLog
+11
-0
gcc/cgraphunit.c
+3
-0
gcc/common.opt
+4
-0
gcc/doc/invoke.texi
+8
-1
gcc/passes.c
+123
-6
gcc/testsuite/gcc.dg/dump-pass.c
+14
-0
gcc/tree-pass.h
+1
-0
No files found.
gcc/ChangeLog
View file @
deced1e2
2011-06-10 David Li <davidxl@google.com>
* cgraphunit.c (cgraph_finalize_compilation_unit): Pass dump.
* passes.c (passr_eq): New function.
(create_pass_tab): New function.
(pass_traverse): New function.
(dump_one_pass): New function.
(dump_pass_list): New function.
(dump_passes): New function.
2011-06-10 Jan Hubicka <jh@suse.cz>
* cgraph.c (cgraph_set_nothrow_flag_1): Update cgraph after
...
...
@@ -331,6 +341,7 @@
register classes.
* doc/tm.texi: Regenerate.
>>>>>>> .r174929
2011-06-09 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/49307
...
...
gcc/cgraphunit.c
View file @
deced1e2
...
...
@@ -1106,6 +1106,9 @@ cgraph_finalize_compilation_unit (void)
fflush
(
stderr
);
}
if
(
flag_dump_passes
)
dump_passes
();
/* Gimplify and lower all functions, compute reachability and
remove unreachable nodes. */
cgraph_analyze_functions
();
...
...
gcc/common.opt
View file @
deced1e2
...
...
@@ -1012,6 +1012,10 @@ fdump-noaddr
Common Report Var(flag_dump_noaddr)
Suppress output of addresses in debugging dumps
fdump-passes
Common Var(flag_dump_passes) Init(0)
Dump optimization passes
fdump-unnumbered
Common Report Var(flag_dump_unnumbered)
Suppress output of instruction numbers, line number notes and addresses in debugging dumps
...
...
gcc/doc/invoke.texi
View file @
deced1e2
...
...
@@ -291,6 +291,7 @@ Objective-C and Objective-C++ Dialects}.
-
fdump
-
translation
-
unit
@
r
{[}-@
var
{
n
}@
r
{]}
@
gol
-
fdump
-
class
-
hierarchy
@
r
{[}-@
var
{
n
}@
r
{]}
@
gol
-
fdump
-
ipa
-
all
-
fdump
-
ipa
-
cgraph
-
fdump
-
ipa
-
inline
@
gol
-
fdump
-
passes
@
gol
-
fdump
-
statistics
@
gol
-
fdump
-
tree
-
all
@
gol
-
fdump
-
tree
-
original
@
r
{[}-@
var
{
n
}@
r
{]}
@
gol
...
...
@@ -5071,7 +5072,8 @@ pair seperated by a colon. The range is inclusive in both ends. If the range
is
trivial
,
the
number
pair
can
be
simplified
as
a
single
number
.
If
the
function
's cgraph node'
s
@
var
{
uid
}
is
falling
within
one
of
the
specified
ranges
,
the
@
var
{
pass
}
is
disabled
for
that
function
.
The
@
var
{
uid
}
is
shown
in
the
function
header
of
a
dump
file
.
function
header
of
a
dump
file
,
and
the
pass
names
can
be
dumped
by
using
option
@
option
{-
fdump
-
passes
}.
@
item
-
fdisable
-
tree
-@
var
{
pass
}
@
item
-
fdisable
-
tree
-@
var
{
pass
}=@
var
{
range
-
list
}
...
...
@@ -5495,6 +5497,11 @@ Dump after function inlining.
@end table
@item -fdump-passes
@opindex fdump-passes
Dump the list of optimization passes that are turned on and off by
the current command line options.
@item -fdump-statistics-@var{option}
@opindex fdump-statistics
Enable and control dumping of pass statistics in a separate file. The
...
...
gcc/passes.c
View file @
deced1e2
...
...
@@ -478,7 +478,7 @@ passr_eq (const void *p1, const void *p2)
return
!
strcmp
(
s1
->
unique_name
,
s2
->
unique_name
);
}
static
htab_t
pass_name_tab
=
NULL
;
static
htab_t
name_to_pass_map
=
NULL
;
/* Register PASS with NAME. */
...
...
@@ -488,11 +488,11 @@ register_pass_name (struct opt_pass *pass, const char *name)
struct
pass_registry
**
slot
;
struct
pass_registry
pr
;
if
(
!
pass_name_tab
)
pass_name_tab
=
htab_create
(
256
,
passr_hash
,
passr_eq
,
NULL
);
if
(
!
name_to_pass_map
)
name_to_pass_map
=
htab_create
(
256
,
passr_hash
,
passr_eq
,
NULL
);
pr
.
unique_name
=
name
;
slot
=
(
struct
pass_registry
**
)
htab_find_slot
(
pass_name_tab
,
&
pr
,
INSERT
);
slot
=
(
struct
pass_registry
**
)
htab_find_slot
(
name_to_pass_map
,
&
pr
,
INSERT
);
if
(
!*
slot
)
{
struct
pass_registry
*
new_pr
;
...
...
@@ -506,6 +506,124 @@ register_pass_name (struct opt_pass *pass, const char *name)
return
;
/* Ignore plugin passes. */
}
/* Map from pass id to canonicalized pass name. */
typedef
const
char
*
char_ptr
;
DEF_VEC_P
(
char_ptr
);
DEF_VEC_ALLOC_P
(
char_ptr
,
heap
);
static
VEC
(
char_ptr
,
heap
)
*
pass_tab
=
NULL
;
/* Callback function for traversing NAME_TO_PASS_MAP. */
static
int
pass_traverse
(
void
**
slot
,
void
*
data
ATTRIBUTE_UNUSED
)
{
struct
pass_registry
**
p
=
(
struct
pass_registry
**
)
slot
;
struct
opt_pass
*
pass
=
(
*
p
)
->
pass
;
gcc_assert
(
pass
->
static_pass_number
>
0
);
gcc_assert
(
pass_tab
);
VEC_replace
(
char_ptr
,
pass_tab
,
pass
->
static_pass_number
,
(
*
p
)
->
unique_name
);
return
1
;
}
/* The function traverses NAME_TO_PASS_MAP and creates a pass info
table for dumping purpose. */
static
void
create_pass_tab
(
void
)
{
if
(
!
flag_dump_passes
)
return
;
VEC_safe_grow_cleared
(
char_ptr
,
heap
,
pass_tab
,
passes_by_id_size
+
1
);
htab_traverse
(
name_to_pass_map
,
pass_traverse
,
NULL
);
}
static
bool
override_gate_status
(
struct
opt_pass
*
,
tree
,
bool
);
/* Dump the instantiated name for PASS. IS_ON indicates if PASS
is turned on or not. */
static
void
dump_one_pass
(
struct
opt_pass
*
pass
,
int
pass_indent
)
{
int
indent
=
3
*
pass_indent
;
const
char
*
pn
;
bool
is_on
,
is_really_on
;
is_on
=
(
pass
->
gate
==
NULL
)
?
true
:
pass
->
gate
();
is_really_on
=
override_gate_status
(
pass
,
current_function_decl
,
is_on
);
if
(
pass
->
static_pass_number
<=
0
)
pn
=
pass
->
name
;
else
pn
=
VEC_index
(
char_ptr
,
pass_tab
,
pass
->
static_pass_number
);
fprintf
(
stderr
,
"%*s%-40s%*s:%s%s
\n
"
,
indent
,
" "
,
pn
,
(
15
-
indent
<
0
?
0
:
15
-
indent
),
" "
,
is_on
?
" ON"
:
" OFF"
,
((
!
is_on
)
==
(
!
is_really_on
)
?
""
:
(
is_really_on
?
" (FORCED_ON)"
:
" (FORCED_OFF)"
)));
}
/* Dump pass list PASS with indentation INDENT. */
static
void
dump_pass_list
(
struct
opt_pass
*
pass
,
int
indent
)
{
do
{
dump_one_pass
(
pass
,
indent
);
if
(
pass
->
sub
)
dump_pass_list
(
pass
->
sub
,
indent
+
1
);
pass
=
pass
->
next
;
}
while
(
pass
);
}
/* Dump all optimization passes. */
void
dump_passes
(
void
)
{
struct
cgraph_node
*
n
,
*
node
=
NULL
;
tree
save_fndecl
=
current_function_decl
;
create_pass_tab
();
n
=
cgraph_nodes
;
while
(
n
)
{
if
(
DECL_STRUCT_FUNCTION
(
n
->
decl
))
{
node
=
n
;
break
;
}
n
=
n
->
next
;
}
if
(
!
node
)
return
;
push_cfun
(
DECL_STRUCT_FUNCTION
(
node
->
decl
));
current_function_decl
=
node
->
decl
;
dump_pass_list
(
all_lowering_passes
,
1
);
dump_pass_list
(
all_small_ipa_passes
,
1
);
dump_pass_list
(
all_regular_ipa_passes
,
1
);
dump_pass_list
(
all_lto_gen_passes
,
1
);
dump_pass_list
(
all_passes
,
1
);
pop_cfun
();
current_function_decl
=
save_fndecl
;
}
/* Returns the pass with NAME. */
static
struct
opt_pass
*
...
...
@@ -513,9 +631,8 @@ get_pass_by_name (const char *name)
{
struct
pass_registry
**
slot
,
pr
;
gcc_assert
(
pass_name_tab
);
pr
.
unique_name
=
name
;
slot
=
(
struct
pass_registry
**
)
htab_find_slot
(
pass_name_tab
,
slot
=
(
struct
pass_registry
**
)
htab_find_slot
(
name_to_pass_map
,
&
pr
,
NO_INSERT
);
if
(
!
slot
||
!*
slot
)
...
...
gcc/testsuite/gcc.dg/dump-pass.c
View file @
deced1e2
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-passes" } */
unsigned
res
;
void
foo
(
unsigned
code
,
int
len
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
res
|=
code
&
1
;
}
/* { dg-prune-output ".*" } */
gcc/tree-pass.h
View file @
deced1e2
...
...
@@ -639,5 +639,6 @@ extern void do_per_function_toporder (void (*) (void *), void *);
extern
void
disable_pass
(
const
char
*
);
extern
void
enable_pass
(
const
char
*
);
extern
void
dump_passes
(
void
);
#endif
/* GCC_TREE_PASS_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment