Commit Graph

561 Commits

Author SHA1 Message Date
Jason Merrill
d1a74aa7d3 tree-inline.c (find_builtin_longjmp_call): Save and restore lineno and input_filename.
* tree-inline.c (find_builtin_longjmp_call): Save and restore
        lineno and input_filename.
        (find_alloca_call): Likewise.
        (inlinable_function_p): Run the langhook earlier.

        * calls.c (compute_argument_addresses): Give the new MEMs a
        minimum alignment of PARM_BOUNDARY.
cp/
        * decl.c (start_function): Clear DECL_NUM_STMTS.

        * class.c (get_vtable_decl): Use vtbl_type_node.
        (build_primary_vtable): Check for it.

From-SVN: r63733
2003-03-03 16:28:23 -05:00
Jan Hubicka
09e2bf486d calls.c (rtx_for_function_call): Take the address as an argument
* calls.c (rtx_for_function_call): Take the address as an argument
	(expand_call): Do not modify the expression.

From-SVN: r63725
2003-03-03 18:27:09 +00:00
Alan Modra
8403445aba calls.c (store_one_arg): Revert 1999-02-16 change.
* calls.c (store_one_arg): Revert 1999-02-16 change.  Revert
	2000-12-17 change.  Pass EXPAND_STACK_PARM to expand_expr.
	* expr.h (enum expand_modifier): Define EXPAND_STACK_PARM.
	(enum block_op_methods): Reorder for better store_expr optimization.
	* expr.c (store_expr): Test bit 1 of "want_value" for call param
	stores, test bit 0 for original want_value meaning.  Pass
	BLOCK_OP_CALL_PARM to emit_block_move when bit 1 set.  Adjust
	recursive calls, and calls to expand_param.
	(expand_expr): Handle EXPAND_STACK_PARM modifier.  When cse
	expected, set target to 0 rather than to subtarget.  Formatting.

From-SVN: r63337
2003-02-24 08:49:39 +10:30
Jan Hubicka
563a317a85 calls.c (expand_call): Update call of INIT_CUMULATIVE_ARGS
* calls.c (expand_call): Update call of INIT_CUMULATIVE_ARGS
	* function.c (assign_params): Likewise.
	* arm-protos.h (arm_init_cumulative_args): Update prototype.
	* arm.c (arm_init_cumulative_args): Update function.
	* arm.h (INIT_CUMULATIVE_ARGS): Update.
	* avr-protos.h (init_cumulative_args): Update prototype.
	* avr.c (init_cumulative_args): Update function.
	* avr.h (INIT_CUMULATIVE_ARGS): Update.
	* d30v-protos.h (d30v_init_cumulative_args): Update prototype.
	* d30v.c (d30v_init_cumulative_args): Update function.
	* d30v.h (INIT_CUMULATIVE_ARGS): Update.
	* frv-protos.h (frv_init_cumulative_args): Update prototype.
	* frv.c (frv_init_cumulative_args): Update function.
	* frv.h (INIT_CUMULATIVE_ARGS): Update.
	* mips.c (mips_expand_prolgue): Update call of INIT_CUMULATIVE_ARGS.
	* pa.h (INIT_CUMULATIVE_ARGS): Update.
	* sparc-protos.h (init_cumulative_args): Update prototype.
	* sparc.c (init_cumulative_args): Update function.
	* sparc.h (INIT_CUMULATIVE_ARGS): Update.
	* tm.texi (INIT_CUMULATIVE_ARGS): Update documentation.

From-SVN: r63126
2003-02-19 18:03:11 +00:00
Alan Modra
546ff7777c calls.c (try_to_integrate): Tidy stack_usage_map access.
* calls.c (try_to_integrate): Tidy stack_usage_map access.
	(emit_library_call_value_1): Likewise.	Formatting.
	(store_one_arg): Likewise.

From-SVN: r62622
2003-02-10 16:46:53 +10:30
Richard Henderson
40cdfd5aa4 * calls.c (default_must_pass_in_stack): Fix typo in !type case.
From-SVN: r61980
2003-01-28 08:56:36 -08:00
Alexandre Oliva
c329756171 calls.c (emit_library_call_value_1): Handle return values in a PARALLEL.
* calls.c (emit_library_call_value_1): Handle return values
in a PARALLEL.

From-SVN: r61826
2003-01-26 09:06:36 +00:00
Alan Modra
b820d2b870 calls.c (save_fixed_argument_area): Tidy.
* calls.c (save_fixed_argument_area): Tidy.
	(restore_fixed_argument_area): Tidy.  Set alignment of stack_area.
	(expand_call): Comment typo fixes.  Don't init low_to_save.  Start
	call chain loop at 1 if !try_tail_call.  Formatting.
	(emit_library_call_value_1): Don't init low_to_save or high_to_save.
	Use save_fixed_argument_area and restore_fixed_argument_area.

From-SVN: r61818
2003-01-26 12:37:48 +10:30
Kaveh R. Ghazi
1f5b3282d9 * calls.c (fix_unsafe_tree): Prototype.
From-SVN: r61545
2003-01-21 14:28:38 +00:00
Christian Ehrhardt
292e35a31b re PR rtl-optimization/7507 (ICE (segfault) with -O2)
PR opt/7507
        * calls.c (fix_unsafe_tree): Split out from ...
        (expand_call): ... here.  Use it on the function address too.

From-SVN: r61539
2003-01-21 00:02:31 -08:00
Richard Henderson
a4b1b92af3 expr.h (MUST_PASS_IN_STACK): Move implementation...
* expr.h (MUST_PASS_IN_STACK): Move implementation...
        * calls.c (default_must_pass_in_stack): ... here.

From-SVN: r61514
2003-01-20 15:20:18 -08:00
Kazu Hirata
32dd366d5e basic-block.h: Fix comment formatting.
* basic-block.h: Fix comment formatting.
	* calls.c: Likewise.
	* combine.c: Likewise.
	* convert.c: Likewise.
	* gcov.c: Likewise.
	* haifa-sched.c: Likewise.
	* libgcc2.c: Likewise.
	* loop.c: Likewise.
	* profile.c: Likewise.
	* system.h: Likewise.

From-SVN: r61478
2003-01-18 22:32:06 +00:00
Dale Johannesen
0cdca92b46 calls.c (load_register_parameters): Add is_sibcall, sibcall_failure parameters.
2003-01-10  Dale Johannesen <dalej@apple.com>
        * calls.c (load_register_parameters):  Add is_sibcall, sibcall_failure
        parameters.  Call check_sibcall_argument_overlap if indicated.
        (check_sibcall_argument_overlap):  Add mark_stored_args_map
        parameter.  Don't mark parameter area as clobbered if not set.
        (expand_call):  Adjust calls to above.

From-SVN: r61165
2003-01-10 19:49:09 +00:00
Jason Merrill
f32ac70dae calls.c (expand_call): Don't try to be clever about expanding the return slot address.
* calls.c (expand_call): Don't try to be clever about expanding
        the return slot address.

From-SVN: r60234
2002-12-18 00:57:43 -05:00
Jason Merrill
89ea02fbac calls.c (expand_call): Handle CALL_EXPR_HAS_RETURN_SLOT_ADDR with special struct-return ABIs.
* calls.c (expand_call): Handle CALL_EXPR_HAS_RETURN_SLOT_ADDR
        with special struct-return ABIs.

cp/
        * semantics.c (simplify_aggr_init_exprs_r): Don't change the type
        of the CALL_EXPR.

From-SVN: r60223
2002-12-17 16:29:29 -05:00
Zack Weinberg
4977bab6ed Merge basic-improvements-branch to trunk
From-SVN: r60174
2002-12-16 18:23:00 +00:00
Steve Ellcey
9ac3e73b40 tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.
* doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.
	* defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.
	* calls.c (store_unaligned_arguments_into_pseudos) Remove
	FUNCTION_ARG_REG_LITTLE_ENDIAN.
	* stmt.c (expand_return): Ditto.
	* expr.c (move_block_from_reg): Ditto.
	(copy_blkmode_from_reg): Ditto.
	* expmed.c (store_bit_field): Ditto.

From-SVN: r59962
2002-12-09 17:54:07 +00:00
Jan Hubicka
c986baf631 calls.c (alloca_call_p): New global function.
* calls.c (alloca_call_p): New global function.
	* tree.h (alloca_call_p): New.
	* tree-inline.c (inlinable_function_p):  Do not inline when
	function calls alloca.
	(find_alloca_call, find_alloca_call_1): New functions.

From-SVN: r59228
2002-11-18 19:30:34 +00:00
H.J. Lu
2da4124d3d calls.c (PUSH_ARGS_REVERSED): Define only if not defined.
2002-11-10  H.J. Lu <hjl@gnu.org>

	* calls.c (PUSH_ARGS_REVERSED): Define only if not defined.
	* expr.c (PUSH_ARGS_REVERSED): Likewise.

	* config/i386/i386.h (PUSH_ARGS_REVERSED): Set to 1.

From-SVN: r59002
2002-11-10 19:13:18 -08:00
Ulrich Weigand
97d05bfdd2 c-opts.c (missing_arg): Use cl_options[opt_index].opt_code instead of just opt_index as switch expression.
* c-opts.c (missing_arg): Use cl_options[opt_index].opt_code
	instead of just opt_index as switch expression.

	* calls.c (store_one_arg): Change type of 'excess_align'
	to unsigned int.

	* profile.c (output_gcov_string): Change type of 'temp'
	to size_t.

From-SVN: r58381
2002-10-21 20:24:57 +00:00
Jan Hubicka
db6556348d re PR c/7344 (performance regression on huge case statements)
* calls.c (expand_call): Simplify noreturn call.

	PR c/7344
	* cfgbuild.c (make_edges): Create edge cache when we do have
	large jumptable.
	(do_tablejump): Note size of maximal jumptable.
	* function.c (prepare_function_start): Zero out size.
	* function.h (function): Add max_jumptable_ents.

	* cfgcleanup.c (insn_match_p): Verify sibcall flag for calls to.

From-SVN: r58063
2002-10-11 20:26:50 +00:00
Richard Henderson
fd1e5d25e3 calls.c (precompute_register_parameters): Force non-legitimate constants into pseudos.
* calls.c (precompute_register_parameters): Force non-legitimate
        constants into pseudos.
	* gcc.dg/tls/opt-3.c: New.

From-SVN: r57709
2002-10-01 13:49:39 -07:00
David S. Miller
99a3256796 re PR rtl-optimization/7335 (Sparc: ICE in verify_wide_reg (flow.c:557) with long double and optimization)
2002-09-26  David S. Miller  <davem@redhat.com>

	PR optimization/7335
	* calls.c (emit_library_call_value_1): Passing args by reference
	converts a CONST function into a PURE one.

From-SVN: r57576
2002-09-26 21:12:51 -07:00
Kazu Hirata
da7d830409 ChangeLog: Follow spelling conventions.
* ChangeLog: Follow spelling conventions.
	* ChangeLog.0: Likewise.
	* ChangeLog.1: Likewise.
	* ChangeLog.2: Likewise.
	* ChangeLog.3: Likewise.
	* ChangeLog.4: Likewise.
	* ChangeLog.5: Likewise.
	* ChangeLog.6: Likewise.
	* FSFChangeLog.10: Likewise.
	* FSFChangeLog.11: Likewise.
	* alias.c: Likewise.
	* basic-block.h: Likewise.
	* c-aux-info.c: Likewise.
	* c-common.c: Likewise.
	* c-common.h: Likewise.
	* c-decl.c: Likewise.
	* c-format.c: Likewise.
	* c-semantics.c: Likewise.
	* c-typeck.c: Likewise.
	* calls.c: Likewise.
	* cfganal.c: Likewise.
	* cfgloop.c: Likewise.
	* collect2.c: Likewise.
	* combine.c: Likewise.
	* conflict.c: Likewise.
	* cppexp.c: Likewise.
	* cppfiles.c: Likewise.
	* cpphash.h: Likewise.
	* cppinit.c: Likewise.
	* cpplex.c: Likewise.
	* cpplib.c: Likewise.
	* cpplib.h: Likewise.
	* cppmacro.c: Likewise.
	* cse.c: Likewise.

From-SVN: r57398
2002-09-22 02:03:17 +00:00
Richard Henderson
1b1f20cab9 calls.c (store_one_arg): Rename default_align to parm_align; always adjust parm_align for downward padding.
* calls.c (store_one_arg): Rename default_align to parm_align;
	always adjust parm_align for downward padding.

From-SVN: r57292
2002-09-18 17:37:24 -07:00
John David Anglin
9dff28ab53 calls.c (store_one_arg): Set default alignment for BLKmode arguments to BITS_PER_UNIT when...
* calls.c (store_one_arg): Set default alignment for BLKmode arguments
	to BITS_PER_UNIT when ARGS_GROW_DOWNWARD and the padding direction is
	downward.
	* function.c (pad_below):  Always compile.
	(locate_and_pad_parm): If defined ARGS_GROW_DOWNWARD, pad argument to
	alignment when it is not in a register or REG_PARM_STACK_SPACE is true.
	Pad below when the argument is not in a register and the padding
	direction is downward.
	* pa-64.h (MUST_PASS_IN_STACK): Move define to pa.h.
	(PAD_VARARGS_DOWN): Define.
	* pa.c (function_arg_padding): Revise padding directions to make them
	compatible with the 32 and 64-bit runtime architecture documentation.
	(hppa_va_arg):  Add code to handle variable and size zero arguments
	passed by reference on TARGET_64BIT.  Reformat.
	(function_arg): Use a PARALLEL for BLKmode and aggregates args on
	TARGET_64BIT.  Use a DImode PARALLEL for BLKmode args 5 to 8 bytes
	wide when !TARGET_64BIT.  Move forward check for mode==VOIDmode.
	Add comments.
	* pa.h (MAX_PARM_BOUNDARY): Correct define for TARGET_64BIT.
	(RETURN_IN_MEMORY): Return size zero types in memory.
	(FUNCTION_VALUE): Return TFmode in general registers.
	(MUST_PASS_IN_STACK): Define.
	(FUNCTION_ARG_BOUNDARY): Simplify.
	(FUNCTION_ARG_PASS_BY_REFERENCE): Pass variable and zero sized types
	by reference.
	(FUNCTION_ARG_CALLEE_COPIES): Define to FUNCTION_ARG_PASS_BY_REFERENCE.

From-SVN: r57226
2002-09-17 03:30:37 +00:00
Kazu Hirata
d57551c71b calls.c (emit_library_call_value_1): Don't refer to hard_libcall_value.
* calls.c (emit_library_call_value_1): Don't refer to
	hard_libcall_value.
	* optabs.c (prepare_float_lib_cmp): Likewise.

From-SVN: r57207
2002-09-16 18:47:59 +00:00
Jason Merrill
db4c55f693 calls.c (store_one_arg): Use size_in_bytes to determine the amount of space to push.
* calls.c (store_one_arg): Use size_in_bytes to determine the
        amount of space to push.

From-SVN: r57064
2002-09-12 10:00:21 -04:00
Richard Henderson
44bb111a78 expr.h (enum block_op_methods): New.
* expr.h (enum block_op_methods): New.
        (emit_block_move): Update prototype.
        * expr.c (block_move_libcall_safe_for_call_parm): New.
        (emit_block_move_via_loop): New.
        (emit_block_move): Use them.  New argument METHOD.
        (emit_push_insn): Always respect the given alignment.
        (expand_assignment): Update call to emit_block_move.
        (store_expr, store_field, expand_expr): Likewise.
        * builtins.c (expand_builtin_apply): Likewise.
        (expand_builtin_memcpy, expand_builtin_va_copy): Likewise.
        * function.c (expand_function_end): Likewise.
        * config/sh/sh.c (sh_initialize_trampoline): Likewise.
        * config/sparc/sparc.c (sparc_va_arg): Likewise.
        * calls.c (expand_call, emit_library_call_value_1): Likewise.
        (save_fixed_argument_area): Use emit_block_move with
        BLOCK_OP_CALL_PARM instead of move_by_pieces.
        (restore_fixed_argument_area): Likewise.
        (store_one_arg): Fix alignment parameter to emit_push_insn.

From-SVN: r56661
2002-08-29 12:20:01 -07:00
Richard Henderson
236261548b calls.c: Include target.h.
* calls.c: Include target.h.
        * Makefile.in (calls.o): Update.

        * config/alpha/alpha.c (alpha_end_function): Use targetm.binds_local_p.
        * config/alpha/alpha.h (FUNCTION_OK_FOR_SIBCALL): Likewise.

From-SVN: r56335
2002-08-14 17:07:55 -07:00
J"orn Rennecke
a0dc500c86 calls.c (emit_library_call_value_1): If FUNCTION_ARG_PASS_BY_REFERENCE is true...
* calls.c (emit_library_call_value_1): If
	FUNCTION_ARG_PASS_BY_REFERENCE is true, pretend this is neither
	libcall, const call nor pure call.

From-SVN: r55676
2002-07-23 12:18:10 +01:00
David S. Miller
2f937369fa Delete SEQUENCE rtl usage outside of reorg and ssa passes.
2002-06-05  David S. Miller  <davem@redhat.com>

	Delete SEQUENCE rtl usage outside of reorg and ssa passes.
	* rtl.h (gen_sequence, emit_insns, emit_insns_before,
	emit_insns_before_scope, emit_insns_after,
	emit_insns_after_scope): Delete declaration.
	* ada/misc.c (insert_code_for): Use emit_insn* instead of
	emit_insns_foo.
	* config/alpha/alpha.c (alpha_set_memflags_1): Abort on SEQUENCE.
	(alpha_set_memflags): Fix comment.
	(set_frame_related_p): Use get_insns instead of gen_sequence.
	* config/alpha/alpha.md (setjmp receiver splitter): Avoid
	emitting no insns.
	* config/arm/arm.c (arm_finalize_pic): Use get_insns instead of
	gen_sequence.
	(arm_gen_load_multiple, arm_gen_store_multiple): Likewise.
	* config/fr30/fr30.c (fr30_move_double): Likewise.
	* config/i386/i386.c (ix86_expand_int_movcc, ix86_expand_movstr):
	Likewise.
	* config/ia64/ia64.c (spill_restore_mem): Likewise.
	* config/ia64/ia64.md (conditional move spliiter): Avoid emitting
	no insns.
	* config/m32r/m32r.c (gen_split_move_double): Use get_insns
	instead of gen_sequence.
	* config/mips/mips.c (embedded_pic_fnaddr_reg): Likewise.
	(mips_expand_prologue, mips16_gp_pseudo_reg): Likewise.
	* config/sh/sh.c (sh_need_epilogue): Likewise.
	* config/sparc/sparc.md (current_function_calls_alloca, flat): New
	attributes.
	(setjmp pattern and split): Use them to avoid splitter which emits
	no RTL.
	* genattrtab.c (main): Emit include of function.h
	* config/stormy16/stormy16.c (xstormy16_split_cbranch): Use
	get_insns instead of gen_sequence.
	* config/cris/cris.c (cris_split_movdx): Likewise.
	* emit-rtl.c (emit_insns*): Kill.
	(try_split): Expect insn list instead of SEQUENCE.
	(make_jump_insn_raw, make_call_insn_raw): Fix comments.
	(emit_*insn*): Reimplement to work with INSN lists and PATTERNs.
	Make them abort if a SEQUENCE is given and RTL checking is
	enabled.
	(emit_*_scope): Don't forget to set scope on final insn.
	(gen_sequence): Move from here...
	* ssa.c (gen_sequence): To here as private function.
	* builtins.c (expand_builtin_apply_args): Use emit_insn_foo, fix
	comments.
	(expand_builtin_return, expand_builtin_mathfn): Likewise.
	(expand_builtin_strlen): Use get_insns instead of gen_sequence.
	(expand_builtin_saveregs): Use emit_insn_foo, fix comments.
	(expand_builtin_expect_jump): Use get_insns and fix comments.
	* calls.c (try_to_integrate): Use emit_insn_foo.
	(expand_call, emit_library_call_value_1): Likewise.
	* expr.c (emit_queue): Handle insn lists instead of SEQUENCE.
	(emit_move_insn_1): Use get_insns instead of gen_sequence.
	(expand_expr): Use emit_insn_foo.
	* cfgrtl.c (commit_one_edge_insertion): Use emit_insn_foo.
	* except.c (build_post_landing_pads): Likewise.
	* flow.c (attempt_auto_inc): Likewise.
	* stmt.c (expand_fixup, fixup_gotos, expand_nl_handler_label,
	expand_nl_goto_receivers, expand_decl_cleanup): Likewise.
	* function.c (fixup_var_refs_insn): Use get_insns instead of
	gen_sequence.
	(fixup_var_refs_1): Likewise and expect insn list from gen_foo.
	(fixup_memory_subreg): Use get_insns instead of gen_sequence.
	(fixup_stack_1, purge_addressof_1, expand_main_function,
	get_arg_pointer_save_area): Likewise.
	(optimize_bit_field, instantiate_virtual_regs_1, assign_parms,
	expand_function_end): Use emit_insn_foo.
	(record_insns, keep_stack_depressed): Work with insn list instead
	of SEQUENCE, fix comments.
	* ifcvt.c (noce_emit_store_flag, noce_try_store_flag,
	noce_try_store_flag_constants, noce_try_store_flag_inc,
	noce_try_store_flag_mask, noce_emit_cmove, noce_try_cmove_arith,
	noce_try_minmax, noce_try_abs): Use emit_insn_foo.
	(noce_process_if_block): Use get_insns instead of gen_sequence.
	* optabs.c (add_equal_note): Work with insn list, fix comments.
	(expand_binop): Expect insn list from GEN_FCN(), use emit_insn_foo.
	(expand_unop, expand_complex_abs, expand_unop_insn,
	expand_no_conflict_block): Likewise.
	(gen_move_insn): Use get_insns instead of gen_sequence.
	(gen_cond_trap): Likewise.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	(emit_initial_value_sets): Use emit_insn_foo.
	* reload1.c (emit_output_reload_insns, emit_reload_insns): Likewise.
	(fixup_abnormal_edges): Avoid losing REG_NOTES more intelligently
	now that RTL generators give insn lists.
	* sibcall.c (replace_call_placeholder): Use emit_insn_foo.
	* doloop.c (doloop_modify, doloop_modify_runtime): Use get_insns
	instead of gen_sequence.
	(doloop_optimize): Work with insn lists instead of SEQUENCE rtl.
	* explow.c (emit_stack_save, emit_stack_restore): Use get_insns
	instead of gen_sequence.
	* loop.c (move_movables, emit_prefetch_instructions,
	gen_add_mult, check_dbra_loop, gen_load_of_final_value):
	Likewise.
	(loop_regs_update): Work with insn list instead of SEQUENCE rtl.
	(product_cheap_p): Likewise, and add commentary about RTL wastage
	here.
	* lcm.c (optimize_mode_switching): Use get_insns instead of
	gen_sequence.
	* profile.c (gen_edge_profiler): Likewise.
	* regmove.c (copy_src_to_dest): Likewise.
	* reg-stack.c (compensate_edge): Likewise and fix comment.
	* gcse.c (process_insert_insn): Likewise.
	(insert_insn_end_bb): Work with insn list instead of SEQUENCE rtl.
	* jump.c (delete_prior_computation): Update comment.
	* genemit.c (gen_expand, gen_split, main): Use get_insns instead
	of gen_sequence, update comments to match.
	* recog.c (peephole2_optimize): Work with insn lists instead of
	SEQUENCE rtl.
	* sched-vis.c (print_pattern): Abort on SEQUENCE.
	* unroll.c (unroll_loop, find_splittable_givs, final_giv_value):
	Use get_insns instead of gen_sequence.
	(copy_loop_body): Likewise and don't emit dummy NOTE.
	* genrecog.c: Don't mention SEQUENCE rtl in comments.
	* combine.c (try_combine): Expect insn lists from split generator.
	* reorg.c (relax_delay_slots): Emit SEQUENCE into insn list by
	hand.

From-SVN: r54497
2002-06-11 05:22:48 -07:00
J"orn Rennecke
fcae219ac4 loop.c (load_mems): Don't change the interface of called functions.
* loop.c (load_mems): Don't change the interface of called functions.

	* calls.c (expand_call): Take current_function_pretend_args_size
	into account when setting argblock for sibcalls.

From-SVN: r52745
2002-04-25 00:52:16 +01:00
Jason Merrill
e6f648758e fix whitespace
From-SVN: r52210
2002-04-12 06:35:30 -04:00
David S. Miller
aa7634ddf7 calls.c (store_one_arg): If ECF_SIBCALL, use tail_call_reg.
2002-04-04  David S. Miller  <davem@redhat.com>

	* calls.c (store_one_arg): If ECF_SIBCALL, use tail_call_reg.

From-SVN: r51886
2002-04-04 15:30:18 -08:00
Neil Booth
dffd7eb68a c-decl.c (grokdeclarator): Update.
* c-decl.c (grokdeclarator): Update.
	* c-lang.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.
	* c-tree.h (c_mark_addressable): New.
	* c-typeck.c (default_function_array_conversion, build_unary_op,
	build_array_ref, convert_for_assignment): Update.
	(mark_addressable): Rename.
	* calls.c (try_to_integrate, expand_call): Use langhook.
	* expr.c (expand_expr): Use langhook.
	* langhooks-def.h (LANG_HOOKS_INITIALIZER): Update.
	* langhooks.h (struct lang_hooks): New hook.
	* stmt.c (expand_asm_operands): Use langhook.
	* tree.h (mark_addressable): Remove.
ada:
	* decl.c (gnat_to_gnu_entity): Update.
	* gigi.h (mark_addressable): Rename.
	* misc.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.
	* trans.c (tree_transform): Update.
	* utils.c (create_var_decl): Update.
	* util2.c (build_binary_op, build_unary_op,
	fill_vms_descriptor): Update.
	(mark_addressable): Rename, update.
