OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* trans-decl.c (gfc_build_qualified_array): Ensure
[pf3gnuchains/gcc-fork.git]
/
gcc
/
haifa-sched.c
diff --git
a/gcc/haifa-sched.c
b/gcc/haifa-sched.c
index
0a85b6e
..
8bea5e3
100644
(file)
--- a/
gcc/haifa-sched.c
+++ b/
gcc/haifa-sched.c
@@
-1586,7
+1586,8
@@
setup_insn_max_reg_pressure (rtx after, bool update_p)
max_reg_pressure[ira_reg_class_cover[i]]
= curr_reg_pressure[ira_reg_class_cover[i]];
for (insn = NEXT_INSN (after);
max_reg_pressure[ira_reg_class_cover[i]]
= curr_reg_pressure[ira_reg_class_cover[i]];
for (insn = NEXT_INSN (after);
- insn != NULL_RTX && BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (after);
+ insn != NULL_RTX && ! BARRIER_P (insn)
+ && BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (after);
insn = NEXT_INSN (insn))
if (NONDEBUG_INSN_P (insn))
{
insn = NEXT_INSN (insn))
if (NONDEBUG_INSN_P (insn))
{
@@
-1695,6
+1696,7
@@
schedule_insn (rtx insn)
sd_iterator_cond (&sd_it, &dep);)
{
rtx dbg = DEP_PRO (dep);
sd_iterator_cond (&sd_it, &dep);)
{
rtx dbg = DEP_PRO (dep);
+ struct reg_use_data *use, *next;
gcc_assert (DEBUG_INSN_P (dbg));
gcc_assert (DEBUG_INSN_P (dbg));
@@
-1716,6
+1718,14
@@
schedule_insn (rtx insn)
INSN_VAR_LOCATION_LOC (dbg) = gen_rtx_UNKNOWN_VAR_LOC ();
df_insn_rescan (dbg);
INSN_VAR_LOCATION_LOC (dbg) = gen_rtx_UNKNOWN_VAR_LOC ();
df_insn_rescan (dbg);
+ /* Unknown location doesn't use any registers. */
+ for (use = INSN_REG_USE_LIST (dbg); use != NULL; use = next)
+ {
+ next = use->next_insn_use;
+ free (use);
+ }
+ INSN_REG_USE_LIST (dbg) = NULL;
+
/* We delete rather than resolve these deps, otherwise we
crash in sched_free_deps(), because forward deps are
expected to be released before backward deps. */
/* We delete rather than resolve these deps, otherwise we
crash in sched_free_deps(), because forward deps are
expected to be released before backward deps. */
@@
-1835,27
+1845,22
@@
concat_note_lists (rtx from_end, rtx *to_endp)
void
remove_notes (rtx head, rtx tail)
{
void
remove_notes (rtx head, rtx tail)
{
- rtx next_tail,
prev,
insn, next;
+ rtx next_tail, insn, next;
note_list = 0;
if (head == tail && !INSN_P (head))
return;
next_tail = NEXT_INSN (tail);
note_list = 0;
if (head == tail && !INSN_P (head))
return;
next_tail = NEXT_INSN (tail);
- prev = PREV_INSN (head);
for (insn = head; insn != next_tail; insn = next)
{
next = NEXT_INSN (insn);
if (!NOTE_P (insn))
for (insn = head; insn != next_tail; insn = next)
{
next = NEXT_INSN (insn);
if (!NOTE_P (insn))
- {
- prev = insn;
- continue;
- }
+ continue;
switch (NOTE_KIND (insn))
{
case NOTE_INSN_BASIC_BLOCK:
switch (NOTE_KIND (insn))
{
case NOTE_INSN_BASIC_BLOCK:
- prev = insn;
continue;
case NOTE_INSN_EPILOGUE_BEG:
continue;
case NOTE_INSN_EPILOGUE_BEG: