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
7bd8fc3b
Commit
7bd8fc3b
authored
Oct 15, 2012
by
Joern Rennecke
Committed by
Joern Rennecke
Oct 15, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* web.c (union_match_dups): Properly handle OP_INOUT match_dups.
From-SVN: r192453
parent
9506aecb
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
2 deletions
+29
-2
gcc/ChangeLog
+4
-0
gcc/web.c
+25
-2
No files found.
gcc/ChangeLog
View file @
7bd8fc3b
2012-10-15 Joern Rennecke <joern.rennecke@embecosm.com>
* web.c (union_match_dups): Properly handle OP_INOUT match_dups.
2012-10-15 Eric Botcazou <ebotcazou@adacore.com>
* expr.c (expand_expr_real_1) <VIEW_CONVERT_EXPR>: Do not unnecessarily
gcc/web.c
View file @
7bd8fc3b
...
...
@@ -96,6 +96,7 @@ union_match_dups (rtx insn, struct web_entry *def_entry,
struct
df_insn_info
*
insn_info
=
DF_INSN_INFO_GET
(
insn
);
df_ref
*
use_link
=
DF_INSN_INFO_USES
(
insn_info
);
df_ref
*
def_link
=
DF_INSN_INFO_DEFS
(
insn_info
);
struct
web_entry
*
dup_entry
;
int
i
;
extract_insn
(
insn
);
...
...
@@ -107,10 +108,24 @@ union_match_dups (rtx insn, struct web_entry *def_entry,
df_ref
*
ref
,
*
dupref
;
struct
web_entry
*
entry
;
for
(
dupref
=
use_link
;
*
dupref
;
dupref
++
)
for
(
dup
_entry
=
use_entry
,
dup
ref
=
use_link
;
*
dupref
;
dupref
++
)
if
(
DF_REF_LOC
(
*
dupref
)
==
recog_data
.
dup_loc
[
i
])
break
;
if
(
*
dupref
==
NULL
&&
type
==
OP_INOUT
)
{
for
(
dup_entry
=
def_entry
,
dupref
=
def_link
;
*
dupref
;
dupref
++
)
if
(
DF_REF_LOC
(
*
dupref
)
==
recog_data
.
dup_loc
[
i
])
break
;
}
/* ??? *DUPREF can still be zero, because when an operand matches
a memory, DF_REF_LOC (use_link[n]) points to the register part
of the address, whereas recog_data.dup_loc[m] points to the
entire memory ref, thus we fail to find the duplicate entry,
even though it is there.
Example: i686-pc-linux-gnu gcc.c-torture/compile/950607-1.c
-O3 -fomit-frame-pointer -funroll-loops */
if
(
*
dupref
==
NULL
||
DF_REF_REGNO
(
*
dupref
)
<
FIRST_PSEUDO_REGISTER
)
continue
;
...
...
@@ -121,7 +136,15 @@ union_match_dups (rtx insn, struct web_entry *def_entry,
if
(
DF_REF_LOC
(
*
ref
)
==
recog_data
.
operand_loc
[
op
])
break
;
(
*
fun
)
(
use_entry
+
DF_REF_ID
(
*
dupref
),
entry
+
DF_REF_ID
(
*
ref
));
if
(
!*
ref
&&
type
==
OP_INOUT
)
{
for
(
ref
=
use_link
,
entry
=
use_entry
;
*
ref
;
ref
++
)
if
(
DF_REF_LOC
(
*
ref
)
==
recog_data
.
operand_loc
[
op
])
break
;
}
gcc_assert
(
*
ref
);
(
*
fun
)
(
dup_entry
+
DF_REF_ID
(
*
dupref
),
entry
+
DF_REF_ID
(
*
ref
));
}
}
...
...
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