Commit Graph

387 Commits

Author SHA1 Message Date
Jan Hubicka
d448860e15 expmed.c (expand_mult_const): Force operand to constant.
* expmed.c (expand_mult_const): Force operand to constant.
	* rs6000.c (rs6000_emit_set_const, rs6000_emit_set_long_const): Add
	copy_rtx to arguments.

From-SVN: r120037
2006-12-19 01:03:13 +00:00
Andrew Pinski
0890b981c9 re PR middle-end/28436 (accessing an element via a "pointer" on a vector does not cause vec_extract to be used)
2006-12-12  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR tree-opt/28436
        * tree.h (DECL_COMPLEX_GIMPLE_REG_P): Rename to ...
        (DECL_GIMPLE_REG_P): This.
        * fold-const.c (fold_indirect_ref_1): Fold *(foo *)&vectorfoo into
        using BIT_FIELD_REF.
        * omp-low.c (omp_copy_decl_2): Use the renamed DECL_GIMPLE_REG_P.
        * tree-gimple.c (is_gimple_reg): Use the renamed DECL_GIMPLE_REG_P
        and check for VECTOR_TYPE.
        * expr.c (get_inner_reference): Set the mode for BIT_FIELD_REF with
        vector types.
        * tree-flow-inline.h (var_can_have_subvars): Use the renamed
        DECL_GIMPLE_REG_P.
        * gimplify.c (internal_get_tmp_var): Use the renamed DECL_GIMPLE_REG_P
        and check for VECTOR_TYPE.
        (gimplify_bind_expr): Likewise.
        (gimplify_function_tree): Likewise.
        * expmed.c: Include target.h.
        (extract_bit_field): For vector mode, try find a better mode first.
        If that fails use gen_lowpart (for vectors only).
        * tree-dfa.c (make_rename_temp): Use the renamed DECL_GIMPLE_REG_P
        and check for VECTOR_TYPE.
        * tree-ssa-pre.c (create_expressions_by_pieces): Likewise.
        (insert_into_preds_of_block): Likewise.
        (insert_fake_stores): Create gimple register store_tmps for
        vector types.
        * tree-sra.c (sra_elt): New field, is_vector_lhs.
        (sra_walk_expr <case BIT_FIELD_REF>): For vector types that
        are the left hand side, set the element's is_vector_lhs to true.
        (instantiate_element): For vector types which were on the left         hand size, set DECL_GIMPLE_REG_P to false.
        * tree-nested.c (create_tmp_var_for): Use the renamed DECL_GIMPLE_REG_P.        * tree-inline.c (declare_return_variable):  Use the renamed
        DECL_GIMPLE_REG_P
        and check for VECTOR_TYPE.         (copy_decl_to_var):  Use the renamed DECL_GIMPLE_REG_P.
        (copy_result_decl_to_var): Likewise.
        * tree-vect-transform.c (vect_get_new_vect_var): For vector types,         create a gimple register variable.
        (vect_permute_store_chain): Set DECL_GIMPLE_REG_P to true for the
        vect_inter_* temp variables.
        * Makefile.in (expmed.o): Update dependencies.

2006-12-12  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR tree-opt/28436
        * gcc.c-torture/compile/vector-1.c: New test.
        * gcc.c-torture/compile/vector-2.c: New test.
        * gcc.c-torture/compile/vector-3.c: New test.

From-SVN: r119801
2006-12-12 14:33:06 -08:00
Richard Earnshaw
a41a56b62d expmed.c (emit_store_flag_1): New function.
* expmed.c (emit_store_flag_1): New function.
	(emit_store_flag): Call it.  If we can't find a suitable scc insn,
	try a cstore insn.
	* expr.c (do_store_flag): If we can't find a scc insn, try cstore.
	Use do_compare_rtx_and_jump.
	* arm.h (BRANCH_COST): Increase to 2 on Thumb.
	* arm.md (cstoresi4): New define_expand.
	(cstoresi_eq0_thumb, cstoresi_ne0_thumb): Likewise.
	(cstoresi_eq0_thumb_insn, cstore_ne0_thumb_insn): New patterns.
	(cstoresi_nltu_thumb, thumb_addsi3_addgeu): New patterns.

From-SVN: r118829
2006-11-14 23:25:43 +00:00
Jason Merrill
84816907e4 re PR middle-end/28915 (ICE: tree check: expected class 'constant', have 'declaration' (var_decl) in build_vector, at tree.c:973)
PR middle-end/28915
        * gimplify.c (gimplify_init_constructor): Don't reduce TREE_CONSTANT
        vector ctors.
        * tree-cfg.c (verify_expr): Don't look into TREE_CONSTANT
        vector ctors.
        * expmed.c (make_tree): Handle CONST, SYMBOL_REF.
        * tree.c (build_vector): Handle non-_CST elements.

