aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/ia64/ia64.c14
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 35a65f6..e563543 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2004-07-07 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/16130
+ PR target/16142
+ PR target/16143
+ * config/ia64/ia64.c (ia64_dfa_new_cycle): Reset DFA state for asm
+ insn.
+
2004-07-06 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
PR target/1679.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 3195422..b8e3345 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -6326,10 +6326,16 @@ ia64_dfa_new_cycle (FILE *dump, int verbose, rtx insn, int last_clock,
}
else if (reload_completed)
setup_clocks_p = TRUE;
- memcpy (curr_state, prev_cycle_state, dfa_state_size);
- state_transition (curr_state, dfa_stop_insn);
- state_transition (curr_state, dfa_pre_cycle_insn);
- state_transition (curr_state, NULL);
+ if (GET_CODE (PATTERN (last_scheduled_insn)) == ASM_INPUT
+ || asm_noperands (PATTERN (last_scheduled_insn)) >= 0)
+ state_reset (curr_state);
+ else
+ {
+ memcpy (curr_state, prev_cycle_state, dfa_state_size);
+ state_transition (curr_state, dfa_stop_insn);
+ state_transition (curr_state, dfa_pre_cycle_insn);
+ state_transition (curr_state, NULL);
+ }
}
else if (reload_completed)
setup_clocks_p = TRUE;