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
53895717
Commit
53895717
authored
Dec 01, 2000
by
Bernd Schmidt
Committed by
Bernd Schmidt
Dec 01, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Further tweak cant_combine_insn_p
From-SVN: r37915
parent
13f9714b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
38 deletions
+20
-38
gcc/ChangeLog
+7
-0
gcc/combine.c
+13
-38
No files found.
gcc/ChangeLog
View file @
53895717
2000-12-01 Bernd Schmidt <bernds@redhat.co.uk>
* combine.c (cant_combine_insn_p): Only disallow insns involving
hard regs if they are reg-reg moves.
(try_combine, can_combine_p, combinable_i3pat): Delete old
SMALL_REGISTER_CLASSES tests.
2000-12-01 Alexandre Oliva <aoliva@redhat.com>
* config/sh/sh.c (shiftcosts): Don't get INTVAL before testing
...
...
gcc/combine.c
View file @
53895717
...
...
@@ -1117,12 +1117,7 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
insns. Eliminate this problem by not combining with such an insn.
Also, on some machines we don't want to extend the life of a hard
register.
This is the same test done in can_combine except that we don't test
if SRC is a CALL operation to permit a hard register with
SMALL_REGISTER_CLASSES, and that we have to take all_adjacent
into account. */
register. */
if
(
GET_CODE
(
src
)
==
REG
&&
((
REGNO
(
dest
)
<
FIRST_PSEUDO_REGISTER
...
...
@@ -1135,11 +1130,7 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
reload can't handle a conflict with constraints of other
inputs. */
||
(
REGNO
(
src
)
<
FIRST_PSEUDO_REGISTER
&&
(
!
HARD_REGNO_MODE_OK
(
REGNO
(
src
),
GET_MODE
(
src
))
||
(
SMALL_REGISTER_CLASSES
&&
((
!
all_adjacent
&&
!
REG_USERVAR_P
(
src
))
||
(
FUNCTION_VALUE_REGNO_P
(
REGNO
(
src
))
&&
!
REG_USERVAR_P
(
src
))))))))
&&
!
HARD_REGNO_MODE_OK
(
REGNO
(
src
),
GET_MODE
(
src
)))))
return
0
;
}
else
if
(
GET_CODE
(
dest
)
!=
CC0
)
...
...
@@ -1292,10 +1283,6 @@ sets_function_arg_p (pat)
If I1_NOT_IN_SRC is non-zero, it means that finding I1 in the source
of a SET must prevent combination from occurring.
On machines where SMALL_REGISTER_CLASSES is non-zero, we don't combine
if the destination of a SET is a hard register that isn't a user
variable.
Before doing the above check, we first try to expand a field assignment
into a set of logical operations.
...
...
@@ -1364,11 +1351,10 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed)
&&
(
reg_overlap_mentioned_p
(
i2dest
,
inner_dest
)
||
(
i1dest
&&
reg_overlap_mentioned_p
(
i1dest
,
inner_dest
))))
/* This is the same test done in can_combine_p except that we
allow a hard register with SMALL_REGISTER_CLASSES if SRC is a
CALL operation. Moreover, we can't test all_adjacent; we don't
have to, since this instruction will stay in place, thus we are
not considering increasing the lifetime of INNER_DEST.
/* This is the same test done in can_combine_p except we can't test
all_adjacent; we don't have to, since this instruction will stay
in place, thus we are not considering increasing the lifetime of
INNER_DEST.
Also, if this insn sets a function argument, combining it with
something that might need a spill could clobber a previous
...
...
@@ -1378,13 +1364,7 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed)
||
(
GET_CODE
(
inner_dest
)
==
REG
&&
REGNO
(
inner_dest
)
<
FIRST_PSEUDO_REGISTER
&&
(
!
HARD_REGNO_MODE_OK
(
REGNO
(
inner_dest
),
GET_MODE
(
inner_dest
))
||
(
SMALL_REGISTER_CLASSES
&&
GET_CODE
(
src
)
!=
CALL
&&
!
REG_USERVAR_P
(
inner_dest
)
&&
(
FUNCTION_VALUE_REGNO_P
(
REGNO
(
inner_dest
))
||
(
FUNCTION_ARG_REGNO_P
(
REGNO
(
inner_dest
))
&&
i3
!=
0
&&
sets_function_arg_p
(
prev_nonnote_insn
(
i3
)))))))
GET_MODE
(
inner_dest
))))
||
(
i1_not_in_src
&&
reg_overlap_mentioned_p
(
i1dest
,
src
)))
return
0
;
...
...
@@ -1485,14 +1465,13 @@ cant_combine_insn_p (insn)
return
0
;
src
=
SET_SRC
(
set
);
dest
=
SET_DEST
(
set
);
if
(
REG_P
(
src
)
&&
REGNO
(
src
)
<
FIRST_PSEUDO_REGISTER
&&
!
fixed_regs
[
REGNO
(
src
)])
return
1
;
if
(
REG_P
(
dest
)
&&
REGNO
(
dest
)
<
FIRST_PSEUDO_REGISTER
&&
!
fixed_regs
[
REGNO
(
dest
)])
if
(
REG_P
(
src
)
&&
REG_P
(
dest
)
&&
((
REGNO
(
src
)
<
FIRST_PSEUDO_REGISTER
&&
!
fixed_regs
[
REGNO
(
src
)])
||
(
REGNO
(
dest
)
<
FIRST_PSEUDO_REGISTER
&&
!
fixed_regs
[
REGNO
(
dest
)])))
return
1
;
return
0
;
}
...
...
@@ -1595,10 +1574,6 @@ try_combine (i3, i2, i1, new_direct_jump_p)
if
(
i1
==
0
&&
GET_CODE
(
i3
)
==
INSN
&&
GET_CODE
(
PATTERN
(
i3
))
==
SET
&&
GET_CODE
(
SET_SRC
(
PATTERN
(
i3
)))
==
REG
&&
REGNO
(
SET_SRC
(
PATTERN
(
i3
)))
>=
FIRST_PSEUDO_REGISTER
&&
(
!
SMALL_REGISTER_CLASSES
||
(
GET_CODE
(
SET_DEST
(
PATTERN
(
i3
)))
!=
REG
||
REGNO
(
SET_DEST
(
PATTERN
(
i3
)))
>=
FIRST_PSEUDO_REGISTER
||
REG_USERVAR_P
(
SET_DEST
(
PATTERN
(
i3
)))))
&&
find_reg_note
(
i3
,
REG_DEAD
,
SET_SRC
(
PATTERN
(
i3
)))
&&
GET_CODE
(
PATTERN
(
i2
))
==
PARALLEL
&&
!
side_effects_p
(
SET_DEST
(
PATTERN
(
i3
)))
...
...
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