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
2b4bd1bc
Commit
2b4bd1bc
authored
May 19, 1992
by
Jim Wilson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r1023
parent
4d449554
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
19 additions
and
13 deletions
+19
-13
gcc/combine.c
+5
-2
gcc/config/i960/i960.md
+5
-0
gcc/unroll.c
+9
-11
No files found.
gcc/combine.c
View file @
2b4bd1bc
...
@@ -4686,9 +4686,10 @@ apply_distributive_law (x)
...
@@ -4686,9 +4686,10 @@ apply_distributive_law (x)
case
SUBREG
:
case
SUBREG
:
/* Non-paradoxical SUBREGs distributes over all operations, provided
/* Non-paradoxical SUBREGs distributes over all operations, provided
the inner modes and word numbers are the same, this is an extraction
the inner modes and word numbers are the same, this is an extraction
of a low-order part, and we would not be converting a single-word
of a low-order part, we don't convert an fp operation to int or
vice versa, and we would not be converting a single-word
operation into a multi-word operation. The latter test is not
operation into a multi-word operation. The latter test is not
required, but
we
prevents generating unneeded multi-word operations.
required, but
it
prevents generating unneeded multi-word operations.
Some of the previous tests are redundant given the latter test, but
Some of the previous tests are redundant given the latter test, but
are retained because they are required for correctness.
are retained because they are required for correctness.
...
@@ -4697,6 +4698,8 @@ apply_distributive_law (x)
...
@@ -4697,6 +4698,8 @@ apply_distributive_law (x)
if
(
GET_MODE
(
SUBREG_REG
(
lhs
))
!=
GET_MODE
(
SUBREG_REG
(
rhs
))
if
(
GET_MODE
(
SUBREG_REG
(
lhs
))
!=
GET_MODE
(
SUBREG_REG
(
rhs
))
||
SUBREG_WORD
(
lhs
)
!=
SUBREG_WORD
(
rhs
)
||
SUBREG_WORD
(
lhs
)
!=
SUBREG_WORD
(
rhs
)
||
!
subreg_lowpart_p
(
lhs
)
||
!
subreg_lowpart_p
(
lhs
)
||
(
GET_MODE_CLASS
(
GET_MODE
(
lhs
))
!=
GET_MODE_CLASS
(
GET_MODE
(
SUBREG_REG
(
lhs
))))
||
(
GET_MODE_SIZE
(
GET_MODE
(
lhs
))
||
(
GET_MODE_SIZE
(
GET_MODE
(
lhs
))
<
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
lhs
))))
<
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
lhs
))))
||
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
lhs
)))
>
UNITS_PER_WORD
)
||
GET_MODE_SIZE
(
GET_MODE
(
SUBREG_REG
(
lhs
)))
>
UNITS_PER_WORD
)
...
...
gcc/config/i960/i960.md
View file @
2b4bd1bc
...
@@ -1221,6 +1221,11 @@
...
@@ -1221,6 +1221,11 @@
"ldos %1,%0"
"ldos %1,%0"
[
(set_attr "type" "load")
]
)
[
(set_attr "type" "load")
]
)
;; Using shifts here generates much better code than doing an
`and 255'.
;; This is mainly because the `
and' requires loading the constant separately,
;; the constant is likely to get optimized, and then the compiler can't
;; optimize the
`and' because it doesn't know that one operand is a constant.
(define_expand "zero_extendqisi2"
(define_expand "zero_extendqisi2"
[(set (match_operand:SI 0 "register_operand" "")
[(set (match_operand:SI 0 "register_operand" "")
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
...
...
gcc/unroll.c
View file @
2b4bd1bc
...
@@ -1461,10 +1461,15 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
...
@@ -1461,10 +1461,15 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
for
(
tv
=
bl
->
giv
;
tv
;
tv
=
tv
->
next_iv
)
for
(
tv
=
bl
->
giv
;
tv
;
tv
=
tv
->
next_iv
)
if
(
tv
->
giv_type
==
DEST_ADDR
&&
tv
->
same
==
v
)
if
(
tv
->
giv_type
==
DEST_ADDR
&&
tv
->
same
==
v
)
{
{
/* Increment the giv by the amount that was calculated in
int
this_giv_inc
=
INTVAL
(
giv_inc
);
find_splittable_givs, and saved in add_val. */
tv
->
dest_reg
=
plus_constant
(
tv
->
dest_reg
,
/* Scale this_giv_inc if the multiplicative factors of
INTVAL
(
tv
->
add_val
));
the two givs are different. */
if
(
tv
->
mult_val
!=
v
->
mult_val
)
this_giv_inc
=
(
this_giv_inc
/
INTVAL
(
v
->
mult_val
)
*
INTVAL
(
tv
->
mult_val
));
tv
->
dest_reg
=
plus_constant
(
tv
->
dest_reg
,
this_giv_inc
);
*
tv
->
location
=
tv
->
dest_reg
;
*
tv
->
location
=
tv
->
dest_reg
;
if
(
last_iteration
&&
unroll_type
!=
UNROLL_COMPLETELY
)
if
(
last_iteration
&&
unroll_type
!=
UNROLL_COMPLETELY
)
...
@@ -2598,13 +2603,6 @@ find_splittable_givs (bl, unroll_type, loop_start, loop_end, increment,
...
@@ -2598,13 +2603,6 @@ find_splittable_givs (bl, unroll_type, loop_start, loop_end, increment,
}
}
}
}
/* Overwrite the old add_val, which is no longer needed, and
substitute the amount that the giv is incremented on each
iteration. We need to save this somewhere, so we know how
much to increment split DEST_ADDR giv's in copy_loop_body. */
v
->
add_val
=
giv_inc
;
if
(
loop_dump_stream
)
if
(
loop_dump_stream
)
fprintf
(
loop_dump_stream
,
"DEST_ADDR giv being split.
\n
"
);
fprintf
(
loop_dump_stream
,
"DEST_ADDR giv being split.
\n
"
);
}
}
...
...
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