Commit Graph

920 Commits

Author SHA1 Message Date
John David Anglin
084a11066f expr.c (gen_group_rtx, [...]): New functions.
* expr.c (gen_group_rtx, emit_group_move): New functions.
	* expr.h (gen_group_rtx, emit_group_move): Prototype.
	* function.c (expand_function_start): Use gen_group_rtx to create a
	PARALLEL rtx to hold the return value when the real return rtx is a
	PARALLEL.
	(expand_function_end): Use emit_group_move to move the return value
	from a PARALLEL to the real return registers.
	* rtl.h (REG_FUNCTION_VALUE_P): Allow function values to be returned
	in PARALLELs.

From-SVN: r59554
2002-11-27 02:29:12 +00:00
Steve Ellcey
27e58a706f emit-rtl.c (gen_reg_rtx): Simplify mapping of Complex type to component type using GET_MODE_INNER.
* emit-rtl.c (gen_reg_rtx): Simplify mapping of Complex type
	to component type using GET_MODE_INNER.
	* expr.c (emit_move_insn_1): Ditto.
	* optabs.c (expand_binop): Ditto.
	(expand_unop): Ditto.
	(expand_complex_abs): Ditto.

From-SVN: r59317
2002-11-20 21:52:59 +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
Jan Hubicka
075fc17aa5 expr.c (emit_move_insn): Use SCALAR_FLOAT_MODE_P
* expr.c (emit_move_insn):  Use SCALAR_FLOAT_MODE_P
	* machmode.h (SCALAR_FLOAT_MODE_P): New macro.

From-SVN: r58712
2002-11-01 09:35:24 +00:00
Eric Botcazou
6e7727ebee expr.c (expand_expr): Don't use simplify_binary_operation; check for zero operands explicitly.
* expr.c (expand_expr) [PLUS]: Don't use simplify_binary_operation;
        check for zero operands explicitly.

From-SVN: r58623
2002-10-29 06:20:16 -08:00
Steve Ellcey
37d0b2542c expr.c (convert_move): If unsignedp is less then zero there is no equivalent code.
* expr.c (convert_move): If unsignedp is less then zero there
	is no equivalent code.

From-SVN: r58502
2002-10-24 19:52:23 +00:00
Jan Hubicka
74f6d07186 * expr.c (do_tablejump): Fix typo in my previous commit.
From-SVN: r58179
2002-10-15 20:09:32 +00:00
Jan Hubicka
1877be457e re PR c/7344 (performance regression on huge case statements)
* i386.md (movv2di_internal): New pattern.
	(movv2df_internal, movv8hi_internal, movv16qi_internal): Fix predicate.
	(movv2di): New expander.
	* i386.c (ix86_preferred_reload_class): Return NO_REGS for vector operands.

	* i386.c (ix86_expand_timode_binop_builtin): Delete.
	(builtin_description): Add SSE1 logicals; rename SSE2 logicals.
	(ix86_init_mmx_sse_builtins): Kill SSE1 logicals.
	(ix86_expand_builtin): Likewise.
	* i386.h (sse_andti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
        sse_andti3,
	sse_andnti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
        sse_andnti3,
	sse_orti4_df_1, sse_orti3_df_2, sse_orti3_sf_1, sse_orti3_sf_2,
        sse_orti3,
	sse_xorti4_df_1, sse_xorti3_df_2, sse_xorti3_sf_1, sse_xorti3_sf_2,
        sse_xorti3): Kill.
	(sse_andv4sf3, sse_andnv4sf3, sse_orv2df3, sse_xorv2df3, sse_andv2df3,
	 sse_andnv2df3, sse_orv2df3, sse_xorv2df3): New expanders.
	(*sse_andv4sf3, *sse_andnv2df3, *sse_orv4sf3, *sse_xorv4sf3, *sse_andv2df3,
	 *sse_andnv2df3, *sse_orv2df3, *sse_xorv2df3): New patterns.
	(*sse_andsf3, *sse_andndf3, *sse_ordf3, *sse_xordf3, *sse_anddf3,
	 *sse_andndf3, *sse_orv2df3, *sse_xorv2df3): New patterns.

	* xmmintrin.h (__m128i): Define as __v2di.

	PR c/7344
	* predict.c (can_predict_insn_p): New function.
	(estimate_probability): Avoid unnecesary work.
	(process_note_prediction): Likewise.
	* toplev.c (rest_of_compilation): Account early branch prediction pass
	as TV_BRANCH_PROB.

	PR c++/6419
	(expand_expr): Use DECL_RTL_SET_P.

From-SVN: r58156
2002-10-15 08:24:36 +00:00
Eric Botcazou
4ef7870a4d re PR c/7411 (cistore.c:392: Internal compiler error in instantiate_virtual_regs_1, at function.c:3974)
PR c/7411
 * expr.c (expand_expr) [PLUS]: Simplify after the operands
 have been expanded in EXPAND_NORMAL mode.

Co-Authored-By: Volker Reichelt <reichelt@igpm.rwth-aachen.de>

From-SVN: r57882
2002-10-07 00:37:12 -07:00
Ulrich Weigand
1717e19e2f expr.c (expand_expr): Convert A - const to A + (-const) on RTX level, even for unsigned types.
* expr.c (expand_expr) [MINUS_EXPR]: Convert A - const to
	A + (-const) on RTX level, even for unsigned types.

From-SVN: r57543
2002-09-26 18:23:55 +00:00
Kazu Hirata
cc2902df52 dbxout.c: Follow spelling conventions.
* dbxout.c: Follow spelling conventions.
	* defaults.h: Likewise.
	* df.c: Likewise.
	* diagnostic.h: Likewise.
	* doloop.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* emit-rtl.c: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* expr.h: Likewise.
	* flags.h: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* function.h: Likewise.
	* gcc.c: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* gcse.c: Likewise.
	* genattrtab.c: Likewise.
	* genconfig.c: Likewise.
	* genrecog.c: Likewise.
	* ggc-page.c: Likewise.
	* ggc.h: Likewise.
	* global.c: Likewise.
	* gthr-win32.h: Likewise.
	* integrate.c: Likewise.
	* jump.c: Likewise.
	* langhooks.c: Likewise.
	* langhooks.h: Likewise.
	* line-map.h: Likewise.
	* local-alloc.c: Likewise.
	* longlong.h: Likewise.
	* loop.c: Likewise.
	* loop.h: Likewise.

From-SVN: r57406
2002-09-22 14:09:34 +00:00
Richard Henderson
cb38fd88af expr.c (emit_block_move): Set memory block size as appropriate for the copy.
* expr.c (emit_block_move): Set memory block size as appropriate
        for the copy.

From-SVN: r57233
2002-09-16 23:56:47 -07:00
John David Anglin
015b1ad1df expr.c (emit_group_load): Revise to allow splitting TCmode source into DImode pieces.
* expr.c (emit_group_load): Revise to allow splitting TCmode source
	into DImode pieces.
	* pa-64.h (LONG_DOUBLE_TYPE_SIZE): Define to 128.
	* pa64-regs.h (CLASS_CANNOT_CHANGE_MODE_P): Inhibit changes from SImode
	for floating-point register class.
	* pa.c (function_arg): Fix handling of modes wider than one word for
	TARGET_64BIT.

From-SVN: r56805
2002-09-04 18:09:32 +00:00
Graham Stott
c7a009a25e * expr.c (expand_expr): Remove extraneous comment and code.
From-SVN: r56744
2002-09-03 00:33:34 +00:00
Richard Henderson
98c0d8d105 * expr.c (block_move_libcall_safe_for_call_parm): Fix thinko.
From-SVN: r56710
2002-08-31 14:11:54 -07: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
4ca79136cf expr.c (TARGET_MEM_FUNCTIONS): Transform to boolean.
* expr.c (TARGET_MEM_FUNCTIONS): Transform to boolean.
        (emit_block_move): Split out subroutines.
        (emit_block_move_via_movstr): New.
        (emit_block_move_via_libcall): New.  Emit bcopy via normal call also.
        (emit_block_move_libcall_fn): New.  Construct function prototype for
        bcopy as well.
        (clear_storage): Split out subroutines.
        (clear_storage_via_clrstr): New.
        (clear_storage_via_libcall): New. Emit bzero as a normal call also.
        (clear_storage_libcall_fn): New.  Construct function prototype for
        bzero as well.
        (emit_push_insn): Use emit_block_move.
        (expand_assignment): Booleanize TARGET_MEM_FUNCTIONS.
        (store_constructor): Likewise.

From-SVN: r56464
2002-08-20 02:47:18 -07:00
Hans-Peter Nilsson
e56fc090cb expr.c (store_expr): In condition for checking if value is generated in TARGET...
* expr.c (store_expr): In condition for checking if value is
	generated in TARGET, move call to expr_size last.