cp:
	* call.c (build_addr_func): Update.
	* class.c (resolve_address_of_overloaded_function): Update.
	* cp-lang.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.
	* cp-tree.h (cxx_mark_addressable): New.
	* decl.c (register_dtor_fn, cxx_maybe_build_cleanup): Update.
	* decl2.c (build_cleanup): Update.
	* except.c (build_throw): Update.
	* init.c (resolve_offset_ref): Update.
	* pt.c (convert_nontype_argument): Update.
	* semantics.c (finish_asm_stmt, simplify_affr_init_exprs_r): Update.
	* typeck.c (decay_conversion, build_array_ref, build_unary_op,
	unary_complex_lvalue): Update.
	(mark_addressable): Rename.
f:
	* com.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.
	(mark_addressable): Rename.
	(ffecom_arrayref_, ffecom_1): Update.
java:
	* java-tree.h (java_mark_addressable): New.
	* lang.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.
	* typeck.c (mark_addressable): Rename, update.
objc:
	* objc-lang.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine.

From-SVN: r51705
2002-04-01 20:26:18 +00:00
Neil Booth
b0c4822985 Makefile.in (convert.o, [...]): Update.
* Makefile.in (convert.o, calls.o, expmed.o): Update.
	* attribs.c (handle_mode_attribute, handle_vector_size_attribute):
	Use new hooks.
	* builtin-types.def (BT_PTRMODE): Update.
	* c-common.c (type_for_size): Rename c_common_type_for_size.
	(type_for_mode): Similarly.
	(shorten_compare, pointer_int_sum, c_common_nodes_and_builtins):
	Use new hook.
	* c-bommon.h (c_common_type_for_size, c_common_type_for_mode): New.
	* c-decl.c (finish_enum, build_enumerator): Use new hooks.
	* c-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* c-typeck.c (common_type, comptypes, default_conversion):
	Use new hooks.
	* calls.c: Include langhooks.h.
	(emit_library_call_value_1): Use new hooks.  Avoid redundant
	calls.
	* convert.c: Include langhooks.h
	(convert_to_pointer, convert_to_integer): Use new hooks.
	* except.c (init_eh): Similarly.
	* expmed.c: Include langhooks.h.
	(expand_mult_add): Use new hooks.
	* expr.c (store_expr, store_constructor, expand_expr, do_jump,
	try_casesi): Similarly.
	* fold-const.c (optimize_bit_field_compare, make_range,
	decode_field_reference, fold_truthop, fold): Similarly.
	* function.c (assign_stack_local_1, assign_stack_temp_for_type,
	put_var_into_stack): Similarly.
	* langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE,
	LANG_HOOKS_TYPE_FOR_SIZE): New.
	(LANG_HOOKS_TYPES_INITIALIZER): Update.
	* langhooks.h (lang_hooks_for_types): New hooks.
	* stmt.c (expand_decl_cleanup, emit_case_nodes): Use new hooks.
	* tree.c (get_unwidened, get_narrower): Similarly.
	* tree.h (type_for_mode, type_for_size): Remove.
	* varasm.c (force_const_mem): Use new hooks.
ada:
	* gigi.h (type_for_size, type_for_mode): Rename.
	* misc.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* trans.c (tree_transform): Update.
	* utils.c (gnat_init_decl_processing, init_gigi_decls,
	builtin_function, float_type_for_size, signed_or_unsigned_type,
	build_vms_descriptor, unchecked_convert): Update.
	(type_for_mode, type_for_size): Rename.
	* utils2.c (nonbinary_modular_operation): Update.
cp:
	* cp-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* cvt.c (cp_convert_to_pointer, type_promotes_to): Use new hooks.
	* decl.c (finish_enum): Similarly.
	* error.c (dump_type): Similarly.
	* lex.c (cxx_init): Similarly.
	* mangle.c (write_builtin_type): Similarly.
	* typeck.c (comptypes): Similarly.
f:
	* com.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	(type_for_mode, type_for_size): Rename.
	(signed_or_unsigned_type, signed_type, truthvalue_conversion,
	unsigned_type):	Use new hooks.
java:
	* Make-lang.in (builtins.o): Update.
	* boehm.c (get_boehm_type_descriptor): Update.
	* builtins.c: Include langhooks.h.
	* decl.c (java_init_decl_processing): Update.
	* java-tree.h (java_type_for_mode, java_type_for_size): New.
	* lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
	Redefine.
	* typeck.c (type_for_mode, type_for_size): Update.
objc:
	* objc-act.c (handle_impent): Update.
	* objc-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
	Redefine.

From-SVN: r51571
2002-03-29 21:46:27 +00:00
Mark Mitchell
1929c971b9 calls.c (precompute_arguments): Do not assume that temporaries can be destroyed after expanding the argument.
* calls.c (precompute_arguments): Do not assume that temporaries
	can be destroyed after expanding the argument.
	(expand_call): Likewise.

From-SVN: r51011
2002-03-18 22:25:50 +00:00
Steve Ellcey
7879b81e6c rtl.texi (SUBREG_PROMOTED_UNSIGNED_P): Change definition to take ptr_extend into account as third type of extension.
* doc/rtl.texi (SUBREG_PROMOTED_UNSIGNED_P): Change definition
        to take ptr_extend into account as third type of extension.
        (SUBREG_PROMOTED_UNSIGNED_SET): Definition of new macro to set bit
        fields used by SUBREG_PROMOTED_UNSIGNED_P.
        * rtl.h (SUBREG_PROMOTED_UNSIGNED_SET): New macro.
        (SUBREG_PROMOTED_UNSIGNED_P): Change to return -1 as well as 0 or 1.
        * calls.c (precompute_arguments): Use new macro.
        (expand_call): Ditto.
        * combine.c (nonzero_bits): Ditto.
        (record_promoted_value): Ditto.
        * expr.c (store_expr): Ditto.
        (expand_expr): Ditto.
        * function.c (assign_parms): Ditto.

From-SVN: r50174
2002-02-28 17:19:52 -08:00
Alexandre Oliva
841404cd71 calls.c (store_one_arg): In the non-BLKmode non-partial case...
* calls.c (store_one_arg): In the non-BLKmode non-partial case,
take padding into account when computing the argument value.

From-SVN: r49675
2002-02-11 13:33:07 +00:00
Alexandre Oliva
fa5322fa58 Contribute sh64-elf.
2002-02-09  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (TARGET_CANNOT_MODIFY_JUMPS_P): Define to...
(sh_cannot_modify_jumps_p): New function.
2002-02-05  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (TARGET_MS_BITFIELD_LAYOUT_P): Define to...
(sh_ms_bitfield_layout_p): New function.
2002-02-04  Alexandre Oliva  <aoliva@redhat.com>
	    Zack Weinberg  <zack@codesourcery.com>
* config/sh/sh.h (TRAMPOLINE_ADJUST_ADDRESS): Use
expand_simple_binop instead of expand_binop.
2002-02-03  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (OVERRIDE_OPTIONS) [! TARGET_SH5]: Disable
use of .quad and .uaquad.
* config/sh/sh.c (TARGET_ASM_UNALIGNED_DI_OP,
TARGET_ASM_ALIGNED_DI_OP): Add comment pointing to the above.
2002-01-24  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (movdi_const, movdi_const_32bit,
movdi_const_16bit): Make sure all CONSTs have modes.
(sym2PIC): Ditto, but by adjusting all callers.
* config/sh/sh.c (calc_live_regs) [TARGET_SHCOMPACT]: Set pr_live
if the prologue calls the SHmedia argument decoder or register
saver.
2002-01-24  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (TARGET_ASM_UNALIGNED_DI_OP): Define.
(TARGET_ASM_ALIGNED_DI_OP): Likewise.
(sh_expand_epilogue): Don't emit USE of return target register.
(prepare_move_operands): Legitimize DImode PIC addresses.
(sh_media_register_for_return): Skip tr0, used to initialize the
PIC register.
(sh_expand_prologue): Remove explicit USE of return register.
(nonpic_symbol_mentioned_p): PC is non-PIC.  Don't recurse in
CONST_DOUBLEs.  UNSPEC_GOTPLT is PIC.
* config/sh/sh.h (ASM_OUTPUT_DOUBLE_INT): Removed, obsolete.
(OVERRIDE_OPTIONS): Don't disable PIC on SH5.
(EXTRA_CONSTRAINT_S): Use MOVI_SHORI_BASE_OPERAND_P instead of
EXTRA_CONSTRAINT_T.
(GOT_ENTRY_P, GOTPLT_ENTRY_P, GOTOFF_P, PIC_ADDR_P): New.
(MOVI_SHORI_BASE_OPERAND_P): New.
(NON_PIC_REFERENCE_P, PIC_REFERENCE_P): New.
(EXTRA_CONSTRAINT_T): Define in terms of them.
(OUTPUT_ADDR_CONST_EXTRA): Handle UNSPEC_GOTPLT.
* config/sh/sh.md (movsi_media, movsi_media_nofpu,
movdi_media, movdi_media_nofpu): Add SIBCALL_REGS class to
alternatives supporting TARGET_REGS.
(UNSPEC_GOTPLT): New constant.
(movdi split): Move incrementing of LABEL_NUSES...
(movdi_const, movdi_const_32bit): Here.  Use
MOVI_SHORI_BASE_OPERAND_P instead of EXTRA_CONSTRAINT_T.
(movdi_const_16bit): New.
(call, call_value) [flag_pic]: Use GOTPLT.
(call_pop, call_value_pop): New expands.
(call_pop_compact, call_pop_rettramp): New insns.
(call_value_pop_compact, call_value_pop_rettramp): New insns.
(sibcall) [flag_pic]: Use GOT.
(builtint_setjmp_receiver): Remove bogus, unused expand.
(GOTaddr2picreg): Implement for SHcompact and SHmedia.
(*pt, *ptb, ptrel): New insns.
(sym2GOT): Handle DImode GOT.
(sym2GOTPLT, symGOTPLT2reg): New expands.
(sym2PIC): New expand.
(shcompact_return_tramp): Use GOTPLT to return trampoline.
(shcompact_return_tramp_i): Use return register explicitly.
* config/sh/sh.h (OVERRIDE_OPTIONS) [TARGET_SHMEDIA]: Don't
disable flag_reorder_blocks.
2002-01-19  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (sibcall_compact): Reorder return, uses and
clobbers, for clarity.
(sibcall_epilogue) [TARGET_SHCOMPACT]: Mark saving and
restoring of r0 in macl as MAYBE_DEAD.
2002-01-18  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (LONG_DOUBLE_TYPE_SIZE): Define.
* config/sh/sh.md (movv4sf_i, movv16sf_i): Fix uses of
alter_subreg all over.
(jump) [TARGET_SHMEDIA]: FAIL to create new jumps after
reload, instead of emitting instructions that would require
reloading.
(casesi_load_media): Add missing modes.
2001-11-09  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (sh_expand_prologue): Mark the PIC register
as used if the argument decoder is called.
2001-08-28  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (udivsi3, divsi3): Load libcall symbol name in
Pmode, then extend it to DImode if necessary.
2001-08-28  Stephen Clarke  <Stephen.Clarke@st.com>
* config/sh/sh.h (LEGITIMATE_CONSTANT_P): Don't accept DFmode
constants in FPU-enabled SHmedia, let them be loaded from memory.
2001-08-28  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (cmpeqdi_media, cmpgtdi_media, cmpgtudi_media):
Adjust whitespace in assembly output templates.
2001-08-28  Stephen Clarke  <Stephen.Clarke@st.com>
* config/sh/sh.md (movdicc_false, movdicc_true, movdicc): Adjust
mode of if_then_else.
2001-08-04  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): Override definition in
sh.h.
2001-07-26  Andrew Haley  <aph@cambridge.redhat.com>
	    Joern Rennecke <amylaar@redhat.com>
* config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): New.
(SUBTARGET_CPP_PTR_SPEC): New.
(SUBTARGET_CPP_SPEC): Remove.
2001-07-06  Chandrakala Chavva  <cchavva@redhat.com>
* config/sh/sh.md (movsf_media_nofpu+1, movdf_media_nofpu+1):
Fix typo in previous checkin.
2001-07-11  Chandrakala Chavva  <cchavva@redhat.com>
* config/sh/sh.h (MODES_TIEABLE_P): Fix redact indentations.
2001-07-10  Chandrakala Chavva  <cchavva@cygnus.com>
	    Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (MODES_TIEABLE_P): Don't tie modes wider than
what single FP register can hold for SHmedia target.
2001-07-06  Chandrakala Chavva  <cchavva@redhat.com>
	    Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (movsf_media_nofpu+1, movdf_media_nofpu+1):
Do not split into SUBREG.
2001-06-14  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/ushmedia.h, config/sh/sshmedia.h: Updated signatures
and added new functions as specified in SH5 ABI r9.
2001-06-04  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/lib1funcs.asm (GCC_nested_trampoline): Align to an
8-byte boundary.
2001-06-03  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (dump_table): Add const0_rtx in calls of
gen_consttable_4 and gen_consttable_8.  Emit multiple labels
and consttable_window_ends.
2001-06-03  Graham Stott  <grahams@redhat,com>
* config/sh/sh.md (movdi split): Remove unused variable last_insn.
2001-05-16  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (print_operand): Handle floating-point pair,
vector and matrix registers.
* config/sh/sh.h (REGISTER_MOVE_COST): Take floating-pointer
vector modes into account.
* config/sh/sh.md (movv2sf): Split move between registers into
movdf.
(movv4sf, movv16sf): Introduce insns that get split only after
reload.
* config/sh/shmedia.h: Fix Copyright dates.
* config/sh/ushmedia.h: Likewise.  Move loop counter
declarations into conditionals that uses them.
(sh_media_FVADD_S, sh_media_FVSUB_S): Fix off-by-one error in
loop boundary.
* config/sh/sshmedia.h: Fix Copyright dates.
(sh_media_PUTCFG): Fix constraints.
2001-05-12  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (TARGET_PTRMEMFUNC_VBIT_LOCATION): Define to
ptrmemfunc_vbit_in_delta for SH5.
2001-05-08  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (TARGET_SWITCHES): Document -m5-*.
* invoke.texi: Likewise.
2001-04-14  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/lib1funcs.asm (GCC_push_shmedia_regs,
GCC_push_shmedia_regs_nofpu, GCC_pop_shmedia_regs,
GCC_pop_shmedia_regs_nofpu): New global symbols.
* config/sh/t-sh64 (LIB1ASMFUNCS): Add them.
* config/sh/sh.h (SHMEDIA_REGS_STACK_ADJUST): New macro.
* config/sh/sh.c (calc_live_regs): Account for PR's saving in
compact function with nonlocal labels.
(sh_expand_prologue) [SHcompact]: Push SHmedia regs if needed.
(sh_expand_epilogue) [SHcompact]: Pop them when appropriate.
(initial_elimination_offset): Account for their stack space.
* config/sh/sh.md (shmedia_save_restore_regs_compact): New insn.
* config/sh/sh.md (movsi_media, movsi_media_nofpu, movqi_media,
movhi_media, movdi_media, movdi_media_nofpu, movdf_media,
movdf_media_nofpu, movsf_media, movsf_media_nofpu): Require at
least one of the operands to be a register.
(movv2sf): Likewise.  Renamed to movv2sf_i.
(movdi, movdf, movv2sf, movv4sf, movv16sf, movsf):
prepare_move_operands() before emitting SHmedia insns.
2001-04-03  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/crti.asm (init, fini) [__SH5__ && ! __SHMEDIA__]:
Don't save nor initialize r12.  Don't mis-align the stack.
Pad the code with a nop.
* config/sh/crti.asm: Don't restore r12.  Don't mis-align the
stack.
2001-03-13  Alexandre Oliva  <aoliva@redhat.com>
* gcc/longlong.h (__umulsidi3, count_leading_zeros)
[__SHMEDIA__]: Implement.
2001-03-11  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md: Set latency of `pt' closer to reality.
(movsi_media, movsi_media_nofpu, movdi_media, movdi_media_nofpu,
movdf_media, movdf_media_nofpu, movsf_media, movsf_media_nofpu):
Set move, load and store type attributes.
* config/sh/sh.c (sh_loop_align) [TARGET_SH5]: Set to 3.
* config/sh/sh.h (OVERRIDE_OPTIONS) [TARGET_SH5]: Disable
profiling.
* config/sh/sh.h (PROMOTE_MODE): Sign-extend SImode to DImode.
* config/sh/sh-protos.h (sh_media_register_for_return): Declare.
* config/sh/sh.c (sh_media_register_for_return): New function.
(sh_expand_prologue) [TARGET_SHMEDIA]: Copy r18 to an available
branch-target register.
(sh_expand_epilogue) [TARGET_SHMEDIA]: Explicitly USE it.
* config/sh/sh.md (return_media_i): Use any call-clobbered
branch-target register.
(return_media): If r18 wasn't copied in the prologue, copy it
here.
* config/sh/sh.h (CONDITIONAL_REGISTER_USAGE) [TARGET_SHMEDIA]:
Clear class FP0_REGS.
* config/sh/sh64.h (LINK_SPEC): Removed incorrect default copied
from elf.h.
2001-03-08  DJ Delorie  <dj@redhat.com>
* config/sh/sh.h (OVERRIDE_OPTIONS): Disable relaxing for SHMEDIA.
2001-02-09  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (sibcall_compact): Set fp_mode to single.
2001-02-07  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (INT_ASM_OP) [SHMEDIA64]: Use `.quad'.
2001-02-03  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (INIT_CUMULATIVE_ARGS): Compute size of BLKmode
return value correctly for call_cookie.
2001-02-01  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/crt1.asm (start): Modified so as to call
___setup_argv_and_call_main.
2001-01-26  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (FUNCTION_ARG_ADVANCE): Don't count stack_regs in
SHmedia mode.
2001-01-20  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (STRIP_DATALABEL_ENCODING): New macro.
(STRIP_NAME_ENCODING): Use it.
(ASM_OUTPUT_LABELREF): Likewise.  Don't call assemble_name().
2001-01-19  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (sgeu) [! SHMEDIA]: Fix invocation of
prepare_scc_operands().
* config/sh/sh.h (SH_DATALABEL_ENCODING): Change to "#"...
(DATALABEL_SYMNAME_P): ... so that we don't need memcmp here.
2001-01-17  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (STRIP_NAME_ENCODING): Strip leading `*'.
2001-01-13  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (shcompact_incoming_args): Use R0_REG.
* config/sh/sh.md (R7_REG, R8_REG, R9_REG): Define as constants,
used in shcompact_incoming_args.
* config/sh/sh.c (sh_expand_epilogue): Fix thinko in previous
change.
* config/sh/crt1.asm (start) [SH5]: Switch to single-precision
mode.
* config/sh/lib1funcs.asm (sdivsi3_i4, udivsi3_i4, set_fpscr):
Adjust accordingly.
* config/sh/sh.c (sh_expand_prologue, sh_expand_epilogue):
Simplify.  Adjust.  Add sanity check.
* config/sh/sh.h (TARGET_SWITCHES) [5-compact]: Set
FPU_SINGLE_BIT.
* config/sh/sh.md (udivsi3_i4_single, divsi3_i4_single): Match
TARGET_SHCOMPACT.
(udivsi3, divsi3): Use them.
(force_mode_for_call): New insn.
(call, call_value, sibcall_value): Emit it before SHcompact
calls.
2001-01-11  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (call, call_value, sibcall): Make sure the
call cookie is non-NULL before taking its value.
2001-01-10  Alexandre Oliva  <aoliva@redhat.com>
* config.gcc (sh64): Set target_requires_64bit_host_wide_int.
2001-01-09  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (shcompact_incoming_args): Set argument memory
block.
* config/sh/sh.h (STATIC_CHAIN_REGNUM) [SH5]: Use r1.
* config/sh/sh.c (sh_expand_prologue) [SH5]: Use r0 as
temporary for stack adjusts.  Use MACL and MACH to pass
arguments to shcompact_incoming_args.
* config/sh/sh.md (shcompact_incoming_args): Adjust.  Don't
clobber r1.
* config/sh/lib1funcs.asm (shcompact_incoming_args): Likewise.
(nested_trampoline): Load static chain address into r1.
* config/sh/sh.md (movdi_media splits): Fix sign-extension.
2001-01-07  Alexandre Oliva  <aoliva@redhat.com
* config/sh/sh.c (fpul_operand) [SHMEDIA]: Just call
fp_arith_reg_operand().
2001-01-06  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (casesi): Sign-extend the first two operands,
and use signed compares for them.
* config/sh/sh.c (dump_table): Don't emit 8-byte constants after
4-byte ones.  Instead, inter-leave them, maintaining the 8-byte
ones properly aligned.
(find_barrier): Account for extra alignment needed for 8-byte wide
constants.
(machine_dependent_reorg): Require a label for the second 4-byte
constant after an 8-byte one.
* config/sh/lib1funcs.asm (sdivsi3): Fix typo in yesterday's
change.
2001-01-05  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (machine_dependent_reorg) [SHCOMPACT]: Reset
last_float when switching float modes.
* config/sh/sh.md (movdf) [SH5]: Don't use stack-pointer
auto-increment for general-purpose registers.
* config/sh/lib1funcs.asm (sdivsi3) [SHMEDIA]: Sign-extend the
result.
* config/sh/sh.c (sh_expand_prologue) [SH5]: Use r1 as temporary
for stack adjust.
* config/sh/sh.c (sh_builtin_saveregs): Support using all
registers for varargs.
2001-01-01  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (FUNCTION_ARG_ADVANCE): Simplify.
* config/sh/sh.h (CALL_COOKIE_STACKSEQ,
CALL_COOKIE_STACKSEQ_SHIFT, CALL_COOKIE_STACKSEQ_GET): New macros.
(CALL_COOKIE_INT_REG_SHIFT): Adjust.
(FUNCTION_ARG_ADVANCE): Use SHCOMPACT_FORCE_ON_STACK.  Adjust
call_cookie accordingly.
(FUNCTION_ARG): Test SHCOMPACT_FORCE_ON_STACK.
(SHCOMPACT_BYREF): Likewise.
(SHCOMPACT_FORCE_ON_STACK): New macro.
* config/sh/sh.c (sh_expand_prologue): Use new call_cookie format.
(sh_builtin_saveregs): Likewise.
* config/sh/lib1funcs.asm (shcompact_call_trampoline,
shcompact_incoming_args): Use new shift values.  Support
sequences of consecutive and non-consecutive pushes/pops.
* config/sh/sh.md (return): Don't explicitly use PR_REG.
2001-01-05  Hans-Peter Nilsson  <hpn@cygnus.com>
* config/sh/sh.h (TEXT_SECTION): Define.
* config/sh/elf.h (ASM_FILE_START): Output TEXT_SECTION_ASM_OP.
2001-01-05  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (INIT_CUMULATIVE_LIBCALL_ARGS): New macro.
* config/sh/sh.h (BASE_RETURN_VALUE_REG): Use FP regs for
return values on FPU-enabled SHmedia.
(FUNCTION_VALUE_REGNO_P): Mark FIRST_FP_RET_REG as used on
FPU-enabled SHmedia.
(INIT_CUMULATIVE_ARGS): Set up return trampoline only if
value is returned in a non-FP reg and is not returned by
reference.
* config/sh/sh.md (shcompact_return_tramp_i): Change type to
jump_ind.
2000-01-04  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (SH_MIN_ALIGN_FOR_CALLEE_COPY): New.
(FUNCTION_ARG_CALLEE_COPIES): Require argument to be
quad-aligned to be passed by callee-copy reference.
2001-01-03  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/elf.h (MAX_WCHAR_TYPE_SIZE): Define.
* config/sh/sh64.h (MAX_WCHAR_TYPE_SIZE): Undefine.
2001-01-02  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/lib1funcs.asm (shcompact_call_trampoline): Fix error in
copying low-numbered FP regs to r7 and r8.
* config/sh/sh.h (FUNCTION_ARG_ADVANCE): Don't request copying of
FP regs to general-purpose regs only if the copy was passed on the
stack.
* config/sh/lib1funcs.asm (shcompact_call_trampoline): Fix typo in
copying FP reg to r9.
* config/sh/sh.h (FUNCTION_ARG_ADVANCE): Use trampoline to
copy FP regs to general-purpose regs only in outgoing calls.
* config/sh/sh.md (movdf_media, movsf_media): Revert incorrect
change from 	2000-10-30.  Adjust for 64-bit (or 32-bit)
HOST_WIDE_INT.
* config/sh/sh.h (struct sh_args): Document all fields.
(FUNCTION_OK_FOR_SIBCALL): Functions that receive arguments
passed partially on the stack should not consider making
sibcalls.
* config/sh/sh.h (FUNCTION_ARG_ADVANCE): Add byref regs to
stack_regs only for incoming calls.  When passing FP args,
make sure there are FP regs available before modifying
call_cookie.
(SHCOMPACT_BYREF): Pass double args in general-purpose
registers by reference.
2000-12-30  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (FUNCTION_OK_FOR_SIBCALL) [SHCOMPACT]: Don't
attempt to generate sibcalls if the caller got any arguments
by reference.
* config/sh/lib1funcs.asm (set_fpscr) [SH5]: Default to double.
* config/sh/sh.c (dump_table) [SHCOMPACT]: Align DImode and DFmode
to 8-byte boundaries.
* config/sh/sh.md (shcompact_preserve_incoming_args): New insn.
* config/sh/sh.h (CALL_COOKIE_INT_REG_GET): New macro.
* config/sh/sh.c (sh_expand_prologue): Preserve args that will be
stored in the stack.
* config/sh/lib1funcs.asm (ct_main_table, ia_main_table): Arrange
for the offsets to have the ISA bit set.
(shcompact_call_trampoline): Document.  Swap r0 and r1, to match
invocation.  Use beq instead of bgt to mark end of sequence of
loads.
(shcompact_incoming_args): Fix store of r2.  Use beq instead of
bgt to mark end of sequence of stores.
* config/sh/sh.c (arith_operand): Don't check whether
CONST_OK_FOR_J for now.
* config/sh/sh.md (movdf_media, movsf_media): Use HOST_WIDE_INT
instead of long for conversion.
2000-12-29  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.c (print_operand_address): Convert INTVAL to int
before passing it to fprintf.
2000-12-28  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/crt1.asm (start): Reset SR.FD, to enable the FP unit.
Call set_fpscr before reading/writing SR.
* config/sh/crt1.asm (start): Set SR.SZ and SR.PR, but not SR.FR.
Call set_fpscr.
* config/sh/lib1funcs.asm: Add `.align 2' directives before
SHmedia code.
(FMOVD_WORKS): Define on SH5 with FPU.
(set_fpscr): Define on SH5.  Remove separate _fpscr_values
setting.
* config/sh/t-sh64 (LIB1ASMFUNCS): Add _set_fpscr instead of
_fpscr_values.
2000-12-28  Hans-Peter Nilsson  <hpn@cygnus.com>
* config/sh/lib1funcs.asm (ct_main_table): Align contents to even
address.
(ia_main_table): Ditto.
2000-12-27  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.h (MAX_WCHAR_TYPE_SIZE): Don't define.
* config/sh/sh64.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Reinstate
the definitions from sh.h.
* config/sh/sh.h (PTRDIFF_TYPE): Define as conditional on
TARGET_SH5.
(SUBTARGET_CPP_SPEC): Arrange for __PTRDIFF_TYPE__ to be defined.
* config/sh/elf.h (PTRDIFF_TYPE): Likewise.
* config/sh/sh64.h (SUBTARGET_CPP_SPEC): Likewise.
2000-12-26  Alexandre Oliva  <aoliva@redhat.com>
* config/sh/sh.md (movdi_media split): Don't add REG_LABEL notes.
Increment LABEL_NUSES.