Co-Authored-By: Andrew Pinski <pinskia@physics.uc.edu>

From-SVN: r118747
2006-11-13 03:16:11 -05:00
Roger Sayle
b8b7f1621f tree.c (build_int_cst_wide): Add an assertion (gcc_unreachable) when attempting to build INTEGER_CSTs of...
* tree.c (build_int_cst_wide): Add an assertion (gcc_unreachable)
	when attempting to build INTEGER_CSTs of non-integral types.
	* expmed.c (make_tree): Use the correct type, i.e. the inner
	type, when constructing the individual elements of a CONST_VECTOR.

From-SVN: r118678
2006-11-11 01:47:18 +00:00
Roger Sayle
cb2eb96f4d re PR middle-end/28283 (SuperH: Very unoptimal code generated for 64-bit ints)
PR middle-end/28283
	* expmed.c (expand_shift): Additionally check that the shift_cost
	is not MAX_COST and that INTVAL(op1) is less than MAX_BITS_PER_WORD
	before implementing a LSHIFT_EXPR as a sequence of additions.
	* config/sh/sh.c (shift_costs): Return MAX_COST to inform the
	middle-end that DImode shifts need to be synthesized by expand.

From-SVN: r115578
2006-07-19 05:13:56 +00:00
Roger Sayle
fa00f91b0d re PR target/27861 (ICE in expand_expr_real_1, at expr.c:6916)
PR target/27861
	* expmed.c (expand_shift): On SHIFT_COUNT_TRUNCATED targets, we may
	have stripped a SUBREG from the shift count, so we may need to
	convert_to_mode back to the type's mode before calling make_tree.
	Use new_amount instead of amount to avoid expanding a tree twice.

	* gcc.dg/pr27861-1.c: New test case.

From-SVN: r114773
2006-06-19 14:57:17 +00:00
Paolo Bonzini
33b881ca3a re PR middle-end/27733 (Large compile time regression)
2006-06-08  Paolo Bonzini  <bonzini@gnu.org>

	PR middle-end/27733
	* expmed.c (struct alg_hash_entry): Fix type of field T
	to match synth_mult argument.
	(NUM_ALG_HASH_ENTRIES): Make it bigger for 64-bit HOST_WIDE_INT.

From-SVN: r114488
2006-06-08 15:40:48 +00:00
Roger Sayle
c505fc0613 re PR rtl-optimization/22563 (performance regression for gcc newer than 2.95)
PR rtl-optimization/22563
	* expmed.c (store_fixed_bit_field): When using AND and IOR to store
	a fixed width bitfield, always force the intermediates into psuedos.

From-SVN: r113762
2006-05-14 15:48:11 +00:00
Roger Sayle
135c2bd408 expmed.c (store_fixed_bit_field): If we're not optimizing for size...
* expmed.c (store_fixed_bit_field): If we're not optimizing for
	size, force the intermediate into a new pseudo rather instead of
	performing both a bitwise AND and a bitwise IOR in memory.

From-SVN: r113318
2006-04-27 17:26:03 +00:00
Roger Sayle
f7acbf4c82 expmed.c (store_bit_field): Also check whether the bitsize is valid for the machine's "insv" instruction...
* expmed.c (store_bit_field): Also check whether the bitsize is
	valid for the machine's "insv" instruction before moving the
	target into a pseudo for use with the insv.
	* config/i386/predicates.md (const8_operand): New predicate.
	* config/i386/i386.md (extv, extzv, insv): Use the new
	const8_operand predicate where appropriate.

From-SVN: r113265
2006-04-26 00:51:14 +00:00
Andreas Krebbel
495db1a115 expmed.c (store_bit_field): Handle paradoxical subregs on big endian machines.
2006-04-25  Andreas Krebbel  <krebbel1@de.ibm.com>

	* expmed.c (store_bit_field): Handle paradoxical subregs on big endian
	machines.

2006-04-25  Andreas Krebbel  <krebbel1@de.ibm.com>

	* gcc.dg/20060425-1.c: New testcase.

From-SVN: r113248
2006-04-25 12:11:25 +00:00
Kazu Hirata
2f8dc5bb4c expmed.c (expand_mult_add): Remove.
* expmed.c (expand_mult_add): Remove.
	* expr.h: Remove the prototype for expand_mult_add.