From-SVN: r56217
2002-08-12 00:57:55 +00:00
Geoffrey Keating
6d9f628e05 Index: ChangeLog
2002-08-04  Geoffrey Keating  <geoffk@redhat.com>

	* Makefile.in (sdbout.o): Doesn't need $(OBSTACK_H).
	* collect2.h (permanent_obstack): Delete declaration.
	* collect2.c (permanent_obstack): Delete definition.
	(main): Don't initialise permanent_obstack.  Use xstrdup instead.
	* expr.c: Don't include obstack.h.
	(permanent_obstack): Delete declaration.
	* function.c: Don't include obstack.h.
	(permanent_obstack): Delete declaration.
	* integrate.c: Don't include obstack.h.
	(function_maybepermanent_obstack): Delete declaration.
	* print-tree.c (debug_tree): Use x*alloc not permalloc.
	* sdbout.c (gen_fake_label): Use x*alloc not permalloc.
	* tlink.c (pfgets): Use xstrdup not permanent_obstack.
	* toplev.c (lang_independent_init): Rename init_obstacks to init_ttree.
	* tree.h: Rename init_obstacks to init_ttree.  Remove declarations
	of permalloc, expralloc, perm_calloc.
	* tree.c (permanent_obstack): Delete definition.
	(init_ttree): Rename from init_obstacks.
	(permalloc): Delete.
	(perm_calloc): Delete.
	(dump_tree_statistics): Don't print information about
	permanent_obstack.
	* varasm.c (assemble_start_function): Use xstrdup instead of
	permalloc/strcpy.
	(assemble_variable): Likewise.
	* config/alpha/alpha.c (unicosmk_need_dex): Use xmalloc instead of
	permalloc.
	(unicosmk_add_extern): Likewise.
	* config/c4x/c4x.c (c4x_external_ref): Likewise.
	(c4x_global_label): Likewise.
	* config/frv/frv.c (frv_encode_section_info): Likewise.
	* config/i386/winnt.c (i386_pe_record_external_function): Likewise.
	(i386_pe_record_exported_symbol): Likewise.
	* config/mips/mips.c (mips_output_external): Likewise.
	(mips_output_external_libcall): Likewise.
	* config/pa/pa.c: (permanent_obstack): Delete declaration.
	(output_call): Use ggc_strdup instead of allocating on
	permanent_obstack.
	* config/romp/romp.c: Include ggc.h.
	(get_symref): Don't declare permanent_obstack, use ggc_strdup
	intead of permanent_obstack.
	* config/rs6000/aix31.h (ASM_OUTPUT_EXTERNAL): Use concat
	instead of permalloc.
	* config/rs6000/rs6000.c (rs6000_gen_section_name): Use xmalloc
	instead of permalloc
	* config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Use concat
	instead of permalloc.
	* config/vax/vax.c (vms_check_external): Use xmalloc instead of
	permalloc.

Index: cp/ChangeLog
2002-08-04  Geoffrey Keating  <geoffk@redhat.com>

	* cvt.c (ocp_convert): Delete obsolete code.
	* parse.y (permanent_obstack): Delete declaration.
	* pt.c (permanent_obstack): Delete declaration.
	* repo.c (permanent_obstack): Delete declaration.
	(open_repo_file): Use xmalloc instead of permanent_obstack.
	(init_repo): Use xstrdup instead of permanent_obstack.

Index: java/ChangeLog
2002-08-04  Geoffrey Keating  <geoffk@redhat.com>

	* class.c: (permanent_obstack): Delete declaration.
	* constants.c: (permanent_obstack): Delete declaration.
	* except.c: (permanent_obstack): Delete declaration.
	* expr.c: (permanent_obstack): Delete declaration.
	* jcf-parse.c: (permanent_obstack): Delete declaration.
	(saveable_obstack): Delete declaration.
	* parse.h: (permanent_obstack): Delete declaration.
	* typeck.c: (permanent_obstack): Delete declaration.

From-SVN: r56035
2002-08-04 22:45:31 +00:00
Jason Merrill
de8920be70 explow.c (int_expr_size): New fn.
* explow.c (int_expr_size): New fn.
        * expr.c (expand_expr) [CONSTRUCTOR]: Use it.
        * expr.h: Declare it.

