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
6c3b938d
Commit
6c3b938d
authored
Feb 21, 2009
by
Richard Sandiford
Committed by
Richard Sandiford
Feb 21, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert last change.
From-SVN: r144357
parent
4c64d3dd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
40 deletions
+38
-40
gcc/ChangeLog
+5
-0
gcc/emit-rtl.c
+0
-11
gcc/loop-iv.c
+33
-29
No files found.
gcc/ChangeLog
View file @
6c3b938d
2009-02-21 Richard Sandiford <rdsandiford@googlemail.com>
* loop-iv.c: Revert last change.
* emit-rtl.c: Likewise.
2008-02-21 H.J. Lu <hongjiu.lu@intel.com>
2008-02-21 H.J. Lu <hongjiu.lu@intel.com>
PR target/39256
PR target/39256
...
...
gcc/emit-rtl.c
View file @
6c3b938d
...
@@ -1232,17 +1232,6 @@ gen_lowpart_common (enum machine_mode mode, rtx x)
...
@@ -1232,17 +1232,6 @@ gen_lowpart_common (enum machine_mode mode, rtx x)
/* Otherwise, we can't do this. */
/* Otherwise, we can't do this. */
return
0
;
return
0
;
}
}
/* Generates a subreg to get the least significant part of EXPR (in mode
INNER_MODE) to OUTER_MODE. */
rtx
lowpart_subreg
(
enum
machine_mode
outer_mode
,
rtx
expr
,
enum
machine_mode
inner_mode
)
{
return
simplify_gen_subreg
(
outer_mode
,
expr
,
inner_mode
,
subreg_lowpart_offset
(
outer_mode
,
inner_mode
));
}
rtx
rtx
gen_highpart
(
enum
machine_mode
mode
,
rtx
x
)
gen_highpart
(
enum
machine_mode
mode
,
rtx
x
)
...
...
gcc/loop-iv.c
View file @
6c3b938d
...
@@ -157,12 +157,15 @@ dump_iv_info (FILE *file, struct rtx_iv *iv)
...
@@ -157,12 +157,15 @@ dump_iv_info (FILE *file, struct rtx_iv *iv)
fprintf
(
file
,
" (first special)"
);
fprintf
(
file
,
" (first special)"
);
}
}
/* Truncate EXPR (which has mode EXPR_MODE) to MODE. */
/* Generates a subreg to get the least significant part of EXPR (in mode
INNER_MODE) to OUTER_MODE. */
static
rtx
rtx
truncate_value
(
enum
machine_mode
mode
,
rtx
expr
,
enum
machine_mode
expr_mode
)
lowpart_subreg
(
enum
machine_mode
outer_mode
,
rtx
expr
,
enum
machine_mode
inner_mode
)
{
{
return
simplify_gen_unary
(
TRUNCATE
,
mode
,
expr
,
expr_mode
);
return
simplify_gen_subreg
(
outer_mode
,
expr
,
inner_mode
,
subreg_lowpart_offset
(
outer_mode
,
inner_mode
));
}
}
static
void
static
void
...
@@ -405,7 +408,7 @@ iv_subreg (struct rtx_iv *iv, enum machine_mode mode)
...
@@ -405,7 +408,7 @@ iv_subreg (struct rtx_iv *iv, enum machine_mode mode)
&&
!
iv
->
first_special
)
&&
!
iv
->
first_special
)
{
{
rtx
val
=
get_iv_value
(
iv
,
const0_rtx
);
rtx
val
=
get_iv_value
(
iv
,
const0_rtx
);
val
=
truncate_value
(
mode
,
val
,
iv
->
extend_mode
);
val
=
lowpart_subreg
(
mode
,
val
,
iv
->
extend_mode
);
iv
->
base
=
val
;
iv
->
base
=
val
;
iv
->
extend
=
UNKNOWN
;
iv
->
extend
=
UNKNOWN
;
...
@@ -1244,7 +1247,7 @@ get_iv_value (struct rtx_iv *iv, rtx iteration)
...
@@ -1244,7 +1247,7 @@ get_iv_value (struct rtx_iv *iv, rtx iteration)
if
(
iv
->
extend_mode
==
iv
->
mode
)
if
(
iv
->
extend_mode
==
iv
->
mode
)
return
val
;
return
val
;
val
=
truncate_value
(
iv
->
mode
,
val
,
iv
->
extend_mode
);
val
=
lowpart_subreg
(
iv
->
mode
,
val
,
iv
->
extend_mode
);
if
(
iv
->
extend
==
UNKNOWN
)
if
(
iv
->
extend
==
UNKNOWN
)
return
val
;
return
val
;
...
@@ -2197,8 +2200,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2197,8 +2200,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
mode
=
iv0
.
mode
;
mode
=
iv0
.
mode
;
size
=
GET_MODE_BITSIZE
(
mode
);
size
=
GET_MODE_BITSIZE
(
mode
);
get_mode_bounds
(
mode
,
(
cond
==
LE
||
cond
==
LT
),
comp_mode
,
&
mmin
,
&
mmax
);
get_mode_bounds
(
mode
,
(
cond
==
LE
||
cond
==
LT
),
comp_mode
,
&
mmin
,
&
mmax
);
mode_mmin
=
truncate_value
(
mode
,
mmin
,
comp_mode
);
mode_mmin
=
lowpart_subreg
(
mode
,
mmin
,
comp_mode
);
mode_mmax
=
truncate_value
(
mode
,
mmax
,
comp_mode
);
mode_mmax
=
lowpart_subreg
(
mode
,
mmax
,
comp_mode
);
if
(
GET_CODE
(
iv0
.
step
)
!=
CONST_INT
||
GET_CODE
(
iv1
.
step
)
!=
CONST_INT
)
if
(
GET_CODE
(
iv0
.
step
)
!=
CONST_INT
||
GET_CODE
(
iv1
.
step
)
!=
CONST_INT
)
goto
fail
;
goto
fail
;
...
@@ -2255,7 +2258,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2255,7 +2258,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
difficult due to possibly infinite loops. */
difficult due to possibly infinite loops. */
if
(
iv0
.
step
==
const0_rtx
)
if
(
iv0
.
step
==
const0_rtx
)
{
{
tmp
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
assumption
=
simplify_gen_relational
(
EQ
,
SImode
,
mode
,
tmp
,
assumption
=
simplify_gen_relational
(
EQ
,
SImode
,
mode
,
tmp
,
mode_mmax
);
mode_mmax
);
if
(
assumption
==
const_true_rtx
)
if
(
assumption
==
const_true_rtx
)
...
@@ -2265,7 +2268,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2265,7 +2268,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
}
}
else
else
{
{
tmp
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
assumption
=
simplify_gen_relational
(
EQ
,
SImode
,
mode
,
tmp
,
assumption
=
simplify_gen_relational
(
EQ
,
SImode
,
mode
,
tmp
,
mode_mmin
);
mode_mmin
);
if
(
assumption
==
const_true_rtx
)
if
(
assumption
==
const_true_rtx
)
...
@@ -2291,7 +2294,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2291,7 +2294,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
{
{
if
(
iv0
.
step
==
const0_rtx
)
if
(
iv0
.
step
==
const0_rtx
)
{
{
tmp
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
if
(
rtx_equal_p
(
tmp
,
mode_mmin
))
if
(
rtx_equal_p
(
tmp
,
mode_mmin
))
{
{
desc
->
infinite
=
desc
->
infinite
=
...
@@ -2302,7 +2305,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2302,7 +2305,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
}
}
else
else
{
{
tmp
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
if
(
rtx_equal_p
(
tmp
,
mode_mmax
))
if
(
rtx_equal_p
(
tmp
,
mode_mmax
))
{
{
desc
->
infinite
=
desc
->
infinite
=
...
@@ -2326,7 +2329,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2326,7 +2329,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
else
else
step
=
iv0
.
step
;
step
=
iv0
.
step
;
delta
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
iv1
.
base
,
iv0
.
base
);
delta
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
iv1
.
base
,
iv0
.
base
);
delta
=
truncate_value
(
mode
,
delta
,
comp_mode
);
delta
=
lowpart_subreg
(
mode
,
delta
,
comp_mode
);
delta
=
simplify_gen_binary
(
UMOD
,
mode
,
delta
,
step
);
delta
=
simplify_gen_binary
(
UMOD
,
mode
,
delta
,
step
);
may_xform
=
const0_rtx
;
may_xform
=
const0_rtx
;
may_not_xform
=
const_true_rtx
;
may_not_xform
=
const_true_rtx
;
...
@@ -2350,8 +2353,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2350,8 +2353,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
{
{
bound
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
mmin
,
step
);
bound
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
mmin
,
step
);
bound
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
bound
,
delta
);
bound
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
bound
,
delta
);
bound
=
truncate_value
(
mode
,
bound
,
comp_mode
);
bound
=
lowpart_subreg
(
mode
,
bound
,
comp_mode
);
tmp
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
may_xform
=
simplify_gen_relational
(
cond
,
SImode
,
mode
,
may_xform
=
simplify_gen_relational
(
cond
,
SImode
,
mode
,
bound
,
tmp
);
bound
,
tmp
);
may_not_xform
=
simplify_gen_relational
(
reverse_condition
(
cond
),
may_not_xform
=
simplify_gen_relational
(
reverse_condition
(
cond
),
...
@@ -2362,8 +2365,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2362,8 +2365,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
{
{
bound
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
mmax
,
step
);
bound
=
simplify_gen_binary
(
MINUS
,
comp_mode
,
mmax
,
step
);
bound
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
bound
,
delta
);
bound
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
bound
,
delta
);
bound
=
truncate_value
(
mode
,
bound
,
comp_mode
);
bound
=
lowpart_subreg
(
mode
,
bound
,
comp_mode
);
tmp
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
may_xform
=
simplify_gen_relational
(
cond
,
SImode
,
mode
,
may_xform
=
simplify_gen_relational
(
cond
,
SImode
,
mode
,
tmp
,
bound
);
tmp
,
bound
);
may_not_xform
=
simplify_gen_relational
(
reverse_condition
(
cond
),
may_not_xform
=
simplify_gen_relational
(
reverse_condition
(
cond
),
...
@@ -2414,8 +2417,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2414,8 +2417,8 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
iv1
.
base
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv1
.
base
,
step
);
iv1
.
base
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv1
.
base
,
step
);
}
}
tmp0
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp0
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
tmp1
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp1
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
SImode
,
mode
,
tmp0
,
tmp1
);
SImode
,
mode
,
tmp0
,
tmp1
);
if
(
assumption
==
const_true_rtx
)
if
(
assumption
==
const_true_rtx
)
...
@@ -2443,7 +2446,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2443,7 +2446,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
iv0
.
step
=
simplify_gen_unary
(
NEG
,
comp_mode
,
iv0
.
step
,
mode
);
iv0
.
step
=
simplify_gen_unary
(
NEG
,
comp_mode
,
iv0
.
step
,
mode
);
iv1
.
base
=
simplify_gen_unary
(
NEG
,
comp_mode
,
iv1
.
base
,
mode
);
iv1
.
base
=
simplify_gen_unary
(
NEG
,
comp_mode
,
iv1
.
base
,
mode
);
}
}
iv0
.
step
=
truncate_value
(
mode
,
iv0
.
step
,
comp_mode
);
iv0
.
step
=
lowpart_subreg
(
mode
,
iv0
.
step
,
comp_mode
);
/* Let nsd (s, size of mode) = d. If d does not divide c, the loop
/* Let nsd (s, size of mode) = d. If d does not divide c, the loop
is infinite. Otherwise, the number of iterations is
is infinite. Otherwise, the number of iterations is
...
@@ -2457,7 +2460,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2457,7 +2460,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
}
}
bound
=
GEN_INT
(((
unsigned
HOST_WIDEST_INT
)
1
<<
(
size
-
1
)
<<
1
)
-
1
);
bound
=
GEN_INT
(((
unsigned
HOST_WIDEST_INT
)
1
<<
(
size
-
1
)
<<
1
)
-
1
);
tmp1
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp1
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
tmp
=
simplify_gen_binary
(
UMOD
,
mode
,
tmp1
,
GEN_INT
(
d
));
tmp
=
simplify_gen_binary
(
UMOD
,
mode
,
tmp1
,
GEN_INT
(
d
));
assumption
=
simplify_gen_relational
(
NE
,
SImode
,
mode
,
tmp
,
const0_rtx
);
assumption
=
simplify_gen_relational
(
NE
,
SImode
,
mode
,
tmp
,
const0_rtx
);
desc
->
infinite
=
alloc_EXPR_LIST
(
0
,
assumption
,
desc
->
infinite
);
desc
->
infinite
=
alloc_EXPR_LIST
(
0
,
assumption
,
desc
->
infinite
);
...
@@ -2478,11 +2481,12 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2478,11 +2481,12 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
but it was already taken into account during LE -> NE transform). */
but it was already taken into account during LE -> NE transform). */
{
{
step
=
iv0
.
step
;
step
=
iv0
.
step
;
tmp0
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp0
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
tmp1
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp1
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
bound
=
simplify_gen_binary
(
MINUS
,
mode
,
mode_mmax
,
bound
=
simplify_gen_binary
(
MINUS
,
mode
,
mode_mmax
,
truncate_value
(
mode
,
step
,
comp_mode
));
lowpart_subreg
(
mode
,
step
,
comp_mode
));
if
(
step_is_pow2
)
if
(
step_is_pow2
)
{
{
rtx
t0
,
t1
;
rtx
t0
,
t1
;
...
@@ -2509,7 +2513,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2509,7 +2513,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
}
}
tmp
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv1
.
base
,
iv0
.
step
);
tmp
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv1
.
base
,
iv0
.
step
);
tmp
=
truncate_value
(
mode
,
tmp
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
tmp
,
comp_mode
);
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
SImode
,
mode
,
tmp0
,
tmp
);
SImode
,
mode
,
tmp0
,
tmp
);
...
@@ -2522,11 +2526,11 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2522,11 +2526,11 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
We must know that a - s does not overflow and a - s <= b and then
We must know that a - s does not overflow and a - s <= b and then
we can again compute number of iterations as (b - (a - s)) / s. */
we can again compute number of iterations as (b - (a - s)) / s. */
step
=
simplify_gen_unary
(
NEG
,
mode
,
iv1
.
step
,
mode
);
step
=
simplify_gen_unary
(
NEG
,
mode
,
iv1
.
step
,
mode
);
tmp0
=
truncate_value
(
mode
,
iv0
.
base
,
comp_mode
);
tmp0
=
lowpart_subreg
(
mode
,
iv0
.
base
,
comp_mode
);
tmp1
=
truncate_value
(
mode
,
iv1
.
base
,
comp_mode
);
tmp1
=
lowpart_subreg
(
mode
,
iv1
.
base
,
comp_mode
);
bound
=
simplify_gen_binary
(
PLUS
,
mode
,
mode_mmin
,
bound
=
simplify_gen_binary
(
PLUS
,
mode
,
mode_mmin
,
truncate_value
(
mode
,
step
,
comp_mode
));
lowpart_subreg
(
mode
,
step
,
comp_mode
));
if
(
step_is_pow2
)
if
(
step_is_pow2
)
{
{
rtx
t0
,
t1
;
rtx
t0
,
t1
;
...
@@ -2553,7 +2557,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
...
@@ -2553,7 +2557,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
}
}
tmp
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv0
.
base
,
iv1
.
step
);
tmp
=
simplify_gen_binary
(
PLUS
,
comp_mode
,
iv0
.
base
,
iv1
.
step
);
tmp
=
truncate_value
(
mode
,
tmp
,
comp_mode
);
tmp
=
lowpart_subreg
(
mode
,
tmp
,
comp_mode
);
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
assumption
=
simplify_gen_relational
(
reverse_condition
(
cond
),
SImode
,
mode
,
SImode
,
mode
,
tmp
,
tmp1
);
tmp
,
tmp1
);
...
...
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