aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/vax/vax.md10
-rw-r--r--gcc/config/vax/vms.h7
-rw-r--r--gcc/genattrtab.c5
-rw-r--r--gcc/unroll.c63
4 files changed, 34 insertions, 51 deletions
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index 2851865..be1b3b0 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -1533,8 +1533,9 @@
(define_insn ""
[(set (pc)
(if_then_else
- (gt (match_operand:SI 0 "general_operand" "+g")
- (const_int 1))
+ (gt (plus:SI (match_operand:SI 0 "general_operand" "+g")
+ (const_int -1))
+ (const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))
(set (match_dup 0)
@@ -1546,8 +1547,9 @@
(define_insn ""
[(set (pc)
(if_then_else
- (ge (match_operand:SI 0 "general_operand" "+g")
- (const_int 1))
+ (ge (plus:SI (match_operand:SI 0 "general_operand" "+g")
+ (const_int -1))
+ (const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))
(set (match_dup 0)
diff --git a/gcc/config/vax/vms.h b/gcc/config/vax/vms.h
index 1805ec7..8f55e13 100644
--- a/gcc/config/vax/vms.h
+++ b/gcc/config/vax/vms.h
@@ -35,7 +35,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Predefine this in CPP because VMS limits the size of command options
and GNU CPP is not used on VMS except with GNU C. */
-#define CPP_PREDEFINES "-Dvax -Dvms -DVMS -D__GNU__ -D__GNUC__"
+/* ??? __GNU__ is probably obsolete; delete it for 2.1. */
+#define CPP_PREDEFINES "-Dvax -Dvms -DVMS -D__GNU__ -D__GNUC__=2"
/* Strictly speaking, VMS does not use DBX at all, but the interpreter built
into gas only speaks straight DBX. */
@@ -161,7 +162,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
? (const_section (), 0) : (data_section (), 0)), \
fputs (".comm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (ROUNDED)))
+ fprintf ((FILE), ",%u\n", (SIZE)))
/* We define this to prevent the name mangler from putting dollar signs into
function names. This isn't really needed, but it has been here for
@@ -254,7 +255,6 @@ const_section () \
__CTOR_LIST__, and essentially points to the same list as __CTOR_LIST. */
#ifdef L__main
-#include <stdio.h>
#define __CTOR_LIST__ __gxx_init_0
#define __CTOR_LIST_END__ __gxx_init_2
@@ -269,7 +269,6 @@ do { \
extern func_ptr __CTOR_LIST_END__[1]; \
extern func_ptr __CTOR_LIST_SHR__[1]; \
extern func_ptr __CTOR_LIST_SHR_END__[1]; \
- fflush(stdout); \
if( &__CTOR_LIST_SHR__[0] != &__CTOR_LIST__[1]) \
for (p = __CTOR_LIST_SHR__ + 1; p < __CTOR_LIST_SHR_END__ ; p++ ) \
if (*p) (*p) (); \
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 08b45bc..ef88d0a 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -2459,7 +2459,7 @@ write_test_expr (exp, in_comparison)
printf (" / ");
break;
case MOD:
- printf (" % ");
+ printf (" %% ");
break;
case AND:
if (in_comparison)
@@ -3025,8 +3025,7 @@ write_eligible_delay (kind)
if (num_delays > 1)
{
- sprintf (str, "*delay_type", kind);
- attr = find_attr (str, 0);
+ attr = find_attr ("*delay_type", 0);
if (! attr) abort ();
common_av = find_most_used (attr);
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 86c229d..ccc6f47 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -1248,7 +1248,7 @@ precondition_loop_p (initial_value, final_value, increment, loop_start,
/* Fail for floating point values, since the caller of this function
does not have code to deal with them. */
if (GET_MODE_CLASS (GET_MODE (loop_final_value)) == MODE_FLOAT
- || GET_MODE_CLASS (GET_MODE (loop_initial_value) == MODE_FLOAT))
+ || GET_MODE_CLASS (GET_MODE (loop_initial_value)) == MODE_FLOAT)
{
if (loop_dump_stream)
fprintf (loop_dump_stream,
@@ -1493,8 +1493,11 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
XEXP (value, 1));
/* Reset the giv to be just the register again, in case
- it is used after the set we have just emitted. */
- tv->dest_reg = dest_reg;
+ it is used after the set we have just emitted.
+ We must subtract the const_adjust factor added in
+ above. */
+ tv->dest_reg = plus_constant (dest_reg,
+ - tv->const_adjust);
*tv->location = tv->dest_reg;
}
}
@@ -2669,6 +2672,7 @@ reg_dead_after_loop (reg, loop_start, loop_end)
{
rtx insn, label;
enum rtx_code code;
+ int jump_count = 0;
/* HACK: Must also search the loop fall through exit, create a label_ref
here which points to the loop_end, and append the loop_number_exit_labels
@@ -2684,54 +2688,33 @@ reg_dead_after_loop (reg, loop_start, loop_end)
a conditional jump. */
insn = NEXT_INSN (XEXP (label, 0));
- while (1)
+ while (insn)
{
- if (insn == 0)
- break;
-
- if ((code = GET_CODE (insn)) == INSN || code == JUMP_INSN
- || code == CALL_INSN)
+ code = GET_CODE (insn);
+ if (GET_RTX_CLASS (code) == 'i')
{
- if (GET_CODE (PATTERN (insn)) == SET)
- {
- if (reg_mentioned_p (reg, SET_SRC (PATTERN (insn))))
- return 0;
- if (SET_DEST (PATTERN (insn)) == reg)
- break;
- if (reg_mentioned_p (reg, SET_DEST (PATTERN (insn))))
- return 0;
- }
- else if (reg_mentioned_p (reg, PATTERN (insn)))
+ rtx set;
+
+ if (reg_referenced_p (reg, PATTERN (insn)))
return 0;
+
+ set = single_set (insn);
+ if (set && rtx_equal_p (SET_DEST (set), reg))
+ break;
}
+
if (code == JUMP_INSN)
{
if (GET_CODE (PATTERN (insn)) == RETURN)
break;
- else if (! simplejump_p (insn))
+ else if (! simplejump_p (insn)
+ /* Prevent infinite loop following infinite loops. */
+ || jump_count++ > 20)
return 0;
else
- {
- insn = JUMP_LABEL (insn);
- /* If this branches to a code label after a LOOP_BEG or
- a LOOP_CONT note, then assume it is a loop back edge.
- Must fail in that case to prevent going into an infinite
- loop trying to trace infinite loops.
-
- In the presence of syntax errors, this may be a jump to
- a CODE_LABEL that was never emitted. Fail in this case
- also. */
-
- if (! PREV_INSN (insn)
- || (GET_CODE (PREV_INSN (insn)) == NOTE
- && ((NOTE_LINE_NUMBER (PREV_INSN (insn))
- == NOTE_INSN_LOOP_BEG)
- || (NOTE_LINE_NUMBER (PREV_INSN (insn))
- == NOTE_INSN_LOOP_CONT))))
- return 0;
- }
+ insn = JUMP_LABEL (insn);
}
-
+
insn = NEXT_INSN (insn);
}
}