From-SVN: r56009
2002-08-03 16:20:35 -04:00
Jason Merrill
a77a9a18c0 langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro.
* langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro.
        * langhooks.c (lhd_expr_size): Define default.
        * langhooks.h (struct lang_hooks): Add expr_size.
        * explow.c (expr_size): Call it.
        * expr.c (store_expr): Don't copy an expression of size zero.
        (expand_expr) [CONSTRUCTOR]: Use expr_size to calculate how much
        to store.
        * Makefile.in (builtins.o): Depend on langhooks.h.

        * cp-lang.c (LANG_HOOKS_EXPR_SIZE): Define.
        (cp_expr_size): New fn.
        * call.c (build_over_call): Lose empty class hackery.
        (convert_arg_to_ellipsis): Promote non-POD warning to error.
        * typeck.c (build_modify_expr): Don't use save_expr on an lvalue.

From-SVN: r55983
2002-08-02 07:57:22 -04:00
Kaveh R. Ghazi
83321d3633 * expr.c (expand_assignment): Delete unused variable.
From-SVN: r55933
2002-08-01 15:40:07 +00:00
Richard Henderson
6f1087be10 emit-rtl.c (set_mem_attributes_minus_bitpos): Rename from set_mem_attributes and add BITPOS argument.
* emit-rtl.c (set_mem_attributes_minus_bitpos): Rename from
        set_mem_attributes and add BITPOS argument.  Subtract it from
        OFFSET when same is adjusted.
        (set_mem_attributes): New wrapper function.
        * expr.c (expand_assignment): Use set_mem_attributes_minus_bitpos;
        remove offset adjustment hack.
        * expr.h (set_mem_attributes_minus_bitpos): Declare.

From-SVN: r55846
2002-07-29 12:53:34 -07:00
Richard Henderson
8ad8135aa4 expr.c (expand_expr): Use GOTO_SUBROUTINE_EXPR form when not optimizing.
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR
        form when not optimizing.

From-SVN: r55723
2002-07-24 15:05:19 -07:00
Richard Henderson
8943a0b4d8 expr.c (expand_expr): Don't use GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded.
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Don't use
        GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded.

        * lang.c (java_unsafe_for_reeval): New.
        (LANG_HOOKS_UNSAFE_FOR_REEVAL): New.

From-SVN: r55636
2002-07-21 17:42:54 -07:00
J"orn Rennecke
cffa218913 expr.c (emit_move_insn_1): Handle arbitrary moves that are the same size as a word.
* expr.c (emit_move_insn_1): Handle arbitrary moves that are
	the same size as a word.

	* regrename.c (find_oldest_value_reg): Take WORDS_BIG_ENDIAN /
	BYTES_BIG_ENDIAN into account.

From-SVN: r55482
2002-07-16 11:59:15 +01:00
Roger Sayle
78762e3b66 expr.c [...]: New macro defining the maximum number of move instructions to use when...
* expr.c [CLEAR_RATIO]: New macro defining the maximum number
	of move instructions to use when clearing memory, c.f. MOVE_RATIO.
	[CLEAR_BY_PIECES]: New macro, using CLEAR_RATIO, to determine
	whether clear_by_pieces should be used to clear storage.
	(clear_storage): Use CLEAR_BY_PIECES instead of MOVE_BY_PIECES.

	* doc/tm.texi: Document these two new target macros.

From-SVN: r55429
2002-07-13 00:13:15 +00:00
Aldy Hernandez
cb2a532e9f simd-1.c: New.
2002-06-16  Aldy Hernandez  <aldyh@redhat.com>

	* gcc.c-torture/execute/simd-1.c: New.

	* gcc.dg/simd-1.c: New.

	* doc/extend.texi (Vector Extensions): Document that we can
	specify simd types not specifically supported by the hardware.
	Document that simd types can be used as function arguments.
	Document that signness does make a difference in SIMD types.
	Misc cleanups and revisions to the "vector extensions" section.

	* simplify-rtx.c (simplify_subreg): Simplify subregs of vector
	constants.

	* expr.c (vector_mode_valid_p): New.

	* expr.h: Add vector_mode_valid_p.

	* defaults.h (VECTOR_MODE_SUPPORTED_P): Set default.

	* emit-rtl.c (immed_double_const): Do not abort on vectors.

	* c-common.c (type_for_mode): Always build vector nodes regardless
	of VECTOR_MODE_SUPPORTED_P.
	(handle_mode_attribute): Error if we can't emulate a nonexisting
	vector mode.
	(handle_vector_size_attribute): Same.

	* optabs.c (expand_binop): Open-code vector operations.
	(expand_unop): Open-code vector unops.
	(expand_vector_binop): New.
	(expand_vector_unop): New.

	* c-typeck.c (build_binary_op): Allow vectors in binops.
	Allow vectors in conditional operatiors.
	(build_unary_op): Allow vectors in unary minus.

	* config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Conditionalize on
	TARGET_ALTIVEC.

