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
bfa30b22
Commit
bfa30b22
authored
May 11, 1992
by
Richard Kenner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r961
parent
3351cb00
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
119 additions
and
38 deletions
+119
-38
gcc/cccp.c
+14
-8
gcc/integrate.c
+2
-1
gcc/reload.c
+78
-10
gcc/reload1.c
+14
-8
gcc/tree.c
+11
-11
No files found.
gcc/cccp.c
View file @
bfa30b22
...
@@ -333,9 +333,6 @@ static enum {dump_none, dump_only, dump_names, dump_definitions}
...
@@ -333,9 +333,6 @@ static enum {dump_none, dump_only, dump_names, dump_definitions}
where they are defined. */
where they are defined. */
static
int
debug_output
=
0
;
static
int
debug_output
=
0
;
/* Holds local startup time. */
static
struct
tm
*
timebuf
=
NULL
;
/* Nonzero indicates special processing used by the pcp program. The
/* Nonzero indicates special processing used by the pcp program. The
special effects of this mode are:
special effects of this mode are:
...
@@ -3433,6 +3430,17 @@ handle_directive (ip, op)
...
@@ -3433,6 +3430,17 @@ handle_directive (ip, op)
return
0
;
return
0
;
}
}
static
struct
tm
*
timestamp
()
{
static
struct
tm
*
timebuf
;
if
(
!
timebuf
)
{
time_t
t
=
time
(
0
);
timebuf
=
localtime
(
&
t
);
}
return
timebuf
;
}
static
char
*
monthnames
[]
=
{
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
static
char
*
monthnames
[]
=
{
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
,
};
};
...
@@ -3451,6 +3459,7 @@ special_symbol (hp, op)
...
@@ -3451,6 +3459,7 @@ special_symbol (hp, op)
int
i
,
len
;
int
i
,
len
;
int
true_indepth
;
int
true_indepth
;
FILE_BUF
*
ip
=
NULL
;
FILE_BUF
*
ip
=
NULL
;
struct
tm
*
timebuf
;
int
paren
=
0
;
/* For special `defined' keyword */
int
paren
=
0
;
/* For special `defined' keyword */
...
@@ -3536,6 +3545,7 @@ special_symbol (hp, op)
...
@@ -3536,6 +3545,7 @@ special_symbol (hp, op)
case
T_DATE
:
case
T_DATE
:
case
T_TIME
:
case
T_TIME
:
buf
=
(
char
*
)
alloca
(
20
);
buf
=
(
char
*
)
alloca
(
20
);
timebuf
=
timestamp
();
if
(
hp
->
type
==
T_DATE
)
if
(
hp
->
type
==
T_DATE
)
sprintf
(
buf
,
"
\"
%s %2d %4d
\"
"
,
monthnames
[
timebuf
->
tm_mon
],
sprintf
(
buf
,
"
\"
%s %2d %4d
\"
"
,
monthnames
[
timebuf
->
tm_mon
],
timebuf
->
tm_mday
,
timebuf
->
tm_year
+
1900
);
timebuf
->
tm_mday
,
timebuf
->
tm_year
+
1900
);
...
@@ -8055,11 +8065,6 @@ initialize_builtins (inp, outp)
...
@@ -8055,11 +8065,6 @@ initialize_builtins (inp, outp)
FILE_BUF
*
inp
;
FILE_BUF
*
inp
;
FILE_BUF
*
outp
;
FILE_BUF
*
outp
;
{
{
time_t
t
;
t
=
time
(
0
);
timebuf
=
localtime
(
&
t
);
install
(
"__LINE__"
,
-
1
,
T_SPECLINE
,
0
,
-
1
);
install
(
"__LINE__"
,
-
1
,
T_SPECLINE
,
0
,
-
1
);
install
(
"__DATE__"
,
-
1
,
T_DATE
,
0
,
-
1
);
install
(
"__DATE__"
,
-
1
,
T_DATE
,
0
,
-
1
);
install
(
"__FILE__"
,
-
1
,
T_FILE
,
0
,
-
1
);
install
(
"__FILE__"
,
-
1
,
T_FILE
,
0
,
-
1
);
...
@@ -8082,6 +8087,7 @@ initialize_builtins (inp, outp)
...
@@ -8082,6 +8087,7 @@ initialize_builtins (inp, outp)
{
{
char
directive
[
2048
];
char
directive
[
2048
];
register
struct
directive
*
dp
=
&
directive_table
[
0
];
register
struct
directive
*
dp
=
&
directive_table
[
0
];
struct
tm
*
timebuf
=
timestamp
();
sprintf
(
directive
,
" __BASE_FILE__
\"
%s
\"\n
"
,
sprintf
(
directive
,
" __BASE_FILE__
\"
%s
\"\n
"
,
instack
[
0
].
nominal_fname
);
instack
[
0
].
nominal_fname
);
...
...
gcc/integrate.c
View file @
bfa30b22
...
@@ -1040,7 +1040,7 @@ rtx *global_const_equiv_map;
...
@@ -1040,7 +1040,7 @@ rtx *global_const_equiv_map;
/* Integrate the procedure defined by FNDECL. Note that this function
/* Integrate the procedure defined by FNDECL. Note that this function
may wind up calling itself. Since the static variables are not
may wind up calling itself. Since the static variables are not
reentrant, we do not assign them until after the possibility
reentrant, we do not assign them until after the possibility
o
r
recursion is eliminated.
o
f
recursion is eliminated.
If IGNORE is nonzero, do not produce a value.
If IGNORE is nonzero, do not produce a value.
Otherwise store the value in TARGET if it is nonzero and that is convenient.
Otherwise store the value in TARGET if it is nonzero and that is convenient.
...
@@ -1557,6 +1557,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
...
@@ -1557,6 +1557,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add
case
CODE_LABEL
:
case
CODE_LABEL
:
copy
=
emit_label
(
map
->
label_map
[
CODE_LABEL_NUMBER
(
insn
)]);
copy
=
emit_label
(
map
->
label_map
[
CODE_LABEL_NUMBER
(
insn
)]);
LABEL_NAME
(
copy
)
=
LABEL_NAME
(
insn
);
map
->
const_age
++
;
map
->
const_age
++
;
break
;
break
;
...
...
gcc/reload.c
View file @
bfa30b22
...
@@ -547,7 +547,7 @@ push_reload (in, out, inloc, outloc, class,
...
@@ -547,7 +547,7 @@ push_reload (in, out, inloc, outloc, class,
/* If IN appears in OUT, we can't share any input-only reload for IN. */
/* If IN appears in OUT, we can't share any input-only reload for IN. */
if
(
in
!=
0
&&
out
!=
0
&&
GET_CODE
(
out
)
==
MEM
if
(
in
!=
0
&&
out
!=
0
&&
GET_CODE
(
out
)
==
MEM
&&
(
GET_CODE
(
in
)
==
REG
||
GET_CODE
(
in
)
==
MEM
)
&&
(
GET_CODE
(
in
)
==
REG
||
GET_CODE
(
in
)
==
MEM
)
&&
reg_overlap_mentioned_p
(
in
,
XEXP
(
out
,
0
)))
&&
reg_overlap_mentioned_
for_reload_
p
(
in
,
XEXP
(
out
,
0
)))
dont_share
=
1
;
dont_share
=
1
;
/* Narrow down the class of register wanted if that is
/* Narrow down the class of register wanted if that is
...
@@ -1104,7 +1104,7 @@ combine_reloads ()
...
@@ -1104,7 +1104,7 @@ combine_reloads ()
/* Args reversed because the first arg seems to be
/* Args reversed because the first arg seems to be
the one that we imagine being modified
the one that we imagine being modified
while the second is the one that might be affected. */
while the second is the one that might be affected. */
||
(
!
reg_overlap_mentioned_p
(
reload_out
[
output_reload
],
||
(
!
reg_overlap_mentioned_
for_reload_
p
(
reload_out
[
output_reload
],
reload_in
[
i
])
reload_in
[
i
])
/* However, if the input is a register that appears inside
/* However, if the input is a register that appears inside
the output, then we also can't share.
the output, then we also can't share.
...
@@ -1113,7 +1113,7 @@ combine_reloads ()
...
@@ -1113,7 +1113,7 @@ combine_reloads ()
result to be stored in memory, then that result
result to be stored in memory, then that result
will clobber the address of the memory ref. */
will clobber the address of the memory ref. */
&&
!
(
GET_CODE
(
reload_in
[
i
])
==
REG
&&
!
(
GET_CODE
(
reload_in
[
i
])
==
REG
&&
reg_overlap_mentioned_p
(
reload_in
[
i
],
&&
reg_overlap_mentioned_
for_reload_
p
(
reload_in
[
i
],
reload_out
[
output_reload
])))))
reload_out
[
output_reload
])))))
{
{
int
j
;
int
j
;
...
@@ -1162,7 +1162,7 @@ combine_reloads ()
...
@@ -1162,7 +1162,7 @@ combine_reloads ()
for
(
note
=
REG_NOTES
(
this_insn
);
note
;
note
=
XEXP
(
note
,
1
))
for
(
note
=
REG_NOTES
(
this_insn
);
note
;
note
=
XEXP
(
note
,
1
))
if
(
REG_NOTE_KIND
(
note
)
==
REG_DEAD
if
(
REG_NOTE_KIND
(
note
)
==
REG_DEAD
&&
GET_CODE
(
XEXP
(
note
,
0
))
==
REG
&&
GET_CODE
(
XEXP
(
note
,
0
))
==
REG
&&
!
reg_overlap_mentioned_p
(
XEXP
(
note
,
0
),
&&
!
reg_overlap_mentioned_
for_reload_
p
(
XEXP
(
note
,
0
),
reload_out
[
output_reload
])
reload_out
[
output_reload
])
&&
REGNO
(
XEXP
(
note
,
0
))
<
FIRST_PSEUDO_REGISTER
&&
REGNO
(
XEXP
(
note
,
0
))
<
FIRST_PSEUDO_REGISTER
&&
HARD_REGNO_MODE_OK
(
REGNO
(
XEXP
(
note
,
0
)),
reload_outmode
[
output_reload
])
&&
HARD_REGNO_MODE_OK
(
REGNO
(
XEXP
(
note
,
0
)),
reload_outmode
[
output_reload
])
...
@@ -4344,6 +4344,70 @@ refers_to_regno_for_reload_p (regno, endregno, x, loc)
...
@@ -4344,6 +4344,70 @@ refers_to_regno_for_reload_p (regno, endregno, x, loc)
return
0
;
return
0
;
}
}
/* Nonzero if modifying X will affect IN. If X is a register or a SUBREG,
we check if any register number in X conflicts with the relevant register
numbers. If X is a constant, return 0. If X is a MEM, return 1 iff IN
contains a MEM (we don't bother checking for memory addresses that can't
conflict because we expect this to be a rare case.
This function is similar to reg_overlap_mention_p in rtlanal.c except
that we look at equivalences for pseudos that didn't get hard registers. */
int
reg_overlap_mentioned_for_reload_p
(
x
,
in
)
rtx
x
,
in
;
{
int
regno
,
endregno
;
if
(
GET_CODE
(
x
)
==
SUBREG
)
{
regno
=
REGNO
(
SUBREG_REG
(
x
));
if
(
regno
<
FIRST_PSEUDO_REGISTER
)
regno
+=
SUBREG_WORD
(
x
);
}
else
if
(
GET_CODE
(
x
)
==
REG
)
{
regno
=
REGNO
(
x
);
if
(
regno
>=
FIRST_PSEUDO_REGISTER
&&
reg_renumber
[
regno
]
==
-
1
&&
((
reg_equiv_address
[
regno
]
&&
reg_overlap_mentioned_for_reload_p
(
reg_equiv_address
[
regno
],
in
))
||
(
reg_equiv_mem
[
regno
]
&&
reg_overlap_mentioned_for_reload_p
(
reg_equiv_mem
[
regno
],
in
))))
return
1
;
}
else
if
(
CONSTANT_P
(
x
))
return
0
;
else
if
(
GET_CODE
(
x
)
==
MEM
)
{
char
*
fmt
;
int
i
;
if
(
GET_CODE
(
in
)
==
MEM
)
return
1
;
fmt
=
GET_RTX_FORMAT
(
GET_CODE
(
in
));
for
(
i
=
GET_RTX_LENGTH
(
GET_CODE
(
in
))
-
1
;
i
>=
0
;
i
--
)
if
(
fmt
[
i
]
==
'e'
&&
reg_overlap_mentioned_for_reload_p
(
x
,
XEXP
(
in
,
i
)))
return
1
;
return
0
;
}
else
if
(
GET_CODE
(
x
)
==
SCRATCH
||
GET_CODE
(
x
)
==
PC
||
GET_CODE
(
x
)
==
CC0
)
return
reg_mentioned_p
(
x
,
in
);
else
abort
();
endregno
=
regno
+
(
regno
<
FIRST_PSEUDO_REGISTER
?
HARD_REGNO_NREGS
(
regno
,
GET_MODE
(
x
))
:
1
);
return
refers_to_regno_for_reload_p
(
regno
,
endregno
,
in
,
0
);
}
#if 0
#if 0
/* [[This function is currently obsolete, now that volatility
/* [[This function is currently obsolete, now that volatility
...
@@ -4584,7 +4648,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
...
@@ -4584,7 +4648,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
/* If we propose to get the value from the stack pointer or if GOAL is
/* If we propose to get the value from the stack pointer or if GOAL is
a MEM based on the stack pointer, we need a stable SP. */
a MEM based on the stack pointer, we need a stable SP. */
if
(
valueno
==
STACK_POINTER_REGNUM
if
(
valueno
==
STACK_POINTER_REGNUM
||
(
goal_mem
&&
reg_overlap_mentioned_p
(
stack_pointer_rtx
,
goal
)))
||
(
goal_mem
&&
reg_overlap_mentioned_for_reload_p
(
stack_pointer_rtx
,
goal
)))
need_stable_sp
=
1
;
need_stable_sp
=
1
;
/* Reject VALUE if the copy-insn moved the wrong sort of datum. */
/* Reject VALUE if the copy-insn moved the wrong sort of datum. */
...
@@ -4595,8 +4660,9 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
...
@@ -4595,8 +4660,9 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
and is also a register that appears in the address of GOAL. */
and is also a register that appears in the address of GOAL. */
if
(
goal_mem
&&
value
==
SET_DEST
(
PATTERN
(
where
))
if
(
goal_mem
&&
value
==
SET_DEST
(
PATTERN
(
where
))
&&
refers_to_regno_p
(
valueno
,
&&
refers_to_regno_for_reload_p
(
valueno
,
valueno
+
HARD_REGNO_NREGS
(
valueno
,
mode
),
(
valueno
+
HARD_REGNO_NREGS
(
valueno
,
mode
)),
goal
,
0
))
goal
,
0
))
return
0
;
return
0
;
...
@@ -4710,7 +4776,7 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
...
@@ -4710,7 +4776,7 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
&&
xregno
+
xnregs
>
valueno
)
&&
xregno
+
xnregs
>
valueno
)
return
0
;
return
0
;
if
(
goal_mem_addr_varies
if
(
goal_mem_addr_varies
&&
reg_overlap_mentioned_p
(
dest
,
goal
))
&&
reg_overlap_mentioned_
for_reload_
p
(
dest
,
goal
))
return
0
;
return
0
;
}
}
else
if
(
goal_mem
&&
GET_CODE
(
dest
)
==
MEM
else
if
(
goal_mem
&&
GET_CODE
(
dest
)
==
MEM
...
@@ -4748,7 +4814,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
...
@@ -4748,7 +4814,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
&&
xregno
+
xnregs
>
valueno
)
&&
xregno
+
xnregs
>
valueno
)
return
0
;
return
0
;
if
(
goal_mem_addr_varies
if
(
goal_mem_addr_varies
&&
reg_overlap_mentioned_p
(
dest
,
goal
))
&&
reg_overlap_mentioned_for_reload_p
(
dest
,
goal
))
return
0
;
return
0
;
}
}
else
if
(
goal_mem
&&
GET_CODE
(
dest
)
==
MEM
else
if
(
goal_mem
&&
GET_CODE
(
dest
)
==
MEM
...
@@ -4779,7 +4846,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
...
@@ -4779,7 +4846,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
if
(
incno
<
valueno
+
valuenregs
&&
incno
>=
valueno
)
if
(
incno
<
valueno
+
valuenregs
&&
incno
>=
valueno
)
return
0
;
return
0
;
if
(
goal_mem_addr_varies
if
(
goal_mem_addr_varies
&&
reg_overlap_mentioned_p
(
XEXP
(
link
,
0
),
goal
))
&&
reg_overlap_mentioned_for_reload_p
(
XEXP
(
link
,
0
),
goal
))
return
0
;
return
0
;
}
}
}
}
...
...
gcc/reload1.c
View file @
bfa30b22
...
@@ -4272,7 +4272,8 @@ choose_reload_regs (insn, avoid_return_reg)
...
@@ -4272,7 +4272,8 @@ choose_reload_regs (insn, avoid_return_reg)
if
(
equiv
!=
0
)
if
(
equiv
!=
0
)
for
(
i
=
0
;
i
<
n_earlyclobbers
;
i
++
)
for
(
i
=
0
;
i
<
n_earlyclobbers
;
i
++
)
if
(
reg_overlap_mentioned_p
(
equiv
,
reload_earlyclobbers
[
i
]))
if
(
reg_overlap_mentioned_for_reload_p
(
equiv
,
reload_earlyclobbers
[
i
]))
{
{
reload_override_in
[
r
]
=
equiv
;
reload_override_in
[
r
]
=
equiv
;
equiv
=
0
;
equiv
=
0
;
...
@@ -4600,7 +4601,8 @@ emit_reload_insns (insn)
...
@@ -4600,7 +4601,8 @@ emit_reload_insns (insn)
int
k
;
int
k
;
for
(
k
=
0
;
k
<
n_reloads
;
k
++
)
for
(
k
=
0
;
k
<
n_reloads
;
k
++
)
if
(
reload_reg_rtx
[
k
]
!=
0
&&
k
!=
j
if
(
reload_reg_rtx
[
k
]
!=
0
&&
k
!=
j
&&
reg_overlap_mentioned_p
(
reload_reg_rtx
[
k
],
oldequiv
))
&&
reg_overlap_mentioned_for_reload_p
(
reload_reg_rtx
[
k
],
oldequiv
))
{
{
oldequiv
=
0
;
oldequiv
=
0
;
break
;
break
;
...
@@ -4879,7 +4881,7 @@ emit_reload_insns (insn)
...
@@ -4879,7 +4881,7 @@ emit_reload_insns (insn)
prev
!=
PREV_INSN
(
this_reload_insn
);
prev
!=
PREV_INSN
(
this_reload_insn
);
prev
=
PREV_INSN
(
prev
))
prev
=
PREV_INSN
(
prev
))
if
(
GET_RTX_CLASS
(
GET_CODE
(
prev
)
==
'i'
)
if
(
GET_RTX_CLASS
(
GET_CODE
(
prev
)
==
'i'
)
&&
reg_overlap_mentioned_p
(
second_reload_reg
,
&&
reg_overlap_mentioned_
for_reload_
p
(
second_reload_reg
,
PATTERN
(
prev
)))
PATTERN
(
prev
)))
{
{
REG_NOTES
(
prev
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
REG_NOTES
(
prev
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
...
@@ -5008,7 +5010,7 @@ emit_reload_insns (insn)
...
@@ -5008,7 +5010,7 @@ emit_reload_insns (insn)
for
(
prev1
=
this_reload_insn
;
for
(
prev1
=
this_reload_insn
;
prev1
;
prev1
=
PREV_INSN
(
prev1
))
prev1
;
prev1
=
PREV_INSN
(
prev1
))
if
(
GET_RTX_CLASS
(
GET_CODE
(
prev1
)
==
'i'
)
if
(
GET_RTX_CLASS
(
GET_CODE
(
prev1
)
==
'i'
)
&&
reg_overlap_mentioned_p
(
oldequiv_reg
,
&&
reg_overlap_mentioned_
for_reload_
p
(
oldequiv_reg
,
PATTERN
(
prev1
)))
PATTERN
(
prev1
)))
{
{
REG_NOTES
(
prev1
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
REG_NOTES
(
prev1
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
...
@@ -5190,7 +5192,8 @@ emit_reload_insns (insn)
...
@@ -5190,7 +5192,8 @@ emit_reload_insns (insn)
for
(
p
=
PREV_INSN
(
first_output_reload_insn
);
for
(
p
=
PREV_INSN
(
first_output_reload_insn
);
p
!=
prev_insn
;
p
=
PREV_INSN
(
p
))
p
!=
prev_insn
;
p
=
PREV_INSN
(
p
))
if
(
GET_RTX_CLASS
(
GET_CODE
(
p
))
==
'i'
if
(
GET_RTX_CLASS
(
GET_CODE
(
p
))
==
'i'
&&
reg_overlap_mentioned_p
(
reloadreg
,
PATTERN
(
p
)))
&&
reg_overlap_mentioned_for_reload_p
(
reloadreg
,
PATTERN
(
p
)))
REG_NOTES
(
p
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
REG_NOTES
(
p
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
reloadreg
,
REG_NOTES
(
p
));
reloadreg
,
REG_NOTES
(
p
));
...
@@ -5200,7 +5203,8 @@ emit_reload_insns (insn)
...
@@ -5200,7 +5203,8 @@ emit_reload_insns (insn)
for
(
p
=
PREV_INSN
(
first_output_reload_insn
);
for
(
p
=
PREV_INSN
(
first_output_reload_insn
);
p
!=
prev_insn
;
p
=
PREV_INSN
(
p
))
p
!=
prev_insn
;
p
=
PREV_INSN
(
p
))
if
(
GET_RTX_CLASS
(
GET_CODE
(
p
))
==
'i'
if
(
GET_RTX_CLASS
(
GET_CODE
(
p
))
==
'i'
&&
reg_overlap_mentioned_p
(
second_reloadreg
,
PATTERN
(
p
)))
&&
reg_overlap_mentioned_for_reload_p
(
second_reloadreg
,
PATTERN
(
p
)))
REG_NOTES
(
p
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
REG_NOTES
(
p
)
=
gen_rtx
(
EXPR_LIST
,
REG_DEAD
,
second_reloadreg
,
REG_NOTES
(
p
));
second_reloadreg
,
REG_NOTES
(
p
));
#endif
#endif
...
@@ -5253,8 +5257,10 @@ emit_reload_insns (insn)
...
@@ -5253,8 +5257,10 @@ emit_reload_insns (insn)
if
(
REG_NOTE_KIND
(
reg_notes
)
==
REG_DEAD
if
(
REG_NOTE_KIND
(
reg_notes
)
==
REG_DEAD
&&
GET_CODE
(
XEXP
(
reg_notes
,
0
))
==
REG
&&
GET_CODE
(
XEXP
(
reg_notes
,
0
))
==
REG
&&
((
GET_CODE
(
dest
)
!=
REG
&&
((
GET_CODE
(
dest
)
!=
REG
&&
reg_overlap_mentioned_p
(
XEXP
(
reg_notes
,
0
),
dest
))
&&
reg_overlap_mentioned_for_reload_p
(
XEXP
(
reg_notes
,
0
),
||
reg_overlap_mentioned_p
(
XEXP
(
reg_notes
,
0
),
source
)))
dest
))
||
reg_overlap_mentioned_for_reload_p
(
XEXP
(
reg_notes
,
0
),
source
)))
{
{
*
prev_reg_note
=
next_reg_notes
;
*
prev_reg_note
=
next_reg_notes
;
XEXP
(
reg_notes
,
1
)
=
REG_NOTES
(
insn1
);
XEXP
(
reg_notes
,
1
)
=
REG_NOTES
(
insn1
);
...
...
gcc/tree.c
View file @
bfa30b22
...
@@ -3104,22 +3104,22 @@ int_fits_type_p (c, type)
...
@@ -3104,22 +3104,22 @@ int_fits_type_p (c, type)
&&
!
INT_CST_LT
(
c
,
TYPE_MIN_VALUE
(
type
)));
&&
!
INT_CST_LT
(
c
,
TYPE_MIN_VALUE
(
type
)));
}
}
/* Return the innermost context enclosing
FN
DECL that is
/* Return the innermost context enclosing DECL that is
a FUNCTION_DECL, or zero if none. */
a FUNCTION_DECL, or zero if none. */
tree
tree
decl_function_context
(
fn
decl
)
decl_function_context
(
decl
)
tree
fn
decl
;
tree
decl
;
{
{
tree
context
;
tree
context
;
if
(
TREE_CODE
(
fn
decl
)
==
ERROR_MARK
)
if
(
TREE_CODE
(
decl
)
==
ERROR_MARK
)
return
0
;
return
0
;
if
(
TREE_CODE
(
fn
decl
)
==
SAVE_EXPR
)
if
(
TREE_CODE
(
decl
)
==
SAVE_EXPR
)
context
=
SAVE_EXPR_CONTEXT
(
fn
decl
);
context
=
SAVE_EXPR_CONTEXT
(
decl
);
else
else
context
=
DECL_CONTEXT
(
fn
decl
);
context
=
DECL_CONTEXT
(
decl
);
while
(
context
&&
TREE_CODE
(
context
)
!=
FUNCTION_DECL
)
while
(
context
&&
TREE_CODE
(
context
)
!=
FUNCTION_DECL
)
{
{
...
@@ -3138,15 +3138,15 @@ decl_function_context (fndecl)
...
@@ -3138,15 +3138,15 @@ decl_function_context (fndecl)
return
context
;
return
context
;
}
}
/* Return the innermost context enclosing
FN
DECL that is
/* Return the innermost context enclosing DECL that is
a RECORD_TYPE or UNION_TYPE, or zero if none.
a RECORD_TYPE or UNION_TYPE, or zero if none.
TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
tree
tree
decl_type_context
(
fn
decl
)
decl_type_context
(
decl
)
tree
fn
decl
;
tree
decl
;
{
{
tree
context
=
DECL_CONTEXT
(
fn
decl
);
tree
context
=
DECL_CONTEXT
(
decl
);
while
(
context
)
while
(
context
)
{
{
...
...
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