From-SVN: r111712
2006-03-04 19:44:17 +00:00
Roger Sayle
feb0478035 re PR middle-end/25724 (Emits call to __cmpdi2 for long long comparison in switches)
PR middle-end/25724
	* dojump.c (do_jump): Call do_compare_rtx_and_jump.
	(do_jump_parts_zero_rtx): New function renamed from
	do_jump_parts_equality_rtx.  Made static.  Add a mode argument.
	(do_jump_parts_equality_rtx): New function split out from
	do_jump_parts_equality.  Old implementation renamed as above.
	Call do_jump_parts_zero_rtx if either operand is zero.
	(do_jump_parts_equality): Call do_jump_parts_equality_rtx to
	do all of the heavy lifting.
	(do_compare_rtx_and_jump): Handle multi-word comparisons by
	calling either do_jump_by_parts_greater_rtx or
	do_jump_by_parts_equality_rtx.
	* expr.h (do_jump_by_parts_equality_rtx): Remove prototype.
	* expmed.c (do_cmp_and_jump): Now multi-word optimization has
	moved to do_compare_rtx_and_jump, call it directly.
	* stmt.c (do_jump_if_equal): Remove static prototype.  Add a
	mode argument.  Call do_compare_rtx_and_jump.
	(emit_case_nodes): Update calls to do_jump_if_equal.

From-SVN: r110906
2006-02-13 01:55:37 +00:00
Marcin Dalecki
842173466d expr.h (expand_normal): new inline function.
2006-01-30  Marcin Dalecki  <martin@dalecki.de>

	* expr.h (expand_normal): new inline function.
	* builtins.c: use it, use EXPAND_NORMAL explicitely.
	* dojump.c: use it.
	* dwarf2out.c: use it.
	* expr.c: use it.
	* calls.c: use it.
	* expmed.c: use it.
	* except.c: use it.
	* config/sparc/sparc.c: use it.
	* config/i386/i386.c: use it.
	* config/rs6000/rs6000.c: use it.
	* config/arm/arm.c: use it.
	* config/mips/mips.c: use it.
	* stmt.c: use it, use EXPAND_NORMAL explicitely.

From-SVN: r110428
2006-01-31 05:44:14 +01:00
Kazu Hirata
b79de014cc expmed.c (const_mult_add_overflow_p): Remove.
* expmed.c (const_mult_add_overflow_p): Remove.
	* expr.h: Remove the prototype for const_mult_add_overflow_p.

From-SVN: r110334
2006-01-28 22:01:54 +00:00
DJ Delorie
1bb8d49c5e expmed.c (store_bit_field): Don't arbitrarily deny using insv for storing constants in single-bit bitfields.
* expmed.c (store_bit_field): Don't arbitrarily deny using insv
for storing constants in single-bit bitfields.

From-SVN: r110185
2006-01-24 18:10:54 -05:00
Jon Grimm
15ed7b52cb optabs.c (init_floating_libfuncs): Handle decimal float modes.
* optabs.c (init_floating_libfuncs): Handle decimal float modes.
	(init_optabs): Handle libfuncs for decimal float.
	* genopinit.c (gen_insn): Handle MODE_DECIMAL_FLOAT.
	* stor-layout.c (int_mode_for_mode): Likewise.
	* simplify-rtx.c (simplify_immed_subreg): Likewise.
	(simplify_unary_operation_1): Skip optimisations for decimal float
	modes.
	* varasm.c (output_constant_pool_2): Handle MODE_DECIMAL_FLOAT.
	* emit-rtl.c (gen_const_vector): Add assertion check.
	(init_emit_once): Populate const_tiny_rtx with constants in each
	decimal float mode.
	* expmed.c (extract_high_half, expand_mult_highpart_optab,
	expand_mult_highpart): Assert that mode is not a scalar float
	mode.
	* expr.c (convert_move): Handle conversion between decimal and
	binary floats of the same size.
	* convert.c (convert_to_real): Consider decimal float types when
	folding.
	* dwarf2out.c (base_type_die): Use DW_ATE_decimal_float to
	describe decimal floating point types.

Co-Authored-By: Ben Elliston <bje@au.ibm.com>
Co-Authored-By: Janis Johnson <janis187@us.ibm.com>

From-SVN: r108762
2005-12-19 08:40:47 +11:00
Roger Sayle
a28b2ac662 expmed.c (div_cost): Replace with...
* expmed.c (div_cost): Replace with...
	(sdiv_cost, udiv_cost): New.
	(init_expmed): Initialize sdiv_cost and udiv_cost, not div_cost.
	Rename the div and mod fields, used to initialize sdiv_pow2_cheap
	and smod_pow2_cheap, to sdiv_32 and smod_32 to avoid confusion.
	(expand_divmod): Replace use of div_cost with either sdiv_cost
	or udiv_cost depending upon the signedness of the operation.