From-SVN: r54727
2002-06-18 01:35:47 +00:00
Roger Sayle
129e0ee875 expr.c (compare_from_rtx): Call simplify_relational_operation on all comparisons...
* expr.c (compare_from_rtx): Call simplify_relational_operation
	on all comparisons, not just those between integer constants,
	with the correct (possibly unsigned) comparison code.
	(do_compare_rtx_and_jump): Likewise.

From-SVN: r54657
2002-06-15 20:21:22 +00: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
Jeff Law
bf1660a670 alias.c (static_reg_base_value): New to hold RTL for items allocated once per function for the aliasing code.
* alias.c (static_reg_base_value): New to hold RTL for
	items allocated once per function for the aliasing code.
	(init_alias_once_per_function): Initialize static_reg_base_value.
	(init_alias_analysis): Avoid throw-away allocations of RTL by
	using pre-computed values in static_reg_base_value.
	* function.c (prepare_function_start): Call
	init_alias_once_per_function appropriately.
	* rtl.h (init_alias_once_per_function): Declare.
	* caller-save (init_caller_save): Restructure slightly to
	avoid lots of silly RTL generation.
	* expr.c (init_expr_once): Likewise.
	* reload1.c (reload_cse_regs_1): Allocate throw-away register
	RTL object here.  Pass it into children.
	(reload_cse_simplify_operands): Use passed-in register RTL
	object.
	(reload_cse_simplify): Pass through throw-away register
	RTL object.

From-SVN: r54442
2002-06-10 10:32:45 -06:00
Jeff Law
e50126e858 emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.
* emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.
	* combine.c (move_deaths): Use regno_reg_rtx for hard regs rather
	than creating a new register.
	(distribute_notes): Likewise.
	* df.c (df_reg_use_gen): Likewise.
	(df_reg_clobber_gen): Likewise.
	(df_ref_record): Likewise.
	* expr.c (use_regs): Likewise.
	* flow.c (propagate_one_insn): Likewise.
	(mark_set_1): Likewise.
	(mark_used_reg): Likewise.
	* reload.c (emit_reload_insns): Likewise.

From-SVN: r54358
2002-06-07 19:51:22 -06:00
Geoffrey Keating
e2500fedef Merge from pch-branch up to tag pch-commit-20020603.
From-SVN: r54232
2002-06-04 07:11:05 +00:00
Kazu Hirata
0fb7aedacd emit-rtl.c: Likewise.
* emit-rtl.c: Likewise.
	* errors.h: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* expr.h: Likewise.

From-SVN: r54197
2002-06-03 01:13:17 +00:00
Igor Shevlyakov
b2e426a0cc expr.c (compare_from_rtx): Generate comparison between op0 and op1 rather than cc0 and 0 in a case when...
* expr.c (compare_from_rtx): Generate comparison between op0 and op1
        rather than cc0 and 0 in a case when HAVE_cc0 is not defined.

From-SVN: r54122
2002-05-31 15:08:12 -07:00
Aldy Hernandez
00182e1edc expr.c (expand_expr): Output partially zeroed out vectors with output_constant_def.
2002-05-31  Aldy Hernandez  <aldyh@redhat.com>

        * expr.c (expand_expr): Output partially zeroed out vectors with
        output_constant_def.

