Commit Graph

969 Commits

Author SHA1 Message Date
Chung-Lin Tang
f959607b40 builtins.c (expand_builtin_thread_pointer): New.
2012-10-11  Chung-Lin Tang  <cltang@codesourcery.com>

	* builtins.c (expand_builtin_thread_pointer): New.
	(expand_builtin_set_thread_pointer): New.
	(expand_builtin): Add BUILT_IN_THREAD_POINTER,
	BUILT_IN_SET_THREAD_POINTER expand cases.
	* builtins.def (BUILT_IN_THREAD_POINTER):
	New __builtin_thread_pointer builtin.
	(BUILT_IN_SET_THREAD_POINTER):
	New __builtin_set_thread_pointer builtin.
	* optabs.def (get_thread_pointer,set_thread_pointer):
	New standard names.
	* doc/md.texi (Standard Names): Document get_thread_pointer and
	set_thread_pointer patterns.
	* config/alpha/alpha.md (get_thread_pointerdi): Rename from load_tp.
	(set_thread_pointerdi): Rename from set_tp.
	* config/alpha/alpha.c (alpha_legitimize_address_1): Change
	gen_load_tp calls to gen_get_thread_pointerdi.
	(alpha_builtin): Remove ALPHA_BUILTIN_THREAD_POINTER,
	ALPHA_BUILTIN_SET_THREAD_POINTER.
	(code_for_builtin): Remove CODE_FOR_load_tp, CODE_FOR_set_tp.
	(alpha_init_builtins): Remove __builtin_thread_pointer,
	__builtin_set_thread_pointer machine-specific builtins.
	(alpha_expand_builtin_thread_pointer): Add hook function for
	TARGET_EXPAND_BUILTIN_THREAD_POINTER.
	(alpha_expand_builtin_set_thread_pointer): Add hook function for
	TARGET_EXPAND_BUILTIN_SET_THREAD_POINTER.
	(alpha_fold_builtin): Remove ALPHA_BUILTIN_THREAD_POINTER,
	ALPHA_BUILTIN_SET_THREAD_POINTER cases.
	* config/arm/arm.md (get_thread_pointersi): New pattern.
	* config/arm/arm-protos.h (arm_load_tp): Add extern declaration.
	* config/arm/arm.c (arm_load_tp): Remove static.
	(arm_builtins): Remove ARM_BUILTIN_THREAD_POINTER.
	(arm_init_tls_builtins): Remove function.
	(arm_init_builtins): Remove call to arm_init_tls_builtins().
	(arm_expand_builtin): Remove ARM_BUILTIN_THREAD_POINTER case.
	* config/mips/mips.md (get_thread_pointer<mode>): New pattern.
	* config/mips/mips-protos.h (mips_expand_thread_pointer):
	Add extern declaration.
	* config/mips/mips.c (mips_expand_thread_pointer):
	Renamed from mips_get_tp.
	(mips_get_tp): New stub calling mips_expand_thread_pointer.
	* config/s390/s390.c (s390_builtin,code_for_builtin_64,
	code_for_builtin_31,s390_init_builtins,s390_expand_builtin): Remove.
	* config/s390/s390.md (get_tp_64,get_tp_31,set_tp_64,set_tp_31):
	Remove.
	(get_thread_pointer<mode>,set_thread_pointer<mode>):
	New, adapted from removed patterns.
	* config/xtensa/xtensa.md (get_thread_pointersi):
	Renamed from load_tp.
	(set_thread_pointersi): Renamed from set_tp.
	* config/xtensa/xtensa.c (xtensa_legitimize_tls_address):
	Change gen_load_tp calls to gen_get_thread_pointersi.
	(xtensa_builtin): Remove XTENSA_BUILTIN_THREAD_POINTER and
	XTENSA_BUILTIN_SET_THREAD_POINTER.
	(xtensa_init_builtins): Remove __builtin_thread_pointer,
	__builtin_set_thread_pointer machine-specific builtins.
	(xtensa_fold_builtin): Remove XTENSA_BUILTIN_THREAD_POINTER,
	XTENSA_BUILTIN_SET_THREAD_POINTER cases.
	(xtensa_expand_builtin): Remove XTENSA_BUILTIN_THREAD_POINTER,
	XTENSA_BUILTIN_SET_THREAD_POINTER cases.