From-SVN: r107641
2005-11-29 03:06:14 +00:00
Roger Sayle
18eaea7f15 re PR middle-end/21309 (internal compiler error: in expand_mult_const, at expmed.c:2884)
PR middle-end/21309
	* expmed.c (choose_mult_variant): Return immediately when mult_cost
	is less than zero.  Limit mult_cost to a reasonable upper bound for
	the synthetic multiplication sequence.

From-SVN: r107537
2005-11-26 04:06:57 +00:00
Alan Modra
30f37b8d0c re PR middle-end/24950 (ICE in operand_subword_force)
PR middle-end/24950
	* expmed.c (store_bit_field): Don't attempt to insv a field
	larger than the reg.

From-SVN: r107354
2005-11-22 23:46:29 +10:30
Ben Elliston
3d8bf70f59 optabs.c (expand_abs_nojump): Use SCALAR_FLOAT_MODE_P instead of explicitly testing GET_MODE_CLASS (x) ==...
* optabs.c (expand_abs_nojump): Use SCALAR_FLOAT_MODE_P instead of
	explicitly testing GET_MODE_CLASS (x) == MODE_FLOAT.
	* genopinit.c (gen_insn): Likewise.
	* reload.c (find_equiv_reg): Likewise.
	* loop.c (load_mems): Likewise.
	* rtlanal.c (may_trap_p_1, canonicalize_condition): Likewise.
	* cse.c (find_comparison_args, fold_rtx): Likewise.
	* dwarf2out.c (add_const_value_attribute): Likewise.
	* expr.c (convert_move): Likewise.
	* recog.c (general_operand, register_operand): Likewise.
	* reg-stack.c (replace_reg): Likewise.
	* tree-vect-generic.c (type_for_widest_vector_mode): Likewise.
	* c-common.c (handle_vector_size_attribute): Likewise.
	* simplify-rtx.c (simplify_const_unary_operation): Likewise.
	(simplify_binary_operation_1): Likewise.
	(simplify_const_binary_operation): Likewise.
	(simplify_relational_operation): Likewise.
	(simplify_const_relational_operation): Likewise.
	(simplify_immed_subreg): Likewise.
	* emit-rtl.c (gen_lowpart_common): Likewise.
	* expmed.c (expand_mult): Likewise.
	* stor-layout.c (layout_type): Likewise.

From-SVN: r107322
2005-11-22 07:53:27 +11:00
Dale Johannesen
69498c64a3 expmed.c (store_bit_field): Add offset unconditionally for memory targets.
2005-11-14  Dale Johannesen  <dalej@apple.com>

        * expmed.c (store_bit_field):  Add offset unconditionally for
        memory targets.
        (extract_bit_field):  Don't force extzv or extv operand into
        a register if field is too big.

From-SVN: r106919
2005-11-15 00:45:55 +00:00
Eric Botcazou
3ab997e838 expmed.c (extract_bit_field): Do not use insv/extv/extzv patterns if the bitsize is zero.
* expmed.c (extract_bit_field): Do not use insv/extv/extzv patterns
	if the bitsize is zero.
	* doc/md.texi (Standard Pattern Names): Document it.

	* config/ia64/ia64.c (ia64_pass_by_reference): Delete.
	(TARGET_PASS_BY_REFERENCE): Likewise.

From-SVN: r106605
2005-11-07 19:14:02 +00:00
Mark Mitchell
0f8594eee9 re PR middle-end/17886 (variable rotate and unsigned long long rotate should be better optimized)
PR 17886
	* expmed.c (expand_shift): Move logic to reverse rotation
	direction when 	rotating by constants ...
	* optabs.c (expand_binop): ... here.
	* config/i386/i386.md (rotrdi3): Handle 32-bit mode.
	(ix86_rotrdi3): New pattern.
	(rotldi3): Handle 32-bit mode.
	(ix86_rotldi3): New pattern.

From-SVN: r104761
2005-09-29 03:31:23 +00:00
Andreas Krebbel
6231646a02 expmed.c (expand_shift): Don't use the target of the rotate as target for the first expanded shift insn.
2005-09-22  Andreas Krebbel  <krebbel1@de.ibm.com>

	* expmed.c (expand_shift): Don't use the target of the rotate as
	target for the first expanded shift insn.
	* testsuite/gcc.dg/20050922-1.c: Testcase added.