From-SVN: r54080
2002-05-31 02:21:31 +00:00
Zack Weinberg
11ad4784f3 tree.h: Forward-declare struct realvaluetype.
* tree.h: Forward-declare struct realvaluetype.
	(struct tree_real_cst): Point to the REAL_VALUE_TYPE, do not
	contain it.
	(TREE_REAL_CST_PTR): New accessor.
	(TREE_REAL_CST): Update.
	* real.h: Include machmode.h.
	(realvaluetype): Make it struct realvaluetype, not a typedef.
	(build_real): Prototype here.

	* tree.c: Include real.h.
	(build_real): Allocate the REAL_VALUE_TYPE as a separate
	object in GC memory, set TREE_REAL_CST_PTR to point to it.
	(build_real_from_int_cst): Use build_real.
	* ggc-common.c (ggc_mark_trees): Mark TREE_REAL_CST_PTR of a
	REAL_CST.

	* builtins.c, c-common.c, c-lex.c, dwarf2out.c, expr.c,
	fold-const.c, print-tree.c, real.c, cp/mangle.c, cp/tree.c,
	f/bld.c, f/com.c, f/expr.c, f/target.c, java/decl.c,
	java/jcf-parse.c, java/parse.y, java/typeck.c: Include real.h.
	* Makefile.in, cp/Make-lang.in, f/Make-lang.in,
	java/Make-lang.in: Update dependency lists.

From-SVN: r53959
2002-05-28 17:33:14 +00:00
Roger Sayle
cf5124f688 re PR middle-end/6600 (i960 toolchain hits abort in c_readstr)
PR middle-end/6600
	* expr.c (STORE_MAX_PIECES): New macro to avoid immediate constants
	larger than INTEGER_CST.  (store_by_pieces_1): Use it here...
	(can_store_by_pieces): ... and here to limit the largest mode used.
	Add a comment to document this function.

From-SVN: r53706
2002-05-21 22:38:00 +00:00
Richard Henderson
1f8c3c5b31 expr.c (init_expr_once): Don't use start/end_sequence.
* expr.c (init_expr_once): Don't use start/end_sequence.
        Use rtx_alloc instead of emit_insn.
        * toplev.c (lang_dependent_init): Run init_expr_once here ...
        (lang_independent_init): ... not here.

From-SVN: r53572
2002-05-17 15:46:22 -07:00
Richard Sandiford
ce0f3925aa * expr.c (force_operand): Fix reversed move.
From-SVN: r53556
2002-05-17 11:37:24 +00:00
Zack Weinberg
5692c7bc60 emit-rtl.c (global_rtl): Update comment.
* emit-rtl.c (global_rtl): Update comment.
	(const_double_htab, const_double_htab_hash,
	const_double_htab_hash, lookup_const_double): New.
	(const_int_htab_hash, const_int_htab_eq): Remove const
	qualifiers, which cause tons of warnings with RTL checking on.
	(gen_rtx_CONST_DOUBLE): Deleted.
	(const_double_from_real_value): New function - bears some
	resemblance to the former immed_real_const_1.
	(immed_double_const): Moved here from varasm.c and
	simplified.
	(gen_rtx_REG): Make REGNO unsigned to squelch warnings.
	(gen_rtx_SUBREG): Use gen_rtx_raw_SUBREG.
	(gen_rtx): Use immed_double_const.
	(init_emit_once): Initialize the const_double_htab.  Use
	REAL_VALUE_FROM_INT where possible.  Can now use
	CONST_DOUBLE_FROM_REAL_VALUE when setting up const_tiny_rtx.
	* varasm.c (struct varasm_status): Remove x_const_double_chain.
	(const_double_chain, immed_real_const, clear_const_double_mem): Delete.
	(immed_double_const, immed_real_const_1): Moved to emit-rtl.c.
	(init_varasm_status, mark_varasm_status): Don't touch
	x_const_double_chain.

	* output.h: Delete prototype for clear_const_double_mem.
	* real.h: Make REAL_VALUE_TYPE a macro again.  Remove leading
	'0' slot from all CONST_DOUBLE_FORMAT definitions.  Prototype
	const_double_from_real_value, not immed_real_const_1, and use
	it to define CONST_DOUBLE_FROM_REAL_VALUE.  Define new macro
	CONST_DOUBLE_ATOF.
	* rtl.h (CONST_DOUBLE_CHAIN): Kill.
	(CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH): Adjust.
	(gen_rtx_CONST_DOUBLE, immed_real_const): Delete prototypes.
	(gen_rtx_REG): Second arg is unsigned.

	* gengenrtl.c (special_rtx): Take out CONST_DOUBLE.
	(excluded_rtx): New, return true for CONST_DOUBLE.
	(genmacro): Write nothing for excluded codes.
	* combine.c (combine_simplify_rtx): Use CONST_DOUBLE_FROM_REAL_VALUE.
	* expr.c (expand_expr): Likewise.
	* ggc-common.c (ggc_mark_rtx_children_1): Don't mark the
	CONST_DOUBLE_CHAIN.
	* toplev.c (rest_of_compilation): Don't call
	clear_const_double_mem.

	* config/rs6000/rs6000.c (rs6000_float_const): Delete.
	(rs6000_hash_constant): Remove CONST_DOUBLE special case.
	(toc_hash_eq): Remove CONST_DOUBLE and LABEL_REF special cases.
	* config/rs6000/rs6000-protos.h: Don't prototype rs6000_float_const.
	* config/c4x/c4x.md, config/rs6000/rs6000.md: Use CONST_DOUBLE_ATOF.
	* config/dsp16xx/dsp16xx.md, config/mips/mips.md,
	config/pa/pa.md: Use CONST_DOUBLE_FROM_REAL_VALUE.
	* config/sparc/sparc.md, config/sparc/sparc.c: Use immed_double_const.

From-SVN: r53409
2002-05-13 04:50:20 +00:00
Richard Henderson
51286de650 expr.c (compress_float_constant): New.
* expr.c (compress_float_constant): New.
        (emit_move_insn): Use it.
        (float_extend_from_mem): New.
        (init_expr_once): Initialize it.
        * real.c (exact_real_truncate): New.

        * config/i386/i386.h (CONST_COSTS): Assume CONST_DOUBLE gets
        dropped into memory; penalize for size.
        (RTX_COSTS): FLOAT_EXTEND is free.
        * config/i386/i386.md (extendsfdf2, extendsfxf2, extendsftf2,
        extenddfxf2, extenddftf2): Accept constants and drop them to memory.

From-SVN: r53401
2002-05-12 10:09:24 -07:00
Richard Henderson
818c0c9493 re PR c++/6212 (g++ testsuite EH regressions for irix6 -mabi=64)
PR c++/6212
        * expr.c (highest_pow2_factor_for_type): New.
        (expand_assignment): Use it.

From-SVN: r53249
2002-05-06 22:44:26 -07:00
Jan Hubicka
8a28dbccfd expr.c (force_operand): Use expand_simple_* to handle more cases.
* expr.c (force_operand): Use expand_simple_* to handle more
	cases.

From-SVN: r53154
2002-05-04 11:23:21 +00:00
Kazu Hirata
e0a2f70599 combine.c: Fix comment formatting.
* combine.c: Fix comment formatting.
	* expr.c: Likewise.
	* genautomata.c: Likewise.
	* stmt.c: Likewise.
	* tree.h: Likewise.

From-SVN: r53044
2002-05-02 13:55:35 +00:00
Jakub Jelinek
a9772b60f3 re PR middle-end/6279 (gcc-3.1 miscompiles qmake on IA-64)
PR middle-end/6279
	* expr.c (store_expr): Don't copy if DECL_RTL (exp) == target.

	* expr.c (safe_from_p): Cleanup: use DECL_RTL_IF_SET.

From-SVN: r52356
2002-04-16 08:09:39 +02:00
Richard Kenner
fa06ab5c42 expr.c (expand_assigment): Remove duplicate conversions #ifdef POINTERS_EXTEND_UNSIGNED.
* expr.c (expand_assigment): Remove duplicate conversions #ifdef
	POINTERS_EXTEND_UNSIGNED.
	(store_constructor, expand_expr, case COMPONENT_REF): Likewise.
	(store_expr): Use TYPE_MODE (sizetype), not ptr_mode.

From-SVN: r52223
2002-04-12 08:33:24 -04:00
Jakub Jelinek
010f87c44f re PR rtl-optimization/6177 (ia64 ICE with single-element complex array in LAPACK)
PR optimization/6177
	* expr.c (expand_expr) [COMPONENT_REF]: Handle op0 CONCAT if
	bitpos is 0 and bitsize CONCAT size.

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

From-SVN: r52178
2002-04-11 23:04:09 +02:00
Richard Henderson
c2e9dc85ff expr.c (expand_expr): Don't force into registers if EXPAND_INITIALIZER.
* expr.c (expand_expr) [INTEGER_CST]: Don't force into registers
        if EXPAND_INITIALIZER.

From-SVN: r52118
2002-04-10 00:11:32 -07:00
Richard Henderson
d8a50944dc expr.c (expand_expr): Force overflows into registers.
* expr.c (expand_expr) [INTEGER_CST]: Force overflows into registers.

	* gcc.c-torture/compile/20020409-1.c: New.

From-SVN: r52104
2002-04-09 19:22:20 -07:00