aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
AgeCommit message (Collapse)AuthorFilesLines
2006-11-14expmed.c (emit_store_flag_1): New function.Richard Earnshaw1-18/+14
* 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-11tree.def (FIX_CEIL_EXPR, [...]): Remove unused tree codes.Richard Guenther1-5/+0
2006-11-11 Richard Guenther <rguenther@suse.de> * tree.def (FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR): Remove unused tree codes. * tree-vrp.c (extract_range_from_unary_expr): Remove handling of FIX_CEIL_EXPR, FIX_FLOOR_EXPR and FIX_ROUND_EXPR. * tree-pretty-print.c (dump_generic_node, op_prio): Likewise. * tree.c (stabilize_reference): Likewise. * fold-const.c (fold_convert_const_int_from_real, operand_equal_p, fold_unary): Likewise. * tree-gimple.c (is_gimple_cast): Likewise. * dwarf2out.c (loc_descriptor_from_tree_1): Likewise. * expr.c (expand_expr_real_1): Likewise. * tree-eh.c (tree_could_trap_p): Likewise. * gimplify.c (gimplify_expr): Likewise. * tree-inline.c (estimate_num_insns_1): Likewise. * tree-cfg.c (verify_expr): Likewise. cp/ * typeck.c (build_unary_op): Likewise. java/ * check-init.c (check_init): Likewise. ada/ * trans.c (maybe_stabilize_reference): Likewise. fortran/ * trans-intrinsic.c (enum rounding_mode): New enum. (build_fix_expr, gfc_conv_intrinsic_aint, gfc_conv_intrinsic_mod, gfc_conv_intrinsic_function): Use it instead of FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR and FIX_TRUNC_EXPR. From-SVN: r118692
2006-11-08[multiple changes]Dorit Nuzman1-0/+31
2006-11-08 Dorit Nuzman <dorit@il.ibm.com> * tree-vect-analyze.c (vect_mark_relevant, vect_stmt_relevant_p): Take enum argument instead of bool. (vect_analyze_operations): Call vectorizable_type_promotion. * tree-vectorizer.h (type_promotion_vec_info_type): New enum stmt_vec_info_type value. (supportable_widening_operation, vectorizable_type_promotion): New function declarations. * tree-vect-transform.c (vect_gen_widened_results_half): New function. (vectorizable_type_promotion): New function. (vect_transform_stmt): Call vectorizable_type_promotion. * tree-vect-analyze.c (supportable_widening_operation): New function. * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Add implementation. * tree-vect-generic.c (expand_vector_operations_1): Consider correct mode. * tree.def (VEC_WIDEN_MULT_HI_EXPR, VEC_WIDEN_MULT_LO_EXPR): (VEC_UNPACK_HI_EXPR, VEC_UNPACK_LO_EXPR): New tree-codes. * tree-inline.c (estimate_num_insns_1): Add cases for above new tree-codes. * tree-pretty-print.c (dump_generic_node, op_prio): Likewise. * expr.c (expand_expr_real_1): Likewise. * optabs.c (optab_for_tree_code): Likewise. (init_optabs): Initialize new optabs. * genopinit.c (vec_widen_umult_hi_optab, vec_widen_smult_hi_optab, vec_widen_smult_hi_optab, vec_widen_smult_lo_optab, vec_unpacks_hi_optab, vec_unpacks_lo_optab, vec_unpacku_hi_optab, vec_unpacku_lo_optab): Initialize new optabs. * optabs.h (OTI_vec_widen_umult_hi, OTI_vec_widen_umult_lo): (OTI_vec_widen_smult_h, OTI_vec_widen_smult_lo, OTI_vec_unpacks_hi, OTI_vec_unpacks_lo, OTI_vec_unpacku_hi, OTI_vec_unpacku_lo): New optab indices. (vec_widen_umult_hi_optab, vec_widen_umult_lo_optab): (vec_widen_smult_hi_optab, vec_widen_smult_lo_optab): (vec_unpacks_hi_optab, vec_unpacku_hi_optab, vec_unpacks_lo_optab): (vec_unpacku_lo_optab): New optabs. * doc/md.texi (vec_unpacks_hi, vec_unpacks_lo, vec_unpacku_hi): (vec_unpacku_lo, vec_widen_umult_hi, vec_widen_umult_lo): (vec_widen_smult_hi, vec_widen_smult_lo): New. * doc/c-tree.texi (VEC_LSHIFT_EXPR, VEC_RSHIFT_EXPR): (VEC_WIDEN_MULT_HI_EXPR, VEC_WIDEN_MULT_LO_EXPR, VEC_UNPACK_HI_EXPR): (VEC_UNPACK_LO_EXPR, VEC_PACK_MOD_EXPR, VEC_PACK_SAT_EXPR): New. * config/rs6000/altivec.md (UNSPEC_VMULWHUB, UNSPEC_VMULWLUB): (UNSPEC_VMULWHSB, UNSPEC_VMULWLSB, UNSPEC_VMULWHUH, UNSPEC_VMULWLUH): (UNSPEC_VMULWHSH, UNSPEC_VMULWLSH): New. (UNSPEC_VPERMSI, UNSPEC_VPERMHI): New. (vec_vperm_v8hiv4si, vec_vperm_v16qiv8hi): New patterns used to implement the unsigned unpacking patterns. (vec_unpacks_hi_v16qi, vec_unpacks_hi_v8hi, vec_unpacks_lo_v16qi): (vec_unpacks_lo_v8hi): New signed unpacking patterns. (vec_unpacku_hi_v16qi, vec_unpacku_hi_v8hi, vec_unpacku_lo_v16qi): (vec_unpacku_lo_v8hi): New unsigned unpacking patterns. (vec_widen_umult_hi_v16qi, vec_widen_umult_lo_v16qi): (vec_widen_smult_hi_v16qi, vec_widen_smult_lo_v16qi): (vec_widen_umult_hi_v8hi, vec_widen_umult_lo_v8hi): (vec_widen_smult_hi_v8hi, vec_widen_smult_lo_v8hi): New widening multiplication patterns. * target.h (builtin_mul_widen_even, builtin_mul_widen_odd): New. * target-def.h (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN): (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD): New. * config/rs6000/rs6000.c (rs6000_builtin_mul_widen_even): New. (rs6000_builtin_mul_widen_odd): New. (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN): Defined. (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD): Defined. * tree-vectorizer.h (enum vect_relevant): New enum type. (_stmt_vec_info): Field relevant chaned from bool to enum vect_relevant. (STMT_VINFO_RELEVANT_P): Updated. (STMT_VINFO_RELEVANT): New. * tree-vectorizer.c (new_stmt_vec_info): Use STMT_VINFO_RELEVANT instead of STMT_VINFO_RELEVANT_P. * tree-vect-analyze.c (vect_mark_relevant, vect_stmt_relevant_p): Replace calls to STMT_VINFO_RELEVANT_P with STMT_VINFO_RELEVANT, and boolean variable with enum vect_relevant. (vect_mark_stmts_to_be_vectorized): Likewise + update documentation. * doc/tm.texi (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN): New. (TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD): New. 2006-11-08 Richard Henderson <rth@redhat.com> * config/i386/sse.md (vec_widen_umult_hi_v8hi, vec_widen_umult_lo_v8hi): New. (vec_widen_smult_hi_v4si, vec_widen_smult_lo_v4si, vec_widen_umult_hi_v4si, vec_widen_umult_lo_v4si): New. * config/i386/i386.c (ix86_expand_sse_unpack): New. * config/i386/i386-protos.h (ix86_expand_sse_unpack): New. * config/i386/sse.md (vec_unpacku_hi_v16qi, vec_unpacks_hi_v16qi, vec_unpacku_lo_v16qi, vec_unpacks_lo_v16qi, vec_unpacku_hi_v8hi, vec_unpacks_hi_v8hi, vec_unpacku_lo_v8hi, vec_unpacks_lo_v8hi, vec_unpacku_hi_v4si, vec_unpacks_hi_v4si, vec_unpacku_lo_v4si, vec_unpacks_lo_v4si): New. 2006-11-08 Dorit Nuzman <dorit@il.ibm.com> * tree-vect-transform.c (vectorizable_type_demotion): New function. (vect_transform_stmt): Add case for type_demotion_vec_info_type. (vect_analyze_operations): Call vectorizable_type_demotion. * tree-vectorizer.h (type_demotion_vec_info_type): New enum stmt_vec_info_type value. (vectorizable_type_demotion): New function declaration. * tree-vect-generic.c (expand_vector_operations_1): Consider correct mode. * tree.def (VEC_PACK_MOD_EXPR, VEC_PACK_SAT_EXPR): New tree-codes. * expr.c (expand_expr_real_1): Add case for VEC_PACK_MOD_EXPR and VEC_PACK_SAT_EXPR. * tree-iniline.c (estimate_num_insns_1): Likewise. * tree-pretty-print.c (dump_generic_node, op_prio): Likewise. * optabs.c (optab_for_tree_code): Likewise. * optabs.c (expand_binop): In case of vec_pack_*_optabs the mode compared against the predicate of the result is not 'mode' (the input to the function) but a mode with half the size of 'mode'. (init_optab): Initialize new optabs. * optabs.h (OTI_vec_pack_mod, OTI_vec_pack_ssat, OTI_vec_pack_usat): New optab indices. (vec_pack_mod_optab, vec_pack_ssat_optab, vec_pack_usat_optab): New optabs. * genopinit.c (vec_pack_mod_optab, vec_pack_ssat_optab): (vec_pack_usat_optab): Initialize new optabs. * doc/md.texi (vec_pack_mod, vec_pack_ssat, vec_pack_usat): New. * config/rs6000/altivec.md (vec_pack_mod_v8hi, vec_pack_mod_v4si): New. 2006-11-08 Richard Henderson <rth@redehat.com> * config/i386/sse.md (vec_pack_mod_v8hi, vec_pack_mod_v4si): (vec_pack_mod_v2di, vec_interleave_highv16qi, vec_interleave_lowv16qi): (vec_interleave_highv8hi, vec_interleave_lowv8hi): (vec_interleave_highv4si, vec_interleave_lowv4si): (vec_interleave_highv2di, vec_interleave_lowv2di): New. 2006-11-08 Dorit Nuzman <dorit@il.ibm.com> * tree-vect-transform.c (vectorizable_reduction): Support multiple datatypes. (vect_transform_stmt): Removed redundant code. 2006-11-08 Dorit Nuzman <dorit@il.ibm.com> * tree-vect-transform.c (vectorizable_operation): Support multiple datatypes. 2006-11-08 Dorit Nuzman <dorit@il.ibm.com> * tree-vect-transform.c (vect_align_data_ref): Removed. (vect_create_data_ref_ptr): Added additional argument - ptr_incr. Updated function documentation. Return the increment stmt in ptr_incr. (bump_vector_ptr): New function. (vect_get_vec_def_for_stmt_copy): New function. (vect_finish_stmt_generation): Create a stmt_info to newly created vector stmts. (vect_setup_realignment): Call vect_create_data_ref_ptr with additional argument. (vectorizable_reduction, vectorizable_assignment): Not supported yet if VF is greater than the number of elements that can fit in one vector word. (vectorizable_operation, vectorizable_condition): Likewise. (vectorizable_store, vectorizable_load): Support the case that the VF is greater than the number of elements that can fit in one vector word. (vect_transform_loop): Don't fail in case of multiple data-types. * tree-vect-analyze.c (vect_determine_vectorization_factor): Don't fail in case of multiple data-types; the smallest type determines the VF. (vect_analyze_data_ref_dependence): Don't record datarefs as same_align if they are of different sizes. (vect_update_misalignment_for_peel): Compare misalignments in terms of number of elements rather than number of bytes. (vect_enhance_data_refs_alignment): Fix/Add dump printouts. (vect_can_advance_ivs_p): Fix a dump printout From-SVN: r118577
2006-10-13re PR target/29250 (internal compiler error: in extract_insn, at recog.c:2084)David Edelsohn1-1/+2
2006-10-13 David Edelsohn <edelsohn@gnu.org> Ian Lance Taylor <ian@airs.com> PR middle-end/29250 * expr.c (expand_expr_real_1) <NON_LVALUE_EXPR, NOP_EXPR, CONVERT_EXPR>: Change EXPAND_SUM modifier to EXPAND_NORMAL when recursing. Co-Authored-By: Ian Lance Taylor <ian@airs.com> From-SVN: r117724
2006-10-09Revert emutls patch.Richard Henderson1-35/+0
From-SVN: r117578
2006-10-04Makefile.in (libgcc.mk, [...]): Add emutls.c.Richard Henderson1-0/+35
gcc/ * Makefile.in (libgcc.mk, LIBGCC_DEPS): Add emutls.c. * builtin-types.def (BT_WORD): Make unsigned. (BT_FN_VOID_PTR_WORD_WORD_PTR): New. * builtins.def (BUILT_IN_EMUTLS_GET_ADDRESS): New. (BUILT_IN_EMUTLS_REGISTER_COMMON): New. * c-decl.c (grokdeclarator): Don't error if !have_tls. * c-parser.c (c_parser_omp_threadprivate): Likewise. * cgraph.c (decide_is_variable_needed): Look at force_output. Recurse for emulated tls. * cgraphunit.c (cgraph_varpool_remove_unreferenced_decls): Remove checks redundant with decide_is_variable_needed. (cgraph_build_static_cdtor): Do cgraph_varpool_assemble_pending_decls. * dwarf2out.c (loc_descriptor_from_tree_1): Don't do anything for emulated tls. * expr.c (emutls_var_address): New. (expand_expr_real_1): Expand emulated tls. (expand_expr_addr_expr_1): Likewise. * libgcc-std.ver: Add __emutls_get_address, __emutls_register_common. * output.h (emutls_finish): Declare. * toplev.c (compile_file): Call it. * tree-ssa-address.c (gen_addr_rtx): Check for const-ness of the address before wrapping in CONST. * varasm.c (emutls_htab, emutls_object_type): New. (EMUTLS_VAR_PREFIX, EMUTLS_TMPL_PREFIX): New. (get_emutls_object_name, get_emutls_object_type): New. (get_emutls_init_templ_addr, emutls_decl): New. (emutls_common_1, emutls_finish): New. (assemble_variable): When emulating tls, swap decls; generate constructor for the emutls objects. (do_assemble_alias): When emulating tls, swap decl and target name. (default_encode_section_info): Don't add SYMBOL_FLAG_TLS_SHIFT for emulated tls. * emutls.c: New file. * config/sparc/sol2.h (ASM_DECLARE_OBJECT_NAME): Only emit tls_object for real tls. gcc/cp/ * decl.c (grokvardecl): Don't error if !have_tls. (grokdeclarator): Likewise. * parser.c (cp_parser_omp_threadprivate): Likewise. gcc/fortran/ * f95-lang.c (gfc_init_builtin_functions): Add __emutls_get_address and __emutls_register_common. * openmp.c (gfc_match_omp_threadprivate): Don't error if !have_tls. * trans-common.c (build_common_decl): Don't check have_tls. * trans-decl.c (gfc_finish_var_decl): Likewise. * types.def (BT_WORD, BT_FN_PTR_PTR): New. (BT_FN_VOID_PTR_WORD_WORD_PTR): New. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_tls): Redefine to mean non-emulated tls. * gcc.dg/tls/alias-1.c: Remove tls requirement. * gcc.dg/tls/asm-1.c, gcc.dg/tls/debug-1.c, gcc.dg/tls/diag-1.c, gcc.dg/tls/diag-2.c, gcc.dg/tls/diag-3.c, gcc.dg/tls/diag-4.c, gcc.dg/tls/diag-5.c, gcc.dg/tls/init-1.c, gcc.dg/tls/nonpic-1.c, gcc.dg/tls/opt-10.c, gcc.dg/tls/opt-5.c, gcc.dg/tls/opt-6.c, gcc.dg/tls/opt-8.c, gcc.dg/tls/opt-9.c, gcc.dg/tls/pic-1.c, gcc.dg/tls/struct-1.c, gcc.dg/tls/trivial.c: Likewise. From-SVN: r117440
2006-07-26re PR target/27907 (ICE in expand_simple_unop, at optabs.c:2307)Zdenek Dvorak1-0/+2
PR rtl-optimization/27907 * expr.c (force_operand): Use convert_move to handle FLOAT_EXTEND and FLOAT_TRUNCATE. * gcc.c-torture/compile/pr27907.c: New test. From-SVN: r115760
2006-07-18tree.h (categorize_ctor_elements): Adjust prototype and add descriptive ↵Olivier Hainque1-29/+43
comment... * tree.h (categorize_ctor_elements): Adjust prototype and add descriptive comment, both in accordance with the interface change described below. * varasm.c (constructor_static_from_elts_p): New function. Whether a constructor node is a valid static constant initializer if all its elements are. (initializer_constant_valid_p) <CONSTRUCTOR value>: Use it. * output.h: Declare it. * expr.c (categorize_ctor_elements_1): Return whether the constructor is a valid constant initializer instead of computing the number of non-constant elements. Use constructor_static_from_elts_p for this purpose. Replace the head comment with an indication that this is a helper for categorize_ctor_elements. (categorize_ctor_elements): Same interface change as for the _1 helper. Former head comment from this helper moved here, adjusted to account for the interface changes. (mostly_zeros_p): Adjust call to categorize_ctor_elements. (all_zeros_p): Likewise. * gimplify.c (gimplify_init_constructor): Decide whether we can make static versions of the constructor from the categorize_ctor_elements return value instead of the formerly computed number of non-constant elements. * gnat.dg/outer_agg_bitfield_constructor.adb: New test. * gnat.dg/nested_agg_bitfield_constructor.adb: New test. From-SVN: r115553
2006-06-23re PR middle-end/28131 (FAIL: gcc.c-torture/execute/va-arg-25.c compilation ↵Roger Sayle1-3/+5
(ICE)) 2006-06-22 Roger Sayle <roger@eyesopen.com> John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR middle-end/28131 * expr.c (expand_expr_real_1) <VECTOR_CST>: Check whether the call to lang_hooks.types.type_for_mode returned NULL_TREE. Co-Authored-By: John David Anglin <dave.anglin@nrc-cnrc.gc.ca> From-SVN: r114923
2006-06-20expr.c (expand_expr_real_1): For vector constants with integer modes...Roger Sayle1-8/+15
* expr.c (expand_expr_real_1) <VECTOR_CST>: For vector constants with integer modes, attempt to directly construct an integer constant. * fold-const.c (native_encode_vector): Determine the size of each element from the vector type instead of the first vector element. * tree.c (build_constructor_single): Mark a CONSTRUCTOR as constant, if all of its elements/components are constant. (build_constructor_from_list): Likewise. From-SVN: r114815
2006-05-23expr.c (undefined_operand_subword_p): New.Joseph Myers1-1/+40
* expr.c (undefined_operand_subword_p): New. (emit_move_multi_word): Do not generate move from undefined bits of a paradoxical subreg. From-SVN: r114021
2006-05-17re PR middle-end/27620 (g++.dg/init/array15.C uses 4MB stack space)Bernd Schmidt1-0/+13
PR middle-end/27620 * expr.c (safe_from_p): Handle CONSTRUCTOR again. From-SVN: r113850
2006-04-17expr.c (expand_assignment): Optimize away no-op moves where the source and ↵Roger Sayle1-1/+4
destination are equal and have... * expr.c (expand_assignment): Optimize away no-op moves where the source and destination are equal and have no side-effects. From-SVN: r113009
2006-04-16re PR middle-end/25474 (Extra load for some FP code)Roger Sayle1-1/+5
PR middle-end/25474 * expr.c (compress_float_constant): Copy the narrow constant into a new pseudo before extending it to its final width. From-SVN: r112991
2006-04-15cfgcleanup.c, [...]: Fix comment typos.Kazu Hirata1-1/+1
* cfgcleanup.c, config/dfp-bit.c, expr.c, fold-const.c, jump.c, mips-tfile.c, omp-low.c, sched-int.h, tree-ssa-loop-prefetch.c, tree-vrp.c: Fix comment typos. From-SVN: r112971
2006-04-12expr.c (emit_group_store): Correct operand order in call to ↵Roger Sayle1-4/+4
subreg_lowpart_offset. * expr.c (emit_group_store): Correct operand order in call to subreg_lowpart_offset. Always create paradoxical SUBREGs with a SUBREG_BYTE of zero. From-SVN: r112887
2006-04-10expr.c (store_constructor): Don't bother clearing target if we're about to ↵Roger Sayle1-1/+1
assign a vector to it using... * expr.c (store_constructor): Don't bother clearing target if we're about to assign a vector to it using vec_init_optab. From-SVN: r112817
2006-04-04builtins.c (fold_builtin_sprintf): Use fold_convert instead of convert in ↵Roger Sayle1-33/+35
the middle-end. * builtins.c (fold_builtin_sprintf): Use fold_convert instead of convert in the middle-end. * expr.c (store_expr, store_constructor, get_inner_reference, expand_expr_real_1, string_constant, try_casesi, try_tablejump): Likewise. * tree.c (build_range_type): Likewise. From-SVN: r112670
2006-04-02re PR middle-end/26977 (ICE in emit_move_insn)Roger Sayle1-6/+12
PR middle-end/26977 * expr.c (emit_group_store): Check whether simplify_gen_subreg returns NULL_RTX, indicating it couldn't create a valid paradoxical subreg. From-SVN: r112626
2006-03-31expr.c (emit_group_store): Make bytepos a HOST_WIDE_INT to signed vs.Roger Sayle1-1/+1
* expr.c (emit_group_store): Make bytepos a HOST_WIDE_INT to signed vs. unsigned comparison failures on some hosts. From-SVN: r112567
2006-03-30re PR target/17959 (-mpowerpc64 can cause worse code than without it)Roger Sayle1-6/+49
PR target/17959 * expr.c (emit_group_store): Optimize group stores into a pseudo register by using a paradoxical subreg to initialize the destination if the first or last member of the group specifies a "low part". From-SVN: r112543
2006-03-28expr.c (emit_group_store): Only create a new pseudo reg if the quantity it ↵Roger Sayle1-3/+9
needs to hold isn't already a... * expr.c (emit_group_store): Only create a new pseudo reg if the quantity it needs to hold isn't already a suitable pseudo. From-SVN: r112469
2006-03-21re PR middle-end/20297 (#pragma GCC visibility isn't properly handled for ↵Jason Merrill1-0/+4
builtin functions) PR middle-end/20297 * expr.c (init_block_move_fn): Force default visibility. (init_block_clear_fn): Likewise. * builtins.c (expand_builtin_fork_or_exec): Likewise. * targhooks.c (default_external_stack_protect_fail): Likewise. From-SVN: r112270
2006-03-04builtins.c, [...]: Fix comment typos.Kazu Hirata1-1/+1
* builtins.c, c-pragma.h, c-typeck.c, cgraph.c, cgraphunit.c, combine.c, common.opt, config/dfp-bit.c, config/i386/i386.c, config/m68k/m68k.c, config/m68k/m68k.md, config/mt/mt.c, config/mt/mt.h, config/s390/s390.md, df-core.c, df-problems.c, df-scan.c, df.h, diagnostic.c, expr.c, function.h, gimplify.c, loop-invariant.c, omp-low.c, opts.c, passes.c, rtl-factoring.c, rtlanal.c, struct-equiv.c, tree-cfgcleanup.c, tree-ssa-loop-niter.c, tree-ssa-loop-prefetch.c, tree-ssa-structalias.c, tree-ssa-threadedge.c, tree-ssa-threadupdate.c, tree-vect-patterns.c, tree-vect-transform.c, tree-vectorizer.h, tree-vrp.c, unwind-dw2.c: Fix comment typos. Follow spelling conventions. From-SVN: r111721
2006-02-18re PR target/9703 ([arm] Accessing data through constant pool more times ↵Richard Sandiford1-26/+40
could be solved in less instructions) * cselib.c (cselib_init): Change RTX_SIZE to RTX_CODE_SIZE. * emit-rtl.c (copy_rtx_if_shared_1): Use shallow_copy_rtx. (copy_insn_1): Likewise. Don't copy each field individually. Reindent. * read-rtl.c (apply_macro_to_rtx): Use RTX_CODE_SIZE instead of RTX_SIZE. * reload1.c (eliminate_regs): Use shallow_copy_rtx. * rtl.c (rtx_size): Rename variable to... (rtx_code_size): ...this. (rtx_size): New function. (rtx_alloc_stat): Use RTX_CODE_SIZE instead of RTX_SIZE. (copy_rtx): Use shallow_copy_rtx. Don't copy each field individually. Reindent. (shallow_copy_rtx_stat): Use rtx_size instead of RTX_SIZE. * rtl.h (rtx_code_size): New variable. (rtx_size): Change from a variable to a function. (RTX_SIZE): Rename to... (RTX_CODE_SIZE): ...this. PR target/9703 PR tree-optimization/17106 * doc/tm.texi (TARGET_USE_BLOCKS_FOR_CONSTANT_P): Document. (Anchored Addresses): New section. * doc/invoke.texi (-fsection-anchors): Document. * doc/rtl.texi (SYMBOL_REF_IN_BLOCK_P, SYMBOL_FLAG_IN_BLOCK): Likewise. (SYMBOL_REF_ANCHOR_P, SYMBOL_FLAG_ANCHOR): Likewise. (SYMBOL_REF_BLOCK, SYMBOL_REF_BLOCK_OFFSET): Likewise. * hooks.c (hook_bool_mode_rtx_false): New function. * hooks.h (hook_bool_mode_rtx_false): Declare. * gengtype.c (create_optional_field): New function. (adjust_field_rtx_def): Add the "block_sym" field for SYMBOL_REFs when SYMBOL_REF_IN_BLOCK_P is true. * target.h (output_anchor, use_blocks_for_constant_p): New hooks. (min_anchor_offset, max_anchor_offset): Likewise. (use_anchors_for_symbol_p): New hook. * toplev.c (compile_file): Call output_object_blocks. (target_supports_section_anchors_p): New function. (process_options): Check that -fsection-anchors is only used on targets that support it and when -funit-at-a-time is in effect. * tree-ssa-loop-ivopts.c (prepare_decl_rtl): Only create DECL_RTL if the decl doesn't have one. * dwarf2out.c: Remove instantiations of VEC(rtx,gc). * expr.c (emit_move_multi_word, emit_move_insn): Pass the result of force_const_mem through use_anchored_address. (expand_expr_constant): New function. (expand_expr_addr_expr_1): Call it. Use the same modifier when calling expand_expr for INDIRECT_REF. (expand_expr_real_1): Pass DECL_RTL through use_anchored_address for all modifiers except EXPAND_INITIALIZER. Use expand_expr_constant. * expr.h (use_anchored_address): Declare. * loop-unroll.c: Don't declare rtx vectors here. * explow.c: Include output.h. (validize_mem): Call use_anchored_address. (use_anchored_address): New function. * common.opt (-fsection-anchors): New switch. * varasm.c (object_block_htab, anchor_labelno): New variables. (hash_section, object_block_entry_eq, object_block_entry_hash) (use_object_blocks_p, get_block_for_section, create_block_symbol) (use_blocks_for_decl_p, change_symbol_section): New functions. (get_variable_section): New function, split out from assemble_variable. (make_decl_rtl): Create a block symbol if use_object_blocks_p and use_blocks_for_decl_p say so. Use change_symbol_section if the symbol has already been created. (assemble_variable_contents): New function, split out from... (assemble_variable): ...here. Don't output any code for block symbols; just pass them to place_block_symbol. Use get_variable_section and assemble_variable_contents. (get_constant_alignment, get_constant_section, get_constant_size): New functions, split from output_constant_def_contents. (build_constant_desc): Create a block symbol if use_object_blocks_p says so. Or into SYMBOL_REF_FLAGS. (assemble_constant_contents): New function, split from... (output_constant_def_contents): ...here. Don't output any code for block symbols; just pass them to place_section_symbol. Use get_constant_section and get_constant_alignment. (force_const_mem): Create a block symbol if use_object_blocks_p and use_blocks_for_constant_p say so. Or into SYMBOL_REF_FLAGS. (output_constant_pool_1): Add an explicit alignment argument. Don't switch sections here. (output_constant_pool): Adjust call to output_constant_pool_1. Switch sections here instead. Don't output anything for block symbols; just pass them to place_block_symbol. (init_varasm_once): Initialize object_block_htab. (default_encode_section_info): Keep the old SYMBOL_FLAG_IN_BLOCK. (default_asm_output_anchor, default_use_aenchors_for_symbol_p) (place_block_symbol, get_section_anchor, output_object_block) (output_object_block_htab, output_object_blocks): New functions. * target-def.h (TARGET_ASM_OUTPUT_ANCHOR): New macro. (TARGET_ASM_OUT): Include it. (TARGET_USE_BLOCKS_FOR_CONSTANT_P): New macro. (TARGET_MIN_ANCHOR_OFFSET, TARGET_MAX_ANCHOR_OFFSET): New macros. (TARGET_USE_ANCHORS_FOR_SYMBOL_P): New macro. (TARGET_INITIALIZER): Include them. * rtl.c (rtl_check_failed_block_symbol): New function. * rtl.h: Include vec.h. Declare heap and gc rtx vectors. (block_symbol, object_block): New structures. (rtx_def): Add a block_symbol field to the union. (BLOCK_SYMBOL_CHECK): New macro. (rtl_check_failed_block_symbol): Declare. (SYMBOL_FLAG_IN_BLOCK, SYMBOL_FLAG_ANCHOR): New SYMBOL_REF flags. (SYMBOL_REF_IN_BLOCK_P, SYMBOL_REF_ANCHOR_P): New predicates. (SYMBOL_FLAG_MACH_DEP_SHIFT): Bump by 2. (SYMBOL_REF_BLOCK, SYMBOL_REF_BLOCK_OFFSET): New accessors. * output.h (output_section_symbols): Declare. (object_block): Name structure. (place_section_symbol, get_section_anchor, default_asm_output_anchor) (default_use_anchors_for_symbol_p): Declare. * Makefile.in (RTL_BASE_H): Add vec.h. (explow.o): Depend on output.h. * config/rs6000/rs6000.c (TARGET_MIN_ANCHOR_OFFSET): Override default. (TARGET_MAX_ANCHOR_OFFSET): Likewise. (TARGET_USE_BLOCKS_FOR_CONSTANT_P): Likewise. (rs6000_use_blocks_for_constant_p): New function. From-SVN: r111254
2006-02-14optabs.c (expand_abs): Don't call do_jump_by_parts_greater_rtx directly...Roger Sayle1-18/+2
* optabs.c (expand_abs): Don't call do_jump_by_parts_greater_rtx directly, instead let do_compare_rtx_and_jump handle this for us. * expr.c (expand_expr_real_1): Likewise. * dojump.c (do_jump_by_parts_greater_rtx): Make static. Move before do_jump_by_parts_greater. (do_jump_by_parts_greater): Move after do_jump_by_parts_greater_rtx. * expr.h (do_jump_by_parts_greater_rtx): Delete prototype. From-SVN: r110954
2006-02-08tree.def (CHAR_TYPE): Remove.Roger Sayle1-1/+0
* tree.def (CHAR_TYPE): Remove. * dbxout.c (dbxout_type): Delete dead handling of CHAR_TYPE. * dwarf2out.c (base_type_die, is_base_type): Likewise. (gen_type_die) <ARRAY_TYPE>: Remove handling of CHAR_TYPE arrays. (gen_string_type_die): Delete unreachable function. * tree-pretty-print.c (dump_generic_node): Don't handle CHAR_TYPE. * tree.c (build_int_cst_wide, type_contains_placeholder_1, type_hash_eq, variably_modified_type_p, walk_type_fields): Likewise. * tree.h (NUMERICAL_TYPE_CHECK, INTEGRAL_TYPE_P): Likewise. * builtins.c (type_to_class): Likewise. * fold-const.c (fold_convert, build_range_check, merge_ranges): Likewise. * expr.c (count_type_elements): Likewise. * c-pretty-print.c (pp_c_type_specifier): Likewise. * stor-layout.c (layout_type): Likewise. * ipa-type-escape.c (type_to_consider): Likewise. * gimplify.c (omp_firstprivatize_type_sizes, gimplify_type_sizes): Likewise. * explow.c (promote_mode): Likewise. * tree-sra.c (is_sra_scalar_type): Likewise. * varasm.c (output_constant): Likewise. * tree-inline.c (remap_type_1): Likewise. * convert.c (convert_to_pointer, convert_to_real, convert_to_integer, convert_to_complex): Likewise. From-SVN: r110775
2006-02-01function.c (assign_parm_setup_reg): Use function argument promotion rules.Paul Brook1-1/+2
2006-02-01 Paul Brook <paul@codesourcery.com> * function.c (assign_parm_setup_reg): Use function argument promotion rules. * expr.c (expand_expr_real_1): Use function argument promotion rules for PARM_DECLs. From-SVN: r110477
2006-01-31re PR middle-end/26001 (expand uses the wrong part of the string for array ↵Andrew Pinski1-10/+29
accesses) 2006-01-31 Andrew Pinski <pinskia@physics.uc.edu> PR middle-end/26001 * gfortran.dg/data_char_2.f90: New. 2006-01-31 Andrew Pinski <pinskia@physics.uc.edu> PR middle-end/26001 * expr.c (expand_expr_real_1) <case ARRAY_REF>: Use the corrected index for the character out of the string constant. From-SVN: r110465
2006-01-31expr.h (expand_normal): new inline function.Marcin Dalecki1-39/+35
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-19Makefile.in (tree-vect-patterns.o): Add rule for new file.Dorit Nuzman1-0/+25
* Makefile.in (tree-vect-patterns.o): Add rule for new file. * tree-vect-analyze.c (vect_determine_vectorization_factor): Use existing STMT_VINFO_VECTYPE if available. (vect_mark_relevant): Add special handling for stmts that are marked as STMT_VINFO_IN_PATTERN_P. (vect_analyze_loop): Call vect_pattern_recog. * tree-vectorizer.c (new_stmt_vec_info): Initialize new fields. * tree-vectorizer.h (in_pattern_p, related_stmt): New fields in stmt_info. (STMT_VINFO_IN_PATTERN_P, STMT_VINFO_RELATED_STMT): New macros. (vect_recog_func_ptr): New function-pointer type. * tree-vect-patterns.c: New file. (vect_recog_widen_sum_pattern, vect_recog_widen_mult_pattern): (vect_recog_dot_prod_pattern, vect_pattern_recog): (vect_pattern_recog_1): New functions. (vect_pattern_recog_funcs): New array of function pointers. * tree-vectorizer.h (ternary_op): New enum value. * tree-vect-transform.c (vect_create_epilog_for_reduction): Added declaration. Revised documentation. Removed redundant dump prints. Removed redundant argument. Added support for reduction patterns. (vectorizable_reduction): Added support for reduction patterns. (vect_transform_stmt): Added support for patterns. * expr.c (expand_expr_real_1): Added case for DOT_PROD_EXPR. * genopinit.c (udot_prod_optab, sdot_prod_optab): Initialize. * optabs.c (optab_for_tree_code): Added case for DOT_PROD_EXPR. (expand_widen_pattern_expr): New function. (init_optabs): Initialize new optabs udot_prod_optab, sdot_prod_optab. * optabs.h (OTI_sdot_prod, OTI_udot_prod): New. (sdot_prod_optab, udot_prod_optab): Define new optabs. (expand_widen_pattern_expr): New function declaration. * tree.def (DOT_PROD_EXPR, WIDEN_SUM_EXPR, WIDEN_MULT_EXPR): New tree-codes. * tree-inline.c (estimate_num_insns_1): Added cases for new tree-codes DOT_PROD_EXPR, WIDEN_SUM_EXPR, WIDEN_MULT_EXPR. * tree-pretty-print.c (dump_generic_node): Likewise. (op_prio): Likewise. (op_symbol): Added cases for WIDEN_SUM_EXPR, WIDEN_MULT_EXPR. * tree-ssa-operands.c (get_expr_operands): Added case for DOT_PROD_EXPR. * tree-vect-patterns.c (widened_name_p): New function. (vect_recog_dot_prod_pattern): Added function implementation. * tree-vect-transform.c (get_initial_def_for_reduction): Added cases for DOT_PROD_EXPR, WIDEN_SUM_EXPR. * config/rs6000/altivec.md (udot_prod<mode>, sdot_prodv8hi): New. * config/i386/sse.md (sdot_prodv8hi, udot_prodv4si): New. * expr.c (expand_expr_real_1): Added case for WIDEN_SUM_EXPR. * genopinit.c (widen_ssum_optab, widen_usum_optab): Initialize. * optabs.c (optab_for_tree_code): Added case for WIDEN_SUM_EXPR. (init_optabs): Initialize new optabs widen_ssum_optab, widen_usum_optab. * optabs.h (OTI_widen_ssum, OTI_widen_usum): New. (widen_ssum_optab, widen_usum_optab): Define new optabs. * tree-vect-generic.c: (expand_vector_operations_1): Check type of use instead of type of def. * tree-vect-patterns.c (vect_recog_widen_sum_pattern): Added function implementation. * config/rs6000/altivec.md (widen_usum<mode>, widen_ssumv16qi, widen_ssumv8hi): New. * doc/tm.texi (ssum_widen, usum_widen, sdot_prod, udot_prod): New patterns. From-SVN: r109954
2006-01-18expr.c (emit_move_change_mode): Always adjust addresses, not just during reload.Ben Elliston1-11/+25
* expr.c (emit_move_change_mode): Always adjust addresses, not just during reload. Copy replacements only during reload. (emit_move_insn_1): Move MODE_DECIMAL_FLOAT modes by invoking emit_move_via_integer. From-SVN: r109845
2005-12-24expr.c (force_operand): Use expand_fix and expand_float to implement integer ↵Roger Sayle1-16/+17
<-> FP conversions instead... * expr.c (force_operand): Use expand_fix and expand_float to implement integer <-> FP conversions instead of convert_to_mode. From-SVN: r109041
2005-12-19optabs.c (init_floating_libfuncs): Handle decimal float modes.Jon Grimm1-3/+8
* 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-16basic-block.h, [...]: Fix comment typos.Kazu Hirata1-1/+1
* basic-block.h, config/i386/winnt.c, config/pa/pa.c, config/s390/s390.c, dfp.c, expr.c, fold-const.c, params.def, reload.c, struct-equiv.c, tree-ssa-ccp.c, tree-ssa-pre.c, tree-ssa-reassoc.c, tree-ssa-structalias.c: Fix comment typos. * doc/invoke.texi, doc/tm.texi: Fix typos. From-SVN: r108626
2005-12-13re PR debug/25023 (ICE in def_cfa_1, at dwarf2out.c:792)Jakub Jelinek1-3/+16
PR debug/25023 PR target/25293 * expr.c (emit_move_resolve_push): Handle PRE_MODIFY and POST_MODIFY with CONST_INT adjustment equal to PUSH_ROUNDING. Fix POST_INC/POST_DEC handling if PUSH_ROUNDING is not identity. * config/i386/i386.md (pushhi2, pushqi2): Use pushl instead of pushw. Set mode to SI, adjust constraints. (pushhi2_rex64, pushqi2_rex64): Set mode to DI. * config/i386/i386.h (PUSH_ROUNDING): Round up to 4 instead of 2 for 32-bit code. * gcc.target/i386/pr25293.c: New test. From-SVN: r108463
2005-12-07* expr.c (force_operand): Use convert_to_mode for conversions.J"orn Rennecke1-1/+13
From-SVN: r108196
2005-11-24expr.c (expand_expr_real_1): Fix error in last change.Bernd Schmidt1-1/+1
* expr.c (expand_expr_real_1): Fix error in last change. From-SVN: r107471
2005-11-22optabs.c (expand_abs_nojump): Use SCALAR_FLOAT_MODE_P instead of explicitly ↵Ben Elliston1-2/+2
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-20expr.c (expand_expr_real): Use usmul_optab for widening signed * unsigned ↵Bernd Schmidt1-2/+38
multiplies. * expr.c (expand_expr_real): Use usmul_optab for widening signed * unsigned multiplies. * genopinit.c (optabs): Add usmul_widen_optab. * optabs.c (init_optabs): Likewise. * optabs.h (enum optab_index): Add OTI_usmul_widen. (usmul_widen_optab): Define. * config/bfin/bfin.md (usmulhisi3): New pattern. * doc/md.texi (usmulqihi3, usmulhisi3, usmulsidi3): Document. From-SVN: r107258
2005-11-18expr.c (expand_expr_real): Don't look at EXPR_HAS_LOCATION unless ↵Richard Kenner1-1/+1
ib_boundaries_block is non-null * expr.c (expand_expr_real): Don't look at EXPR_HAS_LOCATION unless ib_boundaries_block is non-null From-SVN: r107180
2005-11-12expr.c (expand_expr_real_1): <MAX_EXPR, MIN_EXPR>: Canonicalize to compare ↵Jan Hubicka1-54/+77
against 0 when possible. * expr.c (expand_expr_real_1): <MAX_EXPR, MIN_EXPR>: Canonicalize to compare against 0 when possible. * gcc.target/i386/minmax-1.c: New. * gcc.target/i386/minmax-2.c: New. From-SVN: r106827
2005-10-15re PR middle-end/23714 (ICE in expand_assignment)Richard Henderson1-2/+10
PR 23714 * builtins.c (expand_builtin_trap): Export. * expr.h (expand_builtin_trap): Declare. * expr.c (expand_assignment): Emit a trap for integral offsets from registers that weren't reduced to bitpos. * tree-cfg.c (mark_array_ref_addressable_1): Remove. (mark_array_ref_addressable): Remove. * tree-flow.h (mark_array_ref_addressable): Remove. * tree-optimize.c (execute_cleanup_cfg_post_optimizing): Don't call it. From-SVN: r105449
2005-09-20expr.c (expand_expr_real_1): Allow modifier EXPAND_STACK_PARM.Richard Henderson1-1/+2
* expr.c (expand_expr_real_1) <INDIRECT_REF>: Allow modifier EXPAND_STACK_PARM. From-SVN: r104463
2005-09-17expr.c (emit_move_via_integer): Add force argument, pass it on to ↵Richard Henderson1-6/+6
emit_move_change_mode. * expr.c (emit_move_via_integer): Add force argument, pass it on to emit_move_change_mode. Update callers. (emit_move_complex): Pass true to new force argument. * function.c (expand_function_end): Move expand_eh_return call earlier. Merge sub-word complex values into a pseudo before copying to the return hard register. From-SVN: r104371
2005-09-09re PR c++/23180 (Segfault on const initializer with bogus pointer arithmetics)Josh Conner1-1/+1
PR c++/23180 * expr.c (expand_expr_addr_expr_1): Don't invoke expand_simple_binop for EXPAND_INITIALIZER. From-SVN: r104069
2005-09-06re PR middle-end/14997 (ncurses build fails with Ada)Olivier Hainque1-8/+13
PR middle-end/14997 * expr.c (expand_expr_real) <normal_inner_ref>: Force op0 to mem when we would be extracting outside its bit span (bitpos+bitsize larger than its mode), possible with some VIEW_CONVERT_EXPRs from Ada unchecked conversions. Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com> From-SVN: r103963
2005-08-31expr.c (expand_expr_real_1): Force subregs into a pseudo before applying ↵Richard Henderson1-1/+5
gen_lowpart. * expr.c (expand_expr_real_1) <VIEW_CONVERT_EXPR>: Force subregs into a pseudo before applying gen_lowpart. From-SVN: r103712
2005-08-31Fix ppc -m64 constant address expression expansion bug.Fariborz Jahanian1-1/+1
Oked by Richard Henderson. From-SVN: r103676
2005-08-31re PR middle-end/23477 (default-initializing array new expression uses makes ↵Richard Guenther1-0/+31
stack usage go way up) 2005-08-31 Richard Guenther <rguenther@suse.de> PR middle-end/23477 * expr.c (all_zeros_p): New function. (expand_expr_real_1): Handle the case of an all-zero non-addressable constructor separately. From-SVN: r103670