From-SVN: r49630
2002-02-09 03:08:08 +00:00
Graham Stott
60e8b9f0d1 calls.c (try_to_integrate): Use "(size_t)" intermediate cast and when casting an integer literal to "rtx"...
* calls.c (try_to_integrate): Use "(size_t)" intermediate
        cast and when casting an integer literal to "rtx" pointer.
        (expand_call): Likewise.
        * flow.c (try_pre_increment): Likewise.
        (find_use_as_address): Likewise.
        * integrate.c (expand_iline_function): Likewise.
        * regmove.c (try_auto_increment): Likewise.

From-SVN: r48906
2002-01-16 09:24:00 +00:00
Richard Henderson
e4abc3d580 calls.c (expand_call): Don't turn off ECF_LIBCALL_BLOCK for an invalid result register...
* calls.c (expand_call): Don't turn off ECF_LIBCALL_BLOCK for
        an invalid result register; do end the sequence properly.
        (emit_library_call_value_1): Likewise.

From-SVN: r48287
2001-12-23 05:02:18 -08:00
Jan Hubicka
53d4257f7f calls.c (ECF_LIBCALL_BLOCK): New constant.
* calls.c (ECF_LIBCALL_BLOCK): New constant.
	(emit_call_1, initialize_argument_information,
	precompute_arguments, expand_call,
	emit_library_call_value_1): Use ECF_LIBCALL_BLOCK
	instead of ECF_PURE | ECF_CONST. Honnor LCT_CONST/LCT_PURE.

From-SVN: r48279
2001-12-23 00:10:43 +00:00
Richard Kenner
b5cd4ed4c3 calls.c (flags_from_decl_or_type): Move ECF_SP_DEPRESSED here.
* calls.c (flags_from_decl_or_type): Move ECF_SP_DEPRESSED here.
	(expand_call): Delete from here.
	Do pending stack adjustments if ECF_SP_DEPRESSED.

From-SVN: r48267
2001-12-22 09:46:58 -05:00
Jason Merrill
f21add0737 C++ ABI change: destroy value arguments in caller.
* calls.c (initialize_argument_information): Pass the address of
        the TARGET_EXPR temporary rather than storing it into another.
        * semantics.c (genrtl_start_function, genrtl_finish_function): Don't
        create an extra binding level for the parameters.
        * decl.c (store_parm_decls): Don't do parameter cleanups.

From-SVN: r48154
2001-12-18 08:30:30 -05:00
Richard Kenner
f79a65c087 calls.c (emit_call_1): If ECF_SP_DEPRESSED, pretend have adjusted for rounded_stack_size.
* calls.c (emit_call_1): If ECF_SP_DEPRESSED, pretend have adjusted
	for rounded_stack_size.

From-SVN: r48049
2001-12-15 18:00:00 -05:00
Steve Ellcey
0d7839daee tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): New.
2001-12-11  Steve Ellcey  <sje@cup.hp.com>

	* doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): New.
	* defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): New.
	* calls.c (store_unaligned_arguments_into_pseudos): Check
	FUNCTION_ARG_REG_LITTLE_ENDIAN to see how structures
	are passed/returned.
	* expr.c (move_block_from_reg): Ditto.
	(move_block_from_reg): Ditto.
	(copy_blkmode_from_reg): Ditto.
	* stmt.c (expand_return): Ditto.
	* stor-layout.c (compute_record_mode): If
	FUNCTION_ARG_REG_LITTLE_ENDIAN is set then check
	MEMBER_TYPE_FORCES_BLK even if mode == VOIDmode.
	* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Set to true
	so that Structures of one field are still treated as structures.
	(FUNCTION_ARG_REG_LITTLE_ENDIAN): New, set it to true.
	(FUNCTION_ARG_PADDING): Set to ia64_hpux_function_arg_padding().
	(PAD_VARARGS_DOWN): Modify from default to not pad structures down.
	* config/ia64/ia64-protos.h (ia64_hpux_function_arg_padding): New.
	* config/ia64/ia64.c (ia64_hpux_function_arg_padding): New function
	to special case handling of structure padding.

From-SVN: r47904
2001-12-11 23:04:36 +00:00
Richard Kenner
37a08a298f attribs.c (handle_no_check_memory_usage_atribute): Deleted.
* attribs.c (handle_no_check_memory_usage_atribute): Deleted.
	(c_com): Delete its reference.
	* builtins.c: Delete memory checking code.
	* calls.c, expr.c, function.c, stmt.c: Likewise.
	* builtins.c (expand_builtin_arg_info): Remove reference to
	EXPAND_MEMORY_USE_* modifiers.
	* explow.c (expr_size): Likewise.
	* expr.c (expand_expr, expand_increment): Likewise.
	* expr.h (ARGS_SIZE_RTX): Likewise.
	* function.c (assign_parms, expand_pending_sizeso): Likewise.
	* c-decl.c (duplicate_decls): Don't handle DECL_NO_CHECK_MEMORY_USAGE.
	* expr.c (in_check_memory_usage): Delete.
	(get_push_address, get_memory_usage_from_modifier): Delete.
	(expand_assigment): Use EXPAND_WRITE on destination.
	(expand_expr): Delete ro_modifier.
	* expr.h (expand_modifier): Delete EXPAND_MEMORY_* entries and
	add EXPAND_WRITE.
	(memory_use_mode): Delete.
	* flags.h (flag_check_memory_usage): Deleted.
	(flag_prefix_function_name): Likewise.
	* function.c (expand_function_start): Don't set
	current_function_check_memory_usage.
	* function.h (check_memory_usage): Delete.
	* libfuncs.h, optabs.c: Delete chkr_* stuff.
	* stmt.c (expand_asm_opernd): Change EXPAND_MEMORY_USE_WO to
	EXPAND_WRITE.
	* toplev.c (flag_check_memory_usage): Deleted.
	(flag_prefix_function_name): Likewise.
	(f_options, process_options): Delete references to above.
	* tree.h (DECL_NO_CHECK_MEMORY_USAGE): Deleted.
	* varasm.c (CHKR_PREFIX): Deleted.
	(make_decl_rtl): Remove flag_prefix_function_name handling.
	(assemble_name): Likewise.
	* doc/extend.texi: Remove no_check_memory_usage attribute.
	* doc/invoke.texi: Remove -fcheck-memory-usage
	and -fprefix-function-name.
	* cp/decl.c (duplicate_decls): Don't copy DECL_NO_CHECK_MEMORY_USAGE.

From-SVN: r47697
2001-12-05 17:37:41 -05:00
Andrew Haley
60f4621c9a calls.c (check_sibcall_argument_overlap): Use slot_offset for start of stack slot.
2001-10-09  Andrew Haley  <aph@redhat.com>

        * calls.c (check_sibcall_argument_overlap): Use slot_offset for
        start of stack slot.

From-SVN: r47276
2001-11-22 16:51:47 +00:00
Jakub Jelinek
1258ee8070 explow.c (probe_stack_range): Use LCT_NORMAL as second argument to emit_library_call.
* explow.c (probe_stack_range): Use LCT_NORMAL as second argument
	to emit_library_call.
	* function.c (expand_main_function, expand_function_start,
	expand_function_end): Likewise.
	* profile.c (output_func_start_profiler): Likewise.
	* stmt.c (expand_nl_goto_receivers): Use LCT_NORETURN as
	second argument to emit_library_call.
	* optabs.c (prepare_cmp_insn): Use LCT_CONST_MAKE_BLOCK
	as second argument to emit_library_call.
	* calls.c (emit_library_call): Update fn_type description.

From-SVN: r47241
2001-11-21 12:13:14 +01:00
Richard Kenner
04050c690d expmed.c (extract_bit_field): No longer pass in alignment.
* expmed.c (extract_bit_field): No longer pass in alignment.
	(extract_fixed_bit_field, extract_split_bit_field): Likewise.
	(store_bit_field, store_fixed_bit_field, store_split_bit_field):
	Likewise.
	* expr.c (store_constructor, store_constructor_field): Likewise.
	(store_field, emit_group_load, emit_group_store): Likewise.
	* expr.h (emit_group_load, emit_group_store): Delete ALIGN parm.
	(store_bit_field, extract_bit_field): Likewise.
	* calls.c, expr.c, function.c: Change calls to above functions.
	* ifcvt.c, stmt.c: Likewise.

From-SVN: r46926
2001-11-11 06:02:26 -05:00
Joseph Myers
f5143c46a9 ChangeLog.2, [...]: Fix spelling errors.
* ChangeLog.2, ChangeLog.4, ChangeLog.5, ChangeLog,
	FSFChangeLog.10, FSFChangeLog.11, alias.c, attribs.c,
	caller-save.c, calls.c, cfg.c, cfganal.c, cfgcleanup.c, cfgrtl.c,
	cppmacro.c, fold-const.c, ifcvt.c, local-alloc.c, profile.c,
	sched-int.h, toplev.c, config/alpha/alpha.c,
	config/alpha/alpha.md, config/c4x/c4x.h, config/cris/cris.h,
	config/cris/cris.md, config/i370/i370.md, config/i386/i386.c,
	config/i386/i386.h, config/i386/i386.md, config/i386/xm-djgpp.h,
	config/ia64/ia64.c, config/m68hc11/m68hc11.c, config/m68k/m68k.md,
	config/mcore/mcore.h, config/mmix/mmix.c, config/ns32k/ns32k.h,
	config/ns32k/ns32k.md, config/rs6000/rs6000.c,
	config/rs6000/sysv4.h, config/sh/sh.md: Fix spelling errors.

From-SVN: r46760
2001-11-04 02:51:28 +00:00
Richard Kenner
4b6c167260 builtins.c (expand_builtin_setjmp): Only call convert_memory_address if needed.
* builtins.c (expand_builtin_setjmp): Only call convert_memory_address
	if needed.
	(expand_builtin_longjmp, expand_builtin_alloca): Likewise.
	* except.c (expand_builtin_frob_return_addr): Likewise.
	(expand_builtin_eh_return): Likewise.
	* stmt.c (expand_computed_goto): Likewise.
	* explow.c (memory_address): Likewise.
	(allocate_dynamic_stack_space): Clean up predicate testing.
	(probe_stack_range): Convert SIZE to Pmode.
	* calls.c (rtx_for_function_call): Only call convert_memory_address
	if needed.
	Pass function call operand as ptr_mode, not Pmode.
	* expr.c (expand_assignment): Clean up calls to convert_memory
	address by only doing so when needed and making offsets Pmode.
	(store_constructor, expand_expr, expand_expr_unaligned): Likewise.
	* function.c (assign_parms): Ensure address in MEM for RESULT_DECL
	is in Pmode, not ptr_mode.

From-SVN: r46448
2001-10-23 18:59:15 -04:00
Richard Kenner
711062347e Correct typo in last change
From-SVN: r46441
2001-10-23 15:11:48 -04:00
Richard Kenner
8ac61af705 alias.c (can_address_p): Compnonents are not addressable if the containing type has alias set 0.
* alias.c (can_address_p): Compnonents are not addressable if
	the containing type has alias set 0.
	(get_alias_set): Rework to use STRIP_NOPS.
	Only call front-end routine on object, type, or object with
	NOPs stripped, not inner values.
	Use language hook to call front-end routine.
	* builtins.c (get_memory_rtx): Always call set_mem_attributes.
	(expand_builtin_apply): Call set_mem_align on MEMs we make.
	Don't pass alignment to emit_block_move.
	(expand_builtin_memcpy, expand_builtin_va_copy): Likewise.
	(expand_builtin_memset): Likewise, but for clear_storage.
	* c-common.c (lang_get_alias_set): Renamed to c_common_alias_set
	and remove C++ specific parts.
	* c-common.h (c_common_get_alias_set): Add declaration.
	* c-lang.c (LANG_HOOKS_GET_ALIAS_SET): New macro.
	* calls.c (emit_call_1): Fix typo in sibcall_pop case.
	(save_fixed_argument_area): Call set_mem_align.
	Remove alignment in call to emit_block_move.
	(emit_library_call_value_1, store_one_arg): Likewise.
	(target_for_arg): Remove; disabled long ago.
	* emit-rtl.c (set_mem_attributes): Rework to only call get_mem_attrs
	once and similar cleanups.
	(offset_address): Use proper introductory comment.
	* expr.c (emit_block_move): Use alignment from that of MEM args, not
	from explicit operand; all callers changed.
	(clear_storage): Likewise.
	(expand_assignment): Don't call set_mem_alias_set on to_rtx.
	(store_field): Remove kludge on alias set used for to_rtx.
	(highest_pow2_factor, case *_DIV_EXPR): Never return 0.
	(expand_expr_unaligned): Call set_mem_attributes instead of
	set_mem_alias_set.
	* expr.h (emit_block_move, clear_storage): Remove ALIGN argument.
	* function.c (assign_stack_temp_for_type): Set MEM alignment.
	(expand_function_end): Track MEM attributes of trampolines.
	* ifcvt.c (noce_try_cmove_arith): Set alignment of new MEM.
	* integrate.c (copy_rtx_and_substitute, case CALL): Copy memory
	attributes from original.
	* langhooks.c (lang_hook_default_get_alias_set): New function.
	(hook_get_alias_set_0): New function.
	* langhooks.h (hook_get_alias_set_0): New declaration.
	(lang_hook_default_get_alias_set): Likewise.
	(LANG_HOOKS_GET_ALIAS_SET): New macro; add to initializer.
	* reload1.c (alter_reg): Use adjust_address_nv.
	* rtl.c (get_mode_alignment): Moved to here.
	* rtl.h (MEM_ALIGN): Take default from mode, if not BLKmode, and
	change default if unknown from 1 to BITS_PER_UNIT.
	* stor-layout.c (get_mode_alignment): Remove from here.
	* toplev.h (struct lang_hoks): Add get_alias_set field.
	* tree.h (lang_get_alias_set): Delete declaration.
	* config/arc/arc.c (arc_setup_incoming_varags): Set MEM alignment.
	* config/i386/i386.c (ix86_setup_incoming_varargs): Likewise.
	(ix86_va_arg): Likewise.
	* config/i960/i960.c (i960_setup_incoming_varargs): Likewise.
	* config/pa/pa.c (hppa_builtin_saveregs): Likewise.
	* config/sparc/sparc.c (sparc_va_arg): Likewise.
	* config/rs6000/rs6000.c (setup_incoming_varargs): Likewise.
	(expand_block_move_mem): Remove dead code.
	* cp/cp-lang.c (cxx_get_alias_set): New function.
	Point LANG_HOOKS_GET_ALIAS_SET to it.
	* f/com.c (LANG_HOOKS_GET_ALIAS_SET): New macro.
	(lang_get_alias_set): Delete.
	* java/lang.c (lang_get_alias_set): Deleted.

From-SVN: r46440
2001-10-23 14:51:18 -04:00
Kaveh R. Ghazi
6894579f14 calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.
* calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.
	* 1750a.c (print_operand): Fix format specifier warning.
	* 1750a.h (ASM_FILE_START): Don't discard pointer qualifier.
	* 1750a.md: Likewise.
	* gcc.c (init_gcc_specs): Wrap with ENABLE_SHARED_LIBGCC.
	* genemit.c (output_add_clobbers): Mark parameter with
	ATTRIBUTE_UNUSED.
	* genrecog.c (write_subroutine): Likewise.
	* integrate.c (expand_inline_function): Delete unused variable.
	* varasm.c (remove_from_pending_weak_list): Wrap with
	ASM_WEAKEN_LABEL.

From-SVN: r46358
2001-10-19 19:37:09 +00:00
Stan Shebs
b36948478c alias.c: Remove uses of "register" specifier in declarations of arguments and local...
2001-10-10  Stan Shebs  <shebs@apple.com>

        * alias.c: Remove uses of "register" specifier in declarations
        of arguments and local variables.
        * c-common.c: Ditto.
        * c-convert.c: Ditto.
        * c-decl.c: Ditto.
        * c-format.c: Ditto.
        * c-semantics.c: Ditto.
        * c-typeck.c: Ditto.
        * caller-save.c: Ditto.
        * calls.c: Ditto.
        * cfg.c: Ditto.
        * cfgbuild.c: Ditto.
        * cfgrtl.c: Ditto.
        * collect2.c: Ditto.
        * combine.c: Ditto.
        * convert.c: Ditto.
        * cppexp.c: Ditto.
        * cppfiles.c: Ditto.
        * cse.c: Ditto.
        * dbxout.c: Ditto.
        * defaults.h: Ditto.
        * df.c: Ditto.
        * dwarf2out.c: Ditto.
        * dwarfout.c: Ditto.
        * emit-rtl.c: Ditto.
        * explow.c: Ditto.
        * expmed.c: Ditto.
        * expr.c: Ditto.
        * final.c: Ditto.
        * fix-header.c: Ditto.
        * floatlib.c: Ditto.
        * flow.c: Ditto.
        * fold-const.c: Ditto.
        * function.c: Ditto.
        * gcc.c: Ditto.
        * gcse.c: Ditto.
        * gen-protos.c: Ditto.
        * genattrtab.c: Ditto.
        * gencheck.c: Ditto.
        * genconfig.c: Ditto.
        * genemit.c: Ditto.
        * genextract.c: Ditto.
        * genflags.c: Ditto.
        * gengenrtl.c: Ditto.
        * genoutput.c: Ditto.
        * genpeep.c: Ditto.
        * genrecog.c: Ditto.
        * gensupport.c: Ditto.
        * global.c: Ditto.
        * gmon.c: Ditto.
        * graph.c: Ditto.
        * haifa-sched.c: Ditto.
        * hard-reg-set.h: Ditto.
        * hash.c: Ditto.
        * integrate.c: Ditto.
        * jump.c: Ditto.
        * lists.c: Ditto.
        * local-alloc.c: Ditto.
        * loop.c: Ditto.
        * mips-tdump.c: Ditto.
        * mips-tfile.c: Ditto.
        * optabs.c: Ditto.
        * prefix.c: Ditto.
        * print-rtl.c: Ditto.
        * read-rtl.c: Ditto.
        * real.c: Ditto.
        * recog.c: Ditto.
        * reg-stack.c: Ditto.
        * regclass.c: Ditto.
        * regmove.c: Ditto.
        * reload.c: Ditto.
        * reload1.c: Ditto.
        * reorg.c: Ditto.
        * resource.c: Ditto.
        * rtl.c: Ditto.
        * rtlanal.c: Ditto.
        * scan.c: Ditto.
        * sched-deps.c: Ditto.
        * sched-rgn.c: Ditto.
        * sdbout.c: Ditto.
        * simplify-rtx.c: Ditto.
        * stmt.c: Ditto.
        * stor-layout.c: Ditto.
        * toplev.c: Ditto.
        * tradcif.y: Ditto.
        * tradcpp.c: Ditto.
        * tree.c: Ditto.
        * unroll.c: Ditto.
        * varasm.c: Ditto.
        * xcoffout.c: Ditto.

From-SVN: r46173
2001-10-11 03:16:15 +00:00
Kazu Hirata
6d2f888735 calls.c: Fix formatting.
* calls.c: Fix formatting.
	* c-decl.c: Likewise.
	* cfgcleanup.c: Likewise.
	* combine.c: Likewise.
	* cppfiles.c: Likewise.
	* cpplib.c: Likewise.
	* cppmacro.c: Likewise.
	* crtstuff.c: Likewise.
	* cse.c: Likewise.
	* dwarf2out.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* gcse.c: Likewise.
	* genattrtab.c: Likewise.
	* ggc-page.c: Likewise.
	* integrate.c: Likewise.
	* libgcc2.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	* profile.c: Likewise.
	* protoize.c: Likewise.
	* real.c: Likewise.
	* recog.c: Likewise.
	* reload1.c: Likewise.
	* reload.c: Likewise.
	* reorg.c: Likewise.
	* resource.c: Likewise.
	* sched-rgn.c: Likewise.
	* sdbout.c: Likewise.
	* stmt.c: Likewise.
	* toplev.c: Likewise.
	* varasm.c: Likewise.

From-SVN: r46145
2001-10-10 11:33:39 +00:00
Richard Henderson
9defc9b7ac rtl.h (LCT_RETURNS_TWICE): New.
* rtl.h (LCT_RETURNS_TWICE): New.
        * calls.c (emit_call_1): Set current_function_calls_setjmp for
        ECF_RETURNS_TWICE.
        (emit_library_call_value_1): Map LCT_RETURNS_TWICE
        to ECF_RETURNS_TWICE.
        * except.c (sjlj_emit_function_enter): Use LCT_RETURNS_TWICE for
        call to setjmp.

        * unwind-sjlj.c: Invent the setjmp.h declarations if inhibit_libc.

        * config/stormy16/stormy16.h (DONT_USE_BUILTIN_SETJMP): New.
        (JMP_BUF_SIZE): New.

From-SVN: r45736
2001-09-21 13:26:44 -07:00
Richard Sandiford
2e547b13f1 * calls.c (store_one_arg): Expand comment.
From-SVN: r45502
2001-09-10 10:14:13 +00:00
Roman Lechtchinsky
0df299ae0b calls.c (store_one_arg): Make sure that the entire argument is pushed if...
* calls.c (store_one_arg): Make sure that the entire argument is
	pushed if STACK_PARMS_IN_REG_PARM_AREA is defined.

From-SVN: r45501
2001-09-10 10:10:16 +00:00
Kaveh R. Ghazi
6268b92246 calls.c (emit_library_call_value): Don't use a fixed argument after VA_CLOSE, i.e.
* calls.c (emit_library_call_value): Don't use a fixed
	argument after VA_CLOSE, i.e. out of scope in traditional C.

	* emit-rtl.c (gen_rtvec): Likewise.

From-SVN: r45332
2001-08-31 19:28:58 +00:00
Andreas Jaeger
79e8ec0eb2 (forgot in last checkin)
Use VA_OPEN/VA_CLOSE/VA_FIXEDARG throughout.

From-SVN: r45223
2001-08-28 06:55:48 +02:00
Lars Brinkhoff
1322177dbd Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
	bitmap.h, builtin-types.def, builtins.c, builtins.def,
	c-aux-info.c, c-common.c, c-common.def, c-common.h,
	c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
	c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
	c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
	caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
	conditions.h, config.gcc, configure.frag, configure.in,
	conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
	cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
	dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
	doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
	dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
	emit-rtl.c, errors.c, errors.h, except.c, except.h,
	exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
	fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
	function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
	gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
	gencheck.c, gencodes.c, genconfig.c, genemit.c,
	genextract.c, genflags.c, gengenrtl.c, genmultilib,
	genopinit.c, genoutput.c, genpeep.c, genrecog.c,
	gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
	ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
	graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
	gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
	gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
	hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
	integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
	libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
	machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
	mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
	mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
	params.h, predict.c, predict.def, predict.h, prefix.c,
	prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
	read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
	regclass.c, regmove.c, regrename.c, regs.h, reload.c,
	reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
	rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
	sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
	sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
	ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
	stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
	tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
	tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
	unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
	unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
	xcoffout.h: replace "GNU CC" with "GCC".

From-SVN: r45105
2001-08-22 14:35:51 +00:00
Zack Weinberg
e78d8e5137 expr.h: Split out optab- and libfunc-related code to...
* expr.h: Split out optab- and libfunc-related code to...
	* optabs.h, libfuncs.h: ... these new headers.

	* Makefile.in (CONFIG_H, EXPR_H): Take out insn-codes.h.
	(OPTABS_H): New.
	(various .o rules): Add $(OPTABS_H) and/or libfuncs.h to
	dependencies.
	* mkconfig.sh: Don't include insn-codes.h from config.h.

	* reload.h: Use #ifdef GCC_INSN_CODES_H to decide whether
	enum insn_code is available.  Move reload_in_optab and
	reload_out_optab array declarations to optabs.h.
	* regmove.c (gen_add3_insn): Move to optabs.c, export from
	there, prototype in expr.h.
	* gencodes.c: Cleanup: zap global variables, don't use
	printf where puts will do, don't bother defining MAX_INSN_CODE
	which nothing uses, let CODE_FOR_nothing get its value implicitly.

	* genemit.c, genopinit.c: Include optabs.h in generated file.
	* genoutput.c: Include insn-codes.h in generated file.
	* builtins.c, caller-save.c, combine.c, doloop.c, explow.c,
	expmed.c, expr.c, function.c, ifcvt.c, loop.c, optabs.c, profile.c,
	reload1.c, simplify-rtx.c, stmt.c, unroll.c, config/alpha/alpha.c,
	config/arm/arm.c, config/c4x/c4x.c, config/clipper/clipper.c,
	config/i386/i386.c, config/ia64/ia64.c, config/mn10300/mn10300.c,
	config/pj/pj.c, config/sh/sh.c, config/sparc/sparc.c:
	Include optabs.h.
	* builtins.c, calls.c, dwarf2out.c, except.c, expr.c, function.c,
	optabs.c, stmt.c, config/c4x/c4x.c, config/clipper/clipper.c,
	config/m88k/m88k.c, config/sparc/sparc.c:
	Include libfuncs.h.
	* reload.c: Include expr.h and optabs.h before reload.h.
	* config/alpha/alpha.c: Include tree.h before reload.h.
	* config/pa/pa.c: Include expr.h, optabs.h, libfuncs.h,
	and reload.h in that order.
	* config/sparc/sparc.c: Include debug.h.
	* recog.c: Include insn-codes.h.

