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
6fd5ac08
Commit
6fd5ac08
authored
Apr 16, 1996
by
Jim Wilson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(push_reload): Add extra reload for inside of SUBREG if
it is CONSTANT_P. From-SVN: r11833
parent
8b295000
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
14 deletions
+22
-14
gcc/reload.c
+22
-14
No files found.
gcc/reload.c
View file @
6fd5ac08
...
@@ -926,18 +926,23 @@ push_reload (in, out, inloc, outloc, class,
...
@@ -926,18 +926,23 @@ push_reload (in, out, inloc, outloc, class,
However, we must reload the inner reg *as well as* the subreg in
However, we must reload the inner reg *as well as* the subreg in
that case. */
that case. */
/* Similar issue for (SUBREG constant ...) if it was not handled by the
code above. This can happen if SUBREG_WORD != 0. */
if
(
in
!=
0
&&
GET_CODE
(
in
)
==
SUBREG
if
(
in
!=
0
&&
GET_CODE
(
in
)
==
SUBREG
&&
GET_CODE
(
SUBREG_REG
(
in
))
==
REG
&&
(
CONSTANT_P
(
SUBREG_REG
(
in
))
&&
REGNO
(
SUBREG_REG
(
in
))
<
FIRST_PSEUDO_REGISTER
||
(
GET_CODE
(
SUBREG_REG
(
in
))
==
REG
&&
(
!
HARD_REGNO_MODE_OK
(
REGNO
(
SUBREG_REG
(
in
))
+
SUBREG_WORD
(
in
),
&&
REGNO
(
SUBREG_REG
(
in
))
<
FIRST_PSEUDO_REGISTER
inmode
)
&&
(
!
HARD_REGNO_MODE_OK
(
REGNO
(
SUBREG_REG
(
in
))
||
(
GET_MODE_SIZE
(
inmode
)
<=
UNITS_PER_WORD
+
SUBREG_WORD
(
in
),
&&
(
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
in
)))
inmode
)
>
UNITS_PER_WORD
)
||
(
GET_MODE_SIZE
(
inmode
)
<=
UNITS_PER_WORD
&&
((
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
in
)))
&&
(
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
in
)))
/
UNITS_PER_WORD
)
>
UNITS_PER_WORD
)
!=
HARD_REGNO_NREGS
(
REGNO
(
SUBREG_REG
(
in
)),
&&
((
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
in
)))
GET_MODE
(
SUBREG_REG
(
in
)))))))
/
UNITS_PER_WORD
)
!=
HARD_REGNO_NREGS
(
REGNO
(
SUBREG_REG
(
in
)),
GET_MODE
(
SUBREG_REG
(
in
)))))))))
{
{
/* This relies on the fact that emit_reload_insns outputs the
/* This relies on the fact that emit_reload_insns outputs the
instructions for input reloads of type RELOAD_OTHER in the same
instructions for input reloads of type RELOAD_OTHER in the same
...
@@ -950,7 +955,6 @@ push_reload (in, out, inloc, outloc, class,
...
@@ -950,7 +955,6 @@ push_reload (in, out, inloc, outloc, class,
dont_remove_subreg
=
1
;
dont_remove_subreg
=
1
;
}
}
/* Similarly for paradoxical and problematical SUBREGs on the output.
/* Similarly for paradoxical and problematical SUBREGs on the output.
Note that there is no reason we need worry about the previous value
Note that there is no reason we need worry about the previous value
of SUBREG_REG (out); even if wider than out,
of SUBREG_REG (out); even if wider than out,
...
@@ -1271,9 +1275,13 @@ push_reload (in, out, inloc, outloc, class,
...
@@ -1271,9 +1275,13 @@ push_reload (in, out, inloc, outloc, class,
For example, we may now have both IN and OUT
For example, we may now have both IN and OUT
while the old one may have just one of them. */
while the old one may have just one of them. */
if
(
inmode
!=
VOIDmode
)
/* The modes can be different. If they are, we want to reload in
the larger mode, so that the value is valid for both modes. */
if
(
inmode
!=
VOIDmode
&&
GET_MODE_SIZE
(
inmode
)
>
GET_MODE_SIZE
(
reload_inmode
[
i
]))
reload_inmode
[
i
]
=
inmode
;
reload_inmode
[
i
]
=
inmode
;
if
(
outmode
!=
VOIDmode
)
if
(
outmode
!=
VOIDmode
&&
GET_MODE_SIZE
(
outmode
)
>
GET_MODE_SIZE
(
reload_outmode
[
i
]))
reload_outmode
[
i
]
=
outmode
;
reload_outmode
[
i
]
=
outmode
;
if
(
in
!=
0
)
if
(
in
!=
0
)
reload_in
[
i
]
=
in
;
reload_in
[
i
]
=
in
;
...
...
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