diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a76f2e690f3..0d9367f0820 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,39 @@ +2001-08-10 Zack Weinberg + + * calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY + if not already defined. Remove all #ifdefs on STACK_BOUNDARY; + this macro is now required. + + * cselib.c (cselib_process_insn), flow.c (propagate_block), + loop.c (find_and_verify_loops), reload.c (reload): Check + for rtx code of CALL_INSN, not CALL, when deciding if we + need to check for REG_SETJMP note. + + * gcse.c (compute_hash_table, compute_store_table): Update + the #ifdef NON_SAVING_SETJMP code to the new REG_SETJMP + logic. + + * config/avr/avr.c: Fix typo. + * config/convex/convex.c (expand_movstr): Use adjust_address. + * config/dsp16xx/dsp16xx.c: Define dsp16xx_compare_gen + variable. + * config/dsp16xx/dsp16xx.md: Correct calls to replace_equiv_address. + * config/elxsi/elxsi.c: Include tree.h, expr.h, regs.h, and flags.h. + Fix typo. + * config/elxsi/elxsi.h: Don't define Rmode (typo for Pmode?) + Do define STACK_BOUNDARY. + * config/i370/i370.c: Include expr.h. + * config/i860/sysv3.h, config/i860/sysv4.h, config/m32r/m32r.h, + config/pa/som.h, config/v850/v850.h: Take in_ctors and + in_dtors out of EXTRA_SECTIONS; take CTORS_SECTION_FUNCTION + and DTORS_SECTION_FUNCTION out of EXTRA_SECTION_FUNCTIONS. + * config/m88k/m88k.c: Include c-tree.h after expr.h. + * config/pdp11/pdp11.c: Include expr.h and toplev.h. + * config/romp/romp.c: Include expr.h after tree.h. + Include toplev.h. + (output_fpop): Use xmalloc, not oballoc. + * config/we32k/we32k.c: Include expr.h. + 2001-08-10 Kazu Hirata * config/h8300/h8300.h: Fix formatting. @@ -41,7 +77,7 @@ 2001-08-09 John David Anglin - * stmt.c (expand_null_return_1): Remove code to generate simple returns + * stmt.c (expand_null_return_1): Remove code to generate simple returns and "use_goto" argument. (expand_null_return, expand_value_return): Update all callers. * function.c (expand_function_end): Remove code to generate simple @@ -161,7 +197,7 @@ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. * config/c4x/c4x.c: Move include of tree.h. - * config/clipper/clipper.c (clix_asm_out_constructor): New. + * config/clipper/clipper.c (clix_asm_out_constructor): New. (clix_asm_out_destructor): New. * config/clipper/clix.h (ASM_OUTPUT_CONSTRUCTOR): Remove. (ASM_OUTPUT_DESTRUCTOR): Remove. diff --git a/gcc/calls.c b/gcc/calls.c index 7d810696660..1f40d53e520 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -37,7 +37,7 @@ Boston, MA 02111-1307, USA. */ #define FUNCTION_OK_FOR_SIBCALL(DECL) 1 #endif -#if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY +#if !defined PREFERRED_STACK_BOUNDARY #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY #endif @@ -988,7 +988,7 @@ restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save) move_by_pieces (stack_area, validize_mem (save_area), high_to_save - low_to_save + 1, PARM_BOUNDARY); } -#endif +#endif /* REG_PARM_STACK_SPACE */ /* If any elements in ARGS refer to parameters that are to be passed in registers, but not in memory, and whose alignment does not permit a @@ -1368,10 +1368,8 @@ compute_argument_block_size (reg_parm_stack_space, args_size, /* For accumulate outgoing args mode we don't need to align, since the frame will be already aligned. Align to STACK_BOUNDARY in order to prevent backends from generating missaligned frame sizes. */ -#ifdef STACK_BOUNDARY if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY) preferred_stack_boundary = STACK_BOUNDARY; -#endif /* Compute the actual size of the argument block required. The variable and constant sizes must be combined, the size may have to be rounded, @@ -1382,7 +1380,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size, args_size->var = ARGS_SIZE_TREE (*args_size); args_size->constant = 0; -#ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary /= BITS_PER_UNIT; if (preferred_stack_boundary > 1) { @@ -1393,7 +1390,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size, abort (); args_size->var = round_up (args_size->var, preferred_stack_boundary); } -#endif if (reg_parm_stack_space > 0) { @@ -1412,7 +1408,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size, } else { -#ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary /= BITS_PER_UNIT; if (preferred_stack_boundary < 1) preferred_stack_boundary = 1; @@ -1422,7 +1417,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size, / preferred_stack_boundary * preferred_stack_boundary) - stack_pointer_delta); -#endif args_size->constant = MAX (args_size->constant, reg_parm_stack_space); @@ -2296,11 +2290,7 @@ expand_call (exp, target, ignore) } /* Figure out the amount to which the stack should be aligned. */ -#ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; -#else - preferred_stack_boundary = STACK_BOUNDARY; -#endif /* Operand 0 is a pointer-to-function; get the type of the function. */ funtype = TREE_TYPE (TREE_OPERAND (exp, 0)); @@ -2905,7 +2895,6 @@ expand_call (exp, target, ignore) compute_argument_addresses (args, argblock, num_actuals); -#ifdef PREFERRED_STACK_BOUNDARY /* If we push args individually in reverse order, perform stack alignment before the first push (the last arg). */ if (PUSH_ARGS_REVERSED && argblock == 0 @@ -2931,12 +2920,6 @@ expand_call (exp, target, ignore) /* Now that the stack is properly aligned, pops can't safely be deferred during the evaluation of the arguments. */ NO_DEFER_POP; -#endif - - /* Don't try to defer pops if preallocating, not even from the first arg, - since ARGBLOCK probably refers to the SP. */ - if (argblock) - NO_DEFER_POP; funexp = rtx_for_function_call (fndecl, exp); @@ -3008,13 +2991,11 @@ expand_call (exp, target, ignore) sibcall_failure = 1; } -#ifdef PREFERRED_STACK_BOUNDARY /* If we pushed args in forward order, perform stack alignment after pushing the last arg. */ if (!PUSH_ARGS_REVERSED && argblock == 0) anti_adjust_stack (GEN_INT (adjusted_args_size.constant - unadjusted_args_size)); -#endif /* If register arguments require space on the stack and stack space was not preallocated, allocate stack space here for arguments @@ -3074,11 +3055,9 @@ expand_call (exp, target, ignore) /* All arguments and registers used for the call must be set up by now! */ -#ifdef PREFERRED_STACK_BOUNDARY /* Stack must be properly aligned now. */ if (pass && stack_pointer_delta % preferred_unit_stack_boundary) abort (); -#endif /* Generate the actual call instruction. */ emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size, @@ -3558,12 +3537,10 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) } fun = orgfun; -#ifdef PREFERRED_STACK_BOUNDARY /* Ensure current function's preferred stack boundary is at least what we need. */ if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY) cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; -#endif /* If this kind of value comes back in memory, decide where in memory it should come back. */ @@ -3772,14 +3749,12 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) assemble_external_libcall (fun); original_args_size = args_size; -#ifdef PREFERRED_STACK_BOUNDARY args_size.constant = (((args_size.constant + stack_pointer_delta + STACK_BYTES - 1) / STACK_BYTES * STACK_BYTES) - stack_pointer_delta); -#endif args_size.constant = MAX (args_size.constant, reg_parm_stack_space); @@ -3848,13 +3823,11 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) argblock = push_block (GEN_INT (args_size.constant), 0, 0); } -#ifdef PREFERRED_STACK_BOUNDARY /* If we push args individually in reverse order, perform stack alignment before the first push (the last arg). */ if (argblock == 0 && PUSH_ARGS_REVERSED) anti_adjust_stack (GEN_INT (args_size.constant - original_args_size.constant)); -#endif if (PUSH_ARGS_REVERSED) { @@ -4000,13 +3973,11 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) } } -#ifdef PREFERRED_STACK_BOUNDARY /* If we pushed args in forward order, perform stack alignment after pushing the last arg. */ if (argblock == 0 && !PUSH_ARGS_REVERSED) anti_adjust_stack (GEN_INT (args_size.constant - original_args_size.constant)); -#endif if (PUSH_ARGS_REVERSED) argnum = nargs - 1; @@ -4064,11 +4035,9 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) valreg = (mem_value == 0 && outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX); -#ifdef PREFERRED_STACK_BOUNDARY /* Stack must be properly aligned now. */ if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)) abort (); -#endif before_call = get_last_insn (); diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 6d11d058374..cb222b2b10f 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -815,7 +815,6 @@ avr_output_function_epilogue (file, size) /* Return nonzero if X (an RTX) is a legitimate memory address on the target machine for a memory operand of mode MODE. */ -int int legitimate_address_p (mode, x, strict) enum machine_mode mode; diff --git a/gcc/config/convex/convex.c b/gcc/config/convex/convex.c index a0e0987b88e..dcf36694748 100644 --- a/gcc/config/convex/convex.c +++ b/gcc/config/convex/convex.c @@ -439,8 +439,8 @@ expand_movstr (operands) /* Advance to next piece. */ size = GET_MODE_SIZE (mode); - src = adj_offsettable_operand (src, size); - dest = adj_offsettable_operand (dest, size); + src = adjust_address (src, mode, size); + dest = adjust_address (dest, mode, size); len -= size; } diff --git a/gcc/config/dsp16xx/dsp16xx.c b/gcc/config/dsp16xx/dsp16xx.c index 32402623ff4..74de0d084e0 100644 --- a/gcc/config/dsp16xx/dsp16xx.c +++ b/gcc/config/dsp16xx/dsp16xx.c @@ -58,6 +58,7 @@ const char *save_chip_name; rtx dsp16xx_compare_op0; rtx dsp16xx_compare_op1; +rtx (*dsp16xx_compare_gen) PARAMS (()); static const char *fp; static const char *sp; diff --git a/gcc/config/dsp16xx/dsp16xx.md b/gcc/config/dsp16xx/dsp16xx.md index 4e851554b27..29d9acd3bef 100644 --- a/gcc/config/dsp16xx/dsp16xx.md +++ b/gcc/config/dsp16xx/dsp16xx.md @@ -1131,8 +1131,8 @@ operands[5] = addr0; operands[6] = addr1; - operands[0] = replace_equiv_address (operands[0], VOIDmode, addr0); - operands[1] = replace_equiv_address (operands[1], VOIDmode, addr1); + operands[0] = replace_equiv_address (operands[0], addr0); + operands[1] = replace_equiv_address (operands[1], addr1); }") (define_insn "" diff --git a/gcc/config/elxsi/elxsi.c b/gcc/config/elxsi/elxsi.c index 0a0e77bf6bf..7e8a24c1205 100644 --- a/gcc/config/elxsi/elxsi.c +++ b/gcc/config/elxsi/elxsi.c @@ -26,6 +26,10 @@ Boston, MA 02111-1307, USA. */ #include "rtl.h" #include "function.h" #include "output.h" +#include "tree.h" +#include "expr.h" +#include "regs.h" +#include "flags.h" #include "tm_p.h" #include "target.h" #include "target-def.h" @@ -129,7 +133,7 @@ elxsi_output_function_epilogue (file, size) { for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) if (regs_ever_live[regno] && !call_used_regs[regno]) - fprintf (file, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt + =8) - 12); + fprintf (file, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt += 8) - 12); fprintf (file, "\texit\t%d\n", size + cnt); } diff --git a/gcc/config/elxsi/elxsi.h b/gcc/config/elxsi/elxsi.h index 8d138238191..87ef3ea41cf 100644 --- a/gcc/config/elxsi/elxsi.h +++ b/gcc/config/elxsi/elxsi.h @@ -79,7 +79,6 @@ extern int target_flags; if using 16-bit ints on a 68000, this would still be 32. But on a machine with 16-bit registers, this would be 16. */ #define BITS_PER_WORD 64 -#define Rmode DImode #define INT_TYPE_SIZE 32 @@ -106,6 +105,9 @@ extern int target_flags; /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY 32 +/* Boundary (in *bits*) on which stack pointer should be aligned. */ +#define STACK_BOUNDARY 32 + /* Allocation boundary (in *bits*) for the code of a function. */ #define FUNCTION_BOUNDARY 8 diff --git a/gcc/config/i370/i370.c b/gcc/config/i370/i370.c index 8dd229f268d..ca3cafb2ab0 100644 --- a/gcc/config/i370/i370.c +++ b/gcc/config/i370/i370.c @@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */ #include "output.h" #include "insn-attr.h" #include "function.h" +#include "expr.h" #include "flags.h" #include "recog.h" #include "toplev.h" diff --git a/gcc/config/i860/sysv3.h b/gcc/config/i860/sysv3.h index e4255d41e09..5380aa2b2b3 100644 --- a/gcc/config/i860/sysv3.h +++ b/gcc/config/i860/sysv3.h @@ -149,13 +149,11 @@ extern char *current_function_original_name; #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS -#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc +#define EXTRA_SECTIONS in_const, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ diff --git a/gcc/config/i860/sysv4.h b/gcc/config/i860/sysv4.h index 5e40e34d030..c92c2a99fbe 100644 --- a/gcc/config/i860/sysv4.h +++ b/gcc/config/i860/sysv4.h @@ -175,13 +175,11 @@ extern char *current_function_original_name; #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS -#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc +#define EXTRA_SECTIONS in_const, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index e72f61f9ad9..692249babac 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1548,7 +1548,7 @@ extern int m32r_sched_odd_word_p; `in_text' and `in_data'. You need not define this macro on a system with no other sections (that GCC needs to use). */ #undef EXTRA_SECTIONS -#define EXTRA_SECTIONS in_sdata, in_sbss, in_const, in_ctors, in_dtors +#define EXTRA_SECTIONS in_sdata, in_sbss, in_const /* One or more functions to be defined in "varasm.c". These functions should do jobs analogous to those of `text_section' and @@ -1557,8 +1557,6 @@ extern int m32r_sched_odd_word_p; #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \ SBSS_SECTION_FUNCTION diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c index f77aa474a7c..b10eab003dc 100644 --- a/gcc/config/m88k/m88k.c +++ b/gcc/config/m88k/m88k.c @@ -33,8 +33,8 @@ Boston, MA 02111-1307, USA. */ #include "insn-attr.h" #include "tree.h" #include "function.h" -#include "c-tree.h" #include "expr.h" +#include "c-tree.h" #include "flags.h" #include "recog.h" #include "toplev.h" diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index df3cb04a431..0d20555e5ab 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -260,13 +260,7 @@ do { \ /* Define the .bss section for ASM_OUTPUT_LOCAL to use. */ -#ifndef CTORS_SECTION_FUNCTION #define EXTRA_SECTIONS in_readonly_data -#define CTORS_SECTION_FUNCTION -#define DTORS_SECTION_FUNCTION -#else -#define EXTRA_SECTIONS in_readonly_data, in_ctors, in_dtors -#endif /* FIXME: HPUX ld generates incorrect GOT entries for "T" fixups which reference data within the $TEXT$ space (for example constant @@ -293,9 +287,7 @@ readonly_data () \ fprintf (asm_out_file, "%s\n", READONLY_DATA_ASM_OP); \ in_section = in_readonly_data; \ } \ -} \ -CTORS_SECTION_FUNCTION \ -DTORS_SECTION_FUNCTION +} /* This is how to output a command to make the user-level label named NAME defined for reference from other files. diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c index 9bf51ceda0b..03e596c5afe 100644 --- a/gcc/config/pdp11/pdp11.c +++ b/gcc/config/pdp11/pdp11.c @@ -34,6 +34,8 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "recog.h" #include "tree.h" +#include "expr.h" +#include "toplev.h" #include "tm_p.h" #include "target.h" #include "target-def.h" diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c index 27a17061f98..6cdb77e80f1 100644 --- a/gcc/config/romp/romp.c +++ b/gcc/config/romp/romp.c @@ -33,10 +33,11 @@ Boston, MA 02111-1307, USA. */ #include "insn-attr.h" #include "flags.h" #include "recog.h" -#include "expr.h" #include "obstack.h" #include "tree.h" #include "function.h" +#include "expr.h" +#include "toplev.h" #include "tm_p.h" #include "target.h" #include "target-def.h" @@ -1546,7 +1547,7 @@ output_fpop (code, op0, op1, op2, insn) goto win; /* We have never seen this operation before. */ - fpop = (struct fp_op *) oballoc (sizeof (struct fp_op)); + fpop = (struct fp_op *) xmalloc (sizeof (struct fp_op)); fpop->mem_offset = data_offset; fpop->opcode = code; fpop->noperands = noperands; diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index ae7098ad244..281f2199988 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -1056,8 +1056,8 @@ typedef enum `in_text' and `in_data'. You need not define this macro on a system with no other sections (that GCC needs to use). */ #undef EXTRA_SECTIONS -#define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, in_ctors, \ -in_dtors, in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon +#define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, \ + in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon /* One or more functions to be defined in `varasm.c'. These functions should do jobs analogous to those of `text_section' and @@ -1068,8 +1068,6 @@ in_dtors, in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon /* This could be done a lot more cleanly using ANSI C ... */ #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ -CTORS_SECTION_FUNCTION \ -DTORS_SECTION_FUNCTION \ \ void \ sdata_section () \ diff --git a/gcc/config/we32k/we32k.c b/gcc/config/we32k/we32k.c index 462b598862d..5ee63acfd02 100644 --- a/gcc/config/we32k/we32k.c +++ b/gcc/config/we32k/we32k.c @@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA. */ #include "output.h" #include "regs.h" #include "tree.h" +#include "expr.h" #include "tm_p.h" #include "target.h" #include "target-def.h" diff --git a/gcc/cselib.c b/gcc/cselib.c index 89a274f1e14..619bad174c2 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -1276,7 +1276,7 @@ cselib_process_insn (insn) /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */ if (GET_CODE (insn) == CODE_LABEL - || (GET_CODE (insn) == CALL + || (GET_CODE (insn) == CALL_INSN && find_reg_note (insn, REG_SETJMP, NULL)) || (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == ASM_OPERANDS diff --git a/gcc/flow.c b/gcc/flow.c index f7d32196a86..e2c1646e6c8 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -5711,7 +5711,7 @@ propagate_block (bb, live, local_set, cond_local_set, flags) /* If this is a call to `setjmp' et al, warn if any non-volatile datum is live. */ if ((flags & PROP_REG_INFO) - && GET_CODE (insn) == CALL + && GET_CODE (insn) == CALL_INSN && find_reg_note (insn, REG_SETJMP, NULL)) IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live); diff --git a/gcc/function.c b/gcc/function.c index af1c87befb6..a0cfa00ba51 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -67,7 +67,7 @@ Boston, MA 02111-1307, USA. */ #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT #endif -#if !defined (PREFERRED_STACK_BOUNDARY) && defined (STACK_BOUNDARY) +#ifndef PREFERRED_STACK_BOUNDARY #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY #endif @@ -5058,13 +5058,11 @@ assign_parms (fndecl) #endif #endif -#ifdef STACK_BOUNDARY #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT) current_function_args_size = ((current_function_args_size + STACK_BYTES - 1) / STACK_BYTES) * STACK_BYTES; -#endif #ifdef ARGS_GROW_DOWNWARD current_function_arg_offset_rtx @@ -6140,13 +6138,8 @@ prepare_function_start () cfun->original_decl_initial = 0; cfun->original_arg_vector = 0; -#ifdef STACK_BOUNDARY cfun->stack_alignment_needed = STACK_BOUNDARY; cfun->preferred_stack_boundary = STACK_BOUNDARY; -#else - cfun->stack_alignment_needed = 0; - cfun->preferred_stack_boundary = 0; -#endif /* Set if a call to setjmp is seen. */ current_function_calls_setjmp = 0; diff --git a/gcc/gcse.c b/gcc/gcse.c index f0031c093fe..230242e25a6 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -2495,23 +2495,21 @@ compute_hash_table (set_p) insn && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) { -#ifdef NON_SAVING_SETJMP - if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) - { - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) - record_last_reg_set_info (insn, regno); - continue; - } -#endif - if (! INSN_P (insn)) continue; if (GET_CODE (insn) == CALL_INSN) { + bool clobbers_all = false; +#ifdef NON_SAVING_SETJMP + if (NON_SAVING_SETJMP + && find_reg_note (insn, REG_SETJMP, NULL_RTX)) + clobbers_all = true; +#endif + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) - if (TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) + if (clobbers_all + || TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) record_last_reg_set_info (insn, regno); mark_call (insn); @@ -6415,23 +6413,22 @@ compute_store_table () insn && insn != PREV_INSN (BLOCK_HEAD (bb)); insn = PREV_INSN (insn)) { -#ifdef NON_SAVING_SETJMP - if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) - { - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) - SET_BIT (reg_set_in_block[bb], regno); - continue; - } -#endif - /* Ignore anything that is not a normal insn. */ - if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + /* Ignore anything that is not a normal insn. */ + if (! INSN_P (insn)) continue; if (GET_CODE (insn) == CALL_INSN) { + bool clobbers_all = false; +#ifdef NON_SAVING_SETJMP + if (NON_SAVING_SETJMP + && find_reg_note (insn, REG_SETJMP, NULL_RTX)) + clobbers_all = true; +#endif + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) - if (TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) + if (clobbers_all + || TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) SET_BIT (reg_set_in_block[bb], regno); } diff --git a/gcc/loop.c b/gcc/loop.c index 46225bbbefc..ca06a08007d 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -2532,7 +2532,7 @@ find_and_verify_loops (f, loops) break; } - if (GET_CODE (insn) == CALL + if (GET_CODE (insn) == CALL_INSN && find_reg_note (insn, REG_SETJMP, NULL)) { /* In this case, we must invalidate our current loop and any diff --git a/gcc/reload1.c b/gcc/reload1.c index d405b10ca51..61100c990fa 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -762,7 +762,8 @@ reload (first, global) { rtx set = single_set (insn); - if (GET_CODE (insn) == CALL && find_reg_note (insn, REG_SETJMP, NULL)) + if (GET_CODE (insn) == CALL_INSN + && find_reg_note (insn, REG_SETJMP, NULL)) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (! call_used_regs[i]) regs_ever_live[i] = 1;