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
ec7c0481
Commit
ec7c0481
authored
Jan 12, 2001
by
Alexandre Oliva
Committed by
Alexandre Oliva
Jan 12, 2001
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reinstated part of the patch that is safe
From-SVN: r38966
parent
c6ca5c69
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
3 deletions
+45
-3
gcc/ChangeLog
+1
-2
gcc/regmove.c
+44
-1
No files found.
gcc/ChangeLog
View file @
ec7c0481
...
@@ -3,8 +3,7 @@
...
@@ -3,8 +3,7 @@
* calls.c (emit_library_call_value_1): Add USEs and CLOBBERs
* calls.c (emit_library_call_value_1): Add USEs and CLOBBERs
to function usage for arguments passed by reference. Optimize
to function usage for arguments passed by reference. Optimize
callee-copied arguments.
callee-copied arguments.
* regmove.c (find_related_toplev): Find uses in function usage.
* regmove.c (replace_in_call_usage): New function.
(replace_in_call_usage): New function.
(fixup_match_1): Call it.
(fixup_match_1): Call it.
* cse.c (cse_insn): Canonicalize registers in function usage.
* cse.c (cse_insn): Canonicalize registers in function usage.
* reload1.c (replace_pseudos_in_call_usage): New function.
* reload1.c (replace_pseudos_in_call_usage): New function.
...
...
gcc/regmove.c
View file @
ec7c0481
/* Move registers around to reduce number of move instructions needed.
/* Move registers around to reduce number of move instructions needed.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000 Free Software Foundation, Inc.
1999, 2000
, 2001
Free Software Foundation, Inc.
This file is part of GNU CC.
This file is part of GNU CC.
...
@@ -1571,6 +1571,45 @@ find_matches (insn, matchp)
...
@@ -1571,6 +1571,45 @@ find_matches (insn, matchp)
return
any_matches
;
return
any_matches
;
}
}
/* Try to replace all occurrences of DST_REG with SRC in LOC, that is
assumed to be in INSN. */
static
void
replace_in_call_usage
(
loc
,
dst_reg
,
src
,
insn
)
rtx
*
loc
;
int
dst_reg
;
rtx
src
;
rtx
insn
;
{
rtx
x
=
*
loc
;
enum
rtx_code
code
;
const
char
*
fmt
;
int
i
,
j
;
if
(
!
x
)
return
;
code
=
GET_CODE
(
x
);
if
(
code
==
REG
)
{
if
(
REGNO
(
x
)
!=
dst_reg
)
return
;
validate_change
(
insn
,
loc
,
src
,
1
);
return
;
}
/* Process each of our operands recursively. */
fmt
=
GET_RTX_FORMAT
(
code
);
for
(
i
=
0
;
i
<
GET_RTX_LENGTH
(
code
);
i
++
,
fmt
++
)
if
(
*
fmt
==
'e'
)
replace_in_call_usage
(
&
XEXP
(
x
,
i
),
dst_reg
,
src
,
insn
);
else
if
(
*
fmt
==
'E'
)
for
(
j
=
0
;
j
<
XVECLEN
(
x
,
i
);
j
++
)
replace_in_call_usage
(
&
XVECEXP
(
x
,
i
,
j
),
dst_reg
,
src
,
insn
);
}
/* Try to replace output operand DST in SET, with input operand SRC. SET is
/* Try to replace output operand DST in SET, with input operand SRC. SET is
the only set in INSN. INSN has just been recognized and constrained.
the only set in INSN. INSN has just been recognized and constrained.
SRC is operand number OPERAND_NUMBER in INSN.
SRC is operand number OPERAND_NUMBER in INSN.
...
@@ -1643,6 +1682,10 @@ fixup_match_1 (insn, set, src, src_subreg, dst, backward, operand_number,
...
@@ -1643,6 +1682,10 @@ fixup_match_1 (insn, set, src, src_subreg, dst, backward, operand_number,
for
(
length
=
s_length
=
0
,
p
=
NEXT_INSN
(
insn
);
p
;
p
=
NEXT_INSN
(
p
))
for
(
length
=
s_length
=
0
,
p
=
NEXT_INSN
(
insn
);
p
;
p
=
NEXT_INSN
(
p
))
{
{
if
(
GET_CODE
(
p
)
==
CALL_INSN
)
replace_in_call_usage
(
&
CALL_INSN_FUNCTION_USAGE
(
p
),
REGNO
(
dst
),
src
,
p
);
/* ??? We can't scan past the end of a basic block without updating
/* ??? We can't scan past the end of a basic block without updating
the register lifetime info (REG_DEAD/basic_block_live_at_start). */
the register lifetime info (REG_DEAD/basic_block_live_at_start). */
if
(
perhaps_ends_bb_p
(
p
))
if
(
perhaps_ends_bb_p
(
p
))
...
...
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