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
65e9fa10
Commit
65e9fa10
authored
Jan 31, 2005
by
Kazu Hirata
Committed by
Kazu Hirata
Jan 31, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* cse.c (delete_trivially_dead_insn): Don't iterate.
From-SVN: r94498
parent
0530bc70
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
47 additions
and
49 deletions
+47
-49
gcc/ChangeLog
+4
-0
gcc/cse.c
+43
-49
No files found.
gcc/ChangeLog
View file @
65e9fa10
2005-01-31 Kazu Hirata <kazu@cs.umass.edu>
* cse.c (delete_trivially_dead_insn): Don't iterate.
2005-01-31 Andrew Pinski <pinskia@physics.uc.edu>
2005-01-31 Andrew Pinski <pinskia@physics.uc.edu>
* config/rs6000/rs6000.md (copysignsf3): New expand.
* config/rs6000/rs6000.md (copysignsf3): New expand.
...
...
gcc/cse.c
View file @
65e9fa10
...
@@ -7268,7 +7268,7 @@ delete_trivially_dead_insns (rtx insns, int nreg)
...
@@ -7268,7 +7268,7 @@ delete_trivially_dead_insns (rtx insns, int nreg)
int
*
counts
;
int
*
counts
;
rtx
insn
,
prev
;
rtx
insn
,
prev
;
int
in_libcall
=
0
,
dead_libcall
=
0
;
int
in_libcall
=
0
,
dead_libcall
=
0
;
int
ndead
=
0
,
nlastdead
,
niterations
=
0
;
int
ndead
=
0
;
timevar_push
(
TV_DELETE_TRIVIALLY_DEAD
);
timevar_push
(
TV_DELETE_TRIVIALLY_DEAD
);
/* First count the number of times each register is used. */
/* First count the number of times each register is used. */
...
@@ -7276,65 +7276,59 @@ delete_trivially_dead_insns (rtx insns, int nreg)
...
@@ -7276,65 +7276,59 @@ delete_trivially_dead_insns (rtx insns, int nreg)
for
(
insn
=
next_real_insn
(
insns
);
insn
;
insn
=
next_real_insn
(
insn
))
for
(
insn
=
next_real_insn
(
insns
);
insn
;
insn
=
next_real_insn
(
insn
))
count_reg_usage
(
insn
,
counts
,
1
);
count_reg_usage
(
insn
,
counts
,
1
);
do
/* Go from the last insn to the first and delete insns that only set unused
{
registers or copy a register to itself. As we delete an insn, remove
nlastdead
=
ndead
;
usage counts for registers it uses.
niterations
++
;
/* Go from the last insn to the first and delete insns that only set unused
registers or copy a register to itself. As we delete an insn, remove
usage counts for registers it uses.
The first jump optimization pass may leave a real insn as the last
insn in the function. We must not skip that insn or we may end
up deleting code that is not really dead. */
insn
=
get_last_insn
();
if
(
!
INSN_P
(
insn
))
insn
=
prev_real_insn
(
insn
);
for
(;
insn
;
insn
=
prev
)
The first jump optimization pass may leave a real insn as the last
{
insn in the function. We must not skip that insn or we may end
int
live_insn
=
0
;
up deleting code that is not really dead. */
insn
=
get_last_insn
();
if
(
!
INSN_P
(
insn
))
insn
=
prev_real_insn
(
insn
);
prev
=
prev_real_insn
(
insn
);
for
(;
insn
;
insn
=
prev
)
{
int
live_insn
=
0
;
/* Don't delete any insns that are part of a libcall block unless
prev
=
prev_real_insn
(
insn
);
we can delete the whole libcall block.
Flow or loop might get confused if we did that. Remember
/* Don't delete any insns that are part of a libcall block unless
that we are scanning backwards. */
we can delete the whole libcall block.
if
(
find_reg_note
(
insn
,
REG_RETVAL
,
NULL_RTX
))
{
Flow or loop might get confused if we did that. Remember
in_libcall
=
1
;
that we are scanning backwards. */
live_insn
=
1
;
if
(
find_reg_note
(
insn
,
REG_RETVAL
,
NULL_RTX
))
dead_libcall
=
dead_libcall_p
(
insn
,
counts
);
{
}
in_libcall
=
1
;
else
if
(
in_libcall
)
live_insn
=
1
;
live_insn
=
!
dead_libcall
;
dead_libcall
=
dead_libcall_p
(
insn
,
counts
);
else
}
live_insn
=
insn_live_p
(
insn
,
counts
);
else
if
(
in_libcall
)
live_insn
=
!
dead_libcall
;
else
live_insn
=
insn_live_p
(
insn
,
counts
);
/* If this is a dead insn, delete it and show registers in it aren't
/* If this is a dead insn, delete it and show registers in it aren't
being used. */
being used. */
if
(
!
live_insn
)
if
(
!
live_insn
)
{
{
count_reg_usage
(
insn
,
counts
,
-
1
);
count_reg_usage
(
insn
,
counts
,
-
1
);
delete_insn_and_edges
(
insn
);
delete_insn_and_edges
(
insn
);
ndead
++
;
ndead
++
;
}
}
if
(
find_reg_note
(
insn
,
REG_LIBCALL
,
NULL_RTX
))
if
(
find_reg_note
(
insn
,
REG_LIBCALL
,
NULL_RTX
))
{
{
in_libcall
=
0
;
in_libcall
=
0
;
dead_libcall
=
0
;
dead_libcall
=
0
;
}
}
}
}
}
while
(
ndead
!=
nlastdead
);
if
(
dump_file
&&
ndead
)
if
(
dump_file
&&
ndead
)
fprintf
(
dump_file
,
"Deleted %i trivially dead insns
; %i iterations
\n
"
,
fprintf
(
dump_file
,
"Deleted %i trivially dead insns
\n
"
,
ndead
,
niterations
);
ndead
);
/* Clean up. */
/* Clean up. */
free
(
counts
);
free
(
counts
);
timevar_pop
(
TV_DELETE_TRIVIALLY_DEAD
);
timevar_pop
(
TV_DELETE_TRIVIALLY_DEAD
);
...
...
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