summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/alpha/alpha.h2
-rw-r--r--gcc/config/alpha/elf.h71
-rw-r--r--gcc/dwarf2out.c2
-rw-r--r--gcc/except.c2
-rw-r--r--gcc/expr.c1
-rw-r--r--gcc/flow.c8
-rw-r--r--gcc/gcse.c2
-rw-r--r--gcc/genemit.c17
-rw-r--r--gcc/genrecog.c9
-rw-r--r--gcc/rtl.h2
10 files changed, 63 insertions, 53 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 5499edb66db..2c0e0a2d2cc 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -2549,6 +2549,8 @@ extern int call_operand ();
extern int reg_or_cint_operand ();
extern int hard_fp_register_operand ();
extern int reg_not_elim_operand ();
+extern int normal_memory_operand ();
+extern int reg_no_subreg_operand ();
extern void alpha_set_memflags ();
extern int aligned_memory_operand ();
extern void get_aligned_mem ();
diff --git a/gcc/config/alpha/elf.h b/gcc/config/alpha/elf.h
index 6cea3da5d5b..0765c8754b6 100644
--- a/gcc/config/alpha/elf.h
+++ b/gcc/config/alpha/elf.h
@@ -415,22 +415,27 @@ void FN () \
/* Write the extra assembler code needed to declare an object properly. */
-#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
- do { \
- fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
- assemble_name (FILE, NAME); \
- putc (',', FILE); \
- fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
- putc ('\n', FILE); \
- size_directive_output = 0; \
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
- { \
- size_directive_output = 1; \
- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
- assemble_name (FILE, NAME); \
- fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
- } \
- ASM_OUTPUT_LABEL(FILE, NAME); \
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
+ do { \
+ HOST_WIDE_INT size; \
+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
+ putc ('\n', FILE); \
+ size_directive_output = 0; \
+ if (!flag_inhibit_size_directive \
+ && DECL_SIZE (DECL) \
+ && (size = int_size_in_bytes (TREE_TYPE (DECL))) > 0) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fputc (',', FILE); \
+ fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, size); \
+ fputc ('\n', FILE); \
+ } \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
} while (0)
/* Output the size directive for a decl in rest_of_decl_compilation
@@ -440,22 +445,24 @@ void FN () \
by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-do { \
- char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
- && ! AT_END && TOP_LEVEL \
- && DECL_INITIAL (DECL) == error_mark_node \
- && !size_directive_output) \
- { \
- size_directive_output = 1; \
- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
- assemble_name (FILE, name); \
- putc (',', FILE); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \
- int_size_in_bytes (TREE_TYPE (DECL))); \
- putc ('\n', FILE); \
- } \
-} while (0)
+ do { \
+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
+ HOST_WIDE_INT size; \
+ if (!flag_inhibit_size_directive \
+ && DECL_SIZE (DECL) \
+ && ! AT_END && TOP_LEVEL \
+ && DECL_INITIAL (DECL) == error_mark_node \
+ && !size_directive_output \
+ && (size = int_size_in_bytes (TREE_TYPE (DECL))) > 0) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, name); \
+ fputc (',', FILE); \
+ fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, size); \
+ fputc ('\n', FILE); \
+ } \
+ } while (0)
/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 9fb2d882941..09168d6d97f 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -9885,7 +9885,7 @@ dwarf2out_line (filename, line)
if (DWARF2_ASM_LINE_DEBUG_INFO)
{
- static char *lastfile;
+ static const char *lastfile;
/* Emit the .file and .loc directives understood by GNU as. */
if (lastfile == 0 || strcmp (filename, lastfile))
diff --git a/gcc/except.c b/gcc/except.c
index cc6a8d1b766..6cc84659032 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -1907,7 +1907,7 @@ expand_rethrow (label)
else
if (flag_new_exceptions)
{
- rtx insn, val;
+ rtx insn;
int region;
if (label == NULL_RTX)
label = last_rethrow_symbol;
diff --git a/gcc/expr.c b/gcc/expr.c
index 97bf5a9fa00..967c3e7441d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -9012,7 +9012,6 @@ do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label, if_true
/* Compare a word at a time, high order first. */
for (i = 0; i < nwords; i++)
{
- rtx comp;
rtx op0_word, op1_word;
if (WORDS_BIG_ENDIAN)
diff --git a/gcc/flow.c b/gcc/flow.c
index a813d943e69..f917904d14f 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -6080,9 +6080,8 @@ replace_insns (first, last, first_new, notes)
rtx first, last, first_new, notes;
{
rtx stop = NEXT_INSN (last);
- rtx last_new;
- rtx curr, next;
rtx prev = PREV_INSN (first);
+ rtx last_new, curr;
int i;
if (notes == NULL_RTX)
@@ -6356,8 +6355,7 @@ create_edge_list ()
struct edge_list *elist;
edge e;
int num_edges;
- int x,y;
- int_list_ptr ptr;
+ int x;
int block_count;
block_count = n_basic_blocks + 2; /* Include the entry and exit blocks. */
@@ -6451,8 +6449,6 @@ verify_edge_list (f, elist)
struct edge_list *elist;
{
int x, pred, succ, index;
- int_list_ptr ptr;
- int flawed = 0;
edge e;
for (x = 0; x < n_basic_blocks; x++)
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 3fa620a9c29..2c299a2188f 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -577,7 +577,9 @@ static void find_used_regs PROTO ((rtx));
static int try_replace_reg PROTO ((rtx, rtx, rtx));
static struct expr *find_avail_set PROTO ((int, rtx));
static int cprop_jump PROTO((rtx, rtx, struct reg_use *, rtx));
+#ifdef HAVE_cc0
static int cprop_cc0_jump PROTO((rtx, struct reg_use *, rtx));
+#endif
static int cprop_insn PROTO ((rtx, int));
static int cprop PROTO ((int));
static int one_cprop_pass PROTO ((int, int));
diff --git a/gcc/genemit.c b/gcc/genemit.c
index 68188e6c2ea..f9d917e3245 100644
--- a/gcc/genemit.c
+++ b/gcc/genemit.c
@@ -459,9 +459,6 @@ gen_expand (expand)
printf (" rtx operand%d;\n", i);
for (; i <= max_scratch_opno; i++)
printf (" rtx operand%d;\n", i);
- if (operands > 0 || max_dup_opno >= 0 || max_scratch_opno >= 0)
- printf (" rtx operands[%d];\n",
- MAX (operands, MAX (max_scratch_opno, max_dup_opno) + 1));
printf (" rtx _val = 0;\n");
printf (" start_sequence ();\n");
@@ -473,9 +470,13 @@ gen_expand (expand)
So copy the operand values there before executing it. */
if (XSTR (expand, 3) && *XSTR (expand, 3))
{
+ printf (" {\n");
+ if (operands > 0 || max_dup_opno >= 0 || max_scratch_opno >= 0)
+ printf (" rtx operands[%d];\n",
+ MAX (operands, MAX (max_scratch_opno, max_dup_opno) + 1));
/* Output code to copy the arguments into `operands'. */
for (i = 0; i < operands; i++)
- printf (" operands[%d] = operand%d;\n", i, i);
+ printf (" operands[%d] = operand%d;\n", i, i);
/* Output the special code to be executed before the sequence
is generated. */
@@ -486,12 +487,13 @@ gen_expand (expand)
if (XVEC (expand, 1) != 0)
{
for (i = 0; i < operands; i++)
- printf (" operand%d = operands[%d];\n", i, i);
+ printf (" operand%d = operands[%d];\n", i, i);
for (; i <= max_dup_opno; i++)
- printf (" operand%d = operands[%d];\n", i, i);
+ printf (" operand%d = operands[%d];\n", i, i);
for (; i <= max_scratch_opno; i++)
- printf (" operand%d = operands[%d];\n", i, i);
+ printf (" operand%d = operands[%d];\n", i, i);
}
+ printf (" }\n");
}
/* Output code to construct the rtl for the instruction bodies.
@@ -815,7 +817,6 @@ from the machine description file `md'. */\n\n");
printf ("#include \"resource.h\"\n");
printf ("#include \"reload.h\"\n\n");
printf ("extern rtx recog_operand[];\n");
- printf ("#define operands emit_operand\n\n");
printf ("#define FAIL return (end_sequence (), _val)\n");
printf ("#define DONE return (_val = gen_sequence (), end_sequence (), _val)\n");
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index a2eef4617d8..804cffcd34b 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -1979,9 +1979,12 @@ from the machine description file `md'. */\n\n");
break_out_subroutines (split_tree, SPLIT, 1);
write_subroutine (split_tree.first, SPLIT);
- next_subroutine_number = 0;
- break_out_subroutines (peephole2_tree, PEEPHOLE2, 1);
- write_subroutine (peephole2_tree.first, PEEPHOLE2);
+ if (peephole2_tree.first)
+ {
+ next_subroutine_number = 0;
+ break_out_subroutines (peephole2_tree, PEEPHOLE2, 1);
+ write_subroutine (peephole2_tree.first, PEEPHOLE2);
+ }
fflush (stdout);
exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 59b27069466..0bb488ddf66 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -476,7 +476,7 @@ extern const char * const reg_note_name[];
#define NOTE_EH_HANDLER(INSN) X0INT(INSN, 3)
#define NOTE_RANGE_INFO(INSN) X0EXP(INSN, 3)
#define NOTE_LIVE_INFO(INSN) X0EXP(INSN, 3)
-#define NOTE_BASIC_BLOCK(INSN) X0EXP(INSN, 3)
+#define NOTE_BASIC_BLOCK(INSN) X0BBDEF(INSN, 3)
/* If the NOTE_BLOCK_NUMBER field gets a -1, it means create a new
block node for a live range block. */