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
f6d20486
Commit
f6d20486
authored
Nov 01, 1999
by
Richard Henderson
Committed by
Richard Henderson
Nov 01, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* reg-stack.c (convert_regs_1): Handle EH edges specially.
From-SVN: r30336
parent
e40217a7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
5 deletions
+31
-5
gcc/ChangeLog
+4
-0
gcc/reg-stack.c
+27
-5
No files found.
gcc/ChangeLog
View file @
f6d20486
Mon
Nov
1
18
:
09
:
14
1999
Richard
Henderson
<
rth
@cygnus
.
com
>
*
reg
-
stack
.
c
(
convert_regs_1
)
:
Handle
EH
edges
specially
.
Mon
Nov
1
15
:
41
:
01
1999
Mark
P
.
Mitchell
<
mark
@codesourcery
.
com
>
*
bitmap
.
h
(
BITMAP_XMALLOC
)
:
New
macro
.
...
...
gcc/reg-stack.c
View file @
f6d20486
...
...
@@ -2514,12 +2514,34 @@ convert_regs_1 (file, block)
}
}
/* Care for EH edges specially. The normal return path may return
a value in st(0), but the EH path will not, and there's no need
to add popping code to the edge. */
if
(
e
->
flags
&
EDGE_EH
)
{
/* Assert that the lifetimes are as we expect -- one value
live at st(0) on the end of the source block, and no
values live at the beginning of the destination block. */
HARD_REG_SET
tmp
;
CLEAR_HARD_REG_SET
(
tmp
);
GO_IF_HARD_REG_EQUAL
(
BLOCK_INFO
(
e
->
dest
)
->
stack_in
.
reg_set
,
tmp
,
eh1
);
abort
();
eh1
:
SET_HARD_REG_BIT
(
tmp
,
FIRST_STACK_REG
);
GO_IF_HARD_REG_EQUAL
(
BLOCK_INFO
(
e
->
src
)
->
out_reg_set
,
tmp
,
eh2
);
abort
();
eh2
:
;
}
/* It is better to output directly to the end of the block
instead of to the edge, because emit_swap can do minimal
insn scheduling. We can do this when there is only one
edge out, and it is not abnormal. */
if
(
block
->
succ
->
succ_next
==
NULL
&&
!
(
e
->
flags
&
EDGE_ABNORMAL
))
else
if
(
block
->
succ
->
succ_next
==
NULL
&&
!
(
e
->
flags
&
EDGE_ABNORMAL
))
{
/* change_stack kills values in regstack. */
tmpstack
=
regstack
;
...
...
@@ -2532,9 +2554,9 @@ convert_regs_1 (file, block)
{
rtx
seq
,
after
;
/* We don't support abnormal edges. Global takes
care to avoid any live register across them, so
we should never have to
. */
/* We don't support abnormal edges. Global takes
care to
avoid any live register across them, so we should never
have to insert instructions on such edges
. */
if
(
e
->
flags
&
EDGE_ABNORMAL
)
abort
();
...
...
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