From-SVN: r104528
2005-09-22 14:45:27 +00:00
Kazu Hirata
0178027cd5 expmed.c (alg_code): Add alg_impossible.
* expmed.c (alg_code): Add alg_impossible.
	(alg_hash_entry): Add cost.
	(synth_mult): Record alg_impossible in the hash table if
	multiplication by a given integer is impossble within the
	limit.  Speed up using alg_impossible.

From-SVN: r104492
2005-09-21 16:32:10 +00:00
David Edelsohn
5e839bc820 Add comment to expand_mult max_cost change.
From-SVN: r104379
2005-09-17 19:08:03 -04:00
David Edelsohn
53c4ca47ae re PR middle-end/22067 (Inconsistent multiply by immediate)
PR middle-end/22067
        * expmed.c (expand_mult): Substitute simple register for op0 when
        computing max_cost.

From-SVN: r104373
2005-09-17 16:17:54 -04:00
Daniel Berlin
820cc88fbd Makefile.in (TREE_H): Add treestruct.def.
2005-07-08  Daniel Berlin  <dberlin@dberlin.org>

	* Makefile.in (TREE_H): Add treestruct.def.
	(c-decl.o): Add pointer-set.h
	* c-decl.c (diagnose_mismatched_decls): Don't attempt to look at
	visibility on regular DECL's.
	(merge_decls): Fix the copying of decl nodes of various types for
	the new structures.  Don't update RTL, section name, weak status,
	etc, on DECL's without RTL.
	(grokdeclarator): DECL_ARG_TYPE_AS_WRITTEN is gone.
	Don't check volatile on non-variable types.
	(store_parm_decls_oldstyle): Use pointer_set instead of DECL_WEAK
	to check whether we have seen arguments.
	* c-objc-common.c (c_tree_printer): Reverse order of tests so that
	flag is checked before field (flag is common, field is not).
	* dwarf2out.c (decl_ultimate_origin):  Only DECL's with
	TS_DECL_COMMON could have an origin.
	(add_location_or_const_value_attribute): Don't check section name
	on non-var/function decls.
	(dwarf2out_var_location): Reverse order of tests.
	* emit-rtl.c (set_reg_attrs_for_parm): DECL_CHECK is dead, replace
	with DECL_WRTL_CHECK.
	* expmed.c (make_tree): rtl is now in decl_with_rtl.
	* fold-const.c (fold_binary): Don't check weakness on
	non-var/function decls.
	(tree_expr_nonzero_p): Ditto.
	(fold_checksum_tree): Use tree_decl_extra as sizeof
	buffer.
	* ggc-page.c (extra_order_size_table): Add sizes for
	tree_decl_non_common, tree_parm_decl,  tree_var_decl, and
	tree_field_decl.
	* gimplify.c (gimplify_bind_expr): Only set
	DECL_SEEN_IN_BIND_EXPR_P on VAR_DECL.
	* integrate.c (copy_decl_for_inlining): Don't set RTL on decl's
	without RTL.
	* langhooks-def.h (LANG_HOOK_INIT_TS): New.
	* langhooks.h (init_ts). New langhook.
	* passes.c (rest_of_decl_compilation): Reverse order of tests.
	* print-tree.c (print_node): Update to only print fields that
	exist in the structures the passed decl has.
	* toplev.c (wrapup_global_declarations): Don't reset
	DECL_DEFER_OUTPUT on DECL's that don't contain it.
	* tree-browser.c (browse_tree): DECL_ARG_TYPE_AS_WRITTEN removed.
	* tree-inline.c (remap_decl): Ditto.
	* tree-outof-ssa.c (create_temp): Reverse order of tests.
	* tree-pretty-print.c (print_declaration): Don't print
	DECL_REGISTER on things that don't contain it.
	* tree-vrp.c (expr_computes_nonzero): Don't check weakness on
	non-var/function decls.
	* tree.c (tree_contains_struct): New structure.
	(init_priority_for_decl): New hashtable.
	(tree_int_map): New structure.
	(tree_int_map_eq): New function.
	(tree_int_map_marked_p): Ditto.
	(tree_int_map_hash): Ditto.
	(tree_map): Move to tree.h.
	(tree_map_eq): Externalize.
	(tree_map_hash): Ditto.
	(tree_map_marked_p): Ditto.
	(init_ttree): Set up tree_contains_struct and call langhook.
	(decl_assembler_name): Use DECL_NON_COMMON_CHECK..
	(tree_code_size): Update for new structures.
	(tree_node_structure): Update for new structures.
	(make_node_stat): Don't try to set DECL_IN_SYSTEM_HEADER on decls
	without the field.
	(copy_node_stat):  Copy init priority.
	(build_decl_stat): Ditto for visibility.
	(ts_enum_names): New.
	(tree_contains_struct_check_failed): New function.
	(decl_init_priority_lookup): Ditto.
	(decl_init_priority_insert): Ditto.
	* treestruct.def: New file.
	* tree.h (CODE_CONTAINS_STRUCT): New macro.
	(CONTAINS_STRUCT_CHECK): Ditto.
	(tree_contains_struct_check_failed): New prototype.
	(DECL_CHECK): Removed.
	(DECL_MINIMAL_CHECK): New.
	(DECL_COMMON_CHECK): Ditto.
	(DECL_WRTL_CHECK): Ditto.
	(DECL_NON_COMMON_CHECK): Ditto.
	(DECL_WITH_VIS_CHECK): Ditto.
	(VAR_OR_FUNCTION_DECL_P): Ditto
	(struct tree_decl_minimal): New structure.
	(struct tree_decl_common): Ditto.
	(struct tree_decl_with_rtl): Ditto.
	(struct tree_decl_with_vis): Ditto.
	(struct tree_decl_non_common): Ditto.
	(struct tree_field_decl): Ditto.
	(struct tree_parm_decl): Ditto.
	(struct tree_var_decl): Ditto.
	(struct tree_function_decl): Ditto.
	(struct tree_const_decl): Ditto.
	(struct tree_result_decl): Ditto.
	(union tree_node): Add new structures.
	* var-tracking.c (track_expr_p): Reverse order of tests.

	* doc/c-tree.texi: Add documentation on DECL node internal structure.


