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
6a801cf2
Commit
6a801cf2
authored
Apr 08, 2011
by
Xinliang David Li
Committed by
Xinliang David Li
Apr 08, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
-dA enhancement
From-SVN: r172212
parent
d5f3624e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
4 deletions
+83
-4
gcc/ChangeLog
+6
-0
gcc/final.c
+77
-4
No files found.
gcc/ChangeLog
View file @
6a801cf2
2011-04-08 Xinliang David Li <davidxl@google.com>
* final.c (dump_basic_block_info): New function.
(final): Dump basic block.
(final_scan_insn): Remove old dump.
2011-04-08 Steven G. Kargl <kargl@gcc.gnu.org>
2011-04-08 Steven G. Kargl <kargl@gcc.gnu.org>
PR 47829
PR 47829
...
...
gcc/final.c
View file @
6a801cf2
...
@@ -1672,6 +1672,54 @@ final_end_function (void)
...
@@ -1672,6 +1672,54 @@ final_end_function (void)
dwarf2out_end_epilogue
(
last_linenum
,
last_filename
);
dwarf2out_end_epilogue
(
last_linenum
,
last_filename
);
}
}
/* Dumper helper for basic block information. FILE is the assembly
output file, and INSN is the instruction being emitted. */
static
void
dump_basic_block_info
(
FILE
*
file
,
rtx
insn
,
basic_block
*
start_to_bb
,
basic_block
*
end_to_bb
,
int
bb_map_size
,
int
*
bb_seqn
)
{
basic_block
bb
;
if
(
!
flag_debug_asm
)
return
;
if
(
INSN_UID
(
insn
)
<
bb_map_size
&&
(
bb
=
start_to_bb
[
INSN_UID
(
insn
)])
!=
NULL
)
{
edge
e
;
edge_iterator
ei
;
fprintf
(
file
,
"# BLOCK %d"
,
bb
->
index
);
if
(
bb
->
frequency
)
fprintf
(
file
,
" freq:%d"
,
bb
->
frequency
);
if
(
bb
->
count
)
fprintf
(
file
,
" count:"
HOST_WIDEST_INT_PRINT_DEC
,
bb
->
count
);
fprintf
(
file
,
" seq:%d"
,
(
*
bb_seqn
)
++
);
fprintf
(
file
,
"
\n
# PRED:"
);
FOR_EACH_EDGE
(
e
,
ei
,
bb
->
preds
)
{
dump_edge_info
(
file
,
e
,
0
);
}
fprintf
(
file
,
"
\n
"
);
}
if
(
INSN_UID
(
insn
)
<
bb_map_size
&&
(
bb
=
end_to_bb
[
INSN_UID
(
insn
)])
!=
NULL
)
{
edge
e
;
edge_iterator
ei
;
fprintf
(
asm_out_file
,
"# SUCC:"
);
FOR_EACH_EDGE
(
e
,
ei
,
bb
->
succs
)
{
dump_edge_info
(
asm_out_file
,
e
,
1
);
}
fprintf
(
file
,
"
\n
"
);
}
}
/* Output assembler code for some insns: all or part of a function.
/* Output assembler code for some insns: all or part of a function.
For description of args, see `final_start_function', above. */
For description of args, see `final_start_function', above. */
...
@@ -1682,6 +1730,12 @@ final (rtx first, FILE *file, int optimize_p)
...
@@ -1682,6 +1730,12 @@ final (rtx first, FILE *file, int optimize_p)
int
max_uid
=
0
;
int
max_uid
=
0
;
int
seen
=
0
;
int
seen
=
0
;
/* Used for -dA dump. */
basic_block
*
start_to_bb
=
NULL
;
basic_block
*
end_to_bb
=
NULL
;
int
bb_map_size
=
0
;
int
bb_seqn
=
0
;
last_ignored_compare
=
0
;
last_ignored_compare
=
0
;
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
...
@@ -1706,6 +1760,21 @@ final (rtx first, FILE *file, int optimize_p)
...
@@ -1706,6 +1760,21 @@ final (rtx first, FILE *file, int optimize_p)
CC_STATUS_INIT
;
CC_STATUS_INIT
;
if
(
flag_debug_asm
)
{
basic_block
bb
;
bb_map_size
=
get_max_uid
()
+
1
;
start_to_bb
=
XCNEWVEC
(
basic_block
,
bb_map_size
);
end_to_bb
=
XCNEWVEC
(
basic_block
,
bb_map_size
);
FOR_EACH_BB_REVERSE
(
bb
)
{
start_to_bb
[
INSN_UID
(
BB_HEAD
(
bb
))]
=
bb
;
end_to_bb
[
INSN_UID
(
BB_END
(
bb
))]
=
bb
;
}
}
/* Output the insns. */
/* Output the insns. */
for
(
insn
=
first
;
insn
;)
for
(
insn
=
first
;
insn
;)
{
{
...
@@ -1721,8 +1790,16 @@ final (rtx first, FILE *file, int optimize_p)
...
@@ -1721,8 +1790,16 @@ final (rtx first, FILE *file, int optimize_p)
insn_current_address
=
INSN_ADDRESSES
(
INSN_UID
(
insn
));
insn_current_address
=
INSN_ADDRESSES
(
INSN_UID
(
insn
));
#endif
/* HAVE_ATTR_length */
#endif
/* HAVE_ATTR_length */
dump_basic_block_info
(
file
,
insn
,
start_to_bb
,
end_to_bb
,
bb_map_size
,
&
bb_seqn
);
insn
=
final_scan_insn
(
insn
,
file
,
optimize_p
,
0
,
&
seen
);
insn
=
final_scan_insn
(
insn
,
file
,
optimize_p
,
0
,
&
seen
);
}
}
if
(
flag_debug_asm
)
{
free
(
start_to_bb
);
free
(
end_to_bb
);
}
}
}
const
char
*
const
char
*
...
@@ -1858,10 +1935,6 @@ final_scan_insn (rtx insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
...
@@ -1858,10 +1935,6 @@ final_scan_insn (rtx insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
if
(
targetm
.
asm_out
.
unwind_emit
)
if
(
targetm
.
asm_out
.
unwind_emit
)
targetm
.
asm_out
.
unwind_emit
(
asm_out_file
,
insn
);
targetm
.
asm_out
.
unwind_emit
(
asm_out_file
,
insn
);
if
(
flag_debug_asm
)
fprintf
(
asm_out_file
,
"
\t
%s basic block %d
\n
"
,
ASM_COMMENT_START
,
NOTE_BASIC_BLOCK
(
insn
)
->
index
);
if
((
*
seen
&
(
SEEN_EMITTED
|
SEEN_BB
))
==
SEEN_BB
)
if
((
*
seen
&
(
SEEN_EMITTED
|
SEEN_BB
))
==
SEEN_BB
)
{
{
*
seen
|=
SEEN_EMITTED
;
*
seen
|=
SEEN_EMITTED
;
...
...
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