cp:
	* Make-lang.in (cp/except.o): Add libfuncs.h to dependencies.
	* except.c: Include libfuncs.h.
java:
	* Make-lang.in (java/decl.o): Update dependencies.
	* decl.c: Include libfuncs.h, don't include toplev.h.

From-SVN: r44858
2001-08-13 15:56:51 +00:00
Zack Weinberg
31cdd4996b defaults.h: Define PREFERRED_STACK_BOUNDARY to STACK_BOUNDARY if not already defined.
* defaults.h: Define PREFERRED_STACK_BOUNDARY to
	STACK_BOUNDARY if not already defined.

	* calls.c, function.c, reload1.c, explow.c: Don't default
	PREFERRED_STACK_BOUNDARY.  Remove all #if/#ifdef on
	PREFERRRED_STACK_BOUNDARY and/or STACK_BOUNDARY.

	* explow.c (allocate_dynamic_stack_space): Change unsafe #if
	to run-time test.

	* doc/tm.texi: Document that STACK_BOUNDARY is required;
	clarify difference between it and PREFERRED_STACK_BOUNDARY.

From-SVN: r44814
2001-08-12 01:46:15 +00:00
Zack Weinberg
19652adf82 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
2001-08-10 16:19:22 +00:00
Jan Hubicka
9d98f8f9c4 calls.c (ECF_ALWAYS_RETURN): New constant.
* calls.c (ECF_ALWAYS_RETURN): New constant.
	(emit_call_1): Add REG_ALWAYS_RETURN note if needed.
	(expand_call): Use LCF_ALWAYS_RETURN for __bb_fork_func.
	(emit_library_call_value_1): Handle LCT_ALWAYS_RETRUN.
	* flow.c (need_fake_edge_p): Handle REG_ALWAYS_RETURN.
	* rtl.c (reg_note_name): New name.
	* rtl.h (enum reg_note): Add REG_ALWAYS_RETURN.

From-SVN: r44722
2001-08-08 19:07:47 +00:00
Jan Hubicka
570a98eb7c calls.c (expand_call): Do not emit INSN_SETJMP note.
* calls.c (expand_call): Do not emit INSN_SETJMP note.
	(emit_library_call_value_1): Likewise.
	(emit_call_1): Emit REG_SETJMP note.
	* cse.c (cse_end_of_basic_block): Use REG_SETJMP instead
	of INSN_SETJMP
	* cselib.c (cselib_process_insn): Likewise.
	* flow.c (propagate_block): Likewise.
	* loop.c (find_and_verify_loops): Likewise.
	* reload.c (find_equiv_regs): Likewise.
	* reload1.c (reload): Likewise.
	* resource.c (mark_referenced_resources,
	mark_set_resources): Likewise.
	* sched-deps (sched_analyze_insn, sched_analyze): Likewise.
	* final.c (final_scan_insn): Remove NOTE_INSN_SETJMP.
	* haifa-sched.c (unlink_other_notes): Likewise.
	(reemit_notes): Likewise.
	* sched-ebb.c (sched_ebb): Likewise.
	* sched-rgc.c (sched_region): Likewise.
	* rtl.c (note_insn_name): Likewise.
	(reg_note_name): Add REG_SETJMP
	* rtl.h (reg_note): Add REG_SETJMP.
	(insn_note): Remove NOTE_INSN_SETJMP.

	* profile.c (branch_prob): Add fake edges for setjmp.

From-SVN: r44700
2001-08-07 20:24:08 +00:00
Jan Hubicka
24a2858412 alias.c (nonlocal_mentioned_p): Rename CONST_CALL_P to CONST_OR_PURE_CALL_P
* alias.c (nonlocal_mentioned_p):
	Rename CONST_CALL_P to CONST_OR_PURE_CALL_P
	* calls.c (emit_call_1): Likewise.
	* cse.c (cse_insn, invalidate_skipped_block): Likewise.
	* cselib.c (cselib_process_insn): Likewise.
	* df.c (df_insns_modify): Likewise.
	* flow.c (need_fake_edge_p): Likewise.
	(propagate_one_insn): Likewise.
	* haifa-sched.c (reemit_notes): Likewise.
	* integrate.c (copy_insn_list): Likewise.
	* jump.c (delete_prior_computation): Likewise.
	* local-alloc.c (validate_equiv_mem): Likewise.
	* loop.c (scan_loop): Likewise.
	* predict.c (estimate_probability): Likewise.
	* reload.c (reload): Likewise.
	* sched-deps (sched_analyze): Likewise.
	* rtl.h (CONST_CALL_P): rename to CONST_OR_PURE_CALL_P.
	* gcse.c (compute_hash_table): Likewise.
	(mark_call): Likewise.
	(store_killed_in_insn): Likewise.

From-SVN: r44688
2001-08-07 12:59:58 +00:00
Kazu Hirata
ec5c56db8b alias.c: Fix comment formatting.
* alias.c: Fix comment formatting.
	* bitmap.c: Likewise.
	* builtins.c: Likewise.
	* calls.c: Likewise.
	* c-common.c: Likewise.
	* c-decl.c: Likewise.
	* c-dump.c: Likewise.
	* c-lex.c: Likewise.
	* collect2.c: Likewise.
	* combine.c: Likewise.
	* conflict.c: Likewise.
	* cppfiles.c: Likewise.
	* cppinit.c: Likewise.
	* cpplex.c: Likewise.
	* cpplib.c: Likewise.
	* cppmacro.c: Likewise.
	* cppspec.c: Likewise.
	* c-pragma.c: Likewise.
	* crtstuff.c: Likewise.
	* cse.c: Likewise.
	* cselib.c: Likewise.
	* c-semantics.c: Likewise.
	* c-typeck.c: Likewise.

From-SVN: r44547
2001-08-01 17:57:27 +00:00
Richard Henderson
3affaf2934 calls.c (prepare_call_address): New parameter SIBCALLP.
* calls.c (prepare_call_address): New parameter SIBCALLP.  If true,
        don't force the function address into a register.
        (expand_call, emit_library_call_value_1): Update callers.
        * builtins.c (expand_builtin_apply): Likewise.
        * expr.h (prepare_call_address): Update decl.

From-SVN: r44095
2001-07-17 20:24:53 -07:00
Richard Kenner
ba4828e005 alias.c (set_mem_alias_set): New function.
* alias.c (set_mem_alias_set): New function.
	* rtl.h (set_mem_alias_set): Declare it.
	* builtins.c (expand_builtin_return_addr): Call it instead of
	using MEM_ALIAS_SET accessor.
	(expand_builtin_setjmp_setup, expand_builtin_longjmp): Likewise.
	(get_memory_rtx, expand_builtin_va_arg): Likewise.
	(expand_builtin_va_copy):Likewise.
	* caller-save.c (setup_save_areas): Likewise.
	* calls.c (compute_argument_addresses): Likewise.
	* explow.c (set_mem_attributes): Likewise.
	* expr.c (emit_single_push_insn, emit_push_insn): Likewise.
	(expand_assignment, store_constructor_field, store_field): Likewise.
	(expand_expr_unaligned): Likewise.
	* function.c (assign_stack_temp_for_type): Likewise.
	(put_reg_into_stack, gen_mem_addressof): Likewise.
	* ifcvt.c (noce_try_cmove_arith): Likewise.
	* reload1.c (reload, alter_reg): Likewise.
	* config/alpha/alpha.c (get_aligned_mem): Likewise.
	(alpha_set_memflags_1, alpha_expand_unaligned_load): Likewise.
	(alpha_expand_unaligned_store): Likewise
	(alpha_expand_unaligned_load_words): Likewise.
	(alpha_expand_unaligned_store_words): Likewise.
	(alpha_expand_block_clear, alpha_expand_prologue): Likewise.
	(alpha_expand_epilogue): Likewise.
	* config/arc/arc.c (arc_setup_incoming_varargs): Likewise.
	* config/clipper/clipper.c (clipper_builtin_saveregs): Likewise.
	* config/i386/i386.c (legitimize_pic_address): Likewise.
	* config/i960/i960.c (setup_incoming_varargs): Likewise.
	* config/ia64/ia64.c (spill_restore_mem): Likewise.
	* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
	* config/m8k/m88k.c (m88k_builtin_saveregs): Likewise.
	* config/mips/mips.c (mips_va_arg): Likewise.
	* config/mn10300/mn10300.c (mn10300_builtin_saveregs): Likewise.
	* config/pa/pa.c (hppa_builtin_saveregs): Likewise.
	* config/rs6000/rs6000.c (rs6000_emit_move): Likewise.
	(setup_incoming_varargs, rs6000_va_arg): Likewise.
	(rs6000_emit_eh_toc_restore, rs6000_emit_prologue): Likewise.
	(rs6000_emit_epilogue): Likewise.
	* config/sh/sh.c (sh_builtin_saveregs): Likewise.
	* config/sparc/sparc.c (sparc_va_arg): Likewise.
	* config/v850/v850.c (v850_va_arg): Likewise.

From-SVN: r43951
2001-07-11 16:35:55 -04:00
Kazu Hirata
0407c02b4e calls.c (emit_library_call_value_1): Fix a comment typo.
2001-07-10  Kazu Hirata  <kazu@hxi.com>

	* calls.c (emit_library_call_value_1): Fix a comment typo.
	* dwarf2out.c (mem_loc_descriptor): Likewise.
	* config/i386/i386.c (ix86_expand_aligntest): Likewise.

From-SVN: r43917
2001-07-11 01:04:26 +00:00
David Edelsohn
4f380204a2 * calls.c (store_one_arg): Don't divide align by BITS_PER_UNIT.
From-SVN: r41856
2001-05-04 21:30:51 -04:00
Kazu Hirata
d80d2d2a5b calls.c (expand_call): Fix a comment typo.
2001-04-21  Kazu Hirata  <kazu@hxi.com>

	* calls.c (expand_call): Fix a comment typo.

From-SVN: r41488
2001-04-21 21:38:22 +00:00
DJ Delorie
c39ada0455 function.h (virtuals_instantiated): Declare.
* function.h (virtuals_instantiated): Declare.
* function.c: (virtuals_instantiated): Make global.
* calls.c (emit_library_call_value_1): Use
virtual_outgoing_args_rtx only if it hasn't been instantiated.
Otherwise, use the stack pointer directly.

From-SVN: r41127
2001-04-05 16:13:53 -04:00
Richard Henderson
9555a12236 rtl.h (LCT_THROW): New.
* rtl.h (LCT_THROW): New.
        * calls.c (emit_library_call_value_1): Handle it.
        * except.c (connect_post_landing_pads): Use it.