2005-07-08  Daniel Berlin  <dberlin@dberlin.org>

	* utils.c (create_param_decl): DECL_ARG_TYPE_AS_WRITTEN is
	removed.

2005-07-08  Daniel Berlin  <dberlin@dberlin.org>

	* Make-lang.in: Add gt-cp-lang.h.
	(cp-lang.o): Ditto.
	* class.c (create_vtable_ptr): Stop setting DECL_ASSEMBLER_NAME on
	the field.
	* config-lang.in: Add cp-lang.c to gtfiles.
	* cp-lang.c: Include hashtab.h.
	(cp_init_ts): New function.
	(LANG_HOOK_INIT_TS): Use macro.
	(decl_shadowed_for_var_lookup): New function.
	(decl_shadowed_for_var_insert): Ditto.
	* cp-tree.h (THUNK_FUNCTION_CHECK): Use decl_common.
	(NON_THUNK_FUNCTION_CHECK): Ditto.
	(DECL_NAMESPACE_ASSOCIATIONS): Use decl_non_common.
	(DECL_INIT_PRIORITY): Ditto.
	(DECL_HAS_SHADOWED_FOR_VAR_P): Ditto.
	(DECL_SHADOWED_FOR_VAR): Use hashtable.
	(SET_DECL_SHADOWED_FOR_VAR): Ditto.
	* decl.c (duplicate_decls): Update for new/updated structures.
	(poplevel): Use SET_DECL_SHADOWED_FOR_VAR.
	* decl2.c (start_static_initialization_or_destruction): Deal with
	priority.
	* pt.c (tsubst_decl): Check TS_DECL_WRTL before doing
	SET_DECL_RTL.
	* tree.c (handle_init_priority_attribute): Handle priority.

2005-07-08  Daniel Berlin  <dberlin@dberlin.org>

	* objc-act.c (objc_push_parm): DECL_ARG_TYPE_AS_WRITTEN is
	removed.
	* objc-act.h (KEYWORD_ARG_NAME): Use decl_non_common.
	(KEYWORD_KEY_NAME): Use decl_minimal.
	(METHOD_SEL_NAME): Ditto..
	(METHOD_SEL_ARGS): Use decl_non_common.
	(METHOD_ADD_ARGS): Ditto.
	(METHOD_ADD_ARGS_ELLIPSIS_P): Use decl_common.
	(METHOD_DEFINITION): Ditto.
	(METHOD_ENCODING): Ditto.
	* objc-lang.c: (objc_init_ts): New function.

2005-07-08  Daniel Berlin  <dberlin@dberlin.org>

	* trans-decl.c (create_function_arglist): DECL_ARG_TYPE_AS_WRITTEN
	is removed.

From-SVN: r101799
2005-07-08 23:37:11 +00:00
Fariborz Jahanian
1d8eeb6305 Removal of -fforce-mem.
OKed by Richard Henderson.

From-SVN: r101666
2005-07-06 21:08:02 +00:00
Kelley Cook
366ccddb2b Update FSF address.
From-SVN: r101317
2005-06-25 02:02:01 +00:00
DJ Delorie
d2348bd591 expr.c (convert_move): When a partial_int requires multiple conversion steps...
* expr.c (convert_move): When a partial_int requires multiple
conversion steps, make sure successive steps convert the
intermediate value, not the original value.

