calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY if not already defined.

* 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.

From-SVN: r44768
This commit is contained in:
Zack Weinberg 2001-08-10 16:19:22 +00:00
parent 07fe2dec7a
commit 19652adf82
24 changed files with 93 additions and 102 deletions

View File

@ -1,3 +1,39 @@
2001-08-10 Zack Weinberg <zackw@stanford.edu>
* 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 <kazu@hxi.com>
* config/h8300/h8300.h: Fix formatting.
@ -41,7 +77,7 @@
2001-08-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
* 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.

View File

@ -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 ();

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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 ""

View File

@ -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);
}

View File

@ -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

View File

@ -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"

View File

@ -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 \

View File

@ -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 \

View File

@ -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

View File

@ -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"

View File

@ -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.

View File

@ -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"

View File

@ -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;

View File

@ -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 () \

View File

@ -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"

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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;