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
8b61e863
Commit
8b61e863
authored
Jan 02, 2012
by
Revital Eres
Committed by
Revital Eres
Jan 02, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SMS: Prevent the creation of reg-moves for definitions with MODE_CC
From-SVN: r182786
parent
ba768e18
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
68 additions
and
1 deletions
+68
-1
gcc/ChangeLog
+6
-0
gcc/ddg.c
+21
-1
gcc/testsuite/ChangeLog
+4
-0
gcc/testsuite/gcc.dg/sms-11.c
+37
-0
No files found.
gcc/ChangeLog
View file @
8b61e863
2012
-
01
-
02
Revital
Eres
<
revital
.
eres
@
linaro
.
org
>
*
ddg
.
c
(
def_has_ccmode_p
):
New
function
.
(
add_cross_iteration_register_deps
,
create_ddg_dep_from_intra_loop_link
):
Call
it
.
2012
-
01
-
02
Richard
Guenther
<
rguenther
@
suse
.
de
>
PR
other
/
51679
gcc/ddg.c
View file @
8b61e863
...
...
@@ -166,6 +166,24 @@ autoinc_var_is_used_p (rtx def_insn, rtx use_insn)
return
false
;
}
/* Return true if one of the definitions in INSN has MODE_CC. Otherwise
return false. */
static
bool
def_has_ccmode_p
(
rtx
insn
)
{
df_ref
*
def
;
for
(
def
=
DF_INSN_DEFS
(
insn
);
*
def
;
def
++
)
{
enum
machine_mode
mode
=
GET_MODE
(
DF_REF_REG
(
*
def
));
if
(
GET_MODE_CLASS
(
mode
)
==
MODE_CC
)
return
true
;
}
return
false
;
}
/* Computes the dependence parameters (latency, distance etc.), creates
a ddg_edge and adds it to the given DDG. */
static
void
...
...
@@ -202,6 +220,7 @@ create_ddg_dep_from_intra_loop_link (ddg_ptr g, ddg_node_ptr src_node,
whose register has multiple defs in the loop. */
if
(
flag_modulo_sched_allow_regmoves
&&
(
t
==
ANTI_DEP
&&
dt
==
REG_DEP
)
&&
!
def_has_ccmode_p
(
dest_node
->
insn
)
&&
!
autoinc_var_is_used_p
(
dest_node
->
insn
,
src_node
->
insn
))
{
rtx
set
;
...
...
@@ -335,7 +354,8 @@ add_cross_iteration_register_deps (ddg_ptr g, df_ref last_def)
if
(
DF_REF_ID
(
last_def
)
!=
DF_REF_ID
(
first_def
)
||
!
flag_modulo_sched_allow_regmoves
||
JUMP_P
(
use_node
->
insn
)
||
autoinc_var_is_used_p
(
DF_REF_INSN
(
last_def
),
use_insn
))
||
autoinc_var_is_used_p
(
DF_REF_INSN
(
last_def
),
use_insn
)
||
def_has_ccmode_p
(
DF_REF_INSN
(
last_def
)))
create_ddg_dep_no_link
(
g
,
use_node
,
first_def_node
,
ANTI_DEP
,
REG_DEP
,
1
);
...
...
gcc/testsuite/ChangeLog
View file @
8b61e863
2012-01-02 Revital Eres <revital.eres@linaro.org>
* gcc.dg/sms-11.c: New file.
2012-01-02 Tobias Burnus <burnus@net-b.de>
PR fortran/51682
...
...
gcc/testsuite/gcc.dg/sms-11.c
0 → 100644
View file @
8b61e863
/* { dg-do run } */
/* { dg-options "-O2 -fmodulo-sched -fmodulo-sched-allow-regmoves -fdump-rtl-sms" } */
extern
void
abort
(
void
);
float
out
[
4
][
4
]
=
{
6
,
6
,
7
,
5
,
6
,
7
,
5
,
5
,
6
,
4
,
4
,
4
,
6
,
2
,
3
,
4
};
void
invert
(
void
)
{
int
i
,
j
,
k
=
0
,
swap
;
float
tmp
[
4
][
4
]
=
{
5
,
6
,
7
,
5
,
6
,
7
,
5
,
5
,
4
,
4
,
4
,
4
,
3
,
2
,
3
,
4
};
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
j
=
i
+
1
;
j
<
4
;
j
++
)
if
(
tmp
[
j
][
i
]
>
tmp
[
i
][
i
])
swap
=
j
;
if
(
swap
!=
i
)
tmp
[
i
][
k
]
=
tmp
[
swap
][
k
];
}
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
if
(
tmp
[
i
][
j
]
!=
out
[
i
][
j
])
abort
();
}
int
main
()
{
invert
();
return
0
;
}
/* { dg-final { cleanup-rtl-dump "sms" } } */
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