From-SVN: r192364
2012-10-11 15:05:44 +00:00
Lawrence Crowl
27bcd47cfa Modify gcc/*.[hc] double_int call sites to use the new interface.
This change entailed adding a few new methods to double_int.

The change results in a 0.163% time improvement with a 70% confidence.

Tested on x86_64.


Index: gcc/ChangeLog

2012-09-06  Lawrence Crowl  <crowl@google.com>

	* double-int.h (double_int::operator &=): New.
	(double_int::operator ^=): New.
	(double_int::operator |=): New.
	(double_int::mul_with_sign): Modify overflow parameter to bool*.
	(double_int::add_with_sign): New.
	(double_int::ule): New.
	(double_int::sle): New.
	(binary double_int::operator *): Remove parameter name.
	(binary double_int::operator +): Likewise.
	(binary double_int::operator -): Likewise.
	(binary double_int::operator &): Likewise.
	(double_int::operator |): Likewise.
	(double_int::operator ^): Likewise.
	(double_int::and_not): Likewise.
	(double_int::from_shwi): Tidy formatting.
	(double_int::from_uhwi): Likewise.
	(double_int::from_uhwi): Likewise.
	* double-int.c (double_int::mul_with_sign): Modify overflow parameter
	to bool*.
	(double_int::add_with_sign): New.
	(double_int::ule): New.
	(double_int::sle): New.
	* builtins.c: Modify to use the new double_int interface.
	* cgraph.c: Likewise.
	* combine.c: Likewise.
	* dwarf2out.c: Likewise.
	* emit-rtl.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* fixed-value.c: Likewise.
	* fold-const.c: Likewise.
	* gimple-fold.c: Likewise.
	* gimple-ssa-strength-reduction.c: Likewise.
	* gimplify-rtx.c: Likewise.
	* ipa-prop.c: Likewise.
	* loop-iv.c: Likewise.
	* optabs.c: Likewise.
	* stor-layout.c: Likewise.
	* tree-affine.c: Likewise.
	* tree-cfg.c: Likewise.
	* tree-dfa.c: Likewise.
	* tree-flow-inline.h: Likewise.
	* tree-object-size.c: Likewise.
	* tree-predcom.c: Likewise.
	* tree-pretty-print.c: Likewise.
	* tree-sra.c: Likewise.
	* tree-ssa-address.c: Likewise.
	* tree-ssa-alias.c: Likewise.
	* tree-ssa-ccp.c: Likewise.
	* tree-ssa-forwprop.c: Likewise.
	* tree-ssa-loop-ivopts.c: Likewise.
	* tree-ssa-loop-niter.c: Likewise.
	* tree-ssa-phiopt.c: Likewise.
	* tree-ssa-pre.c: Likewise.
	* tree-ssa-sccvn: Likewise.
	* tree-ssa-structalias.c: Likewise.
	* tree-ssa.c: Likewise.
	* tree-switch-conversion.c: Likewise.
	* tree-vect-loop-manip.c: Likewise.
	* tree-vrp.c: Likewise.
	* tree.h: Likewise.
	* tree.c: Likewise.
	* varasm.c: Likewise.

From-SVN: r191047
2012-09-07 00:06:35 +00:00
Jakub Jelinek
854f927236 re PR middle-end/54486 (Spurious printf format warning mentions nonexistent type 'sizetype')
PR middle-end/54486
	* builtins.c (fold_builtin_strspn, fold_builtin_strcspn): Use
	build_int_cst with size_type_node instead of size_int.

	* c-c++-common/pr54486.c: New test.

From-SVN: r190986
2012-09-05 18:27:55 +02:00
Ulrich Weigand
215770ada8 builtins.c (expand_builtin_atomic_compare_exchange): Pass old value operand as MEM to expand_atomic_compare_and_swap.
* builtins.c (expand_builtin_atomic_compare_exchange): Pass old
	value operand as MEM to expand_atomic_compare_and_swap.

	* config/s390/s390.md ("atomic_compare_and_swap<mode>"): Accept
	nonimmediate_operand for old value; generate load and store if
	needed.
	* config/s390/s390.c (s390_expand_cs_hqi): Accept any operand
	as vtarget.

From-SVN: r190236
2012-08-08 18:03:37 +00:00
Richard Henderson
2225b9f298 Introduce and use unknown_optab
Prep for a later patch where this becomes an enum value.

        * optabs.h (unknown_optab): New.
        * builtins.c (interclass_mathfn_icode): Use it.
        * dojump.c (do_compare_rtx_and_jump): Likewise.
        * optabs.c (optab_for_tree_code, expand_binop): Likewise.
        * tree-vect-generic.c (add_rshift, expand_vector_divmod): Likewise.
        (expand_vector_operations_1): Likewise.
        * tree-vect-patterns.c (vect_recog_divmod_pattern): Likewise.
        * tree-vect-stmts.c (supportable_narrowing_operation): Likewise.

From-SVN: r189816
2012-07-24 10:28:41 -07:00
Richard Guenther
3c82efd91f builtins.c (get_object_alignment_2): Correct offset handling when using type alignment of a MEM_REF kind base.
2012-07-20  Richard Guenther  <rguenther@suse.de>

	* builtins.c (get_object_alignment_2): Correct offset handling
	when using type alignment of a MEM_REF kind base.

From-SVN: r189704
2012-07-20 08:31:26 +00:00
Richard Guenther
b0f4a35f73 tree.h (get_object_or_type_alignment): Remove.
2012-07-18  Richard Guenther  <rguenther@suse.de>

	* tree.h (get_object_or_type_alignment): Remove.
	* builtins.c (get_object_alignment_2): New function copied from
	get_object_alignment_1.  Take extra argument to indicate whether
	we take the address of EXP.  Rework to use type alignment information
	if not, and return whether the result is an approximation or not.
	(get_object_alignment_1): Wrap around get_object_alignment_2.
	(get_pointer_alignment_1): Call get_object_alignment_2 indicating
	we take the address.
	(get_object_or_type_alignment): Remove.
	* expr.c (expand_assignment): Call get_object_alignment.
	(expand_expr_real_1): Likewise.

From-SVN: r189607
2012-07-18 08:49:55 +00:00
Richard Guenther
44fabee4e2 re PR c/53937 (Pack'ing struct causes gcc to not recognize that an field's address is aligned)
2012-07-13  Richard Guenther  <rguenther@suse.de>

	PR middle-end/53937
	* builtins.c (get_pointer_alignment_1): Handle constant
	pointers.

From-SVN: r189458
2012-07-13 09:45:00 +00:00
Michael Matz
625ed17217 re PR middle-end/53688 (191.fma3d in SPEC CPU 2000 miscompiled)
PR middle-end/53688
	* builtins.c (get_memory_rtx): Always build an all-aliasing MEM_REF
	with correct size.

testsuite/
	* gcc.c-torture/execute/pr53688.c: New test.

From-SVN: r188852
2012-06-21 12:18:23 +00:00
Kenneth Zadeck
49ab6098ee 2012-06-2 Kenneth Zadeck <zadeck@naturalbridge.com>
* expmed.c (expand_mult, choose_multiplier): Change "2 *
	HOST_BITS_PER_WIDE_INT" to "HOST_BITS_PER_DOUBLE_INT".
	* expr.c (convert_modes): Likewise.
	* explow.c (plus_constant): Likewise.
	* fixed-value.c (fixed_saturate1, fixed_saturate2)
	(do_fixed_add, do_fixed_multiply, do_fixed_multiply)
	(do_fixed_multiply, do_fixed_multiply, do_fixed_divide)
	(do_fixed_divide, do_fixed_divide, do_fixed_divide)
	(do_fixed_divide, do_fixed_divide, do_fixed_shift, do_fixed_shift)
	(do_fixed_shift, fixed_convert, fixed_convert)
	(fixed_convert_from_int, fixed_convert_from_int)
	(fixed_convert_from_real): Likewise.
	* fold-const.c (fold_convert_const_int_from_fixed, sign_bit_p)
	(native_interpret_int, fold_binary_loc, fold_ternary_loc): Likewise.
	* varasm.c (output_constructor_bitfield): Likewise.
	* tree-vrp.c (register_edge_assert_for_2): Likewise.
	* double-int.c (rshift_double, lshift_double): Likewise.
	* double-int.h (double_int_fits_in_uhwi_p, double_int, double_int): Likewise.
	* simplify-rtx.c (mode_signbit_p)
	(simplify_const_unary_operation, simplify_binary_operation_1)
	(simplify_immed_subreg): Likewise.
	* builtins.c (c_readstr, fold_builtin_bitop): Likewise.
	* tree-vect-generic.c (build_replicated_const): Likewise.
	* dbxout.c (stabstr_O): Likewise.
	* emit-rtl.c (immed_double_int_const, immed_double_const)
	(gen_lowpart_common, init_emit_once): Likewise.
	* tree.c (integer_pow2p, tree_log2, tree_floor_log2)
	(widest_int_cst_value, upper_bound_in_type): Likewise.
	* stor-layout.c (initialize_sizetypes, fixup_signed_type)
	(fixup_unsigned_type): Likewise.
	* real.c (real_to_integer2, real_from_integer): Likewise.
	* dwarf2out.c (size_of_loc_descr, size_of_die, output_die)
	(clz_loc_descriptor, mem_loc_descriptor): Likewise.

From-SVN: r188139
2012-06-02 16:08:39 +00:00
Michael Matz
9474e8ab4a rtl.h (assign_stack_temp, [...]): Remove 'keep' argument.
* rtl.h (assign_stack_temp, assign_stack_temp_for_type,
	assign_temp): Remove 'keep' argument.
	(mark_temp_addr_taken): Remove prototype.
	* tree.h (expand_decl): Remove prototype.
	* function.c (struct temp_slot): Remove addr_taken and keep
	member.
	(assign_stack_temp_for_type) Don't initialize above, remove
	keep argument.
	(assign_stack_temp, assign_temp): Remove keep argument.
	(mark_temp_addr_taken): Remove.
	(preserve_temp_slots): Remove handling of addr_taken and keep
	members.
	(free_temp_slots): Ditto.
	* expr.c (expand_expr_real_1 <COMPOUND_LITERAL_EXPR>): Remove
	dead code.
	* stmt.c (expand_asm_operands): Remove dead code.
	(expand_decl): Remove.
	* c-decl.c (finish_struct): Don't call expand_decl.
	* builtins.c (expand_builtin_cexpi): Adjust calls to assign_temp
	and assign_stack_temp.
	* calls.c (save_fixed_argument_area, initialize_argument_information,
	expand_call, emit_library_call_value_1, store_one_arg): Ditto.
	* expmed.c (extract_bit_field_1): Ditto.
	* expr.c (emit_group_load_1, emit_group_store,
	copy_blkmode_from_reg, emit_push_insn, expand_assignment,
	store_field, expand_constructor, expand_cond_expr_using_cmove,
	expand_expr_real_2, expand_expr_real_1): Ditto.
	* stmt.c (expand_asm_operands, expand_return): Ditto.

	* function.c (pop_temp_slots): Call free_temp_slots.
	* calls.c (store_one_arg): Don't call preserve_temp_slots or
	free_temp_slots.
	* expr.c (expand_assignment): Don't call free_temp_slots.

	* config/arm/arm.c (neon_expand_vector_init): Ditto.
	* config/i386/i386.c (ix86_expand_vector_set): Ditto.
	(ix86_expand_vector_extract): Ditto.
	* config/ia64/ia64.c (spill_xfmode_rfmode_operand,
	ia64_expand_movxf_movrf): Ditto.
	* config/mips/mips.c (mips_expand_vi_general): Ditto.
	* config/mmix/mmix.md (floatdisf2, floatunsdisf2, truncdfsf2,
	extendsfdf2): Ditto.
	* config/rs6000/rs6000.c (rs6000_expand_vector_init,
	rs6000_expand_vector_set, rs6000_expand_vector_extract,
	rs6000_allocate_stack_temp): Ditto.
	* config/rs6000/rs6000.md (fix_trunctfsi2_fprs): Ditto.
	* config/sparc/sparc.c (emit_soft_tfmode_libcall,
	sparc_emit_float_lib_cmp, sparc_emit_float_lib_cmp,
	sparc_expand_vector_init): Ditto.

From-SVN: r187965
2012-05-29 14:44:47 +00:00
Richard Sandiford
0a81f074cf rtl.h (plus_constant, [...]): Merge into a single plus_constant function.
gcc/
	* rtl.h (plus_constant, plus_constant_mode): Merge into a single
	plus_constant function.
	* explow.c (plus_constant, plus_constant_mode): Likewise.  Assert
	that the mode is sensible.
	(use_anchored_address, round_push, allocate_dynamic_stack_space)
	(probe_stack_range, anti_adjust_stack_and_probe): Update calls to
	plus_constant.

	* alias.c (canon_rtx): Likewise.
	(init_alias_analysis): Likewise.
	* builtins.c (expand_builtin_return_addr)
	(expand_builtin_setjmp_setup, expand_builtin_longjmp)
	(expand_builtin_nonlocal_goto, expand_builtin_update_setjmp_buf)
	(expand_builtin_apply_args_1, expand_builtin_apply, expand_movstr)
	(expand_builtin_stpcpy): Likewise.
	* calls.c (save_fixed_argument_area, restore_fixed_argument_area)
	(compute_argument_addresses, internal_arg_pointer_based_exp)
	(expand_call, emit_library_call_value_1): Likewise.
	* cfgexpand.c (expand_one_stack_var_at, expand_debug_expr): Likewise.
	* combine-stack-adj.c (try_apply_stack_adjustment): Likewise.
	* combine.c (combine_simplify_rtx, force_to_mode): Likewise.
	* cse.c (insert_const_anchor, find_reg_offset_for_const)
	(use_related_value, fold_rtx): Likewise.
	* cselib.c (cselib_subst_to_values): Likewise.
	* dse.c (record_store, check_mem_read_rtx): Likewise.
	* dwarf2out.c (rtl_for_decl_location, gen_variable_die): Likewise.
	* emit-rtl.c (adjust_address_1): Likewise.
	* except.c (sjlj_emit_function_enter)
	(expand_builtin_extract_return_addr)
	(expand_builtin_frob_return_addr): Likewise.
	* expmed.c (expand_divmod): Likewise.
	* expr.c (move_by_pieces, store_by_pieces, store_by_pieces_1)
	(emit_move_resolve_push, push_block, emit_push_insn, store_expr)
	(expand_expr_addr_expr_1, expand_expr_real_1): Likewise.
	* function.c (assign_stack_local_1)
	(instantiate_virtual_regs_in_rtx): Likewise.
	* optabs.c (prepare_cmp_insn): Likewise.
	* recog.c (offsettable_address_addr_space_p): Likewise.
	* reload.c (find_reloads_address, form_sum)
	(find_reloads_subreg_address): Likewise.
	* reload1.c (init_reload, eliminate_regs_1)
	(eliminate_regs_in_insn): Likewise.
	* simplify-rtx.c (simplify_unary_operation_1)
	(simplify_binary_operation_1, simplify_plus_minus): Likewise.
	* var-tracking.c (compute_cfa_pointer, prepare_call_arguments)
	(vt_add_function_parameter): Likewise.

	* config/alpha/alpha.h (EH_RETURN_HANDLER_RTX): Likewise.
	* config/alpha/vms.h (EH_RETURN_HANDLER_RTX): Likewise.
	* config/alpha/alpha.c (alpha_legitimize_address_1)
	(get_unaligned_address, alpha_expand_unaligned_load)
	(alpha_expand_unaligned_store, alpha_expand_unaligned_load_words)
	(alpha_expand_unaligned_store_words, alpha_expand_block_clear)
	(alpha_expand_builtin_establish_vms_condition_handler)
	(alpha_setup_incoming_varargs, emit_frame_store_1)
	(alpha_expand_prologue, alpha_expand_epilogue)
	(alpha_use_linkage): Likewise.
	* config/alpha/alpha.md: Likewise.

	* config/arm/arm.c (arm_trampoline_init, legitimize_pic_address)
	(arm_load_pic_register, arm_pic_static_addr, arm_legitimize_address)
	(thumb_legitimize_address, arm_gen_load_multiple_1)
	(arm_gen_store_multiple_1, arm_gen_multiple_op, gen_ldm_seq)
	(gen_stm_seq, gen_const_stm_seq, arm_block_move_unaligned_straight)
	(arm_block_move_unaligned_loop, arm_gen_movmemqi, arm_reload_in_hi)
	(arm_reload_out_hi, arm_reorg, vfp_emit_fstmd, emit_multi_reg_push)
	(emit_sfm, thumb_set_frame_pointer, arm_expand_prologue)
	(thumb1_emit_multi_reg_push, thumb1_expand_prologue)
	(thumb_expand_movmemqi, arm_set_return_address)
	(thumb_set_return_address): Likewise.
	* config/arm/arm.md: Likewise.

	* config/avr/avr.c (avr_incoming_return_addr_rtx)
	(avr_prologue_setup_frame, expand_epilogue)
	(avr_const_address_lo16): Likewise.

	* config/bfin/bfin.h (EH_RETURN_HANDLER_RTX): Likewise.
	* config/bfin/bfin.c (setup_incoming_varargs, bfin_load_pic_reg)
	(bfin_expand_prologue, bfin_trampoline_init, bfin_expand_call)
	(bfin_output_mi_thunk): Likewise.

	* config/c6x/c6x.c (c6x_initialize_trampoline)
	(c6x_output_mi_thunk): Likewise.

	* config/cr16/cr16.h (EH_RETURN_HANDLER_RTX): Likewise.
	* config/cr16/cr16.c (cr16_create_dwarf_for_multi_push): Likewise.

	* config/cris/cris.c (cris_return_addr_rtx, cris_split_movdx)
	(cris_expand_prologue, cris_expand_epilogue, cris_gen_movem_load)
	(cris_emit_movem_store, cris_trampoline_init): Likewise.
	* config/cris/cris.md: Likewise.

	* config/darwin.c (machopic_indirect_data_reference)
	(machopic_legitimize_pic_address): Likewise.

	* config/epiphany/epiphany.c (epiphany_emit_save_restore)
	(epiphany_expand_prologue, epiphany_expand_epilogue)
	(epiphany_trampoline_init): Likewise.
	* config/epiphany/epiphany.md: Likewise.

	* config/fr30/fr30.c (fr30_move_double): Likewise.

	* config/frv/frv.c (frv_dwarf_store, frv_expand_prologue)
	(frv_expand_block_move, frv_expand_block_clear, frv_return_addr_rtx)
	(frv_index_memory, unspec_got_name, frv_find_base_term)
	(frv_output_dwarf_dtprel): Likewise.

	* config/h8300/h8300.c (h8300_push_pop, h8300_return_addr_rtx)
	(h8300_swap_into_er6, h8300_swap_out_of_er6): Likewise.

	* config/i386/i386.h (RETURN_ADDR_RTX): Likewise.
	* config/i386/i386.c (setup_incoming_varargs_64)
	(setup_incoming_varargs_ms_64, choose_baseaddr)
	(ix86_emit_save_reg_using_mov, ix86_adjust_stack_and_probe)
	(ix86_emit_probe_stack_range, ix86_expand_prologue)
	(ix86_emit_restore_reg_using_pop, ix86_emit_leave)
	(ix86_expand_epilogue, legitimize_pic_address, ix86_legitimize_address)
	(ix86_split_long_move, ix86_expand_movmem, ix86_expand_setmem)
	(ix86_static_chain, ix86_trampoline_init, x86_this_parameter)
	(x86_output_mi_thunk): Likewise.
	* config/i386/i386.md: Likewise.

	* config/ia64/ia64.c (ia64_expand_load_address)
	(ia64_expand_tls_address, ia64_expand_move, ia64_split_tmode)
	(do_spill, ia64_trampoline_init): Likewise.

	* config/iq2000/iq2000.c (iq2000_va_start)
	(iq2000_emit_frame_related_store, iq2000_expand_prologue)
	(iq2000_expand_eh_return, iq2000_setup_incoming_varargs)
	(iq2000_print_operand, iq2000_legitimize_address): Likewise.

	* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.

	* config/m32c/m32c.c (m32c_return_addr_rtx)
	(m32c_expand_insv): Likewise.

	* config/m32r/m32r.c (m32r_setup_incoming_varargs)
	(m32r_legitimize_pic_address, m32r_print_operand)
	(m32r_print_operand_address): Likewise.

	* config/m68k/linux.h (FINALIZE_TRAMPOLINE): Likewise.
	* config/m68k/m68k.h (RETURN_ADDR_RTX): Likewise.
	(EH_RETURN_HANDLER_RTX): Likewise.
	* config/m68k/m68k.c (m68k_emit_movem, m68k_expand_prologue)
	(m68k_expand_epilogue, legitimize_pic_address)
	(m68k_output_mi_thunk): Likewise.
	* config/m68k/m68k.md: Likewise.

	* config/mcore/mcore.c (mcore_expand_prolog): Likewise.
	(mcore_expand_epilog): Likewise.
	* config/mcore/mcore.md: Likewise.

	* config/mep/mep.c (mep_allocate_initial_value)
	(mep_expand_prologue, mep_expand_epilogue): Likewise.

	* config/microblaze/microblaze.c (double_memory_operand)
	(microblaze_block_move_loop): Likewise.

	* config/mips/mips.c (mips_strip_unspec_address, mips_add_offset)
	(mips_setup_incoming_varargs, mips_va_start, mips_block_move_loop)
	(mips_print_operand, mips16e_save_restore_reg, mips_save_restore_reg)
	(mips_expand_prologue, mips_epilogue_set_cfa)
	(mips_expand_epilogue): Likewise.
	* config/mips/mips.md: Likewise.

	* config/mmix/mmix.c (mmix_dynamic_chain_address, mmix_return_addr_rtx)
	(mmix_expand_prologue, mmix_expand_epilogue): Likewise.

	* config/mn10300/mn10300.c (mn10300_gen_multiple_store)
	(mn10300_builtin_saveregs, mn10300_trampoline_init): Likewise.

	* config/moxie/moxie.h (INCOMING_RETURN_ADDR_RTX): Likewise.
	(EH_RETURN_HANDLER_RTX): Likewise.
	* config/moxie/moxie.c (moxie_static_chain): Likewise.

	* config/pa/pa.c (legitimize_pic_address, hppa_legitimize_address)
	(store_reg, set_reg_plus_d, pa_expand_prologue, load_reg)
	(pa_return_addr_rtx, hppa_builtin_saveregs)
	(pa_trampoline_init): Likewise.
	* config/pa/pa.md: Likewise.

	* config/pdp11/pdp11.c (pdp11_expand_epilogue): Likewise.

	* config/picochip/picochip.c (picochip_static_chain): Likewise.

	* config/rs6000/rs6000.h (RS6000_SAVE_TOC): Likewise.
	* config/rs6000/rs6000.c (rs6000_legitimize_address)
	(setup_incoming_varargs, print_operand, rs6000_return_addr)
	(rs6000_emit_eh_reg_restore, rs6000_emit_probe_stack_range)
	(rs6000_emit_epilogue)
	(rs6000_machopic_legitimize_pic_address): Likewise.

	* config/rx/rx.c (gen_rx_rtsd_vector, gen_rx_popm_vector): Likewise.

	* config/s390/s390.h (INITIAL_FRAME_ADDRESS_RTX): Likewise.
	(DYNAMIC_CHAIN_ADDRESS): Likewise.
	* config/s390/s390.c (s390_decompose_address, legitimize_pic_address)
	(s390_delegitimize_address, print_operand, annotate_constant_pool_refs)
	(replace_constant_pool_ref, s390_return_addr_rtx, s390_back_chain_rtx)
	(save_fpr, restore_fpr, save_gprs, restore_gprs, s390_emit_prologue)
	(s390_emit_epilogue, s390_function_profiler): Likewise.
	* config/s390/s390.md: Likewise.

	* config/score/score.c (score_add_offset, score_prologue): Likewise.

	* config/sh/sh.c (expand_block_move, push_regs, sh_builtin_saveregs)
	(sh_output_mi_thunk): Likewise.
	* config/sh/sh.md: Likewise.

	* config/sparc/sparc.h (DYNAMIC_CHAIN_ADDRESS, FRAME_ADDR_RTX)
	(RETURN_ADDR_RTX, INCOMING_RETURN_ADDR_RTX): Likewise.
	* config/sparc/sparc.c (sparc_legitimize_pic_address)
	(sparc_emit_probe_stack_range, emit_save_or_restore_regs)
	(emit_window_save, sparc_flat_expand_prologue, sparc_struct_value_rtx)
	(emit_and_preserve): Likewise.
	* config/sparc/sparc.md: Likewise.

	* config/spu/spu.h (DYNAMIC_CHAIN_ADDRESS): Likewise.
	* config/spu/spu.c (spu_expand_insv, spu_machine_dependent_reorg)
	(spu_setup_incoming_varargs, ea_load_store_inline)
	(spu_expand_load): Likewise.

	* config/stormy16/stormy16.c (xstormy16_expand_prologue)
	(combine_bnp): Likewise.

	* config/tilegx/tilegx.h (DYNAMIC_CHAIN_ADDRESS): Likewise.
	* config/tilegx/tilegx.c (tilegx_setup_incoming_varargs)
	(tilegx_expand_unaligned_load, tilegx_trampoline_init): Likewise.

	* config/tilepro/tilepro.h (DYNAMIC_CHAIN_ADDRESS): Likewise.
	* config/tilepro/tilepro.c (tilepro_setup_incoming_varargs)
	(tilepro_expand_unaligned_load, tilepro_trampoline_init): Likewise.

	* config/v850/v850.c (expand_prologue, expand_epilogue): Likewise.
	* config/v850/v850.md: Likewise.

	* config/vax/elf.h (EH_RETURN_STACKADJ_RTX): Likewise.
	(EH_RETURN_HANDLER_RTX): Likewise.
	* config/vax/vax.h (DYNAMIC_CHAIN_ADDRESS, RETURN_ADDR_RTX): Likewise.
	* config/vax/vax.c (vax_add_reg_cfa_offset, vax_expand_prologue)
	(print_operand_address, vax_trampoline_init): Likewise.

	* config/xtensa/xtensa.c (xtensa_expand_prologue, xtensa_return_addr)
	(xtensa_function_value_regno_p): Likewise.

From-SVN: r187199
2012-05-05 17:41:49 +00:00
Martin Jambor
644ffefd9b builtins.c (get_object_alignment_1): Return whether we can determine the alignment or conservatively assume byte...
2012-05-03  Martin Jambor  <mjambor@suse.cz>

	* builtins.c (get_object_alignment_1): Return whether we can determine
	the alignment or conservatively assume byte alignment.  Return the
	alignment by reference.  Use get_pointer_alignment_1 for dereference
	alignment.
	(get_pointer_alignment_1): Return whether we can determine the
	alignment or conservatively assume byte alignment.  Return the
	alignment by reference.  Use get_ptr_info_alignment to get SSA name
	alignment.
	(get_object_alignment): Update call to get_object_alignment_1.
	(get_object_or_type_alignment): Likewise, fall back to type alignment
	only when it returned false.
	(get_pointer_alignment): Update call to get_pointer_alignment_1.
	* fold-const.c (get_pointer_modulus_and_residue): Update call to
	get_object_alignment_1.
	* ipa-prop.c (ipa_modify_call_arguments): Update call to
	get_pointer_alignment_1.
	* tree-sra.c (build_ref_for_offset): Likewise, fall back to the type
	of MEM_REF or TARGET_MEM_REF only when it returns false.
	* tree-ssa-ccp.c (get_value_from_alignment): Update call to
	get_object_alignment_1.
	(ccp_finalize): Use set_ptr_info_alignment.
	* tree.h (get_object_alignment_1): Update declaration.
	(get_pointer_alignment_1): Likewise.
	* gimple-pretty-print.c (dump_gimple_phi): Use get_ptr_info_alignment.
	(dump_gimple_stmt): Likewise.
	* tree-flow.h (ptr_info_def): Updated comments of fields align and
	misalign.
	(get_ptr_info_alignment): Declared.
	(mark_ptr_info_alignment_unknown): Likewise.
	(set_ptr_info_alignment): Likewise.
	(adjust_ptr_info_misalignment): Likewise.
	* tree-ssa-address.c (copy_ref_info): Use new access functions to get
	and set alignment of SSA names.
	* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Call
	mark_ptr_info_alignment_unknown.
	* tree-ssanames.c (get_ptr_info_alignment): New function.
	(mark_ptr_info_alignment_unknown): Likewise.
	(set_ptr_info_alignment): Likewise.
	(adjust_ptr_info_misalignment): Likewise.
	(get_ptr_info): Call mark_ptr_info_alignment_unknown.
	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
	Likewise.
	(bump_vector_ptr): Likewise.
	* tree-vect-stmts.c (create_array_ref): Use set_ptr_info_alignment.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.

From-SVN: r187101
2012-05-03 17:48:56 +02:00
Kirill Yukhin
5dcfdccd32 ChangeLog entry:
* coretypes (MEMMODEL_MASK): New.
        * builtins.c (get_memmodel): Add val. Call target.memmodel_check
        and return new variable.
        (expand_builtin_atomic_exchange):  Mask memmodel values.
        (expand_builtin_atomic_compare_exchange): Ditto.
        (expand_builtin_atomic_load): Ditto.
        (expand_builtin_atomic_store): Ditto.
        (expand_builtin_atomic_clear): Ditto.
        * doc/extend.texi: Mention port-dependent memory model flags.
        * config/i386/cpuid.h (bit_HLE): New.
        * config/i386/driver-i386.c (host_detect_local_cpu): Detect
        HLE support.
        * config/i386/i386-protos.h (ix86_generate_hle_prefix): New.
        * config/i386/i386-c.c (ix86_target_macros_internal): Set
        HLE defines.
        (ix86_target_string)<-mhle>: New.
        (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto.
        * config/i386/i386.c (ix86_target_string)<OPTION_MASK_ISA_HLE>:
        New.
        (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto.
        (ix86_option_override_internal)<PTA_HLE>: New switch, set it
        enabled for generic, generic64 and core-avx2.
        (ix86_print_operand): Generate HLE lock prefixes.
        (ix86_memmodel_check): New.
        (TARGET_MEMMODEL_CHECK): Ditto.
        * config/i386/i386.h (OPTION_ISA_HLE): Ditto.
        (IX86_HLE_ACQUIRE): Ditto.
        (IX86_HLE_RELEASE): Ditto.
        * config/i386/i386.h (ix86_generate_hle_prefix): Ditto.
        * config/i386/i386.opt (mhle): Ditto.
        * config/i386/sync.md(atomic_compare_and_swap<mode>): Pass
        success model to instruction emitter.
        (atomic_fetch_add<mode>): Ditto.
        (atomic_exchange<mode>): Ditto.
        (atomic_add<mode>): Ditto.
        (atomic_sub<mode>): Ditto.
        (atomic_<code><mode>): Ditto.
        (*atomic_compare_and_swap_doubledi_pic): Ditto.
        (atomic_compare_and_swap_single<mode>): Define and use argument
        for success model.
        (atomic_compare_and_swap_double<mode>): Ditto.
        * configure.ac: Check if assembler support HLE prefixes.
        * configure: Regenerate.
        * config.in: Ditto.

testsuite/ChangeLog entry:

        * gcc.target/i386/hle-cmpxchg-acq-1.c: New.
        * gcc.target/i386/hle-cmpxchg-rel-1.c: Ditto.
        * gcc.target/i386/hle-add-acq-1.c: Ditto.
        * gcc.target/i386/hle-add-rel-1.c: Ditto.
        * gcc.target/i386/hle-and-acq-1.c: Ditto.
        * gcc.target/i386/hle-and-rel-1.c: Ditto.
        * gcc.target/i386/hle-or-acq-1.c: Ditto.
        * gcc.target/i386/hle-or-rel-1.c: Ditto.
        * gcc.target/i386/hle-sub-acq-1.c: Ditto.
        * gcc.target/i386/hle-sub-rel-1.c: Ditto.
        * gcc.target/i386/hle-xadd-acq-1.c: Ditto.
        * gcc.target/i386/hle-xadd-rel-1.c: Ditto.
        * gcc.target/i386/hle-xchg-acq-1.c: Ditto.
        * gcc.target/i386/hle-xchg-rel-1.c: Ditto.
        * gcc.target/i386/hle-xor-acq-1.c: Ditto.
        * gcc.target/i386/hle-xor-rel-1.c: Ditto.



Co-Authored-By: Andi Kleen <ak@linux.intel.com>

From-SVN: r187051
2012-05-02 15:32:01 +00:00
Dodji Seketeli
b9c8da345c Add -Wvarargs option
Several warnings related to questionable usage cases of variadic
function related macros (like va_start) could not be controlled by any
warning-related macro.  Fixed thus, by introducing the -Wvarargs
option.

Tested on x86_64-unknown-linux-gnu against trunk.

gcc/c-family/

	* c.opt (Wvarargs):  Define new option.

gcc/
	* builtins.c (fold_builtin_next_arg):  Use OPT_Wvarargs as an
	argument for the various warning_at calls.

gcc/doc/

	* invoke.texi: Update the documentation.

gcc/testsuite/

	* c-c++-common/Wvarargs.c: New test case.
	* c-c++-common/Wvarargs-2.c: Likewise.

From-SVN: r186978
2012-04-30 13:43:57 +02:00
Dodji Seketeli
34c8879087 Fix va_start related location
In gcc/testsuite/gcc.dg/pr30457.c, the first warning was not being
emitted because the relevant location was inside the var_start macro
defined in a system header.  It can even point to a token for a
builtin macro there.  This patch unwinds to the first token in real
source code in that case.

Tested on x86_64-unknown-linux-gnu against trunk.

	* builtins.c (fold_builtin_next_arg): Unwinds to the first
	location in real source code.

From-SVN: r186975
2012-04-30 13:43:14 +02:00
Eric Botcazou
ac868f29d7 re PR target/52624 (missing __builtin_bswap16)
PR target/52624
	* doc/extend.texi (Other Builtins): Document __builtin_bswap16.
	(PowerPC AltiVec/VSX Built-in Functions): Remove it.
	* doc/md.texi (Standard Names): Add bswap.
	* builtin-types.def (BT_UINT16): New primitive type.
	(BT_FN_UINT16_UINT16): New function type.
	* builtins.def (BUILT_IN_BSWAP16): New.
	* builtins.c (expand_builtin_bswap): Add TARGET_MODE argument.
	(expand_builtin) <BUILT_IN_BSWAP16>: New case.  Pass TARGET_MODE to
	expand_builtin_bswap.
	(fold_builtin_bswap): Add BUILT_IN_BSWAP16 case.
	(fold_builtin_1): Likewise.
	(is_inexpensive_builtin): Likewise.
	* optabs.c (expand_unop): Deal with bswap in HImode specially.  Add
	missing bits for bswap to libcall code.
	* tree.c (build_common_tree_nodes): Build uint16_type_node.
	* tree.h (enum tree_index): Add TI_UINT16_TYPE.
	(uint16_type_node): New define.
	* config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_BSWAP_HI): Delete.
	* config/rs6000/rs6000.c (rs6000_expand_builtin): Remove handling of
	above builtin.
	(rs6000_init_builtins): Likewise.
	* config/rs6000/rs6000.md (bswaphi2): Add TARGET_POWERPC predicate.
c-family/
	* c-common.h (uint16_type_node): Rename into...
	(c_uint16_type_node): ...this.
	* c-common.c (c_common_nodes_and_builtins): Adjust for above renaming.
	* c-cppbuiltin.c (builtin_define_stdint_macros): Likewise.

From-SVN: r186308
2012-04-11 11:13:39 +00:00
Uros Bizjak
18ae1560d1 builtins.c (expand_builtin_cexpi): Use copy_addr_to_reg instead of copy_to_mode_reg (Pmode, ...).
* builtins.c (expand_builtin_cexpi): Use copy_addr_to_reg instead of
	copy_to_mode_reg (Pmode, ...).
	(expand_builtin_frame_address): Ditto.
	* expr.c (emit_block_move_via_libcall): Ditto.
	(set_storage_via_libcall): Ditto.

	* config/i386/i386.c (ix86_expand_movmem): Ditto.
	(ix86_expand_setmem): Ditto.
	(ix86_trampoline_init): DItto.
	* config/i386/i386.md (cmpstrnsi): Ditto.
	(allocate_stack): Ditto.

From-SVN: r185541
2012-03-19 21:35:59 +01:00
Jakub Jelinek
ff63ac4d66 re PR middle-end/52592 (compilation failure with undefined reference to `__builtin_iround')
PR middle-end/52592
	* builtins.c (expand_builtin_int_roundingfn_2): If expanding
	BUILT_IN_IR{INT,OUND}* using optab fails, emit lr{int,ound}*
	calls instead of __builtin_ir{int,ound}*.

	* gcc.dg/pr52592.c: New test.

Co-Authored-By: Andrew Pinski <apinski@cavium.com>

From-SVN: r185431
2012-03-15 14:30:04 +01:00
Jakub Jelinek
58d38fd2d6 re PR middle-end/52177 (ICE: verify_gimple failed: non-trivial conversion at assignment with __atomic_is_lock_free())
PR middle-end/52177
	* builtins.c (fold_builtin_atomic_always_lock_free,
	expand_builtin_atomic_always_lock_free,
	fold_builtin_atomic_is_lock_free,
	expand_builtin_atomic_is_lock_free): Return and/or test
	boolean_true_node/boolean_false_node instead of
	integer_one_node/integer_zero_node.

	* c-c++-common/pr52177.c: New test.

From-SVN: r184096
2012-02-10 16:31:18 +01:00
Bin Cheng
15ed19ff32 re PR middle-end/51867 (GCC generates inconsistent code for same sources calling builtin calls, like sqrtf)
PR target/51867
	* builtins.c (expand_builtin): Don't check DECL_ASSEMBLER_NAME_SET_P.

	PR target/51867
	* testsuite/c-c++-common/dfp/signbit-2.c: Change '-O0' to '-O1'.
	* testsuite/gcc.dg/pr51867.c: New test.

From-SVN: r184037
2012-02-09 09:37:37 +00:00
Ian Lance Taylor
183dd1301c compiler: Use new __builtin_init_heap_trampoline.
PR go/47656
	* builtins.def (BUILT_IN_INIT_HEAP_TRAMPOLINE): Define.
	* builtins.c (expand_builtin_init_trampoline): Add onstack
	parameter.  Change caller.
	(expand_builtin): Handle BUILT_IN_INIT_HEAP_TRAMPOLINE.
	* tree.c (build_common_builtin_nodes): Declare
	__builtin_init_heap_trampoline.

From-SVN: r183650
2012-01-27 22:25:02 +00:00
Richard Guenther
87c0fb4bcb tree.h (get_pointer_alignment_1): Declare.
2012-01-25  Richard Guenther  <rguenther@suse.de>

	* tree.h (get_pointer_alignment_1): Declare.
	* builtins.c (get_pointer_alignment_1): New function.
	(get_pointer_alignment): Use it.

From-SVN: r183514
2012-01-25 11:14:28 +00:00
Romain Geissler
f3fc9b804a builtins.def (BUILT_IN_STPNCPY_CHK): New definition.
* builtins.def (BUILT_IN_STPNCPY_CHK): New definition.
	* builtins.c (expand_builtin, fold_builtin_4, maybe_emit_chk_warning):
	Add BUILT_IN_STPNCPY_CHK case.
	* gimple-fold.c (gimple_fold_builtin): Likewise.
	* tree-object-size.c (pass_through_call): Likewise.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1,
	call_may_clobber_ref_p_1): Likewise.
	* tree-ssa-structalias.c (find_func_aliases_for_builtin_call,
	find_func_clobbers): Likewise.
	* tree.h (fold_builtin_strncpy_chk): Rename to fold_builtin_stxncpy_chk
	* builtins.c (fold_builtin_strncpy_chk): Likewise.
	Rewrite stpncpy_chk calls to strncpy_chk calls if returned value is
	ignored.

	* gcc.c-torture/execute/builtins/chk.h (stpncpy, stpncpy_disallowed):
	New definitions.
	* gcc.c-torture/execute/builtins/lib/chk.c (stpncpy_disallowed):
	Likewise.
	(stpncpy, __stpncpy_chk): New functions.
	* gcc.c-torture/execute/builtins/stpncpy-chk-lib.c: New file.
	* gcc.c-torture/execute/builtins/stpncpy-chk.c: Likewise.

From-SVN: r182378
2011-12-15 18:26:10 +01:00
Eric Botcazou
908b951938 re PR tree-optimization/51315 (unaligned memory accesses generated with -ftree-sra)
PR tree-optimization/51315
	* tree.h (get_object_or_type_alignment): Declare.
	* expr.c (get_object_or_type_alignment): Move to...
	* builtins.c (get_object_or_type_alignment): ...here.  Add assertion.
	* tree-sra.c (tree_non_mode_aligned_mem_p): Rename to...
	(tree_non_aligned_mem_p): ...this.  Add ALIGN parameter.  Look into
	MEM_REFs and use get_object_or_type_alignment for them.
	(build_accesses_from_assign): Adjust for above change.
	(access_precludes_ipa_sra_p): Likewise.

From-SVN: r182102
2011-12-08 09:05:38 +00:00
Richard Guenther
89faf322d8 cgraph.c (cgraph_create_edge_1): Initialize call_stmt_cannot_inline_p from the stmt if possible.
2011-12-05  Richard Guenther  <rguenther@suse.de>

	* cgraph.c (cgraph_create_edge_1): Initialize
	call_stmt_cannot_inline_p from the stmt if possible.
	(cgraph_make_edge_direct): Likewise.
	* gimple-streamer-in.c (input_gimple_stmt): Do not
	call gimple_call_set_cannot_inline.
	* gimple.h (enum gf_mask): Remove GF_CALL_CANNOT_INLINE, shift
	values.
	(gimple_call_set_cannot_inline): Remove.
	(gimple_call_cannot_inline_p): Likewise.
	* ipa-inline-analysis.c (initialize_inline_failed): Look
	at the edge call_stmt_cannot_inline_p flag.
	* ipa-inline.c (can_inline_edge_p): Likewise.
	(early_inliner): Only update the edge flag.
	* ipa-prop.c (update_indirect_edges_after_inlining): Likewise.
	(ipa_modify_call_arguments): Do not call gimple_call_set_cannot_inline.
	* cgraphunit.c (assemble_thunk): Likewise.
	* gimple-fold.c (gimple_fold_call): Likewise.

	* tree.h (CALL_CANNOT_INLINE_P): Remove.
	* tree-mudflap.c (mf_xform_statements): Do not modify alloca calls.
	* builtins.c (expand_builtin_alloca): With -fmudflap do not expand
	alloca calls inline.
	* cfgexpand.c (expand_call_stmt): Do not set CALL_CANNOT_INLINE_P.
	* gimple.c (gimple_build_call_from_tree): Do not read
	CALL_CANNOT_INLINE_P.
	* gimplify.c (gimplify_call_expr): Do not copy CALL_CANNOT_INLINE_P.

From-SVN: r182001
2011-12-05 08:51:53 +00:00
Andrew MacLeod
0c1e7e423a re PR other/51011 (FAIL: gcc.dg/atomic-generic.c (test for excess errors))
2011-11-24  Andrew MacLeod  <amacleod@redhat.com>

	PR other/51011
	* tree.h (is_builtin_name): No longer external.
	* builtins.c (is_builtin_name): Make static.
	* varasm.c (incorporeal_function_p): __sync and __atomic external calls
	are not incorporeal and may need asm label processing.

From-SVN: r181721
2011-11-25 13:35:13 +00:00
Andrew MacLeod
744accb21b optab.c (maybe_emit_atomic_exchange): New.
2011-11-24  Andrew MacLeod  <amacleod@redhat.com>

	* optab.c (maybe_emit_atomic_exchange): New.  Try to emit an
	atomic_exchange pattern.
	(maybe_emit_sync_lock_test_and_set): New.  Try to emit an exchange
	using __sync_lock_test_and_set.
	(maybe_emit_compare_and_swap_exchange_loop): New. Try to emit an
	exchange using a compare_and_swap loop.
	(expand_sync_lock_test_and_set): New.  Expand sync_lock_test_and_set.
	(expand_atomic_test_and_set): New.  Expand test_and_set operation.
	(expand_atomic_exchange): Use new maybe_emit_* functions.
	(expand_atomic_store): Use new maybe_emit_* functions.
	* builtins.c (expand_builtin_sync_lock_test_and_set): Call
	expand_sync_lock_test_and_set routine.
	(expand_builtin_atomic_exchange): Remove parameter from call.
	(expand_builtin_atomic_clear): Use atomic_clear pattern if present.
	(expand_builtin_atomic_test_and_set): Add target and simply call
	expand_atomic_test_and_set.
	(expand_builtin): Add target to expand_builtin_atomic_test_and_set.
	* expr.h (expand_atomic_exchange): Add parameter.
	(expand_sync_lock_test_and_set): New prototype.
	(expand_atomic_test_and_set, expand_atomic_clear): New prototypes.

From-SVN: r181702
2011-11-24 23:14:31 +00:00
Andrew MacLeod
e351ae8587 builtins.c (expand_builtin): Remove 4th parameter representing weak/strong mode when...
2011-11-17  Andrew MacLeod  <amacleod@redhat.com>

	* builtins.c (expand_builtin): Remove 4th parameter representing 
	weak/strong mode when __atomic_compare_exchange becomes a library call.

	* gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if 
	memory model parameters don't match expected values.
	* gcc.dg/atomic-generic.c: Pass specific memory model parameters to
	__atomic_compare_exchange.
	* gcc.dg/atomic-noinline.c: Pass specific memory model parameters to
	__atomic_compare_exchange_n.
	* gcc.dg/atomic-noinline-aux.c (__atomic_compare_exchange_2): Remove
	weak/strong parameter and fail if memory models aren't correct.

From-SVN: r181453
2011-11-17 20:51:51 +00:00
Richard Henderson
c39169c82c Unify implementations of __builtin_mem_*_fence and __sync_synchronize.
* builtins.c (expand_builtin_mem_thread_fence): Remove.
	(expand_builtin_mem_signal_fence): Remove.
	(expand_builtin_atomic_thread_fence): Use expand_mem_thread_fence.
	(expand_builtin_sync_synchronize): Likewise.
	(expand_builtin_atomic_signal_fence): Use expand_mem_signal_fence.
	* optabs.c (expand_asm_memory_barrier): Split out from
	expand_builtin_mem_signal_fence.
	(expand_mem_thread_fence): New, a combination of code from
	expand_builtin_mem_thread_fence and expand_builtin_sync_synchronize.
	(expand_mem_signal_fence): Moved and renamed from
	expand_builtin_mem_signal_fence.
	(expand_atomic_exchange): Use expand_mem_thread_fence.
	(expand_atomic_load, expand_atomic_store): Likewise.
	* expr.h, optabs.h: Update decls.

From-SVN: r181451
2011-11-17 11:29:04 -08:00
Richard Henderson
f0409b19f5 builtins.c (expand_builtin_compare_and_swap): If target is const0, don't pass the target to expand_atomic_compare_and_swap.
* builtins.c (expand_builtin_compare_and_swap): If target is const0,
        don't pass the target to expand_atomic_compare_and_swap.
        (expand_builtin_atomic_compare_exchange): Likewise.

From-SVN: r181323
2011-11-12 09:17:54 -08:00
Andrew MacLeod
d660c35ea2 re PR middle-end/51038 (29_atomics/atomic_flag/clear/1.cc test_and_set/explicit.cc implicit.cc)
PR middle-end/51038

	libstdc++-v3
	* include/bits/atomic_base.h (atomic_thread_fence): Call built-in.
	(atomic_signal_fence): Call built-in.
	(test_and_set, clear): Call new atomic built-ins.

	gcc
	* builtins.c (expand_builtin_atomic_clear): New.  Expand atomic_clear.
	(expand_builtin_atomic_test_and_set): New.  Expand atomic test_and_set.
	(expand_builtin): Add cases for test_and_set and clear.
	* sync-builtins.def (BUILT_IN_ATOMIC_TEST_AND_SET): New.
	(BUILT_IN_ATOMIC_CLEAR): New.

	testsuite
	* gcc.dg/atomic-invalid.c: Add test for invalid __atomic_clear models.
	* gcc.dg/atomic-flag.c: New.  Test __atomic_test_and_set and
	__atomic_clear.

From-SVN: r181271
2011-11-10 20:38:33 +00:00
Andrew MacLeod
154b68db9b re PR rtl-optimization/51040 (ICE: RTL check: access of elt 1 of 'not' with last elt 0 in gen_rtx_fmt_ee_stat, at ./genrtl.h:33 with __atomic_nand_fetch())
PR rtl-optimization/51040
	* optabs.c (expand_atomic_fetch_op): Patchup code for NAND should be AND
	followed by NOT.
	* builtins.c (expand_builtin_atomic_fetch_op): Patchup code for NAND
	should be AND followed by NOT.
	* testsuite/gcc.dg/atomic-noinline[-aux].c: Test no-inline NAND and
	patchup code.

From-SVN: r181259
2011-11-10 16:39:32 +00:00
Richard Henderson
cedb4a1ad0 Allow libcalls to be installed for legacy __sync optabs.
This allows a target which implements the __sync interfaces
in libgcc to continue to use them transparently with the
new __atomic builtins.

It is assumed that these libgcc routines DO NOT use spinlocks.
This is true of all extant libgcc instances.

        * optabs.h (OTI_sync_compare_and_swap, OTI_sync_lock_test_and_set,
        OTI_sync_old_add, OTI_sync_old_sub, OTI_sync_old_ior,
        OTI_sync_old_and, OTI_sync_old_xor, OTI_sync_old_nand,
        OTI_sync_new_add, OTI_sync_new_sub, OTI_sync_new_ior,
        OTI_sync_new_and, OTI_sync_new_xor, OTI_sync_new_nand): Move and
        rename from the direct_optab_index enum.
        (sync_compare_and_swap_optab, sync_lock_test_and_set_optab,
        sync_old_add_optab, sync_old_sub_optab, sync_old_ior_optab,
        sync_old_and_optab, sync_old_xor_optab, sync_old_nand_optab,
        sync_new_add_optab, sync_new_sub_optab, sync_new_ior_optab,
        sync_new_and_optab, sync_new_xor_optab, sync_new_nand_optab): Read
        from the optab_table, not the direct_optab_table.
        (init_sync_libfuncs): Declare.
        (can_compare_and_swap_p): Update parameters.
        * optabs.c (init_sync_libfuncs_1, init_sync_libfuncs): New.
        (can_compare_and_swap_p): Add allow_libcall parameter; if true,
        test for the legacy compare-and-swap libcall.
        (expand_atomic_exchange): Use the legacy test-and-set libcall.
        (expand_atomic_compare_and_swap): Use the legacy CAS libcall.
        (struct atomic_op_functions): Update for optab type changes.
        (maybe_emit_op): Likewise.
        (expand_atomic_fetch_op): Use the legacy fetch-op libcalls.
        * builtins.c (fold_builtin_atomic_always_lock_free): Update call
        to can_compare_and_swap_p.
        * omp-low.c (expand_omp_atomic_fetch_op): Likewise.
        (expand_omp_atomic_pipeline): Likewise.
        * genopinit.c (optabs): Make sync_old_*_optab, sync_new_*_optab,
        sync_compare_and_swap_optab, sync_lock_test_and_set_optab regular
        optabs.

From-SVN: r181134
2011-11-07 15:11:55 -08:00
Andrew MacLeod
0669295b1e atomic_base.h (atomic_thread_fence): Call builtin.
2011-11-07  Andrew MacLeod  <amacleod@redhat.com>

	libstdc++-v3
	* include/bits/atomic_base.h (atomic_thread_fence): Call builtin.
	(atomic_signal_fence): Call builtin.
	(atomic_flag::test_and_set): Call __atomic_exchange when it is lockfree,
	otherwise fall back to call __sync_lock_test_and_set.
	(atomic_flag::clear): Call __atomic_store when it is lockfree,
	otherwise fall back to call __sync_lock_release.

	gcc
	* doc/extend.texi: Docuemnt behaviour change for __atomic_exchange and
	__atomic_store.
	* optabs.c (expand_atomic_exchange): Expand to __sync_lock_test_and_set
	only when originated from that builtin.
	(expand_atomic_store): Expand to __sync_lock_release when originated
	from that builtin.
	* builtins.c (expand_builtin_sync_lock_test_and_set): Add flag that
	expand_atomic_exchange call originated from here.
	(expand_builtin_sync_lock_release): Add flag that expand_atomic_store
	call originated from here.
	(expand_builtin_atomic_exchange): Add origination flag.
	(expand_builtin_atomic_store): Add origination flag.
	* expr.h (expand_atomic_exchange, expand_atomic_store): Add boolean 
	parameters to indicate implementation fall back options.

From-SVN: r181111
2011-11-07 20:06:39 +00:00
Andrew Macleod
86951993f8 Check in patch/merge from cxx-mem-model Branch
From-SVN: r181031
2011-11-06 14:55:48 +00:00
Paolo Carlini
2d4e2a688e re PR c++/50956 (-Wcast-qual does not work)
2011-11-02  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50956
	* builtins.c (fold_builtin_memchr): Fix cast.

/cp
2011-11-02  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50956
	* typeck.c (build_const_cast_1): Fix -Wcast-qual for false
	comp_ptr_ttypes_const.

/testsuite
2011-11-02  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50956
	* g++.dg/warn/Wcast-qual2.C: New.

From-SVN: r180786
2011-11-02 18:04:48 +00:00
Michael Meissner
ce835863ba Remove extra newline added in October 11 change
From-SVN: r180408
2011-10-24 22:28:53 +00:00
Michael Meissner
e79983f458 Convert standard builtin functions from being arrays to using a functional interface
From-SVN: r179820
2011-10-11 19:55:09 +00:00
Tom de Vries
13e49da934 re PR middle-end/50527 (inconsistent vla align)
2011-10-07  Tom de Vries  <tom@codesourcery.com>

	PR middle-end/50527
	* tree.c (build_common_builtin_nodes): Add local_define_builtin for
	BUILT_IN_ALLOCA_WITH_ALIGN.  Mark that BUILT_IN_ALLOCA_WITH_ALIGN can
	throw.
	* builtins.c (expand_builtin_alloca): Handle BUILT_IN_ALLOCA_WITH_ALIGN
	arglist.  Set align for	BUILT_IN_ALLOCA_WITH_ALIGN.
	(expand_builtin): Handle BUILT_IN_ALLOCA_WITH_ALIGN.
	(is_inexpensive_builtin): Handle BUILT_IN_ALLOCA_WITH_ALIGN.
	* tree-ssa-ccp.c (evaluate_stmt): Set align for
	BUILT_IN_ALLOCA_WITH_ALIGN.
	(fold_builtin_alloca_for_var): Rename to ...
	(fold_builtin_alloca_with_align): Set DECL_ALIGN from 2nd
	BUILT_IN_ALLOCA_WITH_ALIGN argument.
	(ccp_fold_stmt): Try folding BUILT_IN_ALLOCA_WITH_ALIGN using
	fold_builtin_alloca_with_align.
	(optimize_stack_restore): Handle BUILT_IN_ALLOCA_WITH_ALIGN.
	* builtins.def (BUILT_IN_ALLOCA_WITH_ALIGN): Declare using
	DEF_BUILTIN_STUB.
	* ipa-pure-const.c (special_builtin_state): Handle
	BUILT_IN_ALLOCA_WITH_ALIGN.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1)
	(call_may_clobber_ref_p_1): Same.
	* function.c (gimplify_parameters): Lower vla to
	BUILT_IN_ALLOCA_WITH_ALIGN.
	* gimplify.c (gimplify_vla_decl): Same.
	* cfgexpand.c (expand_call_stmt): Handle BUILT_IN_ALLOCA_WITH_ALIGN.
	* tree-mudflap.c (mf_xform_statements): Same.
	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary)
	(mark_all_reaching_defs_necessary_1, propagate_necessity): Same.
	* varasm.c (incorporeal_function_p): Same.
	* tree-object-size.c (alloc_object_size): Same.
	* gimple.c (gimple_build_call_from_tree): Same.

From-SVN: r179655
2011-10-07 12:49:49 +00:00
Jakub Jelinek
e7f9dae09c tree.h (avoid_folding_inline_builtin): New prototype.
* tree.h (avoid_folding_inline_builtin): New prototype.
	* builtins.c (avoid_folding_inline_builtin): No longer static.
	* gimple-fold.c (gimple_fold_builtin): Give up if
	avoid_folding_inline_builtin returns true.

From-SVN: r179614
2011-10-06 16:34:48 +02:00
Jakub Jelinek
80642376c0 re PR middle-end/50604 (verify_gimple failed: type mismatch in binary expression)
PR tree-optimization/50604
	* builtins.c (fold_builtin_strcpy, fold_builtin_stpcpy,
	fold_builtin_strncpy, fold_builtin_stxcpy_chk): Ensure
	last argument to memcpy has size_type_node type instead of
	ssizetype.
	* tree-ssa-strlen.c (handle_builtin_memcpy): Use size_type_node
	instead of TREE_TYPE (len) as type for newlen.

	* gcc.dg/pr50604.c: New test.

From-SVN: r179508
2011-10-04 17:25:53 +02:00
Mark Heffernan
a3a704a495 re PR middle-end/38509 (Bogus "attempt to free a non-heap object" warning)
2011-08-23  Mark Heffernan  <meheff@google.com>

        PR middle-end/38509
        * common.opt (Wfree-nonheap-object): New option.
        * doc/invoke.texi (Warning options): Document -Wfree-nonheap-object.
        * builtins.c (maybe_emit_free_warning): Add OPT_Wfree_nonheap_object
        to warning.
        (expand_builtin): Make warning conditional.

From-SVN: r178004
2011-08-23 18:06:42 +00:00
Richard Guenther
0d82a1c872 tree.h (convert_to_ptrofftype_loc): New function.
2011-08-17  Richard Guenther  <rguenther@suse.de>

	* tree.h (convert_to_ptrofftype_loc): New function.
	(convert_to_ptrofftype): Define.
	* builtins.c (expand_builtin_bzero): Use size_type_node.
	(fold_builtin_bzero): Likewise.
	(std_gimplify_va_arg_expr): Build the BIT_AND_EXPR on the pointer.
	* c-typeck.c (build_unary_op): Use convert_to_ptrofftype_loc.
	* cgraphunit.c (thunk_adjust): Use fold_build_pointer_plus_loc.
	(cgraph_redirect_edge_call_stmt_to_callee): Use size_int.
	* expr.c (expand_expr_addr_expr_1): Use fold_build_pointer_plus.
	* fold-const.c (build_range_check): Negate using the original
	type.
	(fold_unary_loc): Use fold_build_pointer_plus_loc.
	* gimple-fold.c (gimple_adjust_this_by_delta): Use
	convert_to_ptrofftype.
	* gimplify.c (gimplify_self_mod_expr): Likewise.
	* graphite-clast-to-gimple.c (clast_to_gcc_expression): Likewise.
	(graphite_create_new_loop_guard): Likewise.
	* graphite-sese-to-poly.c (my_long_long): Remove.
	(scop_ivs_can_be_represented): Adjust.
	* tree-cfg.c (verify_gimple_assign_unary): Use ptrofftype_p.
	* tree-chrec.c (chrec_fold_plus_1): Use fold_build_pointer_plus.
	* tree-loop-distribution.c (build_size_arg_loc): Use
	size_type_node.
	(generate_memset_zero): Simplify.
	* tree-mudflap.c: Use fold_convert, not convert.
	* tree-predcom.c (suitable_reference_p): Expand DR_OFFSET in
	its own type.
	(determine_offset): Likewise for DR_STEP.
	(valid_initializer_p): Likewise.
	* tree-profile.c (prepare_instrumented_value): Convert the pointer
	to an integer type of same size.
	* tree-scalar-evolution.c (interpret_rhs_expr): Do not refer
	to sizetype without need.
	* tree-ssa-address.c (tree_mem_ref_addr): Likewise.
	* tree-ssa-loop-ivopts.c (find_bivs): Use convert_to_ptrofftype.
	* tree-ssa-loop-manip.c (create_iv): Likewise.
	(determine_exit_conditions): Adjust comment.
	* tree-ssa-pre.c (create_expression_by_pieces): Use
	convert_to_ptrofftype.
	* tree-ssa-structalias.c (get_constraint_for_1): Likewise.
	* varasm.c (array_size_for_constructor): Compute using double_ints.

From-SVN: r177828
2011-08-17 12:00:35 +00:00
Richard Henderson
efec771ab9 re PR debug/50006 (ICE in in connect_traces, at dwarf2cfi.c:2677)
PR middle-end/50006
        * explow.c (allocate_dynamic_stack_space): Move suppress_reg_args_size
        setting out to include allocate_stack named pattern as well.
        * builtins.c (expand_builtin_apply): Add ARG_SIZE 0 note.
        * stmt.c (expand_stack_restore): Likewise.

From-SVN: r177764
2011-08-15 10:44:11 -07:00
Nick Clifton
9b0f6f5e51 builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi pattern.
* builtins.c (expand_builtin_memcmp): Do not use cmpstrnsi
	pattern.
	* doc/md.texi (cmpstrn): Note that the comparison stops if both
	fetched bytes are zero.
	(cmpstr): Likewise.
	(cmpmem): Note that the comparison does not stop if both of the
	fetched bytes are zero.

From-SVN: r177701
2011-08-12 16:26:11 +00:00
Uros Bizjak
6c32ee7449 builtins.def (BUILT_IN_ICEIL{,F,L}, [...]): New builtin definitions.
* builtins.def (BUILT_IN_ICEIL{,F,L}, BUILT_IN_IFLOOR{,F,L}
	BUILT_IN_IRINT{,F,L}, BUILT_IN_IROUND{,F,L}: New builtin definitions.
	* convert.c (convert_to_integer): Convert to BUILT_IN_ICEIL,
	BUILT_IN_IFLOOR, BUILT_IN_IRINT or BUILT_INT_IROUND when converting
	to integer_type_node.
	* fold-const.c (tree_call_nonnegative_warnv_p): Handle BUILT_IN_ICEIL,
	BUILT_IN_IFLOOR, BUILT_IN_IRINT and BUILT_INT_IROUND.
	* builtins.c (expand_builtin_in): Ditto.
	(mathfn_built_in_1): Ditto.
	(expand_builtin_int_roundingfn): Handle BUILT_IN_ICEIL and
	BUILT_IN_IFLOOR.
	(expand_builtin_int_roundingfn_2): Handle BUILT_IN_IRINT and
	BUILT_IN_IROUND.
	(fold_fixed_mathfn): Canonicalize BUILT_IN_ICEIL, BUILTIN_IN_IFLOOR
	BUILT_IN_IRINT and BUILT_IN_IROUND to BUILT_IN_LCEIL,
	BUILTIN_IN_LFLOOR, BUILT_IN_LRINT and BUILT_IN_LROUND on ILP32 targets.

testsuite/ChangeLog:

	* gcc.dg/builtins-67.c: New test.
	* gcc.target/i386/conversion.c: Ditto.

From-SVN: r177694
2011-08-12 14:32:41 +02:00
Richard Guenther
b126811e7d tree.h (can_trust_pointer_alignment): Remove.
2011-08-10  Richard Guenther  <rguenther@suse.de>

	* tree.h (can_trust_pointer_alignment): Remove.
	* builtins.c (can_trust_pointer_alignment): Remove.

	cp/
	* call.c (build_over_call): Call memcpy unconditionally.

From-SVN: r177625
2011-08-10 15:08:14 +00:00
Richard Guenther
0eb778344e tree.h (get_pointer_alignment): Remove max-align argument.
2011-08-10  Richard Guenther  <rguenther@suse.de>

	* tree.h (get_pointer_alignment): Remove max-align argument.
	(get_object_alignment): Likewise.
	* builtins.c (get_object_alignment_1): Adjust.
	(get_object_alignment): Remove max-align argument.
	(get_pointer_alignment): Likewise.
	(expand_builtin_strlen): Adjust.
	(expand_builtin_memcpy): Likewise.
	(expand_builtin_mempcpy_args): Likewise.
	(expand_builtin_strncpy): Likewise.
	(expand_builtin_memset_args): Likewise.
	(expand_builtin_memcmp): Likewise.
	(expand_builtin_strcmp): Likewise.
	(expand_builtin_strncmp): Likewise.
	(get_builtin_sync_mem): Likewise.
	(fold_builtin_memset): Likewise.
	(fold_builtin_memory_op): Likewise.
	(expand_builtin_memory_chk): Likewise.
	* emit-rtl.c (get_mem_align_offset): Likewise.
	(set_mem_attributes_minus_bitpos): Likewise.
	* expr.c (expand_assignment): Likewise.
	(expand_expr_real_1): Likewise.
	* tree-sra.c (tree_non_mode_aligned_mem_p): Likewise.
	* tree-ssa-forwprop.c (simplify_builtin_call): Likewise.
	* tree-ssa-loop-ivopts.c (may_be_unaligned_p): Likewise.
	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Likewise.
	* value-prof.c (gimple_stringops_transform): Likewise.

From-SVN: r177620
2011-08-10 12:24:23 +00:00
Richard Guenther
96d0349617 builtins.c (fold_builtin_signbit): Build the comparison with a proper type.
2011-07-29  Richard Guenther  <rguenther@suse.de>

	* builtins.c (fold_builtin_signbit): Build the comparison
	with a proper type.

From-SVN: r176922
2011-07-29 09:57:03 +00:00
Kai Tietz
be31603aad builtins.c (fold_builtin_expect): See through the cast from truthvalue_type_node to long.
2011-07-20  Kai Tietz  <ktietz@redhat.com>

        * builtins.c (fold_builtin_expect): See through the cast
        from truthvalue_type_node to long.

From-SVN: r176526
2011-07-20 19:10:24 +02:00
Richard Sandiford
527210c448 rtl.texi (MEM_OFFSET_KNOWN_P): Document.
gcc/
	* doc/rtl.texi (MEM_OFFSET_KNOWN_P): Document.
	(MEM_OFFSET): Change from returning an rtx to returning a
	HOST_WIDE_INT.
	* rtl.h (MEM_OFFSET_KNOWN_P): New macro.
	(MEM_OFFSET): Return a HOST_WIDE_INT rather than an rtx.
	* emit-rtl.h (set_mem_offset): Take a HOST_WIDE_INT rather than an rtx.
	(clear_mem_offset): Declare.
	* alias.c (ao_ref_from_mem): Adjust uses of MEM_OFFSET, using
	MEM_OFFSET_KNOWN_P to test whether the offset is known, and
	MEM_OFFSET to get a HOST_WIDE_INT offset.
	(nonoverlapping_memrefs_p): Likewise.  Adjust calls to...
	(adjust_offset_for_component_ref): Take a bool "known_p"
	parameter and a HOST_WIDE_INT "offset" parameter.
	* builtins.c (get_memory_rtx): As for ao_ref_from_mem.
	Adjust calls to set_mem_offset, passing a HOST_WIDE_INT rather
	than an rtx.  Use clear_mem_offset to clear the offset.
	* cfgcleanup.c (merge_memattrs): Likewise.
	* dwarf2out.c (tls_mem_loc_descriptor): Likewise.
	* function.c (assign_parm_find_stack_rtl): Likewise.
	(assign_parm_setup_stack): Likewise.
	* print-rtl.c (print_rtx): Likewise.
	* reload.c (find_reloads_subreg_address): Likewise.
	* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
	* var-tracking.c (INT_MEM_OFFSET): Likewise.
	* emit-rtl.c (set_reg_attrs_from_value): Likewise.
	(get_mem_align_offset): Likewise.
	(set_mem_offset): Take a HOST_WIDE_INT rather than an rtx.
	(clear_mem_offset): New function.
	* config/mips/mips.c (r10k_safe_mem_expr_p): Take a HOST_WIDE_INT
	offset rather than an rtx.  Assume both the expressio and offset
	are available.
	(r10k_needs_protection_p_1): Update accordingly, checking the
	expression and offset availability here instead.

From-SVN: r176477
2011-07-19 17:43:27 +00:00
Richard Sandiford
f5541398ef rtl.texi (MEM_SIZE_KNOWN_P): Document.
gcc/
	* doc/rtl.texi (MEM_SIZE_KNOWN_P): Document.
	(MEM_SIZE): Change from returning an rtx to returning a HOST_WIDE_INT.
	* rtl.h (MEM_SIZE_KNOWN_P): New macro.
	(MEM_SIZE): Return a HOST_WIDE_INT rather than an rtx.
	* emit-rtl.h (set_mem_size): Take a HOST_WIDE_INT rather than an rtx.
	(clear_mem_size): Declare.
	* emit-rtl.c (set_mem_size): Take a HOST_WIDE_INT rather than an rtx.
	(clear_mem_size): New function.
	* alias.c (ao_ref_from_mem): Adjust uses of MEM_SIZE, using
	MEM_SIZE_KNOWN_P to test whether the size is known, and MEM_SIZE
	to get a HOST_WIDE_INT size.  Adjust calls to set_mem_size,
	passing a HOST_WIDE_INT rather than an rtx.  Use clear_mem_size
	to clear the size.
	(nonoverlapping_memrefs_p): Likewise.
	* builtins.c (get_memory_rtx, expand_builtin_memcmp): Likewise.
	(expand_builtin_init_trampoline): Likewise.
	* calls.c (compute_argument_addresses): Likewise.
	* cfgcleanup.c (merge_memattrs): Likewise.
	* dce.c (find_call_stack_args): Likewise.
	* dse.c (record_store, scan_insn): Likewise.
	* dwarf2out.c (dw_sra_loc_expr): Likewise.
	* expr.c (emit_block_move_hints): Likewise.
	* function.c (assign_parm_find_stack_rtl): Likewise.
	* print-rtl.c (print_rtx): Likewise.
	* reload.c (find_reloads_subreg_address): Likewise.
	* rtlanal.c (may_trap_p_1): Likewise.
	* var-tracking.c (track_expr_p): Likewise.
	* varasm.c (assemble_trampoline_template): Likewise.
	* config/arm/arm.c (arm_print_operand): Likewise.
	* config/h8300/h8300.c (h8sx_emit_movmd): Likewise.
	* config/i386/i386.c (expand_movmem_via_rep_mov): Likewise.
	(expand_setmem_via_rep_stos, expand_constant_movmem_prologue)
	(expand_constant_setmem_prologue): Likewise.
	* config/mips/mips.c (mips_get_unaligned_mem): Likewise.
	* config/rs6000/rs6000.c (expand_block_move): Likewise.
	(adjacent_mem_locations): Likewise.
	* config/s390/s390.c (s390_expand_setmem): Likewise.
	(s390_expand_insv): Likewise.
	* config/s390/s390.md (*extzv<mode>, *extv<mode>): Likewise.
	(*extendqi<mode>2_short_displ): Likewise.
	* config/sh/sh.c (expand_block_move): Likewise.
	* config/sh/sh.md (extv, extzv): Likewise.

From-SVN: r176476
2011-07-19 17:43:15 +00:00
Richard Guenther
5d49b6a7b2 tree.h (fold_build_pointer_plus_loc): New helper function.
2011-07-19  Richard Guenther  <rguenther@suse.de>

	* tree.h (fold_build_pointer_plus_loc): New helper function.
	(fold_build_pointer_plus_hwi_loc): Likewise.
	(fold_build_pointer_plus): Define.
	(fold_build_pointer_plus_hwi): Likewise.

	* builtins.c (std_gimplify_va_arg_expr): Use fold_build_pointer_plus.
	(fold_builtin_memory_op): Likewise.
	(fold_builtin_stpcpy): Likewise.
	(fold_builtin_memchr): Likewise.
	(fold_builtin_strstr): Likewise.
	(fold_builtin_strchr): Likewise.
	(fold_builtin_strrchr): Likewise.
	(fold_builtin_strpbrk): Likewise.
	(fold_builtin_strcat): Likewise.
	(expand_builtin_memory_chk): Likewise.
	(fold_builtin_memory_chk): Likewise.
	* c-typeck.c (build_unary_op): Likewise.
	* cgraphunit.c (thunk_adjust): Likewise.
	* fold-const.c (build_range_check): Likewise.
	(fold_binary_loc): Likewise.
	* omp-low.c (extract_omp_for_data): Likewise.
	(expand_omp_for_generic): Likewise.
	(expand_omp_for_static_nochunk): Likewise.
	(expand_omp_for_static_chunk): Likewise.
	* tree-affine.c (add_elt_to_tree): Likewise.
	* tree-data-ref.c (split_constant_offset_1): Likewise.
	* tree-loop-distribution.c (generate_memset_zero): Likewise.
	* tree-mudflap.c (mf_xform_derefs_1): Likewise.
	* tree-predcom.c (ref_at_iteration): Likewise.
	* tree-ssa-address.c (tree_mem_ref_addr): Likewise.
	(add_to_parts): Likewise.
	(create_mem_ref): Likewise.
	* tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Likewise.
	* tree-ssa-loop-niter.c (number_of_iterations_lt_to_ne): Likewise.
	(number_of_iterations_le): Likewise.
	* tree-ssa-loop-prefetch.c (issue_prefetch_ref): Likewise.
	* tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.
	(vect_create_addr_base_for_vector_ref): Likewise.
	* tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer): Likewise.
	(vect_create_cond_for_alias_checks): Likewise.
	* tree-vrp.c (extract_range_from_assert): Likewise.

	* config/alpha/alpha.c (alpha_va_start): Likewise.
	(alpha_gimplify_va_arg_1): Likewise.
	* config/i386/i386.c (ix86_va_start): Likewise.
	(ix86_gimplify_va_arg): Likewise.
	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
	* config/mep/mep.c (mep_expand_va_start): Likewise.
	(mep_gimplify_va_arg_expr): Likewise.
	* config/mips/mips.c (mips_va_start): Likewise.
	(mips_gimplify_va_arg_expr): Likewise.
	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start): Likewise.
	(rs6000_gimplify_va_arg): Likewise.
	* config/s390/s390.c (s390_va_start): Likewise.
	(s390_gimplify_va_arg): Likewise.
	* config/sh/sh.c (sh_va_start): Likewise.
	(sh_gimplify_va_arg_expr): Likewise.
	* config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise.
	* config/spu/spu.c (spu_va_start): Likewise.
	(spu_gimplify_va_arg_expr): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
	Likewise.
	(xstormy16_gimplify_va_arg_expr): Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start): Likewise.
	(xtensa_gimplify_va_arg_expr): Likewise.

	c-family/
	* c-common.c (pointer_int_sum): Use fold_build_pointer_plus.
	* c-omp.c (c_finish_omp_for): Likewise.

	cp/
	* call.c (build_special_member_call): Use fold_build_pointer_plus.
	* class.c (build_base_path): Likewise.
	(convert_to_base_statically): Likewise.
	(dfs_accumulate_vtbl_inits): Likewise.
	* cp-gimplify.c (cxx_omp_clause_apply_fn): Likewise.
	* except.c (expand_start_catch_block): Likewise.
	* init.c (expand_virtual_init): Likewise.
	(build_new_1): Likewise.
	(build_vec_delete_1): Likewise.
	(build_vec_delete): Likewise.
	* rtti.c (build_headof): Likewise.
	(tinfo_base_init): Likewise.
	* typeck.c (get_member_function_from_ptrfunc): Likewise.
	(cp_build_addr_expr_1): Likewise.
	* typeck2.c (build_m_component_ref): Likewise.

	fortran/
	* trans-expr.c (fill_with_spaces): Use fold_build_pointer_plus.
	(gfc_trans_string_copy): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_repeat): Likewise.
	* trans-types.c (gfc_get_array_descr_info): Likewise.
	* trans.c (gfc_build_array_ref): Likewise.

	java/
	* builtins.c (static): Use fold_build_pointer_plus.
	* class.c (make_class_data): Likewise.
	(build_symbol_entry): Likewise.
	* except.c (build_exception_object_ref): Likewise.
	* expr.c (build_java_arrayaccess): Likewise.
	(build_field_ref): Likewise.
	(build_known_method_ref): Likewise.
	(build_invokevirtual): Likewise.

	objc/
	* objc-next-runtime-abi-02.c (objc_v2_build_ivar_ref):
	Use fold_build_pointer_plus.
	(objc2_build_ehtype_initializer): Likewise.

From-SVN: r176461
2011-07-19 14:01:59 +00:00
Richard Sandiford
73f6eabc3a re PR middle-end/49545 (New C++ test failures)
gcc/
	PR tree-optimization/49545
	* builtins.c (get_object_alignment_1): Update function comment.
	Do not use DECL_ALIGN for functions, but test
	TARGET_PTRMEMFUNC_VBIT_LOCATION instead.
	* fold-const.c (get_pointer_modulus_and_residue): Don't check
	for functions here.
	* tree-ssa-ccp.c (get_value_from_alignment): Likewise.

gcc/testsuite/
	* gcc.dg/torture/pr49169.c: Restrict to ARM and MIPS targets.

From-SVN: r175627
2011-06-29 09:42:42 +00:00
Jakub Jelinek
45d439ac1a builtin-types.def (BT_FN_PTR_CONST_PTR_SIZE_VAR): New.
* builtin-types.def (BT_FN_PTR_CONST_PTR_SIZE_VAR): New.
	* builtins.def (BUILT_IN_ASSUME_ALIGNED): New builtin.
	* tree-ssa-structalias.c (find_func_aliases_for_builtin_call,
	find_func_clobbers): Handle BUILT_IN_ASSUME_ALIGNED.
	* tree-ssa-ccp.c (bit_value_assume_aligned): New function.
	(evaluate_stmt, execute_fold_all_builtins): Handle
	BUILT_IN_ASSUME_ALIGNED.
	* tree-ssa-dce.c (propagate_necessity): Likewise.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1,
	call_may_clobber_ref_p_1): Likewise.
	* builtins.c (is_simple_builtin, expand_builtin): Likewise.
	(expand_builtin_assume_aligned): New function.
	* doc/extend.texi (__builtin_assume_aligned): Document.

	* c-common.c (check_builtin_function_arguments): Handle
	BUILT_IN_ASSUME_ALIGNED.

	* gcc.dg/builtin-assume-aligned-1.c: New test.
	* gcc.dg/builtin-assume-aligned-2.c: New test.
	* gcc.target/i386/builtin-assume-aligned-1.c: New test.

From-SVN: r175541
2011-06-27 18:52:23 +02:00
Andrew MacLeod
e0a8ecf2a2 cosmetic. Add sync_ to all the expand_builtin defines which do not match the actual builtin_sync_ names.
2011-06-21  Andrew MacLeod  <amacleod@redhat.com>

	* builtins.c: Add sync_ or SYNC__ to builtin names.
	* sync-builtins.def: Add sync_ or SYNC__ to builtin names.
	* omp-low.c: Add sync_ or SYNC__ to builtin names.
	* c-family/c-common.c: Add sync_ or SYNC__ to builtin names.
	* c-family/c-omp.c: Add sync_ or SYNC__ to builtin names.
	* java/builtins.c: Add sync_ or SYNC__ to builtin names.
	* java/expr.c: Add sync_ or SYNC__ to builtin names.
	* cp/semantics.c: Add sync_ or SYNC__ to builtin names.
	* fortran/trans-openmp.c: Add sync_ or SYNC__ to builtin names.
	* fortran/trans-stmt.c: Add sync_ or SYNC__ to builtin names.
	* fortran/trans-decl.c: Add sync_ or SYNC__ to builtin names.

From-SVN: r175270
2011-06-21 19:04:33 +00:00
Jakub Jelinek
146aef0b39 re PR middle-end/49489 (gcc.c-torture/execute/builtin-bitops-1.c fails on x86_64-linux)
PR middle-end/49489
	* builtins.c (expand_builtin_unop): Call expand_unop with 0 as
	unsignedp argument instead of 1 for clrsb_optab.
	(fold_builtin_bitop): Fix masking for width > HOST_BITS_PER_WIDE_INT
	and < 2 * HOST_BITS_PER_WIDE_INT.  Optimize BUILT_IN_CLRSB*.
	(fold_builtin_1): Call fold_builtin_binop for BUILT_IN_CLRSB*.
	* optabs.c (widen_leading): Call widen_operand and expand_unop
	with 0 as unsignedp argument instead of 1 for clrsb_optab.
	(expand_unop): Subtract difference of mode sizes also for
	clrsb_optab.

From-SVN: r175265
2011-06-21 18:25:57 +02:00
Bernd Schmidt
3801c801f3 Makefile.in (lib2funcs): Add _clrsbsi2 and _clrsbdi2.
libgcc/
	* Makefile.in (lib2funcs): Add _clrsbsi2 and _clrsbdi2.
	* libgcc-std.ver.in (GCC_4.7.0): New section.

	gcc/
	* doc/extend.texi (__builtin_clrsb, __builtin_clrsbl,
	__builtin_clrsbll): Document.
	* doc/rtl.texi (clrsb): New entry.
	* optabs.c (widen_leading): Renamed from widen_clz.  New argument
	UNOPTAB.  All callers changed.  Use UNOPTAB instead of clz_optab.
	(expand_unop): Handle clrsb_optab.
	(init_optabs): Initialize it.
	* optabs.h (enum optab_index): New entry OTI_clrsb.
	(clrsb_optab): Define.
	* genopinit.c (optabs): Add an entry for it.
	* builtins.c (expand_builtin): Handle clrsb builtin functions.
	* builtins.def (BUILT_IN_CLRSB, BUILT_IN_CLRSBIMAX, BUILT_IN_CLRSBL,
	BUILT_IN_CLRSBLL): New.
	* rtl.def (CLRSB): New code.
	* dwarf2out.c (mem_loc_descriptor): Handle it.
	* simplify-rtx.c (simplify_const_unary_operation): Likewise.
	Use op_mode rather than mode when optimizing ffs, clz, ctz, parity
	and popcount.
	* libgcc2.c (__clrsbSI2, __clrsbDI2): New functions.
	* libgcc2.h (__clrsbSI2, __clrsbDI2): Define and declare.
	(__ctzDI2): Move declaration.
	* config/bfin/bfin.md (clrsbsi2): New expander.
	(signbitssi2): Use the CLRSB rtx.
	(clrsbhi2): Renamed from signbitshi2.  Use the CLRSB rtx.
	* config/bfin/bfin.c (bdesc_1arg): Changed accordingly.

	gcc/testsuite/
	* gcc.c-torture/excute/builtin-bitops-1.c (MAKE_FUNS): Make
	my_clrsb test functions.
	(main): Test clrsb.
	* gcc.dg/builtin-protos-1.c (test_s, test_u, test_sl, test_ul,
	test_sll, test_ull): Add clrsb tests.
	* gcc.dg/torture/builtin-attr-1.c: Add tests for clrsb, clrsbl,
	clrsbll.

From-SVN: r175261
2011-06-21 14:16:39 +00:00
H.J. Lu
fa4657624c Properly expand strlen to Pmode.
2011-06-14  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/47364
	* builtins.c (expand_builtin_strlen): Expand strlen to Pmode
	and properly handle result not in Pmode.

From-SVN: r175034
2011-06-14 09:31:57 -07:00
Bill Schmidt
3906ea1b34 re PR tree-optimization/46728 (GCC does not generate fmadd for pow (x, 0.75)+y on powerpc)
2011-06-06  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR tree-optimization/46728
	* builtins.c (powi_table): Remove.
	(powi_lookup_cost): Remove.
	(powi_cost): Remove.
	(expand_powi_1): Remove.
	(expand_powi): Remove.
	(expand_builtin_pow_root): Remove.
	(expand_builtin_pow): Remove.
	(expand_builtin_powi): Eliminate handling of constant exponent.
	(expand_builtin): Use expand_builtin_mathfn_2 for BUILT_IN_POW.

From-SVN: r174701
2011-06-06 14:27:41 +00:00
Eric Botcazou
bc6d3f91a3 function.h (struct stack_usage): Remove dynamic_alloc_count field.
* function.h (struct stack_usage): Remove dynamic_alloc_count field.
	(current_function_dynamic_alloc_count): Delete.
	* builtins.c (expand_builtin_setjmp_setup): Do not set calls_setjmp.
	(expand_builtin_nonlocal_goto): Remove obsolete comment.
	(expand_builtin_update_setjmp_buf): Remove dead code.
	* cse.c (cse_find_path): Do not follow a single abnormal incoming edge.
	* explow.c (allocate_dynamic_stack_space): Remove SETJMP_VIA_SAVE_AREA
	support.
	* function.c (instantiate_virtual_regs): Likewise.
	* postreload-gcse.c (bb_has_well_behaved_predecessors): Return false
	for a block with a single abnormal incoming edge.
	* config/sparc/sparc.h (STACK_SAVEAREA_MODE): Define.
	* config/sparc/sparc-protos.h (load_got_register): Declare.
	* config/sparc/sparc.c (TARGET_BUILTIN_SETJMP_FRAME_VALUE): Define.
	(load_got_register): Make global.
	(sparc_frame_pointer_required): Add 'static'.
	(sparc_can_eliminate): Likewise.  Call sparc_frame_pointer_required.
	(sparc_builtin_setjmp_frame_value): New function.
	* config/sparc/sparc.md (UNSPECV_SETJMP): Remove.
	(save_stack_nonlocal): New expander.
	(restore_stack_nonlocal): Likewise.
	(nonlocal_goto): Remove modes, adjust predicates and reimplement.
	(nonlocal_goto_internal): New insn.
	(goto_handler_and_restore): Delete.
	(builtin_setjmp_setup): Likewise.
	(do_builtin_setjmp_setup): Likewise.
	(setjmp): Likewise.
	(builtin_setjmp_receiver): New expander.

From-SVN: r174564
2011-06-02 10:48:11 +00:00
Richard Guenther
9a9822e13e re PR tree-optimization/15419 (memcpy pessimization)
2011-05-23  Richard Guenther  <rguenther@suse.de>

	PR middle-end/15419
	* builtins.c (fold_builtin_memory_op): Be less restrictive about
	what pointer types we accept for folding.

	* gcc.dg/memcpy-3.c: New testcase.

From-SVN: r174065
2011-05-23 12:03:19 +00:00
Richard Guenther
45a2c4774f builtins.c (fold_builtin_classify_type): Use integer_type_node for the type of the result.
2011-04-29  Richard Guenther  <rguenther@suse.de>

	* builtins.c (fold_builtin_classify_type): Use integer_type_node
	for the type of the result.
	(fold_builtin_isascii): Likewise.
	(fold_builtin_toascii): Use integer_type_node where appropriate.
	(fold_builtin_logb): Likewise.
	(fold_builtin_frexp): Likewise.
	(fold_builtin_strstr): Likewise.
	(fold_builtin_strpbrk): Likewise.
	(fold_builtin_fputs): Likewise.
	(fold_builtin_sprintf): Likewise.
	(fold_builtin_snprintf): Likewise.
	(fold_builtin_printf): Likewise.
	(do_mpfr_remquo): Use a proper type for the assigned constant.
	(do_mpfr_lgamma_r): Likewise.
	* dwarf2out.c (resolve_one_addr): Use size_int.
	* except.c (init_eh): Likewise.
	(assign_filter_values): Use integer_type_node for filter values.
	(sjlj_emit_dispatch_table): Use integer_type_node for dispatch
	indices.
	* tree-cfg.c (move_stmt_eh_region_tree_nr): Use integer_type_node
	for EH region numbers.
	* tree-vrp.c (simplify_div_or_mod_using_ranges): Use integer_type_node
	for the shift amount.

From-SVN: r173167
2011-04-29 15:00:04 +00:00
Richard Guenther
eb6c3df1a0 expr.h (expand_shift): Rename to ...
2011-04-29  Richard Guenther  <rguenther@suse.de>

	* expr.h (expand_shift): Rename to ...
	(expand_variable_shift): ... this.
	(expand_shift): Take a constant shift amount.
	* expmed.c (expand_shift): Rename to ...
	(expand_variable_shift): ... this.
	(expand_shift): New wrapper around expand_variable_shift.
	* expr.c (convert_move, emit_group_load_1, emit_group_store,
	optimize_bitfield_assignment_op, store_field, expand_expr_real_2,
	expand_expr_real_1, reduce_to_bit_field_precision): Adjust.
	* expmed.c (store_fixed_bit_field, extract_bit_field_1,
	extract_fixed_bit_field, extract_split_bit_field, expand_mult_const,
	expand_mult, expand_widening_mult, expand_mult_highpart_adjust,
	extract_high_half, expand_sdiv_pow2, expand_divmod, emit_cstore,
	emit_store_flag_1, emit_store_flag): Likewise.
	* builtins.c (expand_builtin_signbit): Likewise.
	* calls.c (load_register_parameters): Likewise.
	* function.c (assign_parm_setup_block): Likewise.
	* lower-subreg.c (resolve_shift_zext): Likewise.
	* optabs.c (widen_bswap, expand_abs_nojump,
	expand_one_cmpl_abs_nojump, expand_float): Likewise.
	* spu/spu.c (spu_expand_extv): Likewise.
	* sparc/sparc.c (sparc32_initialize_trampoline): Likewise.

From-SVN: r173157
2011-04-29 14:20:41 +00:00
Michael Matz
63d2a3533f tree.h (ALLOCA_FOR_VAR_P): Rename to CALL_ALLOCA_FOR_VAR_P.
* tree.h (ALLOCA_FOR_VAR_P): Rename to CALL_ALLOCA_FOR_VAR_P.
	* builtins.c (expand_builtin): Use CALL_ALLOCA_FOR_VAR_P.
	* function.c (gimplify_parameters): Ditto.
	* gimplify.c (gimplify_vla_decl): Ditto.

	* gimple.h (enum gf_mask): Add GF_CALL_ALLOCA_FOR_VAR.
	(gimple_call_set_alloca_for_var): New inline function.
	(gimple_call_alloca_for_var_p): Ditto.
	* gimple.c (gimple_build_call_from_tree): Remember CALL_ALLOCA_FOR_VAR_P
	state.
	* cfgexpand.c (expand_call_stmt): Restore CALL_ALLOCA_FOR_VAR_P state.

	* tree-inline.c (inline_forbidden_p_stmt): Don't reject alloca
	calls if they were for VLA objects.

From-SVN: r172516
2011-04-15 19:48:25 +00:00
Richard Guenther
daade2060c tree.h (get_object_alignment_1): Declare.
2011-04-14  Richard Guenther  <rguenther@suse.de>

	* tree.h (get_object_alignment_1): Declare.
	* builtins.c (get_object_alignment_1): Split out worker from ...
	(get_object_alignment): ... here.
	* fold-const.c (get_pointer_modulus_and_residue): Use
	get_object_alignment_1.

	* gcc.dg/fold-bitand-4.c: Move ...
	* c-c++-common/fold-bitand-4.c: ... here.  Adjust slightly.

From-SVN: r172424
2011-04-14 12:07:57 +00:00
Michael Matz
98faf84fde builtins.c (build_va_arg_indirect_ref): Use build_simple_mem_ref_loc.
* builtins.c (build_va_arg_indirect_ref): Use
	build_simple_mem_ref_loc.

From-SVN: r171789
2011-03-31 15:59:10 +00:00
Richard Sandiford
8a44512917 builtins.c (expand_builtin_memset_args): Use gen_int_mode instead of GEN_INT.
gcc/
2011-03-28  Richard Sandiford  <richard.sandiford@linaro.org>

	* builtins.c (expand_builtin_memset_args): Use gen_int_mode
	instead of GEN_INT.

From-SVN: r171632
2011-03-28 21:22:58 +00:00
Richard Sandiford
61be2a1ce3 builtins.c (expand_movstr): Fix endp == 1 adjustment after last commit.
gcc/
	* builtins.c (expand_movstr): Fix endp == 1 adjustment after
	last commit.

From-SVN: r171397
2011-03-24 15:13:45 +00:00
Richard Sandiford
a5c7d693b9 optabs.h (emit_unop_insn, [...]): Change insn code parameter from "int" to "enum insn_code".
gcc/
	* optabs.h (emit_unop_insn, maybe_emit_unop_insn): Change insn code
	parameter from "int" to "enum insn_code".
	(expand_operand_type): New enum.
	(expand_operand): New structure.
	(create_expand_operand): New function.
	(create_fixed_operand, create_output_operand): Likewise
	(create_input_operand, create_convert_operand_to): Likewise.
	(create_convert_operand_from, create_address_operand): Likewise.
	(create_integer_operand): Likewise.
	(create_convert_operand_from_type, maybe_legitimize_operands): Declare.
	(maybe_gen_insn, maybe_expand_insn, maybe_expand_jump_insn): Likewise.
	(expand_insn, expand_jump_insn): Likewise.
	* builtins.c (expand_builtin_prefetch): Use the new interfaces.
	(expand_builtin_interclass_mathfn, expand_builtin_strlen): Likewise.
	(expand_movstr, expand_builtin___clear_cache): Likewise.
	(expand_builtin_lock_release): Likewise.
	* explow.c (allocate_dynamic_stack_space): Likewise.
	(probe_stack_range): Likewise.  Allow check_stack to FAIL,
	and use the default handling in that case.
	* expmed.c (check_predicate_volatile_ok): Delete.
	(store_bit_field_1, extract_bit_field_1): Use the new interfaces.
	(emit_cstore): Likewise.
	* expr.c (emit_block_move_via_movmem): Likewise.
	(set_storage_via_setmem, expand_assignment): Likewise.
	(emit_storent_insn, try_casesi): Likewise.
	(emit_single_push_insn): Likewise.  Allow the expansion to fail.
	* optabs.c (expand_widen_pattern_expr, expand_ternary_op): Likewise.
	(expand_vec_shift_expr, expand_binop_directly): Likewise.
	(expand_twoval_unop, expand_twoval_binop): Likewise.
	(expand_unop_direct, emit_indirect_jump): Likewise.
	(emit_conditional_move, vector_compare_rtx): Likewise.
	(expand_vec_cond_expr, expand_val_compare_and_swap_1): Likewise.
	(expand_sync_operation, expand_sync_fetch_operation): Likewise.
	(expand_sync_lock_test_and_set): Likewise.
	(maybe_emit_unop_insn): Likewise.  Change icode to an insn_code.
	(emit_unop_insn): Likewise.
	(expand_copysign_absneg): Change icode to an insn_code.
	(create_convert_operand_from_type): New function.
	(maybe_legitimize_operand, maybe_legitimize_operands): Likewise.
	(maybe_gen_insn, maybe_expand_insn, maybe_expand_jump_insn): Likewise.
	(expand_insn, expand_jump_insn): Likewise.
	* config/i386/i386.md (setmem<mode>): Use nonmemory_operand rather
	than const_int_operand for operand 2.

From-SVN: r171341
2011-03-23 09:30:58 +00:00
Jakub Jelinek
7ee93d4e34 re PR tree-optimization/48129 (gcc.c-torture/execute/builtins/snprintf-chk.c ICE)
PR tree-optimization/48129
	* builtins.c (fold_builtin_snprintf): Convert to type of
	built_in_decls[BUILT_IN_SNPRINTF] retval instead of
	implicit_built_in_decls[BUILT_IN_SNPRINTF] retval.

From-SVN: r170985
2011-03-15 12:28:35 +01:00
Jakub Jelinek
ba3ceb2dd2 re PR middle-end/47917 (snprintf(..., "const string") should be optimized into memcpy)
PR middle-end/47917
	* builtins.c (fold_builtin_snprintf): New function.
	(fold_builtin_3): Call it for BUILT_IN_SNPRINTF.
	(fold_builtin_4): Likewise.

	* gcc.c-torture/execute/pr47917.c: New test.
	* gcc.dg/pr47917.c: New test.

From-SVN: r170959
2011-03-14 21:30:24 +01:00
Richard Henderson
9eac0f2a07 explow.c (emit_stack_save): Remove 'after' parameter.
* explow.c (emit_stack_save): Remove 'after' parameter.
        (emit_stack_restore): Likewise.
        * expr.h: Update to match.
        * builtins.c, calls.c, stmt.c: Likewise.
        * config/alpha/alpha.md, config/avr/avr.md: Likewise.
        * config/mips/mips.md, config/pa/pa.md, config/vax/vax.md: Likewise.
        * function.c (expand_function_end): Insert the emit_stack_save
        sequence before parm_birth_insn instead of after.

From-SVN: r170663
2011-03-03 13:56:58 -08:00
Richard Guenther
5cbf5c20cf re PR middle-end/47566 (ICE in vn_reference_lookup)
2011-02-02  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/47566
	* builtins.c (builtin_save_expr): No SAVE_EXPR for SSA_NAMEs.

	* gcc.dg/lto/20110201-1_0.c: New testcase.

From-SVN: r169518
2011-02-02 09:59:23 +00:00
Paul Koning
e046112d14 builtins.c (c_readstr): Fix byte order if BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN.
* builtins.c (c_readstr): Fix byte order if BYTES_BIG_ENDIAN !=
WORDS_BIG_ENDIAN.

From-SVN: r169174
2011-01-24 12:46:15 -05:00
Jie Zhang
ecd815ac6b * builtins.c (SLOW_UNALIGNED_ACCESS): Remove.
From-SVN: r168293
2010-12-28 06:13:28 +00:00
Michael Meissner
b0ce92b403 PR 42694: add checks to make sure sqrt is supported
From-SVN: r167594
2010-12-08 16:34:20 +00:00
Jan Hubicka
b01890ffd3 tree.c (build_common_builtin_nodes): Do not initialize BUILT_IN_PROFILE_FUNC_ENTER and BUILT_IN_PROFILE_FUNC_EXIT.
* tree.c (build_common_builtin_nodes): Do not initialize
	BUILT_IN_PROFILE_FUNC_ENTER and BUILT_IN_PROFILE_FUNC_EXIT.
	* builtins.c (expand_builtin_profile_func): Remove.
	(expand_builtin): Do not handle BUILT_IN_PROFILE_FUNC_ENTER and
	BUILT_IN_PROFILE_FUNC_EXIT.
	* builtins.def (profile_func_enter, profile_func_exit): Remove stubs.
	(__cyg_profile_func_enter, __cyg_profile_func_exit): New.
	* gimplify.c (gimplify_function_tree): Reorganize code calling
	profiling functions.

From-SVN: r167342
2010-12-01 16:45:36 +00:00
Joseph Myers
c59ffc4195 hwint.c: New.
* hwint.c:  New.  Extracted from toplev.c.
	* hwint.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2):
	Move from toplev.h.
	* toplev.c (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2):
	Move to hwint.c.
	* toplev.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2):
	Move to hwint.h.
	* builtins.c, combine.c, config/i386/winnt.c, double-int.c,
	explow.c, expmed.c, fold-const.c, ggc-page.c, ggc-zone.c, ifcvt.c,
	ipa-struct-reorg.c, ira-color.c, matrix-reorg.c, omp-low.c,
	real.c, recog.c, reload.c, rtlanal.c, simplify-rtx.c,
	stor-layout.c, tree-dfa.c, tree-ssa-alias.c,
	tree-ssa-loop-niter.c, tree-vect-data-refs.c,
	tree-vect-loop-manip.c, tree-vect-loop.c, tree-vect-stmts.c,
	tree-vrp.c: Don't include toplev.h.
	* genattrtab.c, genconditions.c, genemit.c, genextract.c,
	genoutput.c, genpeep.c, genpreds.c, genrecog.c: Don't include
	toplev.h in generated output.
	* Makefile.in (OBJS-common): Add hwint.o.
	Dependencies for above files changed to remove toplev.h.
	(hwint.o): New.
	(insn-attrtab.o, insn-emit.o, insn-extract.o, insn-output.o,
	insn-peep.o, insn-preds.o, insn-recog.o): Don't depend on
	toplev.h.
	* config/i386/t-cygming (winnt.o): Don't depend on toplev.h.
	* config/i386/t-interix (winnt.o): Don't depend on toplev.h.

fortran:
	* trans-common.c: Don't include toplev.h.

java:
	* boehm.c: Don't include toplev.h.
	* Make-lang.in (java/boehm.o): Don't depend on toplev.h.

lto:
	* lto-object.c: Don't include toplev.h.
	* Make-lang.in (lto/lto-object.o): Don't depend on toplev.h.

From-SVN: r167301
2010-11-30 16:36:19 +00:00
Jakub Jelinek
f1b6918835 re PR middle-end/46647 (Can't inline memset with -1)
PR middle-end/46647
	* builtins.c (fold_builtin_memset): Check c is INTEGER_CST instead
	of host_integerp check.  Use TREE_INT_CST_LOW instead of tree_low_cst.

	* gcc.dg/pr46647.c: New test.

From-SVN: r167170
2010-11-26 10:38:54 +01:00
H.J. Lu
de77ab7591 Properly cast integer constant char.
gcc/

2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/46647
	* builtins.c (target_char_cast): Check INTEGER_CST instead of
	host_integerp.  Replace tree_low_cst with TREE_INT_CST_LOW.

gcc/testsuite/

2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/46647
	* gcc.target/i386/pr46647.c: New.

From-SVN: r167146
2010-11-25 05:47:42 -08:00
Jakub Jelinek
63871cda44 re PR middle-end/46534 (ICE optimizing printf ("...>10MBstring\n") into puts)
PR middle-end/46534
	* builtins.c (fold_builtin_printf): Don't copy and modify string
	before build_string_literal, instead modify what
	build_string_literal returned.

	* gcc.c-torture/compile/pr46534.c: New test.

From-SVN: r166918
2010-11-18 21:51:19 +01:00
Jan Hubicka
fc48e63f52 builtins.c (expand_builtin_mathfn_2, [...]): Do not expand errno setting variant when optimizing for size.
* builtins.c (expand_builtin_mathfn_2, expand_builtin_mathfn): Do not
	expand errno setting variant when optimizing for size.

From-SVN: r166879
2010-11-17 21:11:24 +00:00
Nathan Froyd
c2ed6cf88c builtins.c (std_gimplify_va_arg_expr): Use targetm.calls.function_arg_boundary.
* builtins.c (std_gimplify_va_arg_expr): Use
	targetm.calls.function_arg_boundary.
	* function.c (assign_parms, locate_and_pad_parm): Likewise.
	* calls.c (struct arg_data): Update comment.
	* defaults.h (FUNCTION_ARG_BOUNDARY): Delete.
	* target.def (function_arg_boundary): Define.
	* targhooks.h (default_function_arg_boundary): Declare.
	* targhooks.c (default_function_arg_boundary): Define.
	* doc/tm.texi.in (FUNCTION_ARG_PADDING): Use
	TARGET_FUNCTION_ARG_BOUNDARY.
	(FUNCTION_ARG_BOUNDARY): Delete.
	(TARGET_FUNCTION_ARG_BOUNDARY): New.
	* doc/tm.texi: Regenerate.
	* system.h (FUNCTION_ARG_BOUNDARY): Poison.
	* config/arc/arc.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/arc/arc.c (arc_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/arm/arm.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/arm/arm-protos.h (arm_needs_doubleword_align): Delete.
	* config/arm/arm.c (arm_needs_doubleword_align): Make static.
	(arm_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/frv/frv.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/frv/frv-protos.h (frv_function_arg_boundary): Delete.
	* config/frv/frv.c (frv_function_arg_boundary): Make static.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/i386/i386.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/i386/i386-protos.h (ix86_function_arg_boundary): Delete.
	* config/i386/i386.c (ix86_function_arg_boundary): Make static.
	(ix86_compat_function_arg_boundary): Take and return unsigned int.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/ia64/ia64-protos.h (ia64_function_arg_boundary): Delete.
	* config/ia64/ia64.c (ia64_function_arg_boundary): Make static.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/m32c/m32c.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/m32c/m32c.c (m32c_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/m32r/m32r.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/mcore/mcore.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/mcore/mcore.c (mcore_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/mips/mips.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/mips/mips-protos.h (mips_function_arg_boundary): Delete.
	* config/mips/mips.c (mips_function_arg_boundary): Make static.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/pa/pa.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/pa/pa.c (pa_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/picochip/picochip.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/picochip/picochip-protos.h
	(picochip_get_function_arg_boundary): Delete.
	* config/picochip/picochip.c (picochip_get_function_arg_boundary):
	Rename to...
	(picochip_function_arg_boundary): ...this.  Make static.
	(picochip_function_arg, picochip_arg_partial_bytes): Adjust.
	(picochip_arg_advance): Adjust.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/rs6000/rs6000.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/rs6000/rs6000-protos.h (function_arg_boundary): Delete.
	* config/rs6000/rs6000.c (function_arg_boundary): Rename to...
	(rs6000_function_arg_boundary): ...this.  Make static.
	(rs6000_parm_start, rs6000_gimplify_va_arg): Adjust.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/rx/rx.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/rx/rx.c (rx_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/sparc/sparc.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/sparc/sparc.c (sparc_function_arg_boundary): Define.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.
	* config/xtensa/xtensa.h (FUNCTION_ARG_BOUNDARY): Delete.
	* config/xtensa/xtensa-protos.h (function_arg_boundary): Delete.
	* config/xtensa/xtensa.c (function_arg_boundary): Rename to...
	(xtensa_function_arg_boundary): ...this.  Make static.
	(TARGET_FUNCTION_ARG_BOUNDARY): Define.

From-SVN: r166803
2010-11-16 14:25:07 +00:00
Richard Guenther
1694907238 tree.def (FMA_EXPR): New tree code.
2010-11-04  Richard Guenther  <rguenther@suse.de>
	Richard Henderson  <rth@redhat.com>

	* tree.def (FMA_EXPR): New tree code.
	* expr.c (expand_expr_real_2): Add FMA_EXPR expansion code.
	* gimple.c (gimple_rhs_class_table): FMA_EXPR is a GIMPLE_TERNARY_RHS.
	* tree-cfg.c (verify_gimple_assign_ternary): Verify FMA_EXPR types.
	* tree-inline.c (estimate_operator_cost): Handle FMA_EXPR.
	* gimple-pretty-print.c (dump_ternary_rhs): Likewise.
	* tree-ssa-math-opts.c (convert_mult_to_fma): New function.
	(execute_optimize_widening_mul): Call it.  Reorganize to allow
	dead stmt removal.  Move TODO flags ...
	(pass_optimize_widening_mul): ... here.
	* flag-types.h (enum fp_contract_mode): New enum.
	* common.opt (flag_fp_contract_mode): New variable.
	(-ffp-contract): New option.
	* opts.c (common_handle_option): Handle it.
	* doc/invoke.texi (-ffp-contract): Document.
	* tree.h (fold_fma): Declare.
	* builtins.c (fold_fma): New function.
	(fold_builtin_fma): Likewise.
	(fold_builtin_3): Call it for fma.
	* fold-const.c (fold_ternary_loc): Fold FMA_EXPR.
	* optabs.c (optab_for_tree_code): Handle FMA_EXPR.
	* config/i386/sse.md (fms<mode>4, fnma<mode>, fnms<mode>4):
	New expanders.
	* doc/md.texi (fms<mode>4, fnma<mode>, fnms<mode>4): Document new
	named patterns.
	* genopinit.c (optabs): Initialize fms_optab, fnma_optab and fnms_optab.
	* optabs.h (enum optab_index): Add OTI_fms, OTI_fnma and OTI_fnms.
	(fms_optab, fnma_optab, fnms_optab): New defines.
	* gimplify.c (gimplify_expr): Handle binary truth expressions
	explicitly.  Handle FMA_EXPR.
	* tree-vect-stmts.c (vectorizable_operation): Handle ternary
	operations.

	* gcc.target/i386/fma4-vector-2.c: New testcase.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r166304
2010-11-04 10:56:22 +00:00
Richard Guenther
ca818bd905 re PR middle-end/46251 (ICE: in expand_expr_real_2, at expr.c:7276 with -funsafe-math-optimizations -mbionic and __builtin_sincosl())
2010-11-03  Richard Guenther  <rguenther@suse.de>

	PR middle-end/46251
	* builtins.c (expand_builtin_sincos): Properly build MEM_REFs,
	not INDIRECT_REFs.

	* gcc.dg/pr46251.c: New testcase.

From-SVN: r166235
2010-11-03 09:57:13 +00:00
Nathan Froyd
e8160c9a60 builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert.
gcc/
	* builtins.c (fold_builtin_signbit): Use build_zero_cst instead of
	fold_convert.
	* c-typeck.c (build_function_call_vec): Likewise.
	* cfgexpand.c (expand_debug_expr): Likewise.
	* cgraphunit.c (assemble_thunk): Likewise.
	* config/sparc/sparc.c (sparc_fold_builtin): Likewise.
	* fold-const.c (fold_unary_loc, fold_mult_zconjz): Likewise.
	(fold_binary_loc, fold_ternary_loc): Likewise.
	* gimple-fold.c (get_symbol_constant_value): Likewise.
	* gimple-low.c (lower_builtin_setjmp): Likewise.
	* gimple.c (gimple_cond_get_ops_from_tree): Likewise.
	* gimplify.c (gimplify_init_constructor): Likewise.
	* lambda.h (build_linear_expr): Likewise.
	* omp-low.c (omp_reduction_init): Likewise.
	* tree-inline.c (remap_ssa_name): Likewise.
	* tree-object-size.c (compute_object_sizes): Likewise.
	* tree-sra.c (init_subtree_with_zero): Likewise.
	(sra_ipa_modify_assign): Likewise.
	* tree-ssa-copy.c (propagate_tree_value_into_stmt): Likewise.
	* tree-ssa-reassoc.c (eliminate_duplicate_pair): Likewise.
	(eliminate_plus_minus_pair, eliminate_not_pairs): Likewise.
	(undistribute_ops_list): Likewise.
	* tree-ssa-sccvn.c (vn_reference_lookup_3): Likewise.
	* tree-vect-stmts.c (vectorizable_call): Likewise.
	* tree.c (build_vector_from_ctor, build_one_cst): Likewise.
	(build_zero_cst): Handle more cases directly.  Update comment.

gcc/cp/
	* class.c (build_base_path, add_vcall_offset): Use build_zero_cst
	instead of fold_convert.
	* init.c (build_zero_init): Likewise.
	* typeck.c (cp_build_binary_op): Likewise.

gcc/fortran/
	* trans-decl.c (add_argument_checking): Use build_zero_cst instead of
	fold_convert.
	* trans-expr.c (gfc_conv_missing_dummy, fill_with_spaces): Likewise.
	* trans-stmt.c (gfc_trans_do): Likewise.

From-SVN: r166227
2010-11-03 00:49:00 +00:00
Jason Merrill
ec52b1115d tree.h (EXPR_LOC_OR_HERE): New macro.
* tree.h (EXPR_LOC_OR_HERE): New macro.
	* builtins.c (c_strlen): Use it.
	* c-decl.c (build_enumerator): Likewise.
	* gimplify.c (internal_get_tmp_var): Likewise.
	(shortcut_cond_expr): Likewise.
	(gimplify_one_sizepos): Likewise.
c-family/
	* c-common.c (conversion_warning, warn_for_collisions_1): Use
	EXPR_LOC_OR_HERE.
cp/
	* decl.c (pop_switch): Use EXPR_LOC_OR_HERE.
	* typeck.c (convert_for_assignment): Likewise.

From-SVN: r166123
2010-10-31 22:04:39 -04:00
Steve Ellcey
ffa88471b5 tm.texi.in (TARGET_GET_RAW_RESULT_MODE): New.
2010-10-27  Steve Ellcey  <sje@cup.hp.com>

	* doc/tm.texi.in (TARGET_GET_RAW_RESULT_MODE): New.
	(TARGET_GET_RAW_ARG_MODE): New.
	* doc/tm.texi: Regenerate.
	* target.def (get_raw_result_mode): New.
	(get_raw_arg_mode): New.
	* targhooks.c (default_get_reg_raw_mode): New.
	* targhooks.h (default_get_reg_raw_mode): New.
	* builtins.c (apply_args_size): Use targetm.calls.get_raw_arg_mode.
	(apply_result_size): Ditto.
	* config/ia64/ia64.c (ia64_get_reg_raw_mode): New.
	(TARGET_GET_RAW_RESULT_MODE): Define.
	(TARGET_GET_RAW_ARG_MODE): Ditto.

From-SVN: r166021
2010-10-27 22:44:31 +00:00
Michael Meissner
0069111f9c Fix PR 46041
From-SVN: r165666
2010-10-18 22:37:32 +00:00
Michael Meissner
1b1562a559 Add fma support
From-SVN: r165515
2010-10-15 17:42:05 +00:00
Richard Henderson
3a42502df4 re PR rtl-optimization/33721 ([meta-bug] Gcc can't properly align stack variable)
PR rtl-opt/33721
	* explow.c (allocate_dynamic_stack_space): Add REQUIRED_ALIGN parm,
	remove TARGET parm, convert KNOWN_ALIGN parm to SIZE_ALIGN.  Honor
	required_align, tidy the code a bit.  Emit split_stack code in the
	right place.  Mark the return value with the alignment properly.
	* expr.h (allocate_dynamic_stack_space): Update decl.
	* builtins.c (expand_builtin_apply): Update call to
	allocate_dynamic_stack_space.
	(expand_builtin_alloca): Likewise.  Remove TARGET parameter.
	* calls.c (initialize_argument_information): Update call to
	allocate_dynamic_stack_space.
	(expand_call): Likewise.

	* cfgexpand.c (get_decl_align_unit): Don't limit alignment.
	Don't update_stack_alignment here.
	(alloc_stack_frame_space): Make ALIGN unsigned.
	(stack_var_cmp): Sort by alignment too.
	(partition_stack_vars): Don't merge large and small alignment vars.
	(expand_one_stack_var_at): Add BASE and BASE_ALIGN parameters.
	Take care when BASE is not virtual_stack_vars_rtx.
	(expand_stack_vars): Allocate dynamic stack space for large
	alignment variables.
	(expand_one_stack_var): Update all to expand_one_stack_var_at.
	(defer_stack_allocation): True for large alignment vars.
	(update_stack_alignment): Merge into ...
	(expand_one_var): ... here.
	(gimple_expand_cfg): Place code from expand_stack_vars.

From-SVN: r165240
2010-10-09 15:05:51 -07:00
Nathan Froyd
8897c9ce64 builtins.c (fold_call_stmt): Don't copy gimple call arguments into a temporary array.
* builtins.c (fold_call_stmt): Don't copy gimple call arguments
	into a temporary array.

From-SVN: r165213
2010-10-09 00:44:46 +00:00
Nathan Froyd
43ea30dc94 builtins.c (rewrite_call_expr): Move code to...
* builtins.c (rewrite_call_expr): Move code to...
	(rewrite_call_expr_valist): ...here.  Call
	build_call_expr_loc_array.
	(rewrite_call_expr_array): New function.
	(fold_builtin_sprintf_chk_1): New function.
	(fold_builtin_sprintf_chk): Call it.
	(gimple_fold_builtin_sprintf_chk): Likewise.
	(fold_builtin_snprintf_chk_1): New function.
	(fold_builtin_snprintf_chk): Call it.
	(gimple_fold_builtin_snprintf_chk): Likewise.
	(gimple_rewrite_call_expr): Delete.

From-SVN: r165146
2010-10-08 01:06:14 +00:00
Joseph Myers
e3339d0f33 optc-gen.awk: Generate global_options initializer instead of individual variables.
gcc:
	* optc-gen.awk: Generate global_options initializer instead of
	individual variables.  Add x_ prefix to names of structure
	members.
	* opth-gen.awk: Generate gcc_options structure.  Add x_ prefix to
	names of structure members.
	* doc/tm.texi.in (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Document.
	* doc/tm.texi: Regenerate.
	* alias.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* builtins.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.
	* c-parser.c (disable_extension_diagnostics,
	restore_extension_diagnostics): Update names of cpp_options
	members.
	* combine.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* common.opt (fcompare-debug-second): Don't use Var.
	* config/alpha/alpha.h (target_flags): Remove.
	* config/arm/arm.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
	* config/bfin/bfin.h (target_flags): Remove.
	* config/cris/cris.h (target_flags): Remove.
	* config/i386/i386-c.c (ix86_pragma_target_parse): Update names of
	cl_target_option members.
	* config/i386/i386.c (ix86_force_align_arg_pointer): Remove.
	(ix86_function_specific_print, ix86_valid_target_attribute_tree,
	ix86_can_inline_p): Update names of cl_target_option members.
	* config/i386/i386.h (ix86_isa_flags): Remove.
	* config/lm32/lm32.h (target_flags): Remove.
	* config/mcore/mcore.h (mcore_stack_increment): Remove.
	* config/mcore/mcore.md (addsi3): Remove extern declaration of
	flag_omit_frame_pointer.
	* config/mep/mep.h (target_flags): Remove.
	* config/mips/mips.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define.
	* config/mmix/mmix.h (target_flags): Remove.
	* config/rs6000/rs6000.h (rs6000_xilinx_fpu, flag_pic,
	flag_expensive_optimizations): Remove.
	* config/s390/s390.h (flag_pic): Remove.
	* config/score/score-conv.h (target_flags): Remove.
	* config/sh/sh.h (sh_fixed_range_str): Remove.
	* config/spu/spu.h (target_flags, spu_fixed_range_string): Remove.
	* dbxout.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
	* df-scan.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* diagnostic.c (diagnostic_initialize): Update names of
	diagnostic_context members.
	* diagnostic.h (diagnostic_context): Rename inhibit_warnings and
	warn_system_headers.
	(diagnostic_report_warnings_p): Update for new names.
	* dwarf2out.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER
	* emit-rtl.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER and
	HARD_FRAME_POINTER_IS_ARG_POINTER.
	* flags.h (flag_compare_debug): Declare.
	* ira.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* opts.c (flag_compare_debug): Define.
	(common_handle_option): Update names of diagnostic_context
	members.  Handle -fcompare-debug-second.
	(fast_math_flags_struct_set_p): Update names of cl_optimization
	members.
	* reginfo.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* regrename.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* reload.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* reload1.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* resource.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER.
	* rtl.h (HARD_FRAME_POINTER_IS_FRAME_POINTER,
	HARD_FRAME_POINTER_IS_ARG_POINTER): Define and use.
	* sel-sched.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER
	* stmt.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER.

gcc/c-family:
	* c-common.c (c_cpp_error): Update names of diagnostic_context
	members.
	* c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Update names of
	cl_optimization members.
	* c-opts.c (warning_as_error_callback, c_common_handle_option,
	sanitize_cpp_opts, finish_options): Update names of cpp_options
	members.

gcc/fortran:
	* cpp.c (cpp_define_builtins): Update names of gfc_option_t
	members.
	(gfc_cpp_post_options): Update names of cpp_options members.
	(cb_cpp_error): Update names of diagnostic_context members.
	* f95-lang.c (gfc_init_builtin_functions): Update names of
	gfc_option_t members.
	* gfortran.h (gfc_option_t): Rename warn_conversion and
	flag_openmp.
	* intrinsic.c (gfc_convert_type_warn): Update names of
	gfc_option_t members.
	* options.c (gfc_init_options, gfc_post_options, set_Wall,
	gfc_handle_option): Update names of gfc_option_t members.
	* parse.c (next_free, next_fixed): Update names of gfc_option_t
	members.
	* scanner.c (pedantic): Remove extern declaration.
	(skip_free_comments, skip_fixed_comments, include_line): Update
	names of gfc_option_t members.
	* trans-decl.c (gfc_generate_function_code): Update names of
	gfc_option_t members.

gcc/java:
	* java-tree.h (flag_filelist_file, flag_assert, flag_jni,
	flag_force_classes_archive_check, flag_redundant, flag_newer,
	flag_use_divide_subroutine, flag_use_atomic_builtins,
	flag_use_boehm_gc, flag_hash_synchronization,
	flag_check_references, flag_optimize_sci, flag_indirect_classes,
	flag_indirect_dispatch, flag_store_check,
	flag_reduced_reflection): Remove.
	* jcf-dump.c (flag_newer): Remove.
	* jcf.h (quiet_flag): Remove.
	* parse.h (quiet_flag): Remove.

libcpp:
	* include/cpplib.h (cpp_options): Rename warn_deprecated,
	warn_traditional, warn_long_long and pedantic.
	* directives.c (directive_diagnostics, _cpp_handle_directive):
	Update names of cpp_options members.
	* expr.c (cpp_classify_number, eval_token): Update names of
	cpp_options members.
	* init.c (cpp_create_reader, post_options): Update names of
	cpp_options members.
	* internal.h (CPP_PEDANTIC, CPP_WTRADITIONAL): Update names of
	cpp_options members.
	* macro.c (parse_params): Update names of cpp_options members.

From-SVN: r164723
2010-09-29 15:49:14 +01:00
Richard Guenther
dbad82f59c re PR rtl-optimization/45678 (crash on vector code with -m32 -msse)
2010-09-17  Richard Guenther  <rguenther@suse.de>

	PR middle-end/45678
	* builtins.c (fold_builtin_memory_op): Always properly adjust
	alignment of memory accesses.

From-SVN: r164356
2010-09-17 09:00:23 +00:00
Jakub Jelinek
4359dc2a31 re PR middle-end/45567 (__builtin_popcountl ICEs with -ftree-ter)
PR middle-end/45567
	* builtins.c (expand_builtin_interclass_mathfn, expand_builtin_cexpi,
	expand_builtin_powi): Remove subtarget argument, pass NULL_RTX instead.
	(expand_builtin): Adjust caller.
	(expand_builtin_unop): Only use subtarget if it has the right mode.

	* gcc.dg/pr45567.c: New test.

From-SVN: r164274
2010-09-14 12:11:11 +02:00
Richard Guenther
be1ac4ecae tree.def (MISALIGNED_INDIRECT_REF): Remove.
2010-09-06  Richard Guenther  <rguenther@suse.de>

	* tree.def (MISALIGNED_INDIRECT_REF): Remove.
	* tree.h (INDIRECT_REF_P): Only check for INDIRECT_REF.
	(build_aligned_type): Declare.
	* tree.c (check_qualified_type): Also compare TYPE_ALIGN.
	(check_aligned_type): New function.
	(build_aligned_type): Likewise.
	* expr.c (expand_assignment): Handle misaligned stores via
	TARGET_MEM_REF and MEM_REF using movmisalign_optab.
	(expand_expr_real_1): Likewise.
	(safe_from_p): Remove MISALIGNED_INDIRECT_REF handling.
	* tree-vect-stmts.c (vectorizable_store): Do not build
	MISALIGNED_INDIRECT_REF but initialize alignment information.
	(vectorizable_load): Likewise.
	* builtins.c (get_object_alignment): Remove MISALIGNED_INDIRECT_REF
	handling.
	* cfgexpand.c (expand_debug_expr): Likewise.
	* dwarf2out.c (loc_list_from_tree): Likewise.
	* fold-const.c (maybe_lvalue_p): Likewise.
	(operand_equal_p): Likewise.
	(build_fold_addr_expr_with_type_loc): Likewise.
	* gimplify.c (gimplify_addr_expr): Likewise.
	(gimplify_expr): Likewise.
	* tree-cfg.c (verify_types_in_gimple_min_lval): Likewise.
	(verify_gimple_assign_single): Likewise.
	* tree-dump.c (dequeue_and_dump): Likewise.
	(tree_could_trap_p): Likewise.
	* tree-predcom.c (ref_at_iteration): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	(op_code_prio): Likewise.
	(op_symbol_code): Likewise.
	* tree-ssa-ccp.c (get_value_from_alignment): Likewise.
	* tree-ssa-loop-im.c (for_each_index): Likewise.
	(gen_lsm_tmp_name): Likewise.
	* tree-ssa-loop-ivopts.c (idx_find_step): Likewise.
	(find_interesting_uses_address): Likewise.
	* tree-ssa-loop-prefetch.c (idx_analyze_ref): Likewise.
	* tree-ssa-operands.c (get_expr_operands): Likewise.
	* tree-ssa-pre.c (create_component_ref_by_pieces_1): Likewise.
	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
	(ao_ref_init_from_vn_reference): Likewise.
	* tree.c (staticp): Likewise.
	(build1_stat): Likewise.
	(reference_alias_ptr_type): Likewise.
	* emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise.
	* config/rs6000/rs6000.c (rs6000_check_sdmode): Remove
	MISALIGNED_INDIRECT_REF handling.

From-SVN: r163915
2010-09-06 13:26:13 +00:00
Richard Guenther
4d948885d0 tree.def (TARGET_MEM_REF): Merge TMR_SYMBOL and TMR_BASE.
2010-09-03  Richard Guenther  <rguenther@suse.de>

	* tree.def (TARGET_MEM_REF): Merge TMR_SYMBOL and TMR_BASE.
	Move TMR_OFFSET to second operand.  Add TMR_INDEX2.
	* tree.h (TMR_SYMBOL): Remove.
	(TMR_BASE, TMR_OFFSET): Adjust.
	(TMR_INDEX2): New.
	* alias.c (ao_ref_from_mem): Use TMR_BASE.
	* builtins.c (get_object_alignment): Merge TMR_BASE and
	TMR_SYMBOL handling.
	* cfgexpand.c (expand_debug_expr): Use TMR_BASE.
	* gimple.c (get_base_address): Merge MEM_REF and TARGET_MEM_REF
	handling.  Also allow TARGET_MEM_REF as base address.
	(walk_stmt_load_store_addr_ops): TMR_BASE is always non-NULL.
	* gimplify.c (gimplify_expr): Gimplify TMR_BASE like MEM_REF
	base.  Gimplify TMR_INDEX2.
	* tree-cfg.c (verify_types_in_gimple_reference): Adjust.
	* tree-dfa.c (get_ref_base_and_extent): Likewise.
	(get_addr_base_and_unit_offset): Likewise.
	* tree-eh.c (tree_could_trap_p): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-address.c (tree_mem_ref_addr): Simplify.  Handle
	TMR_INDEX2.
	(create_mem_ref_raw): Merge symbol and base.  Move 2ndary
	base to index2.
	(get_address_description): Reconstruct addres description
	from merged TMR_BASE and TMR_INDEX2.
	(maybe_fold_tmr): Fold propagated addresses.
	* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Merge
	MEM_REF and TARGET_MEM_REF paths.
	(indirect_refs_may_alias_p): Likewise.
	* tree-ssa-live.c (mark_all_vars_used_1): Handle TMR_INDEX2
	instead of TMR_SYMBOL.
	* tree-ssa-operands.c (get_tmr_operands): Simplify.
	* tree-ssa-pre.c (create_component_ref_by_pieces_1): Adjust
	according to changes ...
	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): ... here.
	Split TARGET_MEM_REF into two fields plus the base.
	* tree.c (mem_ref_offset): Simplify.
	* tree-ssa-loop-im.c (for_each_index): Handle TMR_INDEX2.
	* tree-ssa-loop-ivopts.c (find_interesting_uses_address): Likewise.
	Strip NOPs when folding MEM_REF addresses.
	* tree-ssa-sink.c (is_hidden_global_store): Handle TARGET_MEM_REF.
	* gimple-fold.c (maybe_fold_reference): Fold TARGET_MEM_REF here ...
	(fold_gimple_assign): ... not here.

From-SVN: r163802
2010-09-03 09:50:17 +00:00