From-SVN: r41070
2001-04-03 17:48:51 -07:00
Jakub Jelinek
ddef6bc7a3 Use byte offsets in SUBREGs instead of words.
2001-04-03  Jakub Jelinek  <jakub@redhat.com>
	    David S. Miller  <davem@pierdol.cobaltmicro.com>
            Andrew MacLeod  <amacleod@redhat.com>

	Use byte offsets in SUBREGs instead of words.

	* alias.c (nonlocal_mentioned_p): Use subreg_regno function.
	* caller-save.c (mark_set_regs): Change callers of subreg_hard_regno
	to pass new argument.
	(add_stored_regs): Use subreg_regno_offset function.
	* calls.c (expand_call): For non-paradoxical SUBREG take endianess
	into account.
	(precompute_arguments): Use gen_lowpart_SUBREG.
	* combine.c (try_combine): Replace explicit XEXP with SUBREG_REG.
	(combine_simplify_rtx): Rework to use SUBREG_BYTE.
	(simplify_set): Rework to use SUBREG_BYTE.
	(expand_field_assignment): Use SUBREG_BYTE.
	(make_extraction): Use SUBREG_BYTE.
	(if_then_else_cond): Use SUBREG_BYTE.
	(apply_distributive_law): Use SUBREG_BYTE and fixup subreg comments.
	(gen_lowpart_for_combine): Compute full byte offset.
	* cse.c (mention_regs): Use SUBREG_BYTE.
	(remove_invalid_subreg_refs): Rework to use SUBREG_BYTE.
	(canon_hash): Use SUBREG_BYTE.
	(fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to operand_subword.
	(gen_lowpart_if_possible): Formatting.
	* dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos
	correctly.
	* dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG
	(mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	(loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	* dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG
	(output_mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	(output_loc_descriptor): Fixup explicit XEXP into SUBREG_REG
	* emit-rtl.c (gen_rtx_SUBREG): New function, used to verify
	certain invariants about SUBREGs the compiler creates.
	(gen_lowpart_SUBREG): New function.
	(subreg_hard_regno): New function to get the final register number.
	(gen_lowpart_common): Use SUBREG_BYTE.
	(gen_imagpart): Spacing nits.
	(subreg_realpart_p): Use SUBREG_BYTE.
	(gen_highpart): Use SUBREG_BYTE.
	(subreg_lowpart_p): Always compute endian corrected goal offset,
	even at the byte level, then compare against that.
	(constant_subword): New function, pulled out all constant cases
	from operand_subword and changed second argument name to offset.
	(operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early
	and call constant_subword to do the work.  Return const0_rtx if
	looking for a word outside of OP.
	(operand_subword_force): Change second arg name to offset.
	* expmed.c (store_bit_field): Use SUBREG_BYTE.
	(store_split_bit_field): Use SUBREG_BYTE.
	(extract_bit_field): Use SUBREG_BYTE.
	(extract_split_bit_field): Use SUBREG_BYTE.
	(expand_shift): Use SUBREG_BYTE.
	* expr.c (store_expr, expand_expr): Use gen_lowpart_SUBREG.
	* final.c (alter_subreg) Use subreg_hard_regno and SUBREG_BYTE.
	* flow.c (set_noop_p): Use SUBREG_BYTE.
	(mark_set_1): Remove ALTER_HARD_SUBREG. Use subreg_regno_offset instead.
	* function.c (fixup_var_refs_1): Fixup explicit XEXP into a SUBREG_REG.
	(fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian
	correction code.
	(optimize_bit_field): Use SUBREG_BYTE.
	(purge_addressof_1): Use SUBREG_BYTE.
	(purge_single_hard_subreg_set): Use subreg_regno_offset function.
	(assign_params): Mark arguments SUBREG_PROMOTED_VAR_P if they are
	actually promoted by the caller and PROMOTE_FOR_CALLS_ONLY is true.
	* gengenrtl.c (special_rtx): Add SUBREG.
	* global.c (mark_reg_store): Use SUBREG_BYTE.
	(set_preference): Rework to use subreg_regno_offset and SUBREG_BYTE.
	* ifcvt (noce_emit_move_insn): Use SUBREG_BYTE.
	* integrate.c (copy_rtx_and_substitute): Use SUBREG_BYTE and make sure
	final byte offset is congruent to subreg's mode size.
	(subst_constants): Use SUBREG_BYTE.
	(mark_stores): Use subreg_regno_offset function.
	* jump.c (rtx_renumbered_equal_p, true_regnum): Use subreg_regno_offset
	function and SUBREG_BYTE.
	* local-alloc.c (combine_regs): Use subreg_regno_offset function.
	(reg_is_born): Use subreg_hard_regno.
	* recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte
	endian correction code.  Don't combine subregs unless resulting
	offset aligns with type.  Fix subreg constant extraction for DImode.
	Simplify SUBREG of VOIDmode CONST_DOUBLE.
	(general_operand): Remove dead mode_altering_drug code.
	(indirect_operand): Use SUBREG_BYTE.
	(constrain_operands): Use subreg_regno_offset function.
	* reg-stack.c (get_true_reg): Use subreg_regno_offset function.
	* regmove.c (regmove_optimize): Use SUBREG_BYTE.
	(optimize_reg_copy_3): Use gen_lowpart_SUBREG.
	* regs.h (REG_SIZE): Allow target to override.
	(REGMODE_NATURAL_SIZE): New macro which target can override.
	* reload.c (reload_inner_reg_of_subreg): subreg_regno should be used
	on the entire subreg rtx.
	(push_reload): Use SUBREG_BYTE in comments and code.
	(find_dummy_reload): Use subreg_regno_offset.  Only adjust offsets
	for hard registers inside subregs.
	(operands_match_p): Use subreg_regno_offset.
	(find_reloads): Use SUBREG_BYTE and only advance offset for subregs
	containing hard regs.
	(find_reload_toplev): Use SUBREG_BYTE.  Remove byte endian
	corrections when fixing up MEM subregs.
	(find_reloads_address_1): Use SUBREG_BYTE, subreg_regno, and
	subreg_regno_offset where appropriate.
	(find_reloads_subreg_address): Use SUBREG_BYTE.  Remove
	byte endian corrections when fixing up MEM subregs.
	(subst_reloads): When combining two subregs, make sure final
	offset is congruent to subreg's mode size.
	(find_replacement): Use SUBREG_BYTE and subreg_regno_offset.
	(refers_to_regno_for_reload_p): Use subreg_regno.
	(reg_overlap_mentioned_for_reload_p): Use subreg_regno_offset.
	* reload1.c (eliminate_regs) Use SUBREG_BYTE. Remove byte endian
	correction code for memory subreg fixups.
	(forget_old_reload_1): Use subreg_regno_offset.
	(choose_reload_regs): Use subreg_regno.
	(emit_input_reload_insns): Use SUBREG_BYTE.
	(reload_combine_note_store): Use subreg_regno_offset.
	(move2add_note_store): Use subreg_regno_offset.
	* resource.c (update_live_status, mark_referenced_resources): Use
	subreg_regno function.
	(mark_set_resources): Use subreg_regno function.
	* rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE.
	(subreg_regno_offset, subreg_regno): Define prototypes.
	(subreg_hard_regno, constant_subword, gen_rtx_SUBREG): Newi functions.
	(gen_lowpart_SUBREG): Add prototype.
	* rtl.texi (subreg): Update to reflect new byte offset representation.
	Add mentioning of the effect that BYTES_BIG_ENDIAN has on subregs now.
	* rtlanal.c (refers_to_regno_p): Use subreg_regno.
	(reg_overlap_mentioned_p): Use subreg_regno.
	(replace_regs); Make sure final offset of combined subreg is
	congruent to size of subreg's mode.
	(subreg_regno_offset): New function.
	(subreg_regno): New function.
	* sched-vis.c (print_value): Change SUBREG_WORD to SUBREG_BYTE.
	* sdbout.c (sdbout_symbol): Compute offset using alter_subreg.
	* stmt.c (expand_anon_union_decl): Use gen_lowpart_SUBREG.
	* tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead.
	(SUBREG_REGNO_OFFSET): Describe SUBREG_REGNO_OFFSET overrides.
	* config/a29k/a29k.c (gpc_reg_operand): Use subreg_regno.
	(a29k_get_reloaded_address): Use SUBREG_BYTE.
	(print_operand): Use SUBREG_BYTE.
	* config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE.
	* config/arm/arm.c (arm_reload_in_hi): Use SUBREG_BYTE.
	(arm_reload_out_hi): Use SUBREG_BYTE.
	* config/d30v/d30v.c (d30v_split_double): Use subreg_regno_offset
	instead of SUBREG_WORD.
	(d30v_print_operand_memory_reference): Use subreg_regno_offset.
	* config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix
	SUBREG creation to use byte offset.
	* config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit
	inverted load insns): Fix explicit rtl subregs to use byte
	offsets.
	* config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3,
	udivsi3, umodsi3): Generate SUBREGs with byte offsets.
	* config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE.
	* config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl
	to use byte offsets.
	(unnamed fmlow.dd insn): Fixup SUBREGS to use byte offsets.
	* config/i960/i960.md (extendhisi2): Generate SUBREGs with byte
	offsets, also make sure it is congruent to SUBREG's mode size.
	(extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2,
	unnamed ldob insn): Generate SUBREGs with byte offset.
	(zero_extendqihi2): SUBREG's are byte offsets.
	* config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Use SUBREG_BYTE.
	(m68hc11_gen_highpart): Use SUBREG_BYTE.
	* config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2,
	zero-extendqisi2): Generate SUBREGs with byte offset.
	(umulsidi3, mulsidi3, subreghi1ashrdi_const32,
	subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit
	subregs in rtl to use byte offsets.
	* config/m88k/m88k.md (extendsidi2): fixup subregs to use byte offset.
	* config/mips/mips.c (mips_move_1word): Use subreg_regno_offset.
	(mips_move_2words): Use subreg_regno_offset.
	(mips_secondary_reload_class): Use subreg_regno_offset.
	* config/mips/mips.md (DImode plus, minus, move, and logical op
	splits): Fixup explicit subregs in rtl to use byte offsets.
	* config/mn10200/mn10200.c (print_operand): Use subreg_regno function.
	* config/mn10300/mn10300.c (print_operand): Use subreg_regno function.
	* config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in
	rtl to use byte offsets.
	* config/pa/pa.c (emit_move_sequence): Use SUBREG_BYTE.
	* config/pa/pa.md (floatunssisf2, floatunssidf2, mulsi3): fix explicit
	subregs to use byte offsets.
	* config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1):
	Fixup explicit subregs in rtl to use byte offsets.
	* config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE
	and remove byte endian correction code.
	* config/sh/sh.c (output_movedouble): Use subreg_regno.
	(gen_ashift_hi): Use SUBREG_BYTE.
	(regs_used): Use subreg_regno_offset.
	(machine_dependent_reorg): Use subreg_regno_offset.
	* config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE.
	* config/sh/sh.md (DImode and DFmode move splits): Use subreg_regno.
	(movdf_i4): Subregs are byte offsets now.
	* config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE.
	* config/sparc/sparc.h (ALTER_HARD_SUBREG): Removed.
	(REGMODE_NATURAL_SIZE): Override.
	(REG_SIZE): For SUBREG check float mode on SUBREG_REG's mode.
	* config/sparc/sparc.md (TFmode move splits): Generate SUBREGs
	with byte offsets.
	(zero_extendhisi2, zero_extendqidi2_insn, extendhisi2,
	extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn,
	extendqidi2): Generate SUBREGs with byte offsets, also make sure
	it is congruent to SUBREG's mode size.
	(smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte
	offsets.
	(cmp_siqi_trunc, cmp_siqi_trunc_set, cmp_diqi_trunc,
	cmp_diqi_trunc_set, lshrdi3_v8plus+1, lshrdi3_v8plus+2,
	lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper
	SUBREG_BYTE offset for non-paradoxical subregs in patterns.
	* config/v850/v850.c (print_operand, output_move_double): Use
	subreg_regno function.

Co-Authored-By: Andrew MacLeod <amacleod@redhat.com>
Co-Authored-By: David S. Miller <davem@pierdol.cobaltmicro.com>

From-SVN: r41058
2001-04-03 15:06:12 +00:00
Richard Henderson
52a11cbfcf IA-64 ABI Exception Handling.
From-SVN: r40924
2001-03-28 03:04:51 -08:00
Richard Henderson
695ee791dc rtl.h (LCT_NORETURN): New.
* rtl.h (LCT_NORETURN): New.
        * calls.c (emit_library_call_value_1): Handle it.

From-SVN: r40897
2001-03-27 19:35:05 -08:00
Richard Henderson
5e7f4a4ab9 mkconfig.sh: Include insn-flags.h.
* mkconfig.sh: Include insn-flags.h.
	* Makefile.in (CONFIG_H): Include insn-flags.h.
	(lots of objects): Remove insn-codes.h and insn-flags.h.

	* alias.c, bb-reorder.c, calls.c, do-loop.c, flow.c, haifa-sched.c,
	integrate.c, jump.c, loop.c, predict.c, profile.c, reg-stack.c,
	regmove.c, reorg.c, a29k/a29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c,
	avr/avr.c, clipper/clipper.c, convex/convex.c, d30v/d30v.c,
	dsp16xx/dsp16xx.c, fr30/fr30.c, h8300/h8300.c, i370/i370.c,
	i386/i386.c, i860/i860.c, ia64/ia64.c, m32r/m32r.c, m68hc11/m68hc11.c,
	m68k/m68k.c, m88k/m88k.c, mcore/mcore.c, mn10200/mn10200.c,
	mn10300/mn10300.c, ns32k/ns32k.c, pa/pa.c, pdp11/pdp11.c,
	pj/pj.c, romp/romp.c, rs6000/rs6000.c, sh/sh.c, sparc/sparc.c,
	v850/v850.c, vax/vax.c:
	Don't include insn-flags.h.

	* diagnostic.c, expr.h, reload.c, toplev.c:
	Don't include insn-codes.h.

	* builtins.c, combine.c, except.c, explow.c, expmed.c, expr.c,
	final.c, function.c, optabs.c, recog.c, reload1.c, stmt.c,
	c4x/c4x.c, i960/i960.c, mips/mips.c:
	Don't include insn-codes.h or insn-flags.h.

	* genemit.c, genopinit.c, genoutput.c: Don't include insn-codes.h
	or insn-flags.h in the generated code.
	* genflags.c (gen_proto): Use "struct rtx_def *" instead of "rtx".
	(main): Forward declare struct rtx_def.

From-SVN: r40754
2001-03-22 10:48:52 -08:00
Richard Henderson
bf501a6512 defaults.h (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Move from ...
* defaults.h (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Move from ...
        * calls.c: ... here.
        * combine.c, expr.c, final.c, function.c toplev.c: Don't provide
        defaults for them here.

From-SVN: r40603
2001-03-18 13:38:33 -08:00
Mark Mitchell
19e7881c81 varasm.c (assemble_alias): Use DECL_ASSEMBLER_NAME...
* varasm.c (assemble_alias): Use DECL_ASSEMBLER_NAME, not the
	contents of the RTL, to determine the name of the object.

	* tree.h (DECL_RTL): Allocate RTL lazily.
	(SET_DECL_RTL): New macro.
	(DECL_RTL_SET_P): Likewise.
	(COPY_DECL_RTL): Likewise.
	(DECL_RTL_IF_SET): Likewise.
	* varasm.c (make_decl_rtl): Add assertions about the kind of
	declaration we are processing.
	* c-decl.c (duplicate_decls): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc.
	(start_decl): Likewise.
	(finish_decl): Likewise.
	* c-semantics.c (emit_local_var): Likewise.
	* calls.c (expand_call): Likewise.
	* dbxout.c (dbxout_symbol): Likewise.
	* emit-rtl.c (unshare_all_rtl): Likewise.
	(unshare_all_decls): Likewise.
	(reset_used_decls): Likewise.
	* expr.c (store_constructor): Likewise.
	(safe_from_p): Likewise.
	(expand_expr): Likewise.
	* function.c (put_var_into_stack): Likewise.
	(instantiate_decls_1): Likewise.
	(assign_parms): Likewise.
	(expand_function_start): Likewise.
	(expand_function_end): Likewise.
	* ggc-common.c (gcc_mark_trees): Likewise.
	* integrate.c (function_cannot_inline_p): Likewise.
	(copy_decl_for_inlining): Likewise.
	(expand_inline_function): Likewise.
	(integrate_parm_decls): Likewise.
	(integrate_decl_tree): Likewise.
	* print-tree.c (print_node): Likewise.
	* reg-stack.c (stack_result): Likewise.
	* stmt.c (label_rtx): Likewise.
	(expand_return): Likewise.
	(expand_decl): Likewise.
	(expand_decl_cleanup): Likewise.
	(expand_anon_union_decl): Likewise.
	* toplev.c (check_global_declarations): Likewise.
	(rest_of_decl_compilation): Likewise.
	* tree.c (simple_cst_equal): Likewise.
	* objc/objc-act.c (generate_static_references): Likewise.

	* class.c (build_clone): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc.
	* cp-tree.h (DECL_IN_MEMORY_P): Likewise.
	* decl.c (duplicate_decls): Likewise.
	(builtin_function): Likewise.
	(build_library_fn): Likewise.
	(build_cp_library_fn): Likewise.
	(check_initializer): Likewise.
	(cp_finish_decl): Likewise.
	* decl2.c (grokfield): Likewise.
	(grok_function_init): Remove #if 0'd code.
	(finish_anon_union): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc.
	* friend.c (do_friend): Likewise.
	* init.c (get_temp_regvar): Likewise.
	* method.c (make_thunk): Likewise.
	* pt.c (tsubst_friend_function): Likewise.
	(tsubst_decl): Likewise.
	(regenerate_decl_from_template): Likewise.
	* semantics.c (genrtl_named_return_value): Likewise.
	(expand_body): Likewise.
	(genrtl_finish_function): Likewise.
	* tree.c (cp_tree_equal): Likewise.

	* com.c (ffecom_member_phase_2): Use COPY_DECL_RTL,
	DECL_RTL_SET_P, etc.
	(duplicate_decls): Likewise.
	(start_decl): Likewise.

	* class.c (build_static_field_ref): Likewise.
	(make_method_value): Likewise.
	(get_dispatch_table): Likewise.

	* decl.c (push_jvm_slot): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc.

From-SVN: r40482
2001-03-15 02:51:03 +00:00
Alexandre Oliva
4cfc604201 calls.c (emit_library_call_value_1): Memory slot for pass-by-reference argument should have the mode of the argument...
* calls.c (emit_library_call_value_1): Memory slot for
pass-by-reference argument should have the mode of the argument,
not of the pointer to it.

From-SVN: r39242
2001-01-24 19:00:58 +00:00
Alexandre Oliva
f474c6f8f9 calls.c (emit_library_call_value_1): Add USEs and CLOBBERs to function usage for arguments passed by reference.
* calls.c (emit_library_call_value_1): Add USEs and CLOBBERs
to function usage for arguments passed by reference.  Optimize
callee-copied arguments.
* regmove.c (find_related_toplev): Find uses in function usage.
(replace_in_call_usage): New function.
(fixup_match_1): Call it.
* cse.c (cse_insn): Canonicalize registers in function usage.
* reload1.c (replace_pseudos_in_call_usage): New function.
(reload): Call it.

From-SVN: r38964
2001-01-12 21:58:56 +00:00
Alexandre Oliva
97fc4caf7d calls.c (emit_library_call_value_1): Support INIT_CUMULATIVE_LIBCALL_ARGS.
* calls.c (emit_library_call_value_1): Support
INIT_CUMULATIVE_LIBCALL_ARGS.
* tm.texi (INIT_CUMULATIVE_LIBCALL_ARGS): Document it.

From-SVN: r38706
2001-01-05 07:38:47 +00:00
Richard Kenner
b367c41628 * calls.c (calls_function_1, case CONSTRUCTOR): New case.
From-SVN: r38560
2000-12-30 09:52:15 -05:00
Richard Kenner
1da68f560d alias.c (alias_sets_conflict_p): New function.
* alias.c (alias_sets_conflict_p): New function.
	(mems_in_disjoint_alias_sets_p): Use it.
	(readonly_fields_p): Moved from expr.c; check for record type.
	(objects_must_conflict_p): New function.
	* calls.c (expand_call): Use assign_temp as much as possible, use
	readonly variant if assigned once, and don't set memory attributes.
	(emit_library_call_value_1, store_one_arg): Likewise.
	* integrate.c (expand_inline_function): Likewise.
	* stmt.c (expand_asm_operands, expand_return): Likewise.
	* expr.c (copy_blkmode_from_reg, store_constructor): Likewise.
	(store_field, save_noncopied_parts, expand_expr): Likewise.
	(expand_expr_unaligned): Likewise.
	(readonly_fields_p): Moved to alias.c.
	(safe_from_p): Rework handling of SAVE_EXPR.
	MEMs ony conflict if alias sets conflict; likewise for INDIRECT_REF.
	* function.c (struct temp_slot): Delete field ALIAS_SET; add TYPE.
	(assign_stack_for_temp): Use objects_must_confict_p.
	Set all memory attributes from type, if specified.
	(mark_temp_slot): Mark TYPE field.
	* tree.h (alias_sets_conflict_p, readonly_fields_p): New decls.
	(objects_must_conflict_p): Likewise.

	* stmt.c (expand_decl): Don't use assign_stack_temp in error case.
	(add_case_node): No need to copy nodes anymore.

From-SVN: r38559
2000-12-30 08:10:51 -05:00
Alexandre Oliva
6b5273c31e calls.c (emit_library_call_value_1): Add to call_fusage the stack slot assigned to argument passed by reference.
* calls.c (emit_library_call_value_1): Add to call_fusage the
stack slot assigned to argument passed by reference.

From-SVN: r38523
2000-12-29 04:36:00 +00:00
Chandrakala Chavva
57ec470999 calls.c (store_one_arg): If parm is passed both in stack and in register and offset is greater than...
* calls.c (store_one_arg):  If parm is passed both in stack and in
        register and offset is greater than reg_parm_stack_space, split
        the offset and call emit_push_insn().

From-SVN: r38503
2000-12-27 20:51:55 -05:00
Richard Henderson
41c3953302 calls.c (expand_call): Emit queued insns before creating the tail recursion sequence.
* calls.c (expand_call): Emit queued insns before creating
        the tail recursion sequence.

	* gcc.c-torture/execute/20001130-1.c: New test.

From-SVN: r37898
2000-11-30 12:15:13 -08:00
Richard Henderson
54fef245c0 calls.c (expand_call): Defer const/pure NO_DEFER_POP until after sibcall do_pending_stack_adjust.
* calls.c (expand_call): Defer const/pure NO_DEFER_POP until
        after sibcall do_pending_stack_adjust.

From-SVN: r37836
2000-11-28 16:27:54 -08:00
Jan Hubicka
fb158467a9 calls.c (expand_call): Don't disable tail recursion based on the loop nest.
* calls.c (expand_call): Don't disable tail recursion based
        on the loop nest.

From-SVN: r37822
2000-11-28 11:34:59 -08:00
Joseph Myers
2e09e75ade calls.c (expand_call, [...]): Use memcpy () instead of bcopy ().
* calls.c (expand_call, emit_library_call_value_1), collect2.c
	(scan_prog_file), config/a29k/a29k.c (print_operand),
	config/sparc/sparc.c (order_regs_for_local_alloc): Use memcpy ()
	instead of bcopy ().
	* real.h: Use memcmp () instead of bcmp ().
	* config/m88k/m88k.c (m88k_layout_frame), config/sh/sh.c
	(split_branches), config/sparc/sparc.c (ultra_flush_pipeline,
	ultrasparc_sched_init, ultrasparc_sched_reorder),
	config/sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Use memset ()
	instead of bzero ().
	* config/vax/xm-xms.h (FILE_NAME_NONDIRECTORY): Use strrchr ()
	instead of rindex ().
	* configure.in: Don't check for bzero, bcmp, index or rindex.
	* configure, config.in: Regenerate.
	* system.h: Don't include declarations for bzero, bcmp, index or
	rindex.
	* config/i386/xm-beos.h, config/rs6000/xm-beos.h: Don't define
	bzero, bcmp, index or rindex.

java:
	* parse.y (create_new_parser_context): Use memset () instead of
	bzero ().

From-SVN: r37334
2000-11-09 07:45:15 +00:00
Joseph Myers
961192e1dd alias.c [...] (init_alias_analysis, [...]): Use memset () instead of bzero ().
* alias.c (init_alias_analysis), calls.c (expand_call,
	emit_library_call_value_1), combine.c (init_reg_last_arrays),
	cse.c (new_basic_block), dbxout.c (dbxout_type), diagnostic.c
	(init_output_buffer, set_diagnostic_context), dwarf2out.c
	(equate_decl_number_to_die, build_abbrev_table), emit-rtl.c
	(init_emit_once), fold-const.c (mul_double, div_and_round_double),
	function.c (assign_parms), gcse.c (compute_can_copy,
	alloc_gcse_mem, alloc_reg_set_mem, record_one_set,
	compute_hash_table, compute_set_hash_table,
	compute_expr_hash_table), genattrtab.c (optimize_attrs), global.c
	(global_alloc, global_conflicts), haifa-sched.c (compute_trg_info,
	clear_units, schedule_block), integrate.c (initialize_for_inline,
	expand_inline_function), jump.c (thread_jumps), local-alloc.c
	(local_alloc), loop.c (combine_movables, count_loop_regs_set,
	load_mems_and_recount_loop_regs_set), print-tree.c (debug_tree),
	regclass.c (init_reg_sets, init_reg_sets_1, regclass,
	record_reg_classes, allocate_reg_info), reload.c
	(get_secondary_mem, remove_address_replacements, find_reloads),
	reload1.c (reload, set_initial_label_offsets, finish_spills,
	reload_as_needed, choose_reload_regs_init,
	reload_cse_simplify_operands), reorg.c (dbr_schedule), sbitmap.c
	(sbitmap_zero), simplify-rtx.c (simplify_plus_minus), ssa.c
	(rename_registers), stmt.c (expand_end_case), unroll.c
	(unroll_loop), varray.c (varray_grow), objc/objc-act.c: Use memset
	() instead of bzero ().

ch:
	* actions.c (check_missing_cases), typeck.c (build_chill_slice,
	build_chill_cast): Use memset () instead of bzero ().

cp:
	* class.c (duplicate_tag_error, build_vtbl_initializer), decl.c
	(push_binding_level), error.c (cp_tree_printer), pt.c
	(process_partial_specialization, tsubst_template_arg_vector),
	search.c (lookup_member): Use memset () instead of bzero ().

java:
	* expr.c (note_instructions), jcf-io.c (find_class), jcf-parse.c
	(init_outgoing_cpool), lex.c (java_init_lex): Use memset ()
	instead of bzero ().

From-SVN: r37303
2000-11-07 22:50:06 +00:00
Alexandre Oliva
f132f529e0 calls.c (emit_call_1): Use n_popped instead of RETURN_POPS_ARGS().
* calls.c (emit_call_1) [sibcall_pop]: Use n_popped instead of
RETURN_POPS_ARGS().

From-SVN: r37242
2000-11-04 04:02:25 +00:00
Jakub Jelinek
fadb729c6d calls.c (expand_call): If sibcall_failure is set during pass 1, clear tail_call_insns as well.
* calls.c (expand_call): If sibcall_failure is set during pass 1,
	clear tail_call_insns as well.

	* g++.old-deja/g++.other/eh2.C: New test.

From-SVN: r37087
2000-10-27 21:49:53 +02:00
Richard Henderson
8eb99146fb calls.c (expand_call): Supress sibcall if we have a BLKmode return in registers.
* calls.c (expand_call): Supress sibcall if we have a
        BLKmode return in registers.

From-SVN: r37076
2000-10-26 16:15:26 -07:00
Alexandre Oliva
3e555c7de1 calls.c (combine_pending_stack_adjustment_and_call): Don't adjust stack when unadjusted_alignment ends up as zero.
* calls.c (combine_pending_stack_adjustment_and_call): Don't
adjust stack when unadjusted_alignment ends up as zero.

From-SVN: r37008
2000-10-22 19:34:05 +00:00
Richard Henderson
9a1ba437e8 calls.c (expand_call): Disallow sibcalls to noreturn functions.
* calls.c (expand_call): Disallow sibcalls to noreturn functions.
        * flow.c (make_edges): Revert last change.

        * config/alpha/alpha.h (FUNCTION_OK_FOR_SIBCALL): Don't test
        TREE_THIS_VOLATILE.
        * config/pa/pa.h (FUNCTION_OK_FOR_SIBCALL): Likewise.

From-SVN: r36781
2000-10-07 13:53:21 -07:00
Bernd Schmidt
ebb1b59ac0 Bring back equal forms for libcalls
From-SVN: r36469
2000-09-17 12:45:51 +00:00
Bernd Schmidt
188c5e6ca8 Don't make bogus libcall blocks
From-SVN: r36435
2000-09-15 16:21:53 +00:00
Richard Henderson
b437f1a754 calls.c (precompute_register_parameters): Use COSTS_N_INSNS, not 2.
* calls.c (precompute_register_parameters): Use COSTS_N_INSNS, not 2.
        * cse.c (rtx_cost): Likewise.
        * optabls.c (expand_binop): Likewise.
        (expand_twoval_binop, prepare_cmp_insn): Likewise.
        * regclass.c (copy_cost): Likewise.
        * reload1.c (reload_cse_move2add): Likewise.

From-SVN: r36423
2000-09-14 19:56:02 -07:00
Kazu Hirata
f725a3ec9b * calls.c: Fix formatting.
From-SVN: r36219
2000-09-06 19:17:00 -06:00
Jim Wilson
ca3920adb2 Eliminate false DV warnings for predicated calls to noreturn functions.
* calls.c (emit_call_1): Add REG_NORETURN note to call if ECF_NORETURN.
	* combine.c (distribute_notes): Handle REG_NORETURN.
	* rtl.c (reg_note_name): Add REG_NORETURN.
	* rtl.h (enum reg_note): Likewise.
	* config/ia64/ia64-protos.h (emit_safe_across_calls): Renamed from
	ia64_file_start.
	* config/ia64/ia64.c (emit_safe_across_calls): Likewise.
	(rtx_needs_barrier): Handle unspec_volatile 8 and 9.
	(emit_predicate_relation_info): Handle conditional calls with
	REG_NORETURN.
	* config/ia64/ia64.h (ASM_FILE_START): Call emit_safe_across_calls
	instead of ia64_file_start.
	* config/ia64/sysv4.h (ASM_FILE_START): Likewise.
	* config/ia64/ia64.md (safe_across_calls_all,
	save_across_calls_normal): New patterns.

From-SVN: r36107
2000-09-01 15:22:54 -07:00
Zack Weinberg
63ad61edae top level:
* c-common.c (declare_function_name): Use func_id_node,
	function_id_node, and pretty_function_id_node.  Do not make
	__func__ visible at file scope.
	* c-common.h (c_tree_index): Add CTI_FUNCTION_ID,
	CTI_PRETTY_FUNCTION_ID, and CTI_FUNC_ID.
	(function_id_node, pretty_function_id_node, func_id_node): New
	macros.
	* c-decl.c (init_decl_processing): Initialize function_id_node,
	pretty_function_id_node, and func_id_node.
	(c_make_fname_decl): Correct comment.

	* tree.h (struct tree_identifier): Constify pointer member.

	* c-decl.c (pushdecl, implicit_decl_warning): Constify a char *.
	* c-pragma.h (struct weak_syms): Constify name and value members.
	(add_weak): Constify arguments.

	* calls.c (special_function_p): Constify a char *.
	(expand_call): Remove variable which is initialized and then
	never used.
	* dependence.c (struct def_use, struct induction, struct subscript):
	Constify 'variable' member.
	(get_low_bound, have_induction_variable): Constify char * argument.
	(find_induction_variable): Add braces to avoid dangling else.
	(classify_dependence): Constify char * arrays.
	* profile.c (output_func_start_profiler): Constify a char *.
	* stor-layout.c (finalize_record_size): Constify a char *.
	* tree.c (is_attribute_p): Constify a char *.
	* varasm.c (add_weak, remove_from_pending_weak_list): Constify argument.

	* varasm.c (make_function_rtl, make_decl_rtl): Rearrange code
	for comprehensibility.  Do not call get_identifier if we did
	not change the DECL_ASSEMBLER_NAME of the decl.  Use alloca to
	create temporary string constants, not ggc_alloc_string.  No
	need to copy result of ASM_FORMAT_PRIVATE_NAME.  Use const
	char * to hold IDENTIFIER_POINTERs.
ch:
	* inout.c (add_enum_to_list): Use DECL_NAME directly, don't get
	its IDENTIFIER_POINTER and immediately call get_identifier on it.
	* lex.c (yywrap): Constify a char *.
cp:
	* class.c (build_secondary_vtable): Constify a char *.
	* decl.c (init_decl_processing): Initialize function_id_node,
	pretty_function_id_node, and func_id_node.
	* input.c (struct input_source): Constify 'str'.
	(feed_input): Constify first argument.
	* mangle.c (write_identifier): Constify argument.
	* pt.c (mangle_class_name_for_template): Constify argument.
f:
	* ansify.c: Use #line, not # <number>.
java:
	* jcf-parse.c (set_source_filename): Constify a char *.
	* jcf-write.c (append_innerclasses_attribute,
	make_class_file_name): Constify a char *.  Don't recycle a
	variable for an unrelated purpose.
	* parse.y: (build_alias_initializer_parameter_list): Constify a char *.
	(breakdown_qualified): Do not modify IDENTIFIER_POINTER strings.

From-SVN: r36055
2000-08-29 21:39:49 +00:00
Mark Mitchell
4361b41d83 calls.c (expand_call): Don't create a VAR_DECL just to throw it away.
* calls.c (expand_call): Don't create a VAR_DECL just to throw it
	away.
	* expr.c (expand_expr, case TARGET_EXPR): Don't call
	mark_addressable.
	* tree.h (get_file_function_name): Remove two duplicate
	declarations.

	* typeck.c (mark_addressable): Remove code that pokes around in
	RTL.

From-SVN: r36038
2000-08-29 16:23:20 +00:00
Alexandre Oliva
d60eab50e1 calls.c (check_sibcall_argument_overlap_1): Adjust for ARGS_GROW_DOWNWARD.
* calls.c (check_sibcall_argument_overlap_1): Adjust for
        ARGS_GROW_DOWNWARD.
        (check_sibcall_argument_overlap): Likewise.

From-SVN: r35887
2000-08-22 13:30:49 -06:00
Richard Kenner
43db0363f1 calls.c (calls_function_1, [...]): Only test TYPE_RETURNS_STACK_DEPRESSED for FUNCTION_TYPE.
* calls.c (calls_function_1, expand_call): Only test
	TYPE_RETURNS_STACK_DEPRESSED for FUNCTION_TYPE.
	* function.c (thread_prologue_and_epilogue_insns): Likewise.

From-SVN: r35743
2000-08-16 07:59:03 -04:00
Richard Kenner
7393c6422b calls.c (ECF_SP_DEPRESSED): New macro.
* calls.c (ECF_SP_DEPRESSED): New macro.
	(calls_function_1): Treat calling sp-depressed function as alloca.
	(emit_call_1): Don't adjust SP if calling sp-depressed function.
	(expand_call): Set ECF_SP_DEPRESSED if TYPE_RETURNS_STACK_DEPRESSED.
	If sp-depressed, ensure block saves and restores SP.
	* fold-const.c (extract_muldiv): Only check TYPE_IS_SIZETYPE
	for INTEGER_TYPE.
	* function.c (keep_stack_depressed): New function.
	(thread_prologue_and_epilogue_insns): Call it.
	* print-tree.c (print_node): Use HOST_WIDE_INT_PRINT_UNSIGNED
	to print DECL_OFFSET_ALIGN.
	Print no-force-blk and transparent-union flags properly.
	* stmt.c (expand_goto_internal): Don't restore stack if last block
	and function returns with sp depressed.
	(fixup_gotos): Likewise.
	(save_stack_pointer): New function, from code in expand_decl.
	(expand_decl): Call new function.
	* tree.h (TYPE_IS_SIZETYPE): Call INTEGER_TYPE_CHECK.
	(TYPE_RETURNS_STACK_DEPRESSED): New macro.
	(save_stack_pointer): New declaration.

From-SVN: r35734
2000-08-15 21:15:37 -04:00
Herman A.J. ten Brugge
e079dcdb68 calls.c (combine_pending_stack_adjustment_and_call): Only use preferred_unit_stack_boundary when it is > 1.
* calls.c (combine_pending_stack_adjustment_and_call): Only use
        preferred_unit_stack_boundary when it is > 1.

From-SVN: r35381
2000-07-31 08:04:41 -06:00
Jakub Jelinek
4c6b3b2af0 calls.c (store_arg): Return non-zero if sibcall_failure is desired.
* calls.c (store_arg): Return non-zero if sibcall_failure is
	desired.
	(expand_call): Adjust caller.
	* gcc.c-torture/execute/20000717-5.c: New test.
	* gcc.c-torture/execute/20000717-1.x: Removed.

From-SVN: r35117
2000-07-18 10:54:33 +02:00
Jakub Jelinek
c67846f282 calls.c (stored_args_map): New variable.
* calls.c (stored_args_map): New variable.
	(check_sibcall_argument_overlap_1): New.
	(check_sibcall_argument_overlap): New.
	(expand_call): Initialize stored_args_map.
	Call check_sibcall_argument_overlap.

	* gcc.c-torture/execute/20000707-1.c: New test.

From-SVN: r35017
2000-07-13 20:19:27 +02:00
Clinton Popetz
d4c683762a * calls.c (emit_library_call_value_1): Revert previous change.
From-SVN: r34861
2000-07-03 22:30:22 -04:00
Clinton Popetz
73003b2faf calls.c (emit_library_call_value_1): Use valreg instead of hard_libcall_value.
* calls.c (emit_library_call_value_1): Use valreg instead
	of hard_libcall_value.

From-SVN: r34854
2000-07-03 18:06:20 -04:00
Jakub Jelinek
7ab923ccff calls.c (compute_argument_addresses): Force stack slots into alias set 0.
* calls.c (compute_argument_addresses): Force stack slots into
	alias set 0.
	* expr.c (emit_push_insn): Force pushes into alias set 0.

From-SVN: r34662
2000-06-23 12:03:42 +02:00
Kaveh R. Ghazi
5ac9118ef9 Warning fixes:
* bb-reorder.c (build_scope_forest): Initialize variable
	`curr_scope'.

	* calls.c (expand_call): Likewise for variables
	`save_pending_stack_adjust' and `save_stack_pointer_delta'.

	* i386.c (function_arg_advance, function_arg): Cast to avoid
	signed/unsigned warnings.

	* i386.h (MEMORY_MOVE_COST): Likewise.

	* ifcvt.c (cond_exec_process_if_block): Initialize variables
	`else_start' and `else_end'.

	* libgcc2.h (__eh_alloc, __eh_free): Prototype.

	* regrename.c (rr_replace_reg): Initialize variable `dest_subregno'.

ch:
	* Makefile.in (EXPR_H): New dependency variable.
	(actions.o, expr.o): Use EXPR_H.
	(lang.o): Depend on RTL_H and EXPR_H.

	* lang.c: Include rtl.h and expr.h.
	(lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED.

cp:
	* decl2.c (compare_options): Don't needlessly cast away const-ness.

f:
	* com.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED.

java:
	* decl.c (create_primitive_vtable): Prototype.

	* jcf-write.c (generate_bytecode_insns): Initialize variable
	`saved_context'.

	* lang.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED.

From-SVN: r34490
2000-06-11 04:29:49 +00:00
Jason Merrill
ea11ca7ec1 timevar.def: Add TV_EXPAND.
* timevar.def: Add TV_EXPAND.
        * timevar.c (timevar_print): Update timing information.
        * calls.c (try_to_integrate): Push to TV_INTEGRATION for inlining.

        * stmt.c (expand_return): Check for error_mark_node.

cp/:
        * semantics.c (expand_body): Push to TV_EXPAND.
        * optimize.c (optimize_function): Push to TV_INTEGRATION.
        * decl.c (start_function): Always call announce_function.

        * tinfo2.cc: Just declare abort.

From-SVN: r34470
2000-06-09 12:23:47 -04:00
Richard Kenner
2bf105ab5b alias.c (struct alias_set_entry): New field has_zero_child.
* alias.c (struct alias_set_entry): New field has_zero_child.
	(mem_in_disjoint_alias_sets_p): Return 0 if set in either ase.
	(get_alias_set): If language-dependent routine set TYPE_ALIAS_SET,
	do nothing.
	Call record_component_aliases for aggregate types.
	(record_alias_subset): Set has_zero_child.
	(record_component_aliases, case ARRAY_TYPE): Do nothing if
	TYPE_NONALIASES_COMPONENT.
	(record_component_aliases, case RECORD_TYPE): Test
	DECL_NONADDRESSABLE_P.
	* c-decl.c (grokdeclarator): Set DECL_NONADDRESSABLE_P instead
	of TREE_ADDRESSABLE.
	* calls.c (initialize_argument_information): Only test
	TYPE_TRANSPARENT_UNION for UNION_TYPE.
	* function.c (assign_parms): Likewise.
	* integrate.c (function_cannot_inline_p): Likewise.
	* stor-layout.c (finish_record_layout): Don't call
	record_component_aliases.
	* tree.h (struct tree_int_cst): Use struct tree_common.
	(struct tree_real_cst, struct tree_string): Likewise.
	(struct tree_complex, struct tree_identifier): Likewise.
	(struct tree_list, struct tree_vec, struct tree_exp): Likewise.
	(struct tree_block, struct tree_type, struct tree_decl): Likewise.
	(TYPE_TRANSPARENT_UNION): Use UNION_TYPE_CHECK.
	(TYPE_NONALIASES_COMPONENT): New macro.
	(TYPE_AMBIENT_BOUNDEDNESS): Use FUNCTION_TYPE_CHECK.
	(DECL_NONADDRESSABLE_P): New macro.
	(struct tree_decl): Reorder bits for clarity of how many left;
	add non_adressable.
	* cp/cp-tree.h: Use struct tree_common instead of a char array.
	* cp/decl.c (grokdeclarator): Set DECL_NONADDRESSABLE_P instead
	of TREE_ADDRESSABLE.

From-SVN: r34373
2000-06-02 21:57:46 -04:00
Richard Kenner
3bdf5ad138 Makefile.in (c-decl.o): Depend on rtl.h and expr.h.
* Makefile.in (c-decl.o): Depend on rtl.h and expr.h.
	* alias.c (struct alias_entry): alias_set is HOST_WIDE_INT.
	(REG_BASE_VALUE): Remove unneeded cast to unsigned.
	(get_alias_set_entry): ALIAS_SET arg is HOST_WIDE_INT.
	(find_base_decl): New function, from c_find_base_decl in c-common.c.
	(new_alias_set): Moved from tree.c; return is HOST_WIDE_INT.
	(get_alias_set): Likewise.
	Major rework to do more things and allow language-specific code
	to just handle special-cases.
	(record_alias_subset): Args are HOST_WIDE_INT.
	(record_component_alias): Local vars are HOST_WIDE_INT.
	Don't handle COMPLEX_EXPR.
	(get_varargs_alias_set): Moved from builtins.c.
	(get_frame_alias_set): New function.
	* builtins.c (expand_builtin_return_address): Use frame alias set.
	(expand_builtin_setjmp, expand_builtin_longjmp): Use alias set
	for setjmp buffer.
	(get_memory_rtx): Rework to use set_mem_attributes.
	(get_varargs_alias_set): Deleted from here.
	* c-common.c (c_apply_type_quals_to_decl): Alias sets now HOST_WIDE_INT.
	(c_find_base_decl): Deleted from here.
	(c_get_alias_set): Remove many cases and rework to just handle
	C-specific cases.
	* c-common.h (c_get_alias_set): Returns HOST_WIDE_INT.
	* c-decl.c (rtl.h, expr.h): Now included.
	(init_decl_processing): Call record_component_aliases on array types.
	(grokdeclarator): Likewise.
	Set TREE_ADDRESSABLE for all fields that are not bitfields.
	* c-typeck.c (common_type): Call record_component_aliases for array.
	* caller-save.c (setup_save_areas): Rework register loop for unsigned.
	Set all save areas to the frame alias set.
	* calls.c (initialie_argument_information): Call set_mem_attributes.
	(compute_argument_addresses, expand_call): Likewise.
	* explow.c (set_mem_attributes): New function.
	(stabilize): Use MEM_COPY_ATTRIBUTES and force_reg.
	* expr.c (struct move_by_pieces): Remove {to,from}_{struct,readonly}.
	LEN and OFFSET now HOST_WIDE_INT.
	(clear_by_pieces): Similar changes.
	(move_by_pieces): LEN now HOST_WIDE_INT; don't set deleted fields.
	(move_by_pieces_ninsns): Now returns unsigned HOST_WIDE_INT.
	(move_by_pieces_1): Don't use deleted fields, use MEM_COPY_ATTRIBUTES.
	(clear_by_pieces_1): Likewise.
	(emit_push_insn): Call set_mem_attributes.
	(expand_expr, case INDIRECT_REF): Likewise.
	(expand_expr, case VAR_DECL): Call change_address.
	* expr.h (ADD_PARM_SIZE, SUB_PARM_SIZE): Use host_integerp and
	tree_low_cst.
	(get_varargs_alias_set, get_frame_alias_set): New decls.
	(record_base_value, record_alias_subset, lang_get_alias_set): Likewise.
	(new_alias_set, set_mem_attributes): Likewse.
	* function.c (struct temp_slot): ALIAS_SET is HOST_WIDE_INT.
	(assign_stack_temp_for_type): Likewise.
	Can split slot even if alias set since can copy.
	Set MEM_ALIAS_SET and MEM_SET_IN_STRUCT_P.
	(assign_temp): Use host_integerp and tree_low_cst.
	(put_var_into_stack): Properly handle SAVE_EXPR.
	(put_addressof_into_stack): Likewise.
	(assign_parms): Call set_mem_attributes.
	Delete #if 0 code.
	(fix_lexical_address): Put reference to chain into frame alias set.
	(expand_function_start): Call set_mem_attributes.
	* integrate.c (expand_inline_function): Likewise.
	* recog.c (adj_offsettable_operand): Use MEM_COPY_ATTRIBUTES.
	* regmove.c (try_apply_stack_adjustment): Likewise.
	* reload.c (push_reload, make_memloc): Likewise.
	* reload1.c (alter_reg): Make alias sets for spilled pseudos.
	* rtl.def (MEM): Update comment.
	* rtl.h (MEM_ALIAS_SET): Now uses XCWINT.
	(move_by_pieces): Change length to HOST_WIDE_INT.
	(record_base_value, record_alias_subset): Delete from here.
	* stmt.c (expand_decl): Call set_mem_attributes.
	* stor-layout.c (finish_record_layout): Call record_component_aliases.i
	* toplev.c (compile_file): Call init_alias_once earlier.
	* tree.c (lang_get_alias_set, get_alias_set, new_alias_set): Deleted
	from here: now in alias.c.
	* tree.h (struct tree_type): alias_set is HOST_WIDE_INT.
	(struct tree_decl): Likewise.
	(get_alias_set, new_alias_set, lang_get_alias_set): Deleted from here.
	* varasm.c (make_function_rtl, make_decl_rtl): Call set_mem_attributes.
	(output_constant_def, force_const_mem): Likewise.
	* cp/Makefile.in (decl.o): Include ../expr.h.
	* cp/decl.c (expr.h): Include.
	(init_decl_processing): Call record_component_aliases for arrays.
	(grokdeclarator): Likewise.
	Set TREE_ADDRESSABLE for fields that aren't bitfields.
	* cp/tree.c (build_cplus_array_type_1): Call record_component_aliases.

From-SVN: r34305
2000-05-31 14:37:31 -04:00
Zack Weinberg
f45c9d956f configure.in (stage1_warn_cflags): Add -Wstrict-prototypes -Wmissing-prototypes.
* configure.in (stage1_warn_cflags): Add -Wstrict-prototypes
	-Wmissing-prototypes.
	* configure: Regenerate.
	* gcc.texi: Remove explanation of MD_CALL_PROTOTYPES.

	* builtins.c, calls.c: Change all instances of gen_call_* or
	gen_sibcall_* to GEN_CALL_* and GEN_SIBCALL_*.
	* calls.c (struct_value_size_rtx): Separate definition from
	initialization to avoid unused variable warning.

	* genflags.c (gen_macro): New function.
	(gen_proto): Call it for gen_call_* and gen_sibcall_*.
	(gen_nonproto): Delete.
	(gen_insn): Put all insns on the same obstack.
	(main): Generate prototypes for everything unconditionally.

From-SVN: r34213
2000-05-27 22:34:05 +00:00
Richard Kenner
8d5e6e2527 tree.h (TREE_CODE_LENGTH): New macro.
* tree.h (TREE_CODE_LENGTH): New macro.
	* c-common.c (c_find_base_decl): Use it.
	* expr.c (safe_from_p): Likewise.
	* print-tree.c (print_node): Likewise.
	* tree.c (make_node, copy_node, get_identifier): Likewie.
	(first_rtl_op, contains_placeholder_p, substitute_in_expr): Likewise.
	(build, build_nt, build_parse_node, simple_cst_equal): Likewise.
	* fold-const.c (make_range): Likewise.
	(fold): Likewise; also use first_rtl_op.
	* c-iterate.c (collect_iterators): Use first_rtl_op.
	* calls.c (calls_function_1): Likewise; also rename TYPE to CLASS.
	Use IS_EXPR_CODE_CLASS.
	(preexpand_calls): Likewise.
	* ggc-common.c (ggc_mark_trees): Rework to use first_rtl_op
	and TREE_CODE_LENGTH.
	* stmt.c (warn_if_unused_value): If no operands, no unused value.
	* ch/lang.c (deep_const_expr): Use first_rtl_op.
	* ch/satisfy.c (satisfy): Use TREE_CODE_LENGTH.
	* cp/method.c (mangle_expression): Use TREE_CODE_LENGTH.
	* cp/tree.c (break_out_calls, build_min_nt): Use TREE_CODE_LENGTH.
	(built_min, cp_tree_equal): Likewise.

From-SVN: r34203
2000-05-27 11:21:17 -04:00
Mark Mitchell
f5e846c84c calls.c (expand_call): Handle cleanups in tail-recursion arguments analagously to cleanups in sibling...
* calls.c (expand_call): Handle cleanups in tail-recursion
	arguments analagously to cleanups in sibling calls.

From-SVN: r34143
2000-05-24 21:43:42 +00:00
Jan Hubicka
099e9712f1 calls.c: Re-install both patches reverted by last patch.
* calls.c: Re-install both patches reverted by last patch.
	(struct arg_data): New field tail_call_reg.
	(initialize_argument_information): Initialize tail_call_reg
	(load_register_parameters): New argument flags, use
	tail_call_reg when emiting tail call sequence.
	(expand_call): Update call of load_register_parameters;
	copy unadjusted_args_size to adjusted_args_size.

From-SVN: r33913
2000-05-15 19:12:54 +00:00
Jakub Jelinek
b8d254e64d calls.c (expand_call): Move expand_start_target_temps call after start_sequence().
* calls.c (expand_call): Move expand_start_target_temps call after
	start_sequence().

From-SVN: r33911
2000-05-15 18:58:37 +02:00
Richard Henderson
497eb8c3c7 * calls.c: Revert both 05-09 patches.
From-SVN: r33868
2000-05-11 19:41:35 -07:00
Richard Henderson
840e7b5148 calls.c (expand_call): Increment currently_expanding_call before calling optimize_tail_recursion.
* calls.c (expand_call): Increment currently_expanding_call
        before calling optimize_tail_recursion.

From-SVN: r33813
2000-05-09 19:53:43 -07:00
Jan Hubicka
4d393a0b06 calls.c (expand_call): Reorganize somewhat in order to avoid unnecesary recalculation inside loop and...
* calls.c (expand_call): Reorganize somewhat in order
	to avoid unnecesary recalculation inside loop and make
	tail call failure code cleaner.

From-SVN: r33798
2000-05-09 14:33:41 +00:00
Richard Kenner
d9a7d592ed Add missing blank
From-SVN: r33628
2000-05-03 09:17:29 -04:00
Richard Henderson
8be9eb00e5 * calls.c (expand_call): Don't emit reg notes for a sibcall.
From-SVN: r33596
2000-05-01 16:59:00 -07:00
Jan Hubicka
0c4c16df3e calls.c (calls_function_1): Propertly handle TREE_LIST expressions; use special_function_p to detect alloca.
* calls.c (calls_function_1):  Propertly handle TREE_LIST expressions;
	use special_function_p to detect alloca.

From-SVN: r33528
2000-04-28 23:17:41 +00:00
Richard Henderson
ce48579b9a calls.c (combine_pending_stack_adjustment_and_call): Return the adjustment; don't do the stack adjust.
* calls.c (combine_pending_stack_adjustment_and_call): Return the
        adjustment; don't do the stack adjust.
        (expand_call): Call compute_argument_block_size right before
        allocating the block; update comment; don't do alignment sanity
        checking for sibling call; use args_size instead of
        unadjusted_args_size before args_size is adjusted.  Use
        combine_pending_stack_adjustment_and_call to compute stack adjust
        for must_preallocate case.

        * expr.c (push_block): Remove shadow `temp' in inner scope.

Co-Authored-By: Jan Hubicka <jh@suse.cz>

From-SVN: r33516
2000-04-28 11:25:23 -07:00
Mark Mitchell
739fb04929 calls.c (combine_pending_stack_adjustment_and_call): New function.
* calls.c (combine_pending_stack_adjustment_and_call): New function.
	(expand_call): Use it.

From-SVN: r33491
2000-04-27 16:44:23 +00:00
Richard Henderson
e2ee991277 calls.c (expand_call): Disable tail call generation once rtx_equal_function_value_matters is false.
* calls.c (expand_call): Disable tail call generation once
        rtx_equal_function_value_matters is false.

        * reg-stack.c (convert_regs_1): Treat EDGE_ABNORMAL_CALL edges
        like EDGE_EH edges.

From-SVN: r33431
2000-04-25 17:43:09 -07:00
Jason Merrill
39b0dce71c calls.c (expand_call): Use get_callee_fndecl.
* calls.c (expand_call): Use get_callee_fndecl.

        * print-tree.c (print_node): Print the chain of an _EXPR.

From-SVN: r33426
2000-04-25 19:31:50 -04:00
Jan Hubicka
f8a097cd17 calls.c (expand_call): Avoid unnecesary precalculation and outgoing parameters space guarding for...
* calls.c (expand_call): Avoid unnecesary precalculation
	and outgoing parameters space guarding for sibling calls.
	(store_one_arg): Likewise.

From-SVN: r33280
2000-04-20 12:20:38 +00:00
Jan Hubicka
40d6e95668 calls.c (precompute_arguments): Remove must_preallocate and args_size calls.
* calls.c (precompute_arguments): Remove must_preallocate and
	args_size calls.
	(expand_call): Update call of precompute_arguments.

From-SVN: r33258
2000-04-19 14:41:03 +00:00
Jan Hubicka
2a8f6b90c1 alias.c (nonlocal_reference_p): Take a care for CALL_INSNS's fusage field.
* alias.c (nonlocal_reference_p): Take a care for
	CALL_INSNS's fusage field.
	* calls.c (ECF_PURE): New flag.
	(emit_call_1): Handle ECF_PURE calls.
	(initialize_argument_information): Unset ECF_PURE flag too.
	(precompute_arguments): Precompute for ECF_PURE too.
	(expand_call): Handle ECF_PURE calls too.
	(emit_library_call_value_1): Rename no_queue argument to
	fn_type, accept value of 2 as pure function.
	(emit_library_call_value, emit_library_call): Rename no_queue argument
	to fn_type.
	* optabs.c (prepare_cmp_insn): Pass fn_type 2 to memcmp call.

	* tree.h (DECL_IS_PURE): New macro.
	(struct tree_decl): Add pure_flag.
	* c-common.c (enum attrs): Add attribute "pure".
	(init_attributes): Initialize attribute "pure"
	(decl_attributes): Handle attribute "pure".
	* extend.texi (Attribute "pure"): Document.
	* calls.c (expand_call): Add (mem:BLK (scratch)) to "equal from"
	in pure function.
	(flags_from_decl_or_type): Support attribute "pure".

From-SVN: r33138
2000-04-13 13:59:00 +00:00
Jan Hubicka
5591ee6fee (expand_call): Do not reverse args in "equal from" field.
(emit_library_call_value_1): Emit_libcall_block for const and pure
	function.

From-SVN: r33109
2000-04-12 15:23:02 +00:00
Jan Hubicka
ebcd0b57fa calls.c (expand_call): Do NO_DEFER_POP unconditionally once stack is propertly aligned...
* calls.c (expand_call): Do NO_DEFER_POP unconditionally once
	stack is propertly aligned; add sanity checking for aligned
	stack pointer.
	(expand_library_call_value_1): Add sanity checking for aligned
	stack pointer.

From-SVN: r33106
2000-04-12 13:56:19 +00:00
Catherine Moore
a4d5044f41 calls.c (emit_library_call_value_1): Change 3rd arg to locate_and_pad_parm to disregard the setting of partial.
Wed Apr 12 07:51:54 2000  Catherine Moore  <clm@cygnus.com>

        * calls.c (emit_library_call_value_1): Change 3rd arg to
        locate_and_pad_parm to disregard the setting of partial.

From-SVN: r33105
2000-04-12 09:26:40 -04:00
Richard Kenner
cc2a3e631d Minor whitespace change
From-SVN: r33101
2000-04-12 08:30:38 -04:00
Jason Merrill
1c81f9fe75 * calls.c (expand_call): emit_queue if we're trying a sibcall.
From-SVN: r33006
2000-04-07 13:44:14 -04:00
Kaveh R. Ghazi
3ccb603d24 * calls.c (initialize_argument_information): Fix typo in last change.
From-SVN: r32920
2000-04-05 01:52:54 +00:00
Richard Henderson
7657ad0a8f * calls.c (try_to_integrate): Initialize reg_parm_stack_space.
From-SVN: r32917
2000-04-04 18:06:14 -07:00
Jan Hubicka
f2d33f1321 calls.c (ECF_MALLOC, [...]): New constants.
* calls.c (ECF_MALLOC, ECF_MAY_BE_ALLOCA, ECF_RETURNS_TWICE,
	 ECF_LONGJMP, ECF_FORK_OR_EXEC):  New constants.
	(ECF_IS_CONST): Rename to ECF_CONST.
	(special_function_p): Make static, change interface.
	(flags_from_decl_or_type, try_to_integrate): Break out from ...
	(expand_call) ... here; convert number of variables to flags.
	(emit_library_call_vlue_1): Likewise.
	(setjmp_call_p): New function.
	(initialize_argument_information): Accepts flags as argument;
	return flags.
	(precompute_arguments): Likewise.
	* tree.h (special_function_p): Remove.
	(setjmp_call_p): Add prototype.

From-SVN: r32904
2000-04-04 17:19:30 +00:00
Jan Hubicka
1503a7ecd5 builtins.c (expand_builtin_apply): Pass proper parameters to allocate_dynamic_stack_space.
* builtins.c  (expand_builtin_apply):  Pass proper parameters to
	allocate_dynamic_stack_space.
	* calls.c (emit_call_1):  Do not adjust stack pointer for SIB,
	update stack_pointer_delta; do not update arg_size_so_far.
	(compute_argument_block_size): Use stack_delta instead of
	stack_pointer_pending and arg_size_so_far.
	(expand_call): Add sanity checking for stack_pointer_delta;
	save and restore stack_pointer_delta for SIB, use
	stack_pointer_delta for alignment; do not update arg_space_so_far.
	(emit_library_call_value): Use stack_pointer_delta for alignment.
	(store_one_arg): Do not update arg_space_so_far.
	* explow.c (adjust_stack, anti_adjust_stack): Update
	stack_pointer_delta.
	(allocate_dynamic_stack_space): Add sanity checking for
	stack_pointer_delta.
	* expr.c (init_expr, clear_pending_stack_adjust): Clear
	stack_pointer_delta.
	(emit_push_insn): Update stack_pointer_delta.
	* function.h (struct expr_status): Add x_stack_pointer_delta;
	remove x_arg_space_so_far.
	(arg_space_so_far): Remove.
	(stack_pointer_delta): New macro.

From-SVN: r32851
2000-04-01 00:09:22 +00:00
Richard Kenner
bdb429a5a1 calls.c (expand_call): Pass bit alignment to mark_reg_pointer.
* calls.c (expand_call): Pass bit alignment to mark_reg_pointer.
	* explow.c (memory_address, allocate_dynamic_stack_space): Likewise.
	* function.c (assign_parms): Likewise.
	* integrate.c (expand_inline_function): Likewise.
	* stmt.c (expand_decl): Likewise.
	(copy_rtx_and_substitute): Likewise.
	* expr.c (expand_expr, expand_expr_unaligned): Likewise.
 	(clear_by_pieces): Fix error in last change.
	* emit-rtl.c (init_emit): Set known registers alignment in bits.
	* function.h (regno_pointer_align): Now unsigned.
	* config/arm/arm.c (alignable_memory_operand): REGNO_POINTER_ALIGN
	is in bits.
	* config/i386/i386.c (aligned_operand): Likewise.
	* config/sparc/sparc.c (mem_min_alignment): Likewise.
	* config/alpha/alpha.c (aligned_memory_operand): Likewise.
	(unaligned_memory_operand): Likewise.
	(alpha_expand_block_move, alpha_expand_block_clear): Likewise.
	Also make alignments and sizes unsigned and some whitespace cleanup.
	(alpha_va_start): Do nothing if VALIST's type is error_mark_node.

From-SVN: r32829
2000-03-30 08:46:05 -05:00
Richard Kenner
19caa751a8 builtins.c (get_pointer_alignment): Use host_integerp & tree_low_cst.
* builtins.c (get_pointer_alignment): Use host_integerp & tree_low_cst.
	(expand_builtin_apply): Pass alignment to emit_block_move in bits.
	(expand_builtin_memcpy, expand_builtin_va_copy): Likewise.
	(expand_builtin_memset): Likewise, but to clear_storage.
	* calls.c (save_fixed_argument_area): Likewise, to move_by_pieces.
	(restore_fixed_argument_area): Likewise.
	(store_unaligned_arguments_into_pseudos): Likewise, to store_bit_field.
	(load_register_parameters): Likewise, to emit_group_load.
	(expand_call): Likewise, to emit_group_store and emit_block_move.
	(emit_library_call_value_1): Likewise, to emit_block_move.
	(store_one_arg): Likewise, and to emit_push_insn.
	* expmed.c (extract_bit_field): Alignment is in bits, not bytes.
	(extract_fixed_bit_field, extract_split_bit_field): Likewise.
	* expr.c (move_by_pieces, move_by_pieces_ninsns): Likewise.
	(emit_block_move, emit_group_load, emit_group_store): Likewise.
	(clear_by_pieces, clear_storage, emit_push_insn): Likewise.
	(expand_assigment, store_expr, store_constructor_field): Likewise.
	(expand_expr_unaligned, do_jump, do_compare_and_jump): Likewise.
	(store_constructor, store_field, get_inner_reference): Likewise.
	Use host_integerp and tree_low_cst; sizes and positions HOST_WIDE_INT.
	(expand_expr, case COMPONENT_REF): Likewise.
	(copy_blkmode_from_regs): Use UNSIGNED_HOST_WIDE_INT for sizes
	and positions; reindent code.
	* expr.h (emit_cmp_insn, emit_cmp_and_jump_insns): Alignment unsigned.
	* function.c (purge_addressof_1): Pass bit align to store_bit_field.
	(assign_parms): Likewise to emit_group_store.
	* optbas.c (prepare_cmp_insn): Alignment is in bits.
	(emit_cmp_and_jump_insns, emit_cmp_insn): Likewise, and also unsigned.
	* stmt.c (expand_value_return): Pass align in bits to emit_group_load.
	(expand_return): Likewise to {extract,store}_bit_field.
	* stor-layout.c (get_mode_alignment): Minor cleanup.
	* config/rs6000/rs6000.h (SLOW_UNALIGNED_ACCESS): Align is in bits.
	* config/sh/sh.h (MOVE_BY_PIECES_P): Likewise.
	* ch/expr.c (chill_expand_expr): Pass bit alignment to emit_block_move.

From-SVN: r32827
2000-03-30 06:47:08 -05:00
Jeffrey A Law
1dfb49b94a * calls.c (expand_call): Fix typo.
From-SVN: r32819
2000-03-29 15:46:03 -07:00
Jason Merrill
6ab1432e57 add ATTRIBUTE_UNUSED
From-SVN: r32817
2000-03-29 15:56:14 -05:00
Jan Hubicka
f73ad30e01 Convert ACCUMULATE_OUTGOING_ARGS to an expression.
* calls.c (PUSH_ARGS_REVERSED) Change to expression.
	(ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Provide default value.
	(struct arg_data): Remove #ifdef ACCUMULATE_OUTGOING_ARGS.
	(save_fixed_argument_area, restore_fixed_argument_area):
	conditionize by #ifdef REG_PARM_STACK_SPACE only.
	(emit_call): Change #ifdefs on ACCUMULATE_OUTGOING_ARGS
	to conditions, handle RETURN_POPS_ARGS on ACCUMULATE_OUTGOING_ARGS.
	(precompute_register_parameters): Avoid #ifdefs on
	ACCUMULATE_OUTGOING_ARGS and PUSH_ARGS_REVERSED.
	(stire_one_args): Likewise.
	(expand_call): Likewise; conditionize PUSH_ROUNDING code by PUSH_ARGS.
	(emit_library_call_value_1): Likewise.
	(compute_argument_block_size): Align to STACK_BOUNDARY only for
	ACCUMULATE_OUTGOING_ARGS.
	* combine.c (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Provide default
	value.
	(nonzero_bits): Conditionize PUSH_ROUNDING code by USE_PUSH.
	(use_crosses_set_p): Likewise.
	* all targets (ACCUMULATE_OUTGOING_ARGS define): Change to
	#define ACCUMULATE_OUTGOING_ARGS 1.
	* i386.c (ix86_compute_frame_size): Handle ACCUMULATE_OUTGOING_ARGS
	frames.
	* i386.h (MASK_NO_PUSH_ARGS, MASK_ACCUMULATE_OUTGOING_ARGS): New
	constants.
	(TARGET_PUSH_ARGS, TARGET_ACCUMULATE_OUTGOING_ARGS): New macros.
	(TARGET_SWITCHES): Add push-args, no-push-args,
	accumulate-outgoing-args and no-accumulate-outgoing-args.
	(ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): New macro.
	* expr.c (ACCUMULATE_OUTGONG_ARGS, PUSH_ARGS): Provide default.
	(push_block): Avoid ifdefs on ACCUMULATE_OUTGONG_ARGS
	and PUSH_ROUNDING.
	(emit_push_insn): Likewise.
	* final.c (ACCUMULATE_OUTGOING_ARGS): Provide default.
	(final_scan_insn): Avoid ifdefs on ACCUMULATE_OUTGOING_ARGS.
	* function.c (ACCUMULATE_OUTGOING_ARGS): Provide default.
	(STACK_DYNAMIC_OFFSET): Define correctly for both
	ACCUMULATE_OUTGOING_ARGS and normal mode.
	* invoke.texi (-mpush_args, -maccumulate-outgoing-args): Document.
	* tm.texi (PUSH_ARGS): Document.
	(ACCUMULATE_OUTGOING_ARGS, PUSH_ROUNDING): Update documentation.

From-SVN: r32803
2000-03-29 13:10:44 +00:00
Jan Hubicka
db8cb48e64 flags.h (flag_optimize_sibling_calls): Declare.
* flags.h (flag_optimize_sibling_calls): Declare.
	* calls.c (expand_call): Fail sibcall when
	!flag_optimize_sibling_calls
	* invoke.texi (flag_optimize_sibling_calls): Document.
	* toplev.c (flag_optimize_sibling_calls): New global variable.
	(f_options): Add flag_optimize_sibling_calls.
	(rest_of_compilation): Conditionize
	optimize_sibling_and_tail_recursive_calls by
	flag_optimize_sibling_calls.
	(main): Set flag_optimize_sibling_calls for -O2.
	* stmt.c (expand_return): Conditionize tail recursion by
	flag_optimize_sibling_calls.

From-SVN: r32802
2000-03-29 09:54:31 +00:00
Richard Henderson
b06775f990 calls.c (expand_call): Pass parms not original exp to optimize_tail_recursion.
* calls.c (expand_call): Pass parms not original exp to
        optimize_tail_recursion.  Mind return value instead of looking
        for a barrier.
        * stmt.c (optimize_tail_recursion): Take parameter list, not entire
        call_expr.  Move checks for call_expr and current_function_decl ...
        (expand_return): ... here.

From-SVN: r32758
2000-03-26 16:50:27 -08:00
Richard Henderson
194c7c45b1 tree.c (lang_safe_for_unsave): Remove.
* tree.c (lang_safe_for_unsave): Remove.
        (unsafe_for_reeval): Transmute and rename from safe_for_unsave,
        allowing for two levels of unsafeness.  Remove lang hook.
        * tree.h: Update declarations.
        * calls.c (expand_call): Rename safe_for_reeval to try_tail_call.
        Create temporary VAR_DECLs to protect very unsafe_for_reeval trees.
        Always fail sibcalls when there are pending cleanups.

From-SVN: r32735
2000-03-24 17:06:35 -08:00
Jakub Jelinek
7d167afd46 sibcall.c (skip_copy_to_return_value): Use OUTGOING_REGNO for comparison if regno's are equal.
* sibcall.c (skip_copy_to_return_value): Use OUTGOING_REGNO for
	comparison if regno's are equal.
	* calls.c (initialize_argument_informat): Add ecf_flags argument.
	Use FUNCTION_INCOMING_ARG if available and ECF_SIBCALL.
	(expand_call): Update caller.
	Avoid making a sibling call if argument size of the callee is larger
	than argument size of the caller.
	Call hard_function_value with outgoing set if in sibcall pass.
	Use FUNCTION_INCOMING_ARG if available and ECF_SIBCALL.

	* final.c (permitted_reg_in_leaf_functions, only_leaf_regs_used):
	Change LEAF_REGISTERS from an array initializer to actual array
	identifier. Move static global variable into the function.
	(leaf_function_p): Allow SIBLING_CALL_P calls even outside of
	sequences for leaf functions.
	* global.c (global_alloc): Likewise.
	* tm.texi (LEAF_REGISTERS): Update documentation.

	* config/sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Remove the ugly
	TARGET_FLAT leaf disabling hack.
	(LEAF_REGISTERS): Changed from an array initializer to actual array
	identifier to avoid duplication and remove the above hack.
	(FUNCTION_OK_FOR_SIBCALL): Define.
	* config/sparc/sparc.md (sibcall): New attr type. Use it almost
	always like call attribute.
	(eligible_for_sibcall_delay): New attribute.
	(sibcall): New delay type.
	(sibcall, sibcall_value, sibcall_epilogue): New expands.
	(sibcall_symbolic_sp32, sibcall_symbolic_sp64,
	sibcall_value_symbolic_sp32, sibcall_value_symbolic_sp64): New insns.
	* config/sparc/sparc.c (sparc_leaf_regs): New array.
	(eligible_for_sibcall_delay, output_restore_regs, output_sibcall):
	New functions.
	(output_function_epilogue): Move part of the code into
	output_restore_regs.
	(ultra_code_from_mask, ultrasparc_sched_reorder): Handle
	TYPE_SIBCALL.
	* sparc-protos.h (output_sibcall, eligible_for_sibcall_delay): New
	prototypes.

From-SVN: r32730
2000-03-24 22:48:01 +01:00
Richard Kenner
25a1fcb433 calls.c (expand_call): If TARGET is passed by reference and is readonly, write a CLOBBER.
* calls.c (expand_call): If TARGET is passed by reference and
	is readonly, write a CLOBBER.

From-SVN: r32716
2000-03-23 17:12:22 -05:00
Theodore Papadopoulo
2f939d9406 builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros.
* builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros.
	* c-common.c (decl_attributes,check_format_info,truthvalue_conversion,
	  c_get_alias_set): Likewise.
	* c-decl.c (duplicate_decls): Likewise.
	* c-typeck.c (default_conversion,build_unary_op): Likewise.
	* calls.c (initialize_argument_information): Likewise.
	* dwarf2out.c (decl_class_context,add_abstract_origin_attribute):
	Likewise.
	* dwarfout.c (decl_class_context,output_type): Likewise.
	* expr.c (get_inner_reference): Likewise.
	* fold-const.c (simple_operand_p,fold): Likewise.
	* function.c (aggregate_value_p): Likewise.
	* stmt.c (expand_asm_operands): Likewise.
	* varasm.c (named_section): Likewise.

	* call.c (check_dtor_name,build_new_method_call): Likewise.
	* decl.c (push_class_binding,poplevel,pushtag,lookup_namespace_name,
	make_typename_type,check_initializer,cp_finish_decl,xref_tag): Likewise.
	* decl2.c (grokfield,build_expr_from_tree,build_expr_from_tree,
	decl_namespace,arg_assoc_template_arg,arg_assoc,
	validate_nonmember_using_decl,do_class_using_decl): Likewise.
	* error.c (dump_template_argument,dump_expr,cp_file_of,cp_line_of,
	args_to_string): Likewise.
	* friend.c (is_friend): Likewise.
	* lex.c (note_got_semicolon,note_list_got_semicolon,is_global): Likewise.
	* method.c (build_overload_nested_name,build_overload_value,
	build_qualified_name,build_qualified_name,hack_identifier): Likewise.
	* parse.y (typename_sub,typename_sub1): Likewise.
	* pt.c (push_inline_template_parms_recursive,check_template_shadow,
	process_partial_specialization,convert_template_argument,
	template_args_equal,add_pending_template,lookup_template_class,
	for_each_template_parm_r,maybe_fold_nontype_arg,
	tsubst,instantiate_template,type_unification_real,unify,
	instantiate_pending_templates,set_mangled_name_for_template_decl):
	Likewise.
	* repo.c (repo_get_id,repo_template_used): Likewise.
	* search.c (lookup_field_1): Likewise.
	* tree.c (walk_tree,get_type_decl,cp_tree_equal,member_p): Likewise.
	* xref.c (classname): Likewise.

From-SVN: r32698
2000-03-23 00:41:05 +00:00
Jan Hubicka
de76b46753 * calls.c: re-install Mar 16 emit_library_call merge.
From-SVN: r32685
2000-03-22 10:51:10 +00:00
Nathan Sidwell
d0f062fbb3 tree.h (COMPLETE_TYPE_P): New macro.
gcc
	* tree.h (COMPLETE_TYPE_P): New macro.
	(COMPLETE_OR_VOID_TYPE_P): New macro.
	(COMPLETE_OR_UNBOUND_ARRAY_TYPE_P): New macro.
	* stor-layout.c (layout_type, case VOID_TYPE): Don't set TYPE_SIZE.
	* c-aux-info.c (gen_type): Use them.
	* c-common.c (c_expand_expr_stmt): Likewise.
	* c-decl.c (poplevel, pushdecl, start_decl, finish_decl,
	grokdeclarator, grokparms, finish_struct, start_function,
	store_parm_decls, combine_parm_decls): Likewise.
	* c-parse.y (cast_expr): Likewise.
	* c-typeck.c (require_complete_type, c_sizeof, c_sizeof_nowarn,
	c_size_in_bytes, c_alignof, build_component_ref,
	build_indirect_ref, build_array_ref, convert_arguments,
	build_binary_op, pointer_diff, build_unary_op, digest_init: Likewise.
	* calls.c (initialize_argument_information): Likewise.
	* convert.c (convert_to_integer): Likewise.
	* dbxout.c (dbxout_typedefs, dbxout_type, dbxout_symbol): Likewise.
	* dwarfout.c (location_or_const_value_attribute,
	output_enumeration_type_die, output_structure_type_die,
	output_union_type_die, output_type): Likewise.
	* expr.c (safe_from_p, expand_expr): Likewise.
	* function.c (assign_parms): Likewise.
	* sdbout.c (sdbout_symbol, sdbout_one_type): Likewise.
	* tree.c (build_array_type, build_function_type,
	build_method_type, build_offset_type, build_complex_type): Likewise.
	* c-parse.c, c-parse.h: Regenerated.
gcc/cp
	* typeck.c (require_complete_type, complete_type,
	complete_type_or_else, c_sizeof, c_sizeof_nowarn,
	build_array_ref, convert_arguments, pointer_diff,
	build_x_unary_op, build_unary_op, build_c_cast,
	build_modify_expr): Use COMPLETE_TYPE_P etc.
	* call.c (is_complete, convert_like_real,
	build_new_method_call): Likewise.
	* class.c (build_vbase_pointer_fields, check_bases,
	build_base_field, finish_struct_1, pushclass): Likewise.
	* cvt.c (cp_convert_to_pointer, convert_to_void): Likewise.
	* decl.c (maybe_process_template_type_declaration, pushtag,
	pushdecl, redeclaration_error_message, start_decl, start_decl_1,
	layout_var_decl, check_initializer, cp_finish_decl,
	grokdeclarator, require_complete_types_for_parms,
	grok_op_properties, xref_tag, xref_basetypes,
	check_function_type): Likewise.
	* decl2.c (check_classfn, reparse_absdcl_as_casts): Likewise.
	* friend.c (do_friend): Likewise.
	* init.c (build_offset_ref): Likewise.
	* parse.y (structsp): Likewise.
	* pt.c (maybe_process_partial_specialization,
	tsubst_friend_function, instantiate_class_template, tsubst,
	do_type_instantiation, instantiate_pending_templates): Likewise.
	* repo.c (repo_get_id): Likewise.
	* rtti.c (build_typeid, get_typeid, build_dynamic_cast_1,
	synthesize_tinfo_var, emit_support_tinfos): Likewise.
	* search.c (lookup_fnfields_1, lookup_conversions): Likewise.
	* semantics.c (begin_class_definition): Likewise.
	* tree.c (build_cplus_method_type): Likewise.
	* typeck2.c (digest_init, build_functional_cast,
	add_exception_specifier): Likewise.
	* parse.h, parse.c: Regenerated.

From-SVN: r32671
2000-03-21 18:10:48 +00:00
Richard Henderson
e245d3af6f calls.c (expand_call): Don't bother generating tail call sequences if there are pending cleanups.
* calls.c (expand_call): Don't bother generating tail call
        sequences if there are pending cleanups.  Use
        expand_start_target_temps/expand_end_target_temps to elide
        cleanups created during sibcall expansion.

From-SVN: r32653
2000-03-20 14:40:50 -08:00
Jeffrey A Law
0a1c58a25a Sibling call optimizations.
Co-Authored-By: Richard Henderson <rth@cygnus.com>

From-SVN: r32612
2000-03-17 14:40:45 -08:00
Martin v. Löwis
91d024d568 call.c (special_function_p): It is only malloc if it returns Pmode.
* call.c (special_function_p): It is only malloc if it returns
	Pmode.

From-SVN: r32604
2000-03-17 09:11:17 +00:00
Richard Henderson
3c0fca1282 * calls.c: Revert last two changes.
From-SVN: r32592
2000-03-16 09:42:06 -08:00
Jan Hubicka
43bc5f13ad calls.c (emit_library_call_value_1): Break out from ...; handle VOIDmode function calls too.
* calls.c (emit_library_call_value_1): Break out from ...; handle
	VOIDmode function calls too.
	(emit_library_call_value): ... here.
	(emit_library_call): Implement by calling emit_library_call_value_1.

From-SVN: r32587
2000-03-16 15:52:13 +00:00
Jan Hubicka
774e6b37bb calls.c (expand_call): Do sanity checking on arg_space_so_far.
* calls.c (expand_call): Do sanity checking on arg_space_so_far.
	Update arg_space_so_far on stack adjustments.
	(emit_library_call, emit_library_call_value): Likewise; take into
	account arg_space_so_far and pending_stack_adjust when calculcating
	the boundary.

From-SVN: r32586
2000-03-16 15:02:42 +00:00
Jason Merrill
54cea12317 calls.c (emit_call_1): Nothrow functions can still have nonlocal gotos.
* calls.c (emit_call_1): Nothrow functions can still have nonlocal
        gotos.

From-SVN: r32579
2000-03-16 02:44:30 -05:00
Jason Merrill
12a22e76d6 tree.h (struct tree_common): Rename raises_flag to nothrow_flag.
* tree.h (struct tree_common): Rename raises_flag to nothrow_flag.
        (TREE_NOTHROW): Rename from TREE_RAISES.
        * toplev.c (rest_of_compilation): Set it.
        * print-tree.c (print_node): Adjust.
        * tree.c (stabilize_reference, build, build1): Don't set TREE_RAISES.
        (stabilize_reference_1, get_unwidened, get_narrower): Likewise.
        * calls.c (emit_call_1): Add 'nothrow' parm.  Add
        REG_EH_REGION note as appropriate.
        (libfunc_nothrow): New fn.
        (emit_library_call, emit_library_call_value): Use it.
        (expand_call): Check TREE_NOTHROW.

cp:
        * call.c (build_call): Set TREE_NOTHROW on the CALL_EXPR as
        appropriate.
        * decl.c (define_function): Set TREE_NOTHROW on the FUNCTION_DECL.
        * except.c (call_eh_info, alloc_eh_object, expand_throw): Set
        TREE_NOTHROW or TREE_THIS_VOLATILE on the function as appropriate.
        * rtti.c (build_runtime_decl, get_tinfo_decl, build_dynamic_cast_1,
        expand_si_desc, expand_class_desc, expand_ptr_desc, expand_attr_desc,
        expand_generic_desc): Likewise.

From-SVN: r32453
2000-03-09 15:34:52 -05:00
Richard Kenner
05bccae2ef tree.h (INT_CST_LT, [...]): Remove unneeded casts.
* tree.h (INT_CST_LT, INT_CST_LT_UNSIGNED): Remove unneeded casts.
	(struct tree_int_cst): int_cst_low is now unsigned HOST_WIDE_INT.
	(attribute_hash_list, type_hash_canon): hashcode is now unsigned.
	(type_hash_lookup, type_hash_add, type_hash_list): Likewise.
	(min_precision): Result is unsignd.
	(add_double, neg_double, mul_double): Low word is unsigned.
	(lshift_double, rshift_double, lrotate_double): Likewise.
	(rrotate_double, div_and_round_double): Likewise.
	(tree_floor_log2, compare_tree_int): New functions.
	(preserve_rtl_expr_temps): New declaration.
	* c-common.c (declare_hidden_char_array): Use compare_tree_int.
	(decl_attributes): Use tree_log2 to find alignment.
	Check for TREE_INT_CST_HIGH for format args.
	(min_precision): Now unsigned.
	Use tree_floor_log2.
	(truthvalue_conversion): Delete long-disabled code.
	* c-decl.c (finish_struct): Clean up tests on field width.
	(finish_function): Use compare_tree_int.
	* c-pragma.c (handle_pragma_token): Use tree_log2 for alignment.
	* c-typeck.c (comptypes): Use tree_int_cst_equal.
	(default_conversion, digest_init): Use compare_tree_int.
	(build_binary_op): Use integer_all_onesp and compare_tree_int.
	Fix type errors in forming masks.
	* calls.c (initialize_argument_information): Use compare_tree_int.
	* dbxout.c (dbxout_type): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* except.c (expand_eh_region_start_tree): Use compare_tree_int.
	* expr.c (is_zeros_p, case INTEGER_CST): Use integer_zerop.
	(store_field): Use compare_tree_int.
	(expand_expr, case CONSTRUCTOR): Use TYPE_SIZE_UNIT.
	(expand_expr, case ARRAY_REF): Use compare_tree_int.
	(do_jump, case BIT_AND_EXPR): Use tree_floor_log2.
	(do_store_flag): Use compare_tree_int.
	* fold-const.c (encode, decode): Low part is always unsigned.
	(force_fit_type, add_double, neg_double, mul_double): Likewise.
	(lshift_double, rshift_double, lrotate_double): Likewise.
	(rrotate_double, div_and_round_double, int_const_binop): Likewise.
	(fold_convert): Use compare_tree_int.
	(operand_equal_p, case INTEGER_CST): Use tree_int_cst_equal.
	(invert_truthvalue, case INTEGER_CST): Likewise.
	(fold): Use compare_tree_int; add casts for unsigned TREE_INT_CST_LOW.
	* mkdeps.c (deps_dummy_targets): Make I unsigned.
	* rtl.h (add_double, neg_double, mul_double): Low words are unsigned.
	(lshift_double, rshift_double, lrotate_double, rrotate_double):
	Likewise.
	* stmt.c (expand_decl): Use compare_tree_int and mode_for_size_tree.
	(expand_end_case): Use compare_tree_int.
	(estimate_case_costs): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* stor-layout.c (mode_for_size_tree): Use compare_tree_int.
	(layout_decl): Likewise.
	(layout_record, layout_union): Make sizes unsigned.
	(layout_type, case VOID_TYPE): TYPE_SIZE must be bitsizetype.
	(layout_type, case QUAL_UNION_TYPE): Use compare_tree_int.
	* tree.c (struct type_hash): hashcode is unsigned.
	(build_type_attribute_variant, type_hash_list): Likewise.
	(type_hash_lookup, type_hash_add, type_hash_canon): Likewise.
	(attribute_hash_list, build_array_type, build_method_type): Likewise.
	(build_complex_type): Likewise.
	(real_value_from_int_cst): Remove unneeded casts.
	(integer_all_onesp): Add casts.
	(tree_floor_log2, compare_tree_int): New functions.
	(build_index_type): Use tree_int_cst_sgn.
	* varasm.c (assemble_variable): Use compare_tree_int.
	* ch/actions.c (chill_convert_for_assignment): INDEX is unsigned
	HOST_WIDE_INT.
	* ch/ch-tree.h (DECL_NESTING_LEVEL): Use TREE_INT_CST_HIGH
	since unsigned.
	* ch/except.c (chill_handle_on_labels): ALTERNATIVE is unsigned.
	Use compare_tree_int.
	(expand_goto_except_cleanup): Likewise.
	* cp/class.c (dfs_modify_vtables): I is now unsigned.
	(check_bitfield_decl): Use tree_int_cst_sgn and compare_tree_int.
	(build_base_field): Add casts of TREE_INT_CST_LOW to HOST_WIDE_INT.
	* cp/error.c (dump_expr): Cast TREE_INT_CST_HIGH to unsigned.
	* cp/init.c (build_vec_init): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* cp/method.c (build_overload_int): Cast TREE_INT_CST_HIGH to unsigned.
	* cp/typeck.c (build_binary_op, case TRUNC_DIV_EXPR):
	Call integer_all_onesp.
	* cp/typeck2.c (process_init_constructor): Use compare_tree_int.
	* f/com.c (ffecom_f2c_set_lio_code_): Use compare_tree_int.
	(ffecom_sym_transform_, ffecom_transform_common_): Likewise.
	(ffecom_transform_equiv_): Likewise.
	* java/decl.c (emit_init_test_initialization): Mark KEY as unused.
	* java/expr.c (build_newarray): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	(build_anewarray): Likewise.
	* java/parse.y (patch_newarray): Likewise.
	* java/parse.c: Regenerated.

From-SVN: r32383
2000-03-07 06:41:32 -05:00
Jason Merrill
1e5a1107e4 * calls.c (special_function_p): operator new may not be malloc-like.
From-SVN: r32308
2000-03-03 04:19:42 -05:00
Jason Merrill
c2732da3bb function.h (struct expr_status): Add x_arg_space_so_far.
* function.h (struct expr_status): Add x_arg_space_so_far.
        (arg_space_so_far): New macro.
        * expr.c (init_expr): Initialize it.
        * calls.c (emit_call_1): Reset it.
        (compute_argument_block_size, expand_call): Use it.
        (expand_call, store_one_arg): Increment it.

From-SVN: r32296
2000-03-02 18:50:11 -05:00
Jan Hubicka
42f602d842 * calls.c (expand_call) Do not attempt to combine stack adjustments
with inhibit_defer_pop set.

From-SVN: r32290
2000-03-02 11:49:51 +00:00
Jason Merrill
19e3f61a82 * calls.c (emit_library_call): Check for null REG.
From-SVN: r32270
2000-02-29 19:01:31 -05:00
Jeffrey A Law
bf44874ee3 calls.c (emit_library_call): Do not abort if FUNCTION_ARG returns a PARALLEL.
* calls.c (emit_library_call): Do not abort if FUNCTION_ARG
        returns a PARALLEL.  Use emit_group_load and use_group_regs
        as needed.
        (emit_library_call_value): Similarly.

From-SVN: r32267
2000-02-29 15:42:58 -07:00
Jan Hubicka
4e217aed3d calls.c (expand_call): Attempt to combine stack adjustments with pending stack adjustments.
Thu Feb 24 17:17:29 MET 2000 Jan Hubicka  <jh@suse.cz>

	* calls.c (expand_call): Attempt to combine stack adjustments with
	pending stack adjustments.

From-SVN: r32230
2000-02-28 11:55:43 +00:00
Richard Kenner
fed3cef0db builtins.c (c_strlen): Use size_diffop and return ssizetype value.
* builtins.c (c_strlen): Use size_diffop and return ssizetype value.
	(expand_builtin_strcpy): Pass correct type to size_binop.
	(expand_builtin_strcmp): Likewise.
	Clean up conditional structure.
	* c-decl.c (init_decl_processing): Don't call set_sizetype twice.
	(complete_array_type): Don't use size_binop for MAXINDEX.
	* c-typeck.c (c_sizeof): Use size_one_node and TYPE_SIZE_UNIT.
	(c_sizeof_nowarn, c_size_in_bytes): Likewise.
	(c_alignof): Use size_one_node.
	(build_unary_op): Pass arg of proper type to size_binop.
	(really_start_incremental_init, push_init_level): Use sizetype for
	constructor{,_bit,_unfilled}_index.
	(pop_init_label, output_init_element): Likewise.
	(output_pending_init_elements, process_init_element): Likewise.
	* calls.c (compute_argument_block_size): Field VAR is ssizetype.
	* expr.c (store_expr): Use size_int.
	(store_constructor): Use proper types for size_binop args.
	(get_inner_reference, expand_expr, case ARRAY_REF): Likewise.
	(expand_expr_unaligned): Likewise.
	(string_contant): Return object of sizetype.
	* expr.h (SUB_PARM_SIZE): Call size_diffop and pass proper types.
	(ARGS_SIZE_RTX): Call ARGS_SIZE_TREE.
	(ARGS_SIZE_TREE): Pass proper types to size_binop.
	* fold-const.c (int_const_binop): Refine when size_int is called.
	(fold_convert): Likewise.
	(size_int_wide): Rework to take KIND as arg, only take low order
	bits, handle new sizetype_tab datatype, and chain entries in
	size_table.
	(size_int_type_wide): New function.
	(size_binop): Validate types of arguments.
	(ssize_binop): Deleted.
	(size_diffop): New function.
	(extract_muldiv): Only fold division into multiplication for sizetypes.
	* function.c (assign_parms): Use size_diffop and make sure
	VAR field is of ssizetype; also pass proper type to size_binop.
	(locate_and_pad_parm, pad_to_arg_alignment): Likewise.
	(round_down): Deleted from here.
	* store-layout.c (sizetype_tab): Now an array.
	(sizetype_set, early_root_list): New variables.
	(variable_size): Use size_one_node.
	(round_up): Pass proper type to size_binop.
	(round_down): Moved to here and corrected as above.
	(layout_record): Pass proper arg types to size_binop.
	(layout_type): Likewise.
	If sizetype_set is zero, record the type just laid out.
	(make_unsigned_type): Don't call set_sizetype;
	(make_signed_type): Likewise; also, call fixup_signed_type.
	(initialize_sizetypes): New function.
	(set_sizetype): Make copy of types, set TYPE_IS_SIZETYPE, and
	set name of bitsizetype to "bit_size_type".
	Fix up type of sizes of all types made before call.
	* tm.texi (ROUND_TYPE_SIZE_UNIT): New macro.
	* tree.c (fix_sizetype): Deleted.
	(build_common_tree_nodes): Call initialize_sizetypes.
	(build_common_tree_nodes_2): Don't call fix_sizetype.
	* tree.h (TYPE_IS_SIZETYPE): New macro.
	(initialize_sizetype): New declaration.
	(enum size_type_kind): New type.
	(struct sizetype_tab): Deleted.
	(sizetype_tab): Now array; adjust sizetype macros.
	(size_diffop, size_int_type_wide): New functions.
	(size_int_wide): Change number of args and type; access macros changed.
	(ssize_int, sbitsize_int): New macros.
	* config/i960/i960.h (ROUND_TYPE_SIZE): Use size_int.
	(ROUND_TYPE_SIZE_UNIT): New macro.
	* ch/actions.c (chill_convert_for_assignment): Don't use size_binop
	for things that aren't sizes.
	(expand_varying_length_assignment): Likewise.
	* ch/convert.c (digest_array_tuple, convert): Likewise.
	* ch/typeck.c (build_chill_slice, smash_dummy_type): Likewise.
	(build_chill_slice_with_range): Likewise.
	(build_chill_slice_with_length): Likewise.
	(build_array_from_set): Adjust types for size_binop.
	* ch/expr.c (build_concat_expr, build_chill_repetition_op): Likewise.
	(build_chill_sizeof): Use TYPE_SIZE_UNIT.
	* ch/tree.c (build_string_type): Pass proper type to size_binop.
	* cp/class.c (dfs_build_vtable_offset_vtbl_entries): Don't use
	size_binop on things that are not sizes; ssize_binop deleted.
	Call size_diffop when appropriate.
	(dfs_build_vcall_offset_vtbl_entries): Likewise.
	(build_primary_vtable, build_secondary_vtable): Likewise.
	(dfs_set_offset_for_unshared_vbases, dfs_modify_vtables): Likewise.
	Variable I is HOST_WIDE_INT.
	(get_vfield_offset): Pass proper types to size_binop.
	(size_extra_vtbl_entries, layout_virtual_bases): Likewise.
	(finish_struct_1): Likewise.
	(skip_rtti_stuff): Arg N is now pointer to signed.
	(layout_class_type): Use size_zero_node.
	* cp/cp-tree.h (skip_rtti_stuff): Arg N is pointer to signed.
	* cp/cvt.c (cp_convert_to_pointer): Pass proper types to size_binop.
	* cp/decl.c (complete_arry_type): Pass proper types to size_binop.
	(xref_basetypes): BINFO_OFFSET is sizetype.
	* cp/error.c (dump_expr): Don't use size_binop non-sizes.
	* cp/expr.c (cplus_expand_constant): Pass proper types to size_binop.
	* cp/init.c (construct_virtual_bases): Fix type error.
	(build_vec_delete_1): Pass proper type to size_binop and don't
	fold result.
	* cp/lex.c (cp_make_lang_type): BINFO_OFFSET is sizetype.
	* cp/rtti.c (get_base_offset): Pass proper type to size_binop.
	* cp/search.c (dfs_find_vbases): Fix type error.
	(expand_upcast_fixups): Arg to skip_rtti_stuff is pointer to signed.
	(dfs_get_vbase_types): BINFO_OFFSET is sizetype.
	* cp/tree.c (debug_binfo): Variable N is signed.
	Use HOST_WIDE_INT_PRINT_DEC.
	* cp/typeck.c (comptypes): sizetype is same as equivalent integer type.
	(c_sizeof, c_sizeof_nowarn, expr_sizeof): Use TYPE_SIZE_UNIT,
	size_one_node and size_zero_node.
	(c_alignof): Use size_one_node.
	(build_component_addr): Pass proper types to size_binop.
	(expand_ptrmemfunc_cst): Don't use size_binop on non-sizes.
	* f/com.c (ffecom_arrayref_): Convert args to size_binop to proper
	type.
	(ffecom_tree_canonize_ptr_): Don't use size_binop for non-sizes.
	(ffecom_tree_canonize_ref_): Likewise.
	(type_for_mode): Handle TImode.
	* f/ste.c (ffeste_io_dofio_, ffeste_io_douio_): Use TYPE_SIZE_UNIT.
	(ffeste_io_ciclist_): Likewise.
	* java/expr.c (build_java_ret): Pass proper type to size_binop.

From-SVN: r32225
2000-02-27 16:39:40 -05:00
Jeff Law
3c71940faf Copyright fixes
From-SVN: r32172
2000-02-25 22:54:31 -07:00
Jim Wilson
c2939b5700 Fix for ia64 setjmp miscompilation problem.
* calls.c (expand_call): When emitting a NOTE_INSN_SETJMP, search for
	the CALL_INSN, and emit the note immediately after it.

From-SVN: r31902
2000-02-10 13:00:09 -08:00
Jan Hubicka
c2f8b49149 calls.c (compute_argument_block_size): New argument preferred_stack_boundary.
* calls.c (compute_argument_block_size): New argument
	preferred_stack_boundary.
	(expand_call): update cfun->preferred_stack_boundary, update call of
	compute_argument_block_size
	(emit_library_call): Increate cfun->preferred_stack_boundary
	to PREFERRED_STACK_BOUNDARY
	(emit_library_call_value): Likewise.
	* explow.c (allocate_dynamic_stack_spave): Likewise.
	* function.c (prepare_function_start): Set
	cfun->preferred_stack_boundary
	* function.h (struct function): Add preferred_stack_boundary field.
	* integrate.c (expand_inline_function): Update
	cfun->preferred_stack_boundary and cfun->stack_alignment_needed.
	(copy_rtx_and_substitute): Align frame to stack_alignment_needed only.
	* i386.c (compute_frame_size): Use cfun->preferred_stack_boundary.

From-SVN: r31831
2000-02-07 17:39:40 +00:00
Joern Rennecke
fa76d9e04e calls.c (special_function_p): New argument fork_or_exec.
* calls.c (special_function_p): New argument fork_or_exec.
	(expand_call): When profile_arc_flag is set and the function
	is in the fork_or_exec group, call __bb_fork_func first.
	* libgcc2.c, _bb module (__bb_fork_func): New function.
	(__bb_exit_func): If fcntl F_SETLKW is available, use it to lock
	output file.
	* config/svr4.h (TARGET_HAS_F_SETLKW): Define.
	* tree.h (special_function_p): Update prototype.

From-SVN: r31636
2000-01-26 23:38:20 +00:00
Kaveh R. Ghazi
962f1324bd calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.
* calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.

        * except.c (eh_regs): Likewise.

        * final.c (output_operand): Likewise.

        * fold-const.c (target_isinf, target_isnan): Likewise.

From-SVN: r31490
2000-01-18 22:45:16 +00:00
Kaveh R. Ghazi
57bed15271 calls.c (emit_call_1): Wrap varaible `struct_value_size_rtx' in macro conditionals guarding use.
* calls.c (emit_call_1): Wrap varaible `struct_value_size_rtx' in
        macro conditionals guarding use.

        * dwarf2out.c: Include "tm_p.h".

        * function.c (locate_and_pad_parm): Mark parameter with
        ATTRIBUTE_UNUSED.
        (expand_function_end): Likewise for variable `context'.

        * reorg.c (make_return_insns): Wrap prototype in macro HAVE_return.

cp:
        * call.c: If GATHER_STATISTICS, declare `n_build_method_call'.

From-SVN: r31398
2000-01-13 23:43:55 +00:00
Kaveh R. Ghazi
3d994c6bef alias.c: PROTO -> PARAMS.
* alias.c: PROTO -> PARAMS.
	* basic-block.h: Likewise.
	* bitmap.c: Likewise.
	* bitmap.h: Likewise.
	* builtins.c: Likewise.
	* c-aux-info.c: Likewise.
	* caller-save.c: Likewise.
	* calls.c: Likewise.

From-SVN: r31338
2000-01-11 23:27:40 +00:00
Kaveh R. Ghazi
a544cfd201 builtins.c (expand_builtin_strlen): Initialize variable `icode'.
* builtins.c (expand_builtin_strlen): Initialize variable `icode'.

	* calls.c (expand_call): Likewise for
	`old_stack_arg_under_construction'.

	* cpphash.c (macroexpand): Likewise for `args' and `rest_zero'.

	* function.c (pad_to_arg_alignment): Likewise for `save_var' and
	`save_constant'.

	* gcc.c (execute): Likewise for `ut' and `st'.

	* genattrtab.c (attr_rtx): Likewise for `rt_val'.

	* genopinit.c (gen_insn): Likewise for `m1', `m2' and `op'.

	* jump.c (jump_optimize_1): Likewise for `temp2'.

	* local-alloc.c (block_alloc): Likewise for `r1'.

	* loop.c (recombine_givs): Likewise for `life_start' and `life_end'.

	* reg-stack.c (check_asm_stack_operands): Likewise for `clobber_reg'.
	(subst_asm_stack_regs): Likewise for `clobber_reg' and `clobber_loc'.

	* regmove.c (fixup_match_1): Likewise for `insn_const', `dst_node'
	and `set2'.

	* reload.c (find_reloads): Likewise for `goal_alternative_number'
	and `goal_earlyclobber'.

	* scan-decls.c (scan_decls): Likewise for `prev_id_end'.

	* sdbout.c (sdbout_one_type): Likewise for `member_scl'.

	* stupid.c (stupid_life_analysis): Likewise for `chain'.

	* unroll.c (copy_loop_body): Likewise for `copy'.

	* varasm.c (output_constructor): Likewise for `byte'.

ch:
	* actions.c (update_else_range_for_int_const): Initialize
	variables `lowval' and `highval'.
	(update_else_range_for_range): Likewise for `low_range_val' and
	`high_range_val'.

cp:
	* class.c (warn_hidden): Initialize variable `fndecl'.

From-SVN: r31207
2000-01-04 16:29:41 +00:00
Jakub Jelinek
47841d1be3 sparc.h (PROMOTE_FOR_CALL_ONLY): Define.
* config/sparc/sparc.h (PROMOTE_FOR_CALL_ONLY): Define.

	* calls.c (precompute_arguments): Make sure initial_value contains
	value pseudo which CSE expects.
	* cse.c (struct set): New entry orig_src.
	(cse_insn): Set it early on entry, use it for libcall EQUIV note
	replacement.

From-SVN: r30846
1999-12-09 06:38:11 -08:00
Jakub Jelinek
04572513c7 calls.c (save_fixed_argument_area): If save_mode is BLKmode, always use move_by_pieces to avoid infinite recursion.
* calls.c (save_fixed_argument_area): If save_mode is BLKmode,
	always use move_by_pieces to avoid infinite recursion.
	(restore_fixed_argument_area): Likewise.

From-SVN: r30805
1999-12-06 11:31:13 -08:00
Mark Mitchell
3a8c995be7 tree.h (special_function_p): Declare.
* tree.h (special_function_p): Declare.
	* calls.c (special_function_p): Make it global.  Don't take `name'
	as a parameter.  Fix typo in 1999-11-28 change.
	(expand_cal): Adjust.

From-SVN: r30788
1999-12-05 17:53:14 +00:00
Kaveh R. Ghazi
8251469698 calls.c (special_function_p): Remove realloc' and add strdup' to the list of functions which have attribute...
* calls.c (special_function_p): Remove `realloc' and add `strdup'
        to the list of functions which have attribute malloc by default.

From-SVN: r30731
1999-11-30 23:55:26 +00:00
Anthony Green
140592a013 tree.h (struct tree_decl): Add malloc_flag.
* tree.h (struct tree_decl): Add malloc_flag.
	(DECL_IS_MALLOC): Define.
	* c-common.c (attrs): Add A_MALLOC attribute.
	(init_attributes): Add this attribute to the table.
	(decl_attributes): Handle malloc attribute.
	* calls.c (special_function_p): Check for the malloc attribute.
	* extend.texi (Function Attributes): Document malloc attribute.

From-SVN: r30689
1999-11-28 20:45:34 +00:00
Jakub Jelinek
4dc07bd7c1 explow.c (hard_function_value): Add outgoing argument.
* explow.c (hard_function_value): Add outgoing argument.
        * expr.h (hard_function_value): Declare it.
        * calls.c (expand_call, emit_library_call_value): Update callers.
        * function.c (aggregate_value_p): Ditto.
        (diddle_return_value): Must look at the outgoing registers
        on archs with register windows.

From-SVN: r30550
1999-11-16 09:43:40 -08:00
Richard Kenner
14a774a9d2 [multiple changes]
Fri Oct 29 15:25:07 1999  Arnaud Charlet  <charlet@ACT-Europe.FR>

	* gcov.c (DIR_SEPARATOR): Provide default.
	(output_data): Add test for MS-DOS format absolute filename.
	(fancy_abort): Correct program name.
	(open_files): Open all files in binary mode.
	* libgcc2.c (__bb_exit_func): Likewise.

	* profile.c (init_branch_prob): Specify binary when opening files.

	* flags.h (flag_unwind_tables): New decl.
	* toplev.c (flag_unwind_table): New definition.
	(f_options): Add -funwind-tables.
	(decode_g_option): Clarify warning when unknown -g option is given.
	(rest_of_compilation): If inside an inlined external function,
	pretend we are just being declared.

	* dwarf2out.c (dwarf2out_do_frame): Check -funwind_tables.
	(dwarf2out_frame_finish): Likewise.

Fri Oct 29 06:32:44 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* flow.c (propagate_block): When the last reference to a label
 	before an ADDR_VEC is deleted because the reference is a dead
 	store, delete the ADDR_VEC.

Fri Oct 29 07:44:26 1999  Vasco Pedro  <vp@di.fct.unl.pt>

	* fold-const.c (merge_ranges): In not in0, but in1, handle
	upper bounds equal like subset case.

Thu Oct 28 19:22:24 1999  Douglas Rupp <rupp@gnat.com>

	* dbxout.c (dbxout_parms): Generate a second stabs line for parameters
	passed in a register but moved to the stack.

Thu Oct 28 19:12:57 1999  Sam Tardieu  <tardieu@act-europe.fr>

	* gcc.c (pass_exit_codes, greatest_status): New variables.
	(struct option_map): Add entry for "--pass-exit-codes".
	(execute): Update greatest_status if error.
	(display_help): Add documentation for -pass-exit-codes.
	(process_command): Handle -pass-exit-codes.
	(main): Look at pass_exit_codes and greatest_status on call to exit.

Thu Oct 28 18:06:50 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload.c (find_reloads): Refine test for no input reload
	case to not includes reloads emitted after insn.

	* function.c (find_temp_slots_from_address): Handle sum involving
	a register that points to a temp slot.
	(update_temp_slot_address): Make recursive call if both old and
	new are PLUS with a common operand.
	* calls.c (expand_call): Mark temp slot for result as having
	address taken.

	* rtlanal.c (reg_referenced_p, case IF_THEN_ELSE): New case.

	* gcc.c (process_command): Add standard_exec_prefix with "GCC"
	component as well as "BINUTILS".

	* integrate.h (copy_rtx_and_substitute): New arg, FOR_LHS.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	(expand_inline_function, integrate_parm_decls, integrate_decl_tree):
	All callers changed.
	* unroll.c (inital_reg_note_copy, copy_loop_body): Likewise.

	* dbxout.c (dbxout_type, case INTEGER_TYPE_NODE): If can use
	gdb extensions, write size of type; also be more consistent
	in using references when this is a subtype.

	* pa.md (extv, extzv, insv): Use define_expand to reject constant
	that is out of range.

	* loop.c (unknown_constant_address_altered): New variable.
	(prescan_loop): Initialize it.
	(note_addr_stored): Set it for RTX_UNCHANGING_P MEM.
	(invariant_p, case MEM): Remove handling for volatile and readony;
	check new variable if readonly.
	(check_dbra_loop): Chdeck unknown_constant_address_altered.

	* cse.c (canon_hash, case MEM): Do not record if BLKmode.
	(addr_affects_sp_p): Removed from note_mem_written and only
	define #ifdef AUTO_INC_DEC.

	* alpha.c (input_operand, case ADDRESSOF): Treat as REG.

	* regclass.c (record_reg_classes): Properly handle register move
	directions.

	* varasm.c (initializer_constant_valid_p, case MINUS_EXPR):
	Don't think valid if both operands are invalid.
	(struct constant_descriptor): New field RTL.
	(mark_const_hash_entry): Mark it.
	(record_constant{,_rtx}): Initialize it.
	(output_constant_def): Allocate RTL in permanent obstack and
	save in table.
	({record,compare}_constant_1): Modes must match for
	CONSTRUCTOR of ARRAY_TYPE.

	* c-common.h (initializer_constant_valid_p): Delete decl from here.
	* output.h (initializer_constant_valid_p): Move decl to here.
	* c-common.c (initializer_constant_valid_p): Delete function from here.
	* varasm.c (initializer_constant_valid_p): Move function to here.

	* tree.h (STRIP_SIGN_NOPS): New macro.
	* fold-const.c (optimize_minmax_comparison): New function.
	(invert_truthvalue, case WITH_RECORD_EXPR): New case.
	(fold): Use STRIP_SIGN_NOPS instead of STRIP_TYPE_NOPS.
	(fold, case EQ_EXPR): Call optimize_minmax_comparison and add
	cases with ABS_EXPR, NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR, and
	widening conversions.
	(fold, case LE_EXPR): Rework changing unsigned to signed comparisons
	to look at size of mode, not precision of type; also add missing cases.
	(optimize_bit_field_compare, decode_field_reference): Don't try to
	optimize COMPONENT_REF of a PLACEHOLDER_EXPR.

	* dwarf2out.c (ctype.h): Include.
	(dwarf2out_set_demangle_name_func): New function.
	(size_of_line_info): Deleted.
	(output_line_info): Compute size of line info table from difference
	of labels.
	(base_type_die, add_name_attribute): Call demangle function, if any.
	(field_byte_offset): Use bits per word for variable length fields.
	(gen_array_type_die): Add array name.
	(gen_subprogram_die): Ignore DECL_INLINE if -fno-inline.
	(dwarf2out_add_library_unit_info): New function.

	* explow.c (set_stack_check_libfunc): New function.
	(stack_check_libfunc): New static variable.
	(probe_stack_range): Allow front-end to set up a libfunc to call.

	* combine.c (simplify_comparison): When making comparison in wider
	mode, check for having commuted an AND and a SUBREG.
	(contains_muldiv): New function.
	(try_combine): Call it when dividing a PARALLEL.
	(simplify_rtx, case TRUNCATE): Don't remove for umulsi3_highpart.
	(simplify_comparison, case ASHIFTRT): Recognize sign-extension of
	a PLUS.
	(record_value_for_reg): If TEM is a binary operation with two CLOBBERs,
	use one of the CLOBBERs instead.
	(if_then_else_cond): If comparing against zero, just return thing
	being compared.

	* optabs.c (expand_abs): If machine has MAX, ABS (x) is MAX (x, -x).
	Don't generate shifts and subtract if have conditional arithmetic.

	* rtl.h (delete_barrier): New declaration.
	* jump.c (jump_optimize): Set up to handle conditional call.
	In conditional arithmetic case, handle CALL_INSN followed by a BARRIER.
	(delete_barrier): New function.

	* rtl.c (read_rtx): Call fatal if bad RTL code; check for bad mode.

	* recog.c (nonmemory_operand): Accept ADDRESSOF.

	* tree.c (build_type_attribute_variant): Push to obstack of
	ttype around type_hash_canon call.

	* expr.c (placeholder_list): Move decl to file scope.
	(expand_expr): Don't force access to volatile just because its
	address is taken.
	If ignoring reference operations, just expand the operands.
	(expand_expr, case COMPONENT_REF): Propagate
	EXPAND_CONST_ADDRESS to recursive call when expanding inner.
	Refine test for using bitfield operations vs pointer punning.
	(expand_expr, case CONVERT_EXPR): If converting to
	BLKmode UNION_TYPE from BLKmode, just return inner object.
	Use proper mode in store_field call.
	Properly set sizes of object to store and total size in store_field
	call for convert to union.
	(expand_expr, case ARRAY_REF): If OP0 is in a register, put it in
	memory (like for ADDR_EXPR).  Also, don't put constant in register if
	we'll want it in memory.
	(readonly_fields_p): New function.
	(expand_expr, case INDIRECT_REF): Call it if LHS.
	(expand_assignment): Handle a RESULT_DECL where
	DECL_RTL is a PARALLEL.
	(do_jump, case WITH_RECORD_EXPR): New case.
	(get_inner_reference): Always go inside a CONVERT_EXPR
	and NOP_EXPR if both modes are the same.
	(store_field): Use bitfield operations if size of bitsize is not same
	as size of RHS's type.
	Check for bitpos not a multiple of alignment in BLKmode case.
	Do block move in largest possible alignment.
	(store_constructor): Set BITSIZE to -1 for variable size and properly
 	in case of array of BLKmode.
	(expand_expr_unaligned): New function.
	(do_compare_and_jump): Call it.

	* mips/iris5.h (SWITCHES_NEED_SPACES): New macro.
	* collect2.c (main): Only allow -ofoo if SWITCHES_NEED_SPACES
	does not include 'o'.

	* function.c (instantiate_virtual_regs_1, case SET): Handle case where
	both SET_DEST and SET_SRC reference a virtual register.
	(gen_mem_addressof): Copy RTX_UNCHANGING_P from new REG to old REG.

	* integrate.c (expand_inline_function): Handle case of setting
	virtual stack vars register (from built in setjmp); when parameter
	lives in memory, expand virtual_{stack_vars,incoming_args}_rtx early.
	(subst_constant): Add new parm, MEMONLY.
	(expand_inline_function, integrate_parm_decls): Pass new parm.
	(integrate_decl_tree): Likewise.
	(copy_rtx_and_substitute, case MEM): Do copy RTX_UNCHANGING_P.
	(try_constants): Call subst_constants twice, with MEMONLY 0 and 1.
	(copy_rtx_and_substitute, case SET): Add explicit calls to
	copy_rtx_and_substitute for both sides.

	* stmt.c (expand_asm_operands): Don't use TREE_STRING_LENGTH for
	constraints.
	(pushcase{,_range}): Convert to NOMINAL_TYPE after checking for
	within INDEX_TYPE, instead of before.
	(fixup_gotos): Use f->target_rtl, not the next insn,
	since latter may be from a later fixup.
	(expand_value_return): Correctly convert VAL when promoting function
	return; support RETURN_REG being a PARALLEL.
	(expand_return): When checking for result in regs and having
	cleanup, consider PARALLEL in DECL_RTL as being in regs.

From-SVN: r30299
1999-10-31 20:11:22 -05:00
Catherine Moore
fbb57b2a94 Fix up last patch.
From-SVN: r30265
1999-10-29 14:49:29 -04:00
Catherine Moore
4fc026cde9 expr.c (emit_push_insn): New argument alignment_pad.
* expr.c (emit_push_insn): New argument alignment_pad.
        Update all callers.  Adjust stack pointer based on alignment pad.
        * function.c (pad_to_arg_alignment):  New argument alignment_pad.
        Update all callers.  Track alignment_pad if boundary > PARM_BOUNDARY.
        (locate_and_pad_parm): New argument alignment_pad.  Update all
        callers.
        * expr.h (emit_push_insn): Update prototype.
        (locate_and_pad_parm): Update prototype.
        * calls.c (arg_data):  Add new field alignment_pad.
        (initialize_argument_information): Initialize alignment_pad.

From-SVN: r30257
1999-10-29 11:23:41 -04:00
Jeffrey A Law
95815af9d2 c-typeck.c (build_function_call): Check that the built-in function is of class BUILT_IN_NORMAL before trying to...
* c-typeck.c (build_function_call): Check that the built-in
        function is of class BUILT_IN_NORMAL before trying to recongize
        it as BUILT_IN_ABS.
        * calls.c (calls_function_1): Similarly for BUILT_IN_ALLOCA.
        * stmt.c (expand_end_cae): Similarly for BUILT_IN_CLASSIFY_TYPE.

        * call.c (build_over_call):  Check that the built-in function is
        of class BUILT_IN_NORMAL before trying to recongize it as BUILT_IN_ABS.
        * typeck.c (build_function_call_real): Similarly.

From-SVN: r30208
1999-10-26 23:32:43 -06:00
Kaveh R. Ghazi
b1474bb79e calls.c: Include tm_p.h later, so everything we need is defined.
* calls.c: Include tm_p.h later, so everything we need is defined.
        * expr.c: Likewise.
        * function.c: Likewise.

        * except.c: Include tm_p.h.

        * sparc.c: Likewise.
        (dwarf2out_cfi_label): Don't prototype.
        (check_return_regs, epilogue_renumber,
        ultra_cmove_results_ready_p, ultra_fpmode_conflict_exists,
        ultra_find_type, ultra_build_types_avail, ultra_flush_pipeline,
        ultra_rescan_pipeline_state, set_extends, ultra_code_from_mask,
        ultra_schedule_insn): Add static prototype.
        (data_segment_operand, text_segment_operand): Call itself with the
        proper number of arguments.
        (sparc_flat_save_restore, sparc_v8plus_shift): Constify a char*.

        * sparc.h: Move all declarations to sparc-protos.h.
        (SELECT_RTX_SECTION):  Pass a missing MODE argument to
        symbolic_operand.

        * sparc/sysv4.h (SELECT_RTX_SECTION): Likewise.

        * config/svr4.h (text_section, ctors_section, dtors_section): Add
        Prototypes.
        (ASM_OUTPUT_SECTION_NAME, UNIQUE_SECTION,
        ASM_FINISH_DECLARE_OBJECT, ASM_OUTPUT_LIMITED_STRING,
        ASM_OUTPUT_ASCII): Constify a char*.

        * sparc-protos.h: New file for sparc prototypes.

cp:
        * expr.c: Include tm_p.h.

From-SVN: r30122
1999-10-21 16:58:33 +00:00
Bernd Schmidt
6baf1cc8f8 Make it possible to prototype port-specific functions (and convert i386 to use this)
From-SVN: r29514
1999-09-20 10:00:03 +00:00
Mark Mitchell
19832c7774 calls.c (precompute_arguments): Fix typo in comment.
* calls.c (precompute_arguments): Fix typo in comment.
	* expr.c (preexpand_calls): Don't preexpand the cleanup in a
	TARGET_EXPR.

From-SVN: r29438
1999-09-15 17:21:35 +00:00
Jeff Law
c5c7673583 Merge in gcc2-ss-010999
From-SVN: r29150
1999-09-06 23:49:18 -06:00