* expmed.c (expand_mult): Convert partial_int multiplies to
shift/add combinations too.

* genmodes.c (mode_data): Add wider_2x.
(calc_wider_mode): Calculate twice-wider mode too.
(emit_mode_wider): Emit twice-wider mode too.
* machmode.h (mode_2xwider, GET_MODE_2XWIDER_MODE): New.
* expr.c (expand_expr_real_1): Use it for expanding
multiplies.

From-SVN: r100414
2005-05-31 20:20:13 -04:00
Kazu Hirata
4845b383bb dojump.c: Fix comment typos.
* dojump.c: Fix comment typos.  emit-rtl.c, expmed.c, expr.c,
	stmt.c, stor-layout.c: Use fold_buildN instead of
	fold (buildN (...)).

From-SVN: r98848
2005-04-27 16:02:43 +00:00
Nathan Sidwell
535a42b116 builtins.c (gimplify_va_arg_expr): Reword comments to avoid 'abort'.
* builtins.c (gimplify_va_arg_expr): Reword comments to avoid
	'abort'. Use gcc_assert and gcc_unreachable as appropriate.
	* c-format.c (get_constant, decode_format_attr, get_flag_spec,
	find_char_info_specifier_index,
	find_length_info_modifier_index): Likewise.
	* c-typeck.c (composite_type, pop_init_level): Likewise.
	* combine.c (cant_combine_insn_p, try_combine): Likewise.
	* cse.c (cse_insn): Likewise
	* dominance.c (calc_dfs_tree): Likewise
	dwarf2out.c (loc_descriptor_from_tree_1,
	add_abstract_origin_attribute, force_decl_die,
	force_type_die): Likewise
	emit-rtl.c (operand_subword_force): Likewise
	explow.c (hard_function_value): Likewise
	expmed.c (store_bit_field, expand_divmod,
	emit_store_flag_force): Likewise
	expr.c (emit_move_multi_word, store_expr,
	expand_expr_real_1): Likewise
	final.c (this_is_asm_operands, shorten_branches, final_scan_insn,
	output_operand): Likewise
	flow.c (recompute_reg_usage): Likewise
	* function.c (assign_stack_temp_for_type, assign_temp,
	handle_epilogue_set): Likewise
	* genextract.c (main): Likewise
	* gimplify.c (mostly_copy_tree_r, gimplify_return_expr,
	gimplify_modify_expr_rhs, gimplify_expr): Likewise
	* haifa-sched.c (ready_lastpos, ready_remove_first, ready_element,
	ready_remove, rm_line_notes, rm_other_notes,
	schedule_block): Likewise
	mips-tfile.c (copy_object, out_of_bounds): Likewise

From-SVN: r98567
2005-04-22 16:14:55 +00:00
Roger Sayle
65dc935013 expmed.c (expand_mult): Use synthetic multiplication sequences for more classes of DImode...
* expmed.c (expand_mult): Use synthetic multiplication sequences for
	more classes of DImode multiplication by constant.  Allow both
	multiplication by small negative constants (by performing a
	multiplication by a positive constant and negating the result) and
	multiplications by large powers of two, by using a left shift.

From-SVN: r96377
2005-03-13 17:06:42 +00:00
DJ Delorie
1d27fed446 tree-ssa-loop-ivopts.c (computation_cost): Start register numbering at LAST_VIRTUAL_REGISTER+1 to avoid possibly using...
* tree-ssa-loop-ivopts.c (computation_cost): Start register
numbering at LAST_VIRTUAL_REGISTER+1 to avoid possibly using hard
registers in unsupported ways.
* expmed.c (init_expmed): Likewise.

From-SVN: r95373
2005-02-21 21:00:56 -05:00
James A. Morrison
aeba6c285a stmt.c (emit_case_bit_tests): Call fold_convert instead of convert.
2005-02-18  James A. Morrison  <phython@gcc.gnu.org>

        * stmt.c (emit_case_bit_tests): Call fold_convert instead of convert.
        (estimate_case_costs): Don't call convert.
        * expmed.c (expand_shift): Likewise.
        (make_tree): Call fold_convert instead of convert.

From-SVN: r95224
2005-02-18 12:06:08 +00:00
Kazu Hirata
647eea9dd8 c-tree.h, [...]: Fix comment typos.
* c-tree.h, combine.c, expmed.c, flow.c, libgcc2.c,
	simplify-rtx.c, tree-ssa-live.h: Fix comment typos.  Follow
	spelling conventions.

From-SVN: r94939
2005-02-12 15:17:56 +00:00
Richard Sandiford
2c58f7dde2 expmed.c (store_bit_field): Make the SUBREG code adjust bitnum.
* expmed.c (store_bit_field): Make the SUBREG code adjust bitnum.
	Set bitpos and offset later in the function.  Do nothing if the
	target is a register and if the bitfield lies completely outside
	that register.
	(extract_bit_field): Make the same SUBREG, bitpos and offset changes
	here.  Return an uninitialised register if the source value is stored
	in a register and the bitfield lies completely outside that register.

From-SVN: r94677
2005-02-06 15:39:07 +00:00
Roger Sayle
82dfb9a58f expmed.c (expand_mult_highpart_optab): When attempting to use a non-widening multiplication in a wider mode...
* expmed.c (expand_mult_highpart_optab): When attempting to use
	a non-widening multiplication in a wider mode, the operands need
	to be converted (zero or sign extended) to that mode.

From-SVN: r94383
2005-01-28 17:49:47 +00:00
Richard Henderson
eec6bb06c6 Revert last change.
From-SVN: r94291
2005-01-26 15:21:45 -08:00
Richard Henderson
78ef1e3d9f re PR middle-end/18008 (Duplicate mask on bitfield insertion)
PR middle-end/18008
        * c-decl.c (finish_struct): Set DECL_MODE after resetting a
        field's type.
        * expmed.c (store_fixed_bit_field): Create a paradoxical subreg
        if we don't need the bits above those present in the current mode.
        * expr.c (store_field): Strip conversions to odd-bit-sized types
        if the destination field width matches.

From-SVN: r94290
2005-01-26 15:18:14 -08:00
Roger Sayle
e71c0aa7f5 expmed.c (choose_multiplier): Change interface to return the multiplier lowpart as an rtx instead of an...
* expmed.c (choose_multiplier): Change interface to return the
	multiplier lowpart as an rtx instead of an unsigned HOST_WIDE_INT.
	(expand_divmod): Update calls to choose_multiplier.

From-SVN: r94220
2005-01-25 14:28:55 +00:00
John David Anglin
a6d2976a97 re PR middle-end/19330 (FAIL: gcc.c-torture/execute/20010605-2.c execution, -O1)
PR middle-end/19330
	* expmed.c (extract_bit_field): Use adjust_address instead of
	gen_lowpart when op0 is a MEM.

From-SVN: r94198
2005-01-25 02:05:39 +00:00
Kazu Hirata
deeec1d8a8 c-opts.c, [...]: Update copyright.
* c-opts.c, expmed.c, gengtype.c, tree-complex.c,
	config/arm/iwmmxt.md, config/avr/avr.c, config/s390/s390.h:
	Update copyright.

From-SVN: r94154
2005-01-24 11:59:45 +00:00
Roger Sayle
0d28269256 expmed.c (expand_mult_highpart): Make static.
* expmed.c (expand_mult_highpart): Make static.  Change type of
	constant multiplier argument from unsigned HOST_WIDE_INT to rtx.
	(expand_divmod): Updates calls to expand_mult_highpart by using
	gen_int_mode to pass a CONST_INT rtx.
	* rtl.h (expand_mult_highpart): Remove prototype.

From-SVN: r94139
2005-01-24 02:28:15 +00:00
Kazu Hirata
417c735c22 expmed.c (synth_mult): Initialize new_limit.latency before making a recursive call.
* expmed.c (synth_mult): Initialize new_limit.latency before
	making a recursive call.

From-SVN: r91992
2004-12-10 15:06:52 +00:00
Richard Sandiford
4f1da2e923 simplify-rtx.c (simplify_subreg): In the CONCAT case...
* simplify-rtx.c (simplify_subreg): In the CONCAT case, check whether
	the request subreg is entirely contained in the requested component.
	(simplify_gen_subreg): Return null for CONCATs that are rejected
	by simplify_subreg.
	* expmed.c (store_bit_field): Create a temporary when changing the
	value to an integer mode.

From-SVN: r91965
2004-12-09 20:28:14 +00:00
Roger Sayle
58b42e19f7 re PR middle-end/18293 (Redundant copy operation introduced by expand)
PR middle-end/18293
	* expmed.c (EXACT_POWER_OF_2_OR_ZERO_P): Move definition earlier.
	(expand_mult): Special case powers of two to avoid synth_mult.
	* loop.c (product_cheap_p): Handle case where expand_mult does
	require/generate any instructions (i.e. multiplication by zero).

From-SVN: r91851
2004-12-08 02:15:36 +00:00