aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2014-11-05ipa-chkp.c: New.Ilya Enkovich100-292/+11266
gcc/ 2014-11-05 Ilya Enkovich <ilya.enkovich@intel.com> * ipa-chkp.c: New. * ipa-chkp.h: New. * tree-chkp.c: New. * tree-chkp.h: New. * tree-chkp-opt.c: New. * rtl-chkp.c: New. * rtl-chkp.h: New. * Makefile.in (OBJS): Add ipa-chkp.o, rtl-chkp.o, tree-chkp.o tree-chkp-opt.o. (GTFILES): Add tree-chkp.c. * mode-classes.def (MODE_POINTER_BOUNDS): New. * tree.def (POINTER_BOUNDS_TYPE): New. * genmodes.c (complete_mode): Support MODE_POINTER_BOUNDS. (POINTER_BOUNDS_MODE): New. (make_pointer_bounds_mode): New. * machmode.h (POINTER_BOUNDS_MODE_P): New. * stor-layout.c (int_mode_for_mode): Support MODE_POINTER_BOUNDS. (layout_type): Support POINTER_BOUNDS_TYPE. * tree-pretty-print.c (dump_generic_node): Support POINTER_BOUNDS_TYPE. * tree-core.h (tree_index): Add TI_POINTER_BOUNDS_TYPE. * tree.c (build_int_cst_wide): Support POINTER_BOUNDS_TYPE. (type_contains_placeholder_1): Likewise. (build_common_tree_nodes): Initialize pointer_bounds_type_node. * tree.h (POINTER_BOUNDS_TYPE_P): New. (pointer_bounds_type_node): New. (POINTER_BOUNDS_P): New. (BOUNDED_TYPE_P): New. (BOUNDED_P): New. (CALL_WITH_BOUNDS_P): New. * gimple.h (gf_mask): Add GF_CALL_WITH_BOUNDS. (gimple_call_with_bounds_p): New. (gimple_call_set_with_bounds): New. (gimple_return_retbnd): New. (gimple_return_set_retbnd): New * gimple.c (gimple_build_return): Increase number of ops for return statement. (gimple_build_call_from_tree): Propagate CALL_WITH_BOUNDS_P flag. * gimple-pretty-print.c (dump_gimple_return): Print second op. * rtl.h (CALL_EXPR_WITH_BOUNDS_P): New. * gimplify.c (gimplify_init_constructor): Avoid infinite loop during gimplification of bounds initializer. * calls.c: Include tree-chkp.h, rtl-chkp.h, bitmap.h. (special_function_p): Use original decl name when analyzing instrumentation clone. (arg_data): Add fields special_slot, pointer_arg and pointer_offset. (store_bounds): New. (emit_call_1): Propagate instrumentation flag for CALL. (initialize_argument_information): Compute pointer_arg, pointer_offset and special_slot for pointer bounds arguments. (finalize_must_preallocate): Preallocate when storing bounds in bounds table. (compute_argument_addresses): Skip pointer bounds. (expand_call): Store bounds into tables separately. Return result joined with resulting bounds. * cfgexpand.c: Include tree-chkp.h, rtl-chkp.h. (expand_call_stmt): Propagate bounds flag for CALL_EXPR. (expand_return): Add returned bounds arg. Handle returned bounds. (expand_gimple_stmt_1): Adjust to new expand_return signature. (gimple_expand_cfg): Reset rtx bounds map. * expr.c: Include tree-chkp.h, rtl-chkp.h. (expand_assignment): Handle returned bounds. (store_expr_with_bounds): New. Replaces store_expr with new bounds target argument. Handle bounds returned by calls. (store_expr): Now wraps store_expr_with_bounds. * expr.h (store_expr_with_bounds): New. * function.c: Include tree-chkp.h, rtl-chkp.h. (bounds_parm_data): New. (use_register_for_decl): Do not registerize decls used for bounds stores and loads. (assign_parms_augmented_arg_list): Add bounds of the result structure pointer as the second argument. (assign_parm_find_entry_rtl): Mark bounds are never passed on the stack. (assign_parm_is_stack_parm): Likewise. (assign_parm_load_bounds): New. (assign_bounds): New. (assign_parms): Load bounds and determine a location for returned bounds. (diddle_return_value_1): New. (diddle_return_value): Handle returned bounds. * function.h (rtl_data): Add field for returned bounds. * varasm.c: Include tree-chkp.h. (output_constant): Support POINTER_BOUNDS_TYPE. (output_constant_pool_2): Support MODE_POINTER_BOUNDS. (ultimate_transparent_alias_target): Move up. (make_decl_rtl): For instrumented function use name of the original decl. (assemble_start_function): Mark function as global in case it is instrumentation clone of the global function. (do_assemble_alias): Follow transparent alias chain for identifier. Check if original alias is public. (maybe_assemble_visibility): Use visibility of the original function for instrumented version. (default_unique_section): Likewise. * emit-rtl.c (immed_double_const): Support MODE_POINTER_BOUNDS. (init_emit_once): Build pointer bounds zero constants. * explow.c (trunc_int_for_mode): Support MODE_POINTER_BOUNDS. * target.def (builtin_chkp_function): New. (chkp_bound_type): New. (chkp_bound_mode): New. (chkp_make_bounds_constant): New. (chkp_initialize_bounds): New. (load_bounds_for_arg): New. (store_bounds_for_arg): New. (load_returned_bounds): New. (store_returned_bounds): New. (chkp_function_value_bounds): New. (setup_incoming_vararg_bounds): New. (function_arg): Update hook description with new possible return value CONST_INT. * targhooks.h (default_load_bounds_for_arg): New. (default_store_bounds_for_arg): New. (default_load_returned_bounds): New. (default_store_returned_bounds): New. (default_chkp_bound_type): New. (default_chkp_bound_mode): New. (default_builtin_chkp_function): New. (default_chkp_function_value_bounds): New. (default_chkp_make_bounds_constant): New. (default_chkp_initialize_bounds): New. (default_setup_incoming_vararg_bounds): New. * targhooks.c (default_load_bounds_for_arg): New. (default_store_bounds_for_arg): New. (default_load_returned_bounds): New. (default_store_returned_bounds): New. (default_chkp_bound_type): New. (default_chkp_bound_mode); New. (default_builtin_chkp_function): New. (default_chkp_function_value_bounds): New. (default_chkp_make_bounds_constant): New. (default_chkp_initialize_bounds): New. (default_setup_incoming_vararg_bounds): New. * builtin-types.def (BT_BND): New. (BT_FN_PTR_CONST_PTR): New. (BT_FN_CONST_PTR_CONST_PTR): New. (BT_FN_BND_CONST_PTR): New. (BT_FN_CONST_PTR_BND): New. (BT_FN_PTR_CONST_PTR_SIZE): New. (BT_FN_PTR_CONST_PTR_CONST_PTR): New. (BT_FN_VOID_PTRPTR_CONST_PTR): New. (BT_FN_VOID_CONST_PTR_SIZE): New. (BT_FN_VOID_PTR_BND): New. (BT_FN_CONST_PTR_CONST_PTR_CONST_PTR): New. (BT_FN_BND_CONST_PTR_SIZE): New. (BT_FN_PTR_CONST_PTR_CONST_PTR_SIZE): New. (BT_FN_VOID_CONST_PTR_BND_CONST_PTR): New. * chkp-builtins.def: New. * builtins.def: include chkp-builtins.def. (DEF_CHKP_BUILTIN): New. * builtins.c: Include tree-chkp.h and rtl-chkp.h. (expand_builtin): Support BUILT_IN_CHKP_INIT_PTR_BOUNDS, BUILT_IN_CHKP_NULL_PTR_BOUNDS, BUILT_IN_CHKP_COPY_PTR_BOUNDS, BUILT_IN_CHKP_CHECK_PTR_LBOUNDS, BUILT_IN_CHKP_CHECK_PTR_UBOUNDS, BUILT_IN_CHKP_CHECK_PTR_BOUNDS, BUILT_IN_CHKP_SET_PTR_BOUNDS, BUILT_IN_CHKP_NARROW_PTR_BOUNDS, BUILT_IN_CHKP_STORE_PTR_BOUNDS, BUILT_IN_CHKP_GET_PTR_LBOUND, BUILT_IN_CHKP_GET_PTR_UBOUND, BUILT_IN_CHKP_BNDMK, BUILT_IN_CHKP_BNDSTX, BUILT_IN_CHKP_BNDCL, BUILT_IN_CHKP_BNDCU, BUILT_IN_CHKP_BNDLDX, BUILT_IN_CHKP_BNDRET, BUILT_IN_CHKP_INTERSECT, BUILT_IN_CHKP_NARROW, BUILT_IN_CHKP_EXTRACT_LOWER, BUILT_IN_CHKP_EXTRACT_UPPER. (std_expand_builtin_va_start): Init bounds for va_list. * cppbuiltin.c (define_builtin_macros_for_compilation_flags): Add __CHKP__ macro when Pointer Bounds Checker is on. * params.def (PARAM_CHKP_MAX_CTOR_SIZE): New. * passes.def (pass_ipa_chkp_versioning): New. (pass_early_local_passes): Renamed to pass_build_ssa_passes. (pass_fixup_cfg): Moved to pass_chkp_instrumentation_passes. (pass_chkp_instrumentation_passes): New. (pass_ipa_chkp_produce_thunks): New. (pass_local_optimization_passes): New. (pass_chkp_opt): New. * tree-pass.h (make_pass_ipa_chkp_versioning): New. (make_pass_ipa_chkp_produce_thunks): New. (make_pass_chkp): New. (make_pass_chkp_opt): New. (make_pass_early_local_passes): Renamed to ... (make_pass_build_ssa_passes): This. (make_pass_chkp_instrumentation_passes): New. (make_pass_local_optimization_passes): New. * passes.c (pass_manager::execute_early_local_passes): Execute early passes in three steps. (execute_all_early_local_passes): Renamed to ... (execute_build_ssa_passes): This. (pass_data_early_local_passes): Renamed to ... (pass_data_build_ssa_passes): This. (pass_early_local_passes): Renamed to ... (pass_build_ssa_passes): This. (pass_data_chkp_instrumentation_passes): New. (pass_chkp_instrumentation_passes): New. (pass_data_local_optimization_passes): New. (pass_local_optimization_passes): New. (make_pass_early_local_passes): Renamed to ... (make_pass_build_ssa_passes): This. (make_pass_chkp_instrumentation_passes): New. (make_pass_local_optimization_passes): New. * c-family/c.opt (fcheck-pointer-bounds): New. (fchkp-check-incomplete-type): New. (fchkp-zero-input-bounds-for-main): New. (fchkp-first-field-has-own-bounds): New. (fchkp-narrow-bounds): New. (fchkp-narrow-to-innermost-array): New. (fchkp-optimize): New. (fchkp-use-fast-string-functions): New. (fchkp-use-nochk-string-functions): New. (fchkp-use-static-bounds): New. (fchkp-use-static-const-bounds): New. (fchkp-treat-zero-dynamic-size-as-infinite): New. (fchkp-check-read): New. (fchkp-check-write): New. (fchkp-store-bounds): New. (fchkp-instrument-calls): New. (fchkp-instrument-marked-only): New. (Wchkp): New. * c-family/c-common.c (handle_bnd_variable_size_attribute): New. (handle_bnd_legacy): New. (handle_bnd_instrument): New. (c_common_attribute_table): Add bnd_variable_size, bnd_legacy and bnd_instrument. Fix documentation. (c_common_format_attribute_table): Likewsie. * toplev.c: include tree-chkp.h. (process_options): Check Pointer Bounds Checker is supported. (compile_file): Add chkp_finish_file call. * ipa-cp.c (initialize_node_lattices): Use cgraph_local_p to handle instrumentation clones properly. (propagate_constants_accross_call): Do not propagate through instrumentation thunks. * ipa-pure-const.c (propagate_pure_const): Support IPA_REF_CHKP. * ipa-inline.c (early_inliner): Check edge has summary allocated. * ipa-split.c: Include tree-chkp.h. (find_retbnd): New. (split_part_set_ssa_name_p): New. (consider_split): Do not split retbnd and retval producers. (insert_bndret_call_after): new. (split_function): Propagate Pointer Bounds Checker instrumentation marks and handle returned bounds. * tree-ssa-sccvn.h (vn_reference_op_struct): Transform opcode into bit field and add with_bounds field. * tree-ssa-sccvn.c (copy_reference_ops_from_call): Set with_bounds field for instrumented calls. * tree-ssa-pre.c (create_component_ref_by_pieces_1): Restore CALL_WITH_BOUNDS_P flag for calls. * tree-ssa-ccp.c: Include tree-chkp.h. (insert_clobber_before_stack_restore): Handle BUILT_IN_CHKP_BNDRET calls. * tree-ssa-dce.c: Include tree-chkp.h. (propagate_necessity): For free call fed by alloc check bounds are also provided by the same alloc. (eliminate_unnecessary_stmts): Handle BUILT_IN_CHKP_BNDRET used by free calls. * tree-inline.c: Include tree-chkp.h. (declare_return_variable): Add arg holding returned bounds slot. Create and initialize returned bounds var. (remap_gimple_stmt): Handle returned bounds. Return sequence of statements instead of a single statement. (insert_init_stmt): Add declaration. (remap_gimple_seq): Adjust to new remap_gimple_stmt signature. (copy_bb): Adjust to changed return type of remap_gimple_stmt. Properly handle bounds in va_arg_pack and va_arg_pack_len. (expand_call_inline): Handle returned bounds. Add bounds copy for generated mem to mem assignments. * tree-inline.h (copy_body_data): Add fields retbnd and assign_stmts. * value-prof.c: Include tree-chkp.h. (gimple_ic): Support returned bounds. * ipa.c (cgraph_build_static_cdtor_1): Support contructors with "chkp ctor" and "bnd_legacy" attributes. (symtab_remove_unreachable_nodes): Keep initial values for pointer bounds to be used for checks eliminations. (process_references): Handle IPA_REF_CHKP. (walk_polymorphic_call_targets): Likewise. * ipa-visibility.c (cgraph_externally_visible_p): Mark instrumented 'main' as externally visible. (function_and_variable_visibility): Filter instrumentation thunks. * cgraph.h (cgraph_thunk_info): Add add_pointer_bounds_args field. (cgraph_node): Add instrumented_version, orig_decl and instrumentation_clone fields. (symtab_node::get_alias_target): Allow IPA_REF_CHKP reference. (varpool_node): Add need_bounds_init field. (cgraph_local_p): New. * cgraph.c: Include tree-chkp.h. (cgraph_node::remove): Fix instrumented_version of the referenced node if any. (cgraph_node::dump): Dump instrumentation_clone and instrumented_version fields. (cgraph_node::verify_node): Check correctness of IPA_REF_CHKP references and instrumentation thunks. (cgraph_can_remove_if_no_direct_calls_and_refs_p): Keep all not instrumented instrumentation clones alive. (cgraph_redirect_edge_call_stmt_to_callee): Support returned bounds. * cgraphbuild.c (rebuild_cgraph_edges): Rebuild IPA_REF_CHKP reference. (cgraph_rebuild_references): Likewise. * cgraphunit.c: Include tree-chkp.h. (assemble_thunks_and_aliases): Skip thunks calling instrumneted function version. (varpool_finalize_decl): Register statically initialized decls in Pointer Bounds Checker. (walk_polymorphic_call_targets): Do not mark generated call to __builtin_unreachable as with_bounds. (output_weakrefs): If there are both instrumented and original versions, output only one of them. (cgraph_node::expand_thunk): Set with_bounds flag for created call statement. * ipa-ref.h (ipa_ref_use): Add IPA_REF_CHKP. (ipa_ref): increase size of use field. * symtab.c (ipa_ref_use_name): Add element for IPA_REF_CHKP. * varpool.c (dump_varpool_node): Dump need_bounds_init field. (ctor_for_folding): Do not fold constant bounds vars. * lto-streamer.h (LTO_minor_version): Change minor version from 0 to 1. * lto-cgraph.c (compute_ltrans_boundary): Keep initial values for pointer bounds. (lto_output_node): Output instrumentation_clone, thunk.add_pointer_bounds_args and orig_decl field. (lto_output_ref): Adjust to new ipa_ref::use field size. (input_overwrite_node): Read instrumentation_clone field. (input_node): Read thunk.add_pointer_bounds_args and orig_decl fields. (input_ref): Adjust to new ipa_ref::use field size. (input_cgraph_1): Compute instrumented_version fields and restore IDENTIFIER_TRANSPARENT_ALIAS chains. (lto_output_varpool_node): Output need_bounds_init value. (input_varpool_node): Read need_bounds_init value. * lto-partition.c (add_symbol_to_partition_1): Keep original and instrumented versions together. (privatize_symbol_name): Restore transparent alias chain if required. (add_references_to_partition): Add references to pointer bounds vars. * dbxout.c (dbxout_type): Ignore POINTER_BOUNDS_TYPE. * dwarf2out.c (gen_subprogram_die): Ignore bound args. (gen_type_die_with_usage): Skip pointer bounds. (dwarf2out_global_decl): Likewise. (is_base_type): Support POINTER_BOUNDS_TYPE. (gen_formal_types_die): Skip pointer bounds. (gen_decl_die): Likewise. * var-tracking.c (vt_add_function_parameters): Skip bounds parameters. * ipa-icf.c (sem_function::merge): Do not merge when instrumentation thunk still exists. (sem_variable::merge): Reset need_bounds_init flag. * doc/extend.texi: Document Pointer Bounds Checker built-in functions and attributes. * doc/tm.texi.in (TARGET_LOAD_BOUNDS_FOR_ARG): New. (TARGET_STORE_BOUNDS_FOR_ARG): New. (TARGET_LOAD_RETURNED_BOUNDS): New. (TARGET_STORE_RETURNED_BOUNDS): New. (TARGET_CHKP_FUNCTION_VALUE_BOUNDS): New. (TARGET_SETUP_INCOMING_VARARG_BOUNDS): New. (TARGET_BUILTIN_CHKP_FUNCTION): New. (TARGET_CHKP_BOUND_TYPE): New. (TARGET_CHKP_BOUND_MODE): New. (TARGET_CHKP_MAKE_BOUNDS_CONSTANT): New. (TARGET_CHKP_INITIALIZE_BOUNDS): New. * doc/tm.texi: Regenerated. * doc/rtl.texi (MODE_POINTER_BOUNDS): New. (BND32mode): New. (BND64mode): New. * doc/invoke.texi (-mmpx): New. (-mno-mpx): New. (chkp-max-ctor-size): New. * config/i386/constraints.md (w): New. (Ti): New. (Tb): New. * config/i386/i386-c.c (ix86_target_macros_internal): Add __MPX__. * config/i386/i386-modes.def (BND32): New. (BND64): New. * config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): New. * config/i386/i386.c: Include tree-chkp.h, rtl-chkp.h, tree-iterator.h. (regclass_map): Add bound registers. (dbx_register_map): Likewise. (dbx64_register_map): Likewise. (svr4_dbx_register_map): Likewise. (isa_opts): Add -mmpx. (PTA_MPX): New. (ix86_option_override_internal): Support MPX ISA. (ix86_conditional_register_usage): Support bound registers. (ix86_code_end): Add MPX bnd prefix. (output_set_got): Likewise. (print_reg): Avoid prefixes for bound registers. (ix86_print_operand): Add '!' (MPX bnd) print prefix support. (ix86_print_operand_punct_valid_p): Likewise. (ix86_print_operand_address): Support UNSPEC_BNDMK_ADDR and UNSPEC_BNDLDX_ADDR. (ix86_output_call_insn): Add MPX bnd prefix to branch instructions. (ix86_class_likely_spilled_p): Add bound regs support. (ix86_hard_regno_mode_ok): Likewise. (x86_order_regs_for_local_alloc): Likewise. (ix86_bnd_prefixed_insn_p): New. (ix86_builtins): Add IX86_BUILTIN_BNDMK, IX86_BUILTIN_BNDSTX, IX86_BUILTIN_BNDLDX, IX86_BUILTIN_BNDCL, IX86_BUILTIN_BNDCU, IX86_BUILTIN_BNDRET, IX86_BUILTIN_BNDNARROW, IX86_BUILTIN_BNDINT, IX86_BUILTIN_SIZEOF, IX86_BUILTIN_BNDLOWER, IX86_BUILTIN_BNDUPPER. (builtin_isa): Add leaf_p and nothrow_p fields. (def_builtin): Initialize leaf_p and nothrow_p. (ix86_add_new_builtins): Handle leaf_p and nothrow_p flags. (bdesc_mpx): New. (bdesc_mpx_const): New. (ix86_init_mpx_builtins): New. (ix86_init_builtins): Call ix86_init_mpx_builtins. (ix86_emit_cmove): New. (ix86_emit_move_max): New. (ix86_expand_builtin): Expand IX86_BUILTIN_BNDMK, IX86_BUILTIN_BNDSTX, IX86_BUILTIN_BNDLDX, IX86_BUILTIN_BNDCL, IX86_BUILTIN_BNDCU, IX86_BUILTIN_BNDRET, IX86_BUILTIN_BNDNARROW, IX86_BUILTIN_BNDINT, IX86_BUILTIN_SIZEOF, IX86_BUILTIN_BNDLOWER, IX86_BUILTIN_BNDUPPER. (ix86_function_value_bounds): New. (ix86_builtin_mpx_function): New. (ix86_get_arg_address_for_bt): New. (ix86_load_bounds): New. (ix86_store_bounds): New. (ix86_load_returned_bounds): New. (ix86_store_returned_bounds): New. (ix86_mpx_bound_mode): New. (ix86_make_bounds_constant): New. (ix86_initialize_bounds): (TARGET_LOAD_BOUNDS_FOR_ARG): New. (TARGET_STORE_BOUNDS_FOR_ARG): New. (TARGET_LOAD_RETURNED_BOUNDS): New. (TARGET_STORE_RETURNED_BOUNDS): New. (TARGET_CHKP_BOUND_MODE): New. (TARGET_BUILTIN_CHKP_FUNCTION): New. (TARGET_CHKP_FUNCTION_VALUE_BOUNDS): New. (TARGET_CHKP_MAKE_BOUNDS_CONSTANT): New. (TARGET_CHKP_INITIALIZE_BOUNDS): New. (ix86_option_override_internal): Do not support x32 with MPX. (init_cumulative_args): Init stdarg, bnd_regno, bnds_in_bt and force_bnd_pass. (function_arg_advance_32): Return number of used integer registers. (function_arg_advance_64): Likewise. (function_arg_advance_ms_64): Likewise. (ix86_function_arg_advance): Handle pointer bounds. (ix86_function_arg): Likewise. (ix86_function_value_regno_p): Mark fisrt bounds registers as possible function value. (ix86_function_value_1): Handle pointer bounds type/mode (ix86_return_in_memory): Likewise. (ix86_print_operand): Analyse insn to decide abounf "bnd" prefix. (ix86_expand_call): Generate returned bounds. (ix86_setup_incoming_vararg_bounds): New. (ix86_va_start): Initialize bounds for pointers in va_list. (TARGET_SETUP_INCOMING_VARARG_BOUNDS): New. * config/i386/i386.h (TARGET_MPX): New. (TARGET_MPX_P): New. (FIRST_PSEUDO_REGISTER): Fix to new value. (FIXED_REGISTERS): Add bound registers. (CALL_USED_REGISTERS): Likewise. (REG_ALLOC_ORDER): Likewise. (HARD_REGNO_NREGS): Likewise. (VALID_BND_REG_MODE): New. (FIRST_BND_REG): New. (LAST_BND_REG): New. (reg_class): Add BND_REGS. (REG_CLASS_NAMES): Likewise. (REG_CLASS_CONTENTS): Likewise. (BND_REGNO_P): New. (ANY_BND_REG_P): New. (BNDmode): New. (HI_REGISTER_NAMES): Add bound registers. (ix86_args): Add bnd_regno, bnds_in_bt, force_bnd_pass and stdarg fields. * config/i386/i386.md (UNSPEC_BNDMK): New. (UNSPEC_BNDMK_ADDR): New. (UNSPEC_BNDSTX): New. (UNSPEC_BNDLDX): New. (UNSPEC_BNDLDX_ADDR): New. (UNSPEC_BNDCL): New. (UNSPEC_BNDCU): New. (UNSPEC_BNDCN): New. (UNSPEC_MPX_FENCE): New. (UNSPEC_SIZEOF): New. (BND0_REG): New. (BND1_REG): New. (type): Add mpxmov, mpxmk, mpxchk, mpxld, mpxst. (length_immediate): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (prefix_rep): Check for bnd prefix. (prefix_0f): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (length_nobnd): New. (length): Use length_nobnd when specified. (memory): Support mpxmov, mpxmk, mpxchk, mpxld, mpxst. (BND): New. (bnd_ptr): New. (BNDCHECK): New. (bndcheck): New. (*jcc_1): Add MPX bnd prefix. (*jcc_2): Likewise. (jump): Likewise. (*indirect_jump): Likewise. (*tablejump_1): Likewise. (simple_return_internal): Likewise. (simple_return_internal_long): Likewise. (simple_return_pop_internal): Likewise. (simple_return_indirect_internal): Likewise. (<mode>_mk): New. (*<mode>_mk): New. (mov<mode>): New. (*mov<mode>_internal_mpx): New. (<mode>_<bndcheck>): New. (*<mode>_<bndcheck>): New. (<mode>_ldx): New. (*<mode>_ldx): New. (<mode>_stx): New. (*<mode>_stx): New. move_size_reloc_<mode>): New. * config/i386/predicates.md (address_mpx_no_base_operand): New. (address_mpx_no_index_operand): New. (bnd_mem_operator): New. (symbol_operand): New. (x86_64_immediate_size_operand): New. * config/i386/i386.opt (mmpx): New. * config/i386/i386-builtin-types.def (BND): New. (ULONG): New. (BND_FTYPE_PCVOID_ULONG): New. (VOID_FTYPE_BND_PCVOID): New. (VOID_FTYPE_PCVOID_PCVOID_BND): New. (BND_FTYPE_PCVOID_PCVOID): New. (BND_FTYPE_PCVOID): New. (BND_FTYPE_BND_BND): New. (PVOID_FTYPE_PVOID_PVOID_ULONG): New. (PVOID_FTYPE_PCVOID_BND_ULONG): New. (ULONG_FTYPE_VOID): New. (PVOID_FTYPE_BND): New. gcc/testsuite/ 2014-11-05 Ilya Enkovich <ilya.enkovich@intel.com> * gcc.target/i386/chkp-builtins-1.c: New. * gcc.target/i386/chkp-builtins-2.c: New. * gcc.target/i386/chkp-builtins-3.c: New. * gcc.target/i386/chkp-builtins-4.c: New. * gcc.target/i386/chkp-remove-bndint-1.c: New. * gcc.target/i386/chkp-remove-bndint-2.c: New. * gcc.target/i386/chkp-const-check-1.c: New. * gcc.target/i386/chkp-const-check-2.c: New. * gcc.target/i386/chkp-lifetime-1.c: New. * gcc.dg/pr37858.c: Replace early_local_cleanups pass name with build_ssa_passes. From-SVN: r217125
2014-11-05Reorganize post-ra pipeline for targets without register allocation.Bernd Schmidt4-0/+54
* passes.def (pass_compute_alignments, pass_duplicate_computed_gotos, pass_variable_tracking, pass_free_cfg, pass_machine_reorg, pass_cleanup_barriers, pass_delay_slots, pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges, pass_shorten_branches, pass_est_nothrow_function_flags, pass_dwarf2_frame, pass_final): Move outside of pass_postreload and into pass_late_compilation. (pass_late_compilation): Add. * passes.c (pass_data_late_compilation, pass_late_compilation, make_pass_late_compilation): New. * timevar.def (TV_LATE_COMPILATION): New. From-SVN: r217124
2014-11-05Allow a target to skip an unnecssary register return value for a struct return.Bernd Schmidt5-2/+27
* target.def (omit_struct_return_reg): New data hook. * doc/tm.texi.in: Add @hook TARGET_OMIT_STRUCT_RETURN_REG. * doc/tm.texi: Regenerate. * function.c (expand_function_end): Use it. From-SVN: r217123
2014-11-05Add a no_register_allocation target hook.Bernd Schmidt7-6/+52
* target.def (no_register_allocation): New data hook. * doc/tm.texi.in: Add @hook TARGET_NO_REGISTER_ALLOCATION. * doc/tm.texi: Regenerate. * ira.c (gate_ira): New function. (pass_data_ira): Set has_gate. (pass_ira): Add a gate function. (pass_data_reload): Likewise. (pass_reload): Add a gate function. (pass_ira): Use it. * reload1.c (eliminate_regs): If reg_eliminate_is NULL, assert that no register allocation happens on the target and return. * final.c (alter_subreg): Ensure register is not a pseudo before calling simplify_subreg. (output_operand): Assert that x isn't a pseudo only if doing register allocation. From-SVN: r217122
2014-11-05Don't unnecessarily call eliminate_regs.Bernd Schmidt2-1/+5
* dbxout.c (dbxout_symbol): Don't call eliminate_regs on decls for global vars. From-SVN: r217121
2014-11-05Allow a port not to define an indirect_jump pattern.Bernd Schmidt2-2/+10
* optabs.c (emit_indirect_jump): Test HAVE_indirect_jump and emit a sorry if necessary. From-SVN: r217120
2014-11-05simplify-rtx.c (simplify_binary_operation_1): Div check added.Alex Velenko5-0/+106
2014-11-05 Alex Velenko <Alex.Velenko@arm.com> gcc/ * simplify-rtx.c (simplify_binary_operation_1): Div check added. * rtl.h (SUBREG_P): New macro added. gcc/testsuite/ * gcc.dg/asr-div1.c: New testcase. From-SVN: r217118
2014-11-05[AArch64] Restructure arm_neon.h vector types.Tejas Belagod7-336/+404
2014-11-05 Tejas Belagod <tejas.belagod@arm.com> * config/aarch64/aarch64-builtins.c (aarch64_build_scalar_type): Remove. (aarch64_scalar_builtin_types, aarch64_simd_type, aarch64_simd_type, aarch64_mangle_builtin_scalar_type, aarch64_mangle_builtin_vector_type, aarch64_mangle_builtin_type, aarch64_simd_builtin_std_type, aarch64_lookup_simd_builtin_type, aarch64_simd_builtin_type, aarch64_init_simd_builtin_types, aarch64_init_simd_builtin_scalar_types): New. (aarch64_init_simd_builtins): Refactor. (aarch64_init_crc32_builtins): Fixup with qualifier. * config/aarch64/aarch64-protos.h (aarch64_mangle_builtin_type): Export. * config/aarch64/aarch64-simd-builtin-types.def: New. * config/aarch64/aarch64.c (aarch64_simd_mangle_map): Remove. (aarch64_mangle_type): Refactor. * config/aarch64/arm_neon.h: Declare vector types based on internal types. * config/aarch64/t-aarch64: Update dependency. From-SVN: r217114
2014-11-05* go.test/go-test.exp (go-set-goarch): Enable tests on s390[x].Dominik Vogt2-0/+13
From-SVN: r217112
2014-11-05go-test.exp: In +build lines, require whitespace around expected strings, ↵Ian Lance Taylor1-6/+15
fix check for negation. * go.test/go-test.exp: In +build lines, require whitespace around expected strings, fix check for negation. From-SVN: r217111
2014-11-05Daily bump.GCC Administrator1-1/+1
From-SVN: r217109
2014-11-04rs6000.c (atomic_hold_decl, [...]): Guard declaration with #ifdef.Pat Haugen2-0/+7
* config/rs6000/rs6000.c (atomic_hold_decl, atomic_clear_decl, atomic_update_decl): Guard declaration with #ifdef. From-SVN: r217105
2014-11-04c-common.c (shorten_compare): Do not shorten mixed DFP and non-DFP compares.Richard Biener2-1/+12
2014-11-04 Richard Biener <rguenther@suse.de> * c-common.c (shorten_compare): Do not shorten mixed DFP and non-DFP compares. From-SVN: r217101
2014-11-04* sanopt.c (sanopt_optimize_walker): Remove unused variables.Marek Polacek2-3/+4
From-SVN: r217100
2014-11-04Makefile.in (OBJS): Add sanopt.o.Marek Polacek10-119/+336
* Makefile.in (OBJS): Add sanopt.o. (GTFILES): Add sanopt.c. * asan.h (asan_expand_check_ifn): Declare. * asan.c (asan_expand_check_ifn): No longer static. (class pass_sanopt, pass_sanopt::execute, make_pass_sanopt): Move... * sanopt.c: ...here. New file. testsuite/ * c-c++-common/ubsan/align-2.c: Remove dg-output. * c-c++-common/ubsan/align-4.c: Likewise. * g++.dg/ubsan/null-1.C: Likewise. * g++.dg/ubsan/null-2.C: Likewise. From-SVN: r217099
2014-11-04godump-1.c (dg-skip-if): Add alpha*-*-*.Uros Bizjak2-1/+5
* gcc.misc-tests/godump-1.c (dg-skip-if): Add alpha*-*-*. From-SVN: r217098
2014-11-04devirt-44.C (dg-options): Remove -fdump-tree-optimized.Uros Bizjak10-12/+28
* g++.dg/ipa/devirt-44.C (dg-options): Remove -fdump-tree-optimized. * g++.dg/ipa/devirt-45.C (dg-options): Ditto. * g++.dg/tree-prof/morefunc.C (dg-final-use): Cleanup profile ipa dump. * g++.dg/tree-prof/reorder.C (dg-final-use): Ditto. * g++.dg/tree-prof/pr35545.C (dg-fina-use): Cleanup profile_estimate ipa dump. * gcc.dg/fold-reassoc-3.c (dg-final): Fix scan string. Cleanup original tree dump. * gcc.dg/tree-prof/20050826-2.c (dg-final-use): Cleanup dom1 tree dump. * gcc.dg/tree-prof/cmpsf-1.c (dg-final-use): Ditto. * gcc.dg/tree-ssa/pr61144.c (dg-final): Cleanup optimized tree dump. From-SVN: r217097
2014-11-04compiler: Logical operators should yield untyped bool for untyped operands.Ian Lance Taylor2-12/+3
Fixes issue 6671 for gccgo. From-SVN: r217094
2014-11-04devirt-40.C: Changed dump to not matching OBJ_TYPE_REF in function body.Martin Jambor2-1/+6
gcc/testsuite/ 2014-11-04 Martin Jambor <mjambor@suse.cz> * g++/dg/ipa/devirt-40.C: Changed dump to not matching OBJ_TYPE_REF in function body. From-SVN: r217092
2014-11-04[AArch64] fix unsafe access to deallocated stackJiong Wang2-0/+19
2014-11-04 Jiong Wang <jiong.wang@arm.com> 2014-11-04 Wilco Dijkstra <wilco.dijkstra@arm.com> gcc/ PR target/63293 * config/aarch64/aarch64.c (aarch64_expand_epiloue): Add barriers before stack adjustment. From-SVN: r217091
2014-11-04Fix up mode confusion in combine_simplify_rtx.Bernd Schmidt2-4/+8
The surrounding code was already fixed back when BImode was added. * combine.c (combine_simplify_rtx): In STORE_FLAG_VALUE == -1 case, also verify that mode is equal to the mode of op0. From-SVN: r217089
2014-11-04Make a temporary sequence for a jump emitted only to examine its length.Bernd Schmidt2-4/+8
* bb-reorder.c (get_uncond_jump_length): Avoid using delete_insn, emit into a sequence instead. From-SVN: r217088
2014-11-04Fix type mismatches in intrinsic functions.Bernd Schmidt3-8/+14
* f95-lang.c (gfc_init_builtin_functions): Use type index 2 for scalbn, scalbnl and scalbnf. * mathbuiltins.def (JN, YN): Use type index 5. From-SVN: r217087
2014-11-04g++-dg.exp (g++-dg-runtest): Change -std=c++1y to -std=c++14.Jason Merrill3-3/+8
* lib/g++-dg.exp (g++-dg-runtest): Change -std=c++1y to -std=c++14. * lib/target-supports.exp (check_effective_target_c++14_only): Likewise. From-SVN: r217085
2014-11-04sh.c (emit_fpu_switch): Drop unused automatic variable.Jan-Benedict Glaw2-1/+5
2014-11-04 Jan-Benedict Glaw <jbglaw@lug-owl.de> * config/sh/sh.c (emit_fpu_switch): Drop unused automatic variable. From-SVN: r217082
2014-11-04pr60102.c: Move dg-skip-if after dg-options.Andrew Stubbs228-4/+459
gcc/testsuite/ * gcc.target/powerpc/pr60102.c: Move dg-skip-if after dg-options. * gcc.target/powerpc/swaps-p8-12.c: Skip test if there would be conflicting -mcpu options. * gcc.target/powerpc/ppc-target-2.c: Likewise. * gcc.target/powerpc/cell_builtin-7.c: Likewise. * gcc.target/powerpc/dfp-builtin-1.c: Likewise. * gcc.target/powerpc/p8vector-builtin-1.c: Likewise. * gcc.target/powerpc/ppc-fpconv-7.c: Likewise. * gcc.target/powerpc/p8vector-vectorize-1.c: Likewise. * gcc.target/powerpc/pr48053-3.c: Likewise. * gcc.target/powerpc/vsx-builtin-6.c: Likewise. * gcc.target/powerpc/440-nmaclhw-1.c: Likewise. * gcc.target/powerpc/pr57744.c: Likewise. * gcc.target/powerpc/pr47862.c: Likewise. * gcc.target/powerpc/vsx-vectorize-8.c: Likewise. * gcc.target/powerpc/recip-1.c: Likewise. * gcc.target/powerpc/darwin-longlong.c: Likewise. * gcc.target/powerpc/bool2-p8.c: Likewise. * gcc.target/powerpc/mmfpgpr.c: Likewise. * gcc.target/powerpc/pr60203.c: Likewise. * gcc.target/powerpc/direct-move-vint1.c: Likewise. * gcc.target/powerpc/bool2-av.c: Likewise. * gcc.target/powerpc/pr43154.c: Likewise. * gcc.target/powerpc/ppc-fma-2.c: Likewise. * gcc.target/powerpc/swaps-p8-5.c: Likewise. * gcc.target/powerpc/pr59054.c: Likewise. * gcc.target/powerpc/ppc-fpconv-11.c: Likewise. * gcc.target/powerpc/440-mullhwu-1.c: Likewise. * gcc.target/powerpc/swaps-p8-13.c: Likewise. * gcc.target/powerpc/ppc-target-3.c: Likewise. * gcc.target/powerpc/cell_builtin-8.c: Likewise. * gcc.target/powerpc/dfp-builtin-2.c: Likewise. * gcc.target/powerpc/p8vector-builtin-2.c: Likewise. * gcc.target/powerpc/ppc-fpconv-8.c: Likewise. * gcc.target/powerpc/p8vector-vectorize-2.c: Likewise. * gcc.target/powerpc/p8vector-vbpermq.c: Likewise. * gcc.target/powerpc/vsx-vectorize-1.c: Likewise. * gcc.target/powerpc/bswap64-3.c: Likewise. * gcc.target/powerpc/bcd-1.c: Likewise. * gcc.target/powerpc/440-mulchwu-1.c: Likewise. * gcc.target/powerpc/extend-divide-1.c: Likewise. * gcc.target/powerpc/vsx-builtin-7.c: Likewise. * gcc.target/powerpc/pr48192.c: Likewise. * gcc.target/powerpc/pr52775.c: Likewise. * gcc.target/powerpc/p8vector-int128-1.c: Likewise. * gcc.target/powerpc/pr58673-1.c: Likewise. * gcc.target/powerpc/pr53487.c: Likewise. * gcc.target/powerpc/440-nmaclhw-2.c: Likewise. * gcc.target/powerpc/recip-2.c: Likewise. * gcc.target/powerpc/p8vector-fp.c: Likewise. * gcc.target/powerpc/direct-move-vint2.c: Likewise. * gcc.target/powerpc/ppc-fma-3.c: Likewise. * gcc.target/powerpc/pr57150.c: Likewise. * gcc.target/powerpc/pr47251.c: Likewise. * gcc.target/powerpc/swaps-p8-6.c: Likewise. * gcc.target/powerpc/440-mullhwu-2.c: Likewise. * gcc.target/powerpc/bool3-p7.c: Likewise. * gcc.target/powerpc/cell_builtin-1.c: Likewise. * gcc.target/powerpc/swaps-p8-14.c: Likewise. * gcc.target/powerpc/ppc-target-4.c: Likewise. * gcc.target/powerpc/440-mulhhw-1.c: Likewise. * gcc.target/powerpc/ppc-fpconv-1.c: Likewise. * gcc.target/powerpc/440-machhw-1.c: Likewise. * gcc.target/powerpc/p8vector-builtin-3.c: Likewise. * gcc.target/powerpc/vsx-mass-1.c: Likewise. * gcc.target/powerpc/ppc-fpconv-9.c: Likewise. * gcc.target/powerpc/p8vector-vectorize-3.c: Likewise. * gcc.target/powerpc/loop_align.c: Likewise. * gcc.target/powerpc/lhs-1.c: Likewise. * gcc.target/powerpc/sd-vsx.c: Likewise. * gcc.target/powerpc/vsx-vectorize-2.c: Likewise. * gcc.target/powerpc/bcd-2.c: Likewise. * gcc.target/powerpc/20040121-1.c: Likewise. * gcc.target/powerpc/pr52457.c: Likewise. * gcc.target/powerpc/440-mulchwu-2.c: Likewise. * gcc.target/powerpc/extend-divide-2.c: Likewise. * gcc.target/powerpc/vsx-builtin-8.c: Likewise. * gcc.target/powerpc/p8vector-int128-2.c: Likewise. * gcc.target/powerpc/pr58673-2.c: Likewise. * gcc.target/powerpc/atomic-p7.c: Likewise. * gcc.target/powerpc/recip-3.c: Likewise. * gcc.target/powerpc/440-maclhwu-1.c: Likewise. * gcc.target/powerpc/optimize-bswapsi-2.c: Likewise. * gcc.target/powerpc/popcount-1.c: Likewise. * gcc.target/powerpc/altivec-32.c: Likewise. * gcc.target/powerpc/timode_off.c: Likewise. * gcc.target/powerpc/p8vector-ldst.c: Likewise. * gcc.target/powerpc/pack01.c: Likewise. * gcc.target/powerpc/pr55033.c: Likewise. * gcc.target/powerpc/ppc-fma-4.c: Likewise. * gcc.target/powerpc/swaps-p8-7.c: Likewise. * gcc.target/powerpc/ppu-intrinsics.c: Likewise. * gcc.target/powerpc/440-macchwu-1.c: Likewise. * gcc.target/powerpc/440-mulhhwu-1.c: Likewise. * gcc.target/powerpc/440-mulchw-1.c: Likewise. * gcc.target/powerpc/bool3-p8.c: Likewise. * gcc.target/powerpc/cell_builtin-2.c: Likewise. * gcc.target/powerpc/swaps-p8-15.c: Likewise. * gcc.target/powerpc/440-macchw-1.c: Likewise. * gcc.target/powerpc/440-mulhhw-2.c: Likewise. * gcc.target/powerpc/ppc-fpconv-2.c: Likewise. * gcc.target/powerpc/440-machhw-2.c: Likewise. * gcc.target/powerpc/p8vector-builtin-4.c: Likewise. * gcc.target/powerpc/pr46728-16.c: Likewise. * gcc.target/powerpc/vsx-builtin-1.c: Likewise. * gcc.target/powerpc/bool3-av.c: Likewise. * gcc.target/powerpc/p8vector-vectorize-4.c: Likewise. * gcc.target/powerpc/ppc-pow.c: Likewise. * gcc.target/powerpc/lhs-2.c: Likewise. * gcc.target/powerpc/pr39902-2.c: Likewise. * gcc.target/powerpc/20041111-1.c: Likewise. * gcc.target/powerpc/builtins-1.c: Likewise. * gcc.target/powerpc/bcd-3.c: Likewise. * gcc.target/powerpc/vsx-vectorize-3.c: Likewise. * gcc.target/powerpc/pr57949-1.c: Likewise. * gcc.target/powerpc/atomic-p8.c: Likewise. * gcc.target/powerpc/sd-pwr6.c: Likewise. * gcc.target/powerpc/recip-4.c: Likewise. * gcc.target/powerpc/440-maclhwu-2.c: Likewise. * gcc.target/powerpc/warn-2.c: Likewise. * gcc.target/powerpc/parity-1.c: Likewise. * gcc.target/powerpc/popcount-2.c: Likewise. * gcc.target/powerpc/crypto-builtin-1.c: Likewise. * gcc.target/powerpc/ppc-fma-5.c: Likewise. * gcc.target/powerpc/swaps-p8-8.c: Likewise. * gcc.target/powerpc/pr42747.c: Likewise. * gcc.target/powerpc/440-macchwu-2.c: Likewise. * gcc.target/powerpc/440-mulhhwu-2.c: Likewise. * gcc.target/powerpc/dfp-dd-2.c: Likewise. * gcc.target/powerpc/direct-move-float1.c: Likewise. * gcc.target/powerpc/440-mulchw-2.c: Likewise. * gcc.target/powerpc/cell_builtin-3.c: Likewise. * gcc.target/powerpc/swaps-p8-16.c: Likewise. * gcc.target/powerpc/440-macchw-2.c: Likewise. * gcc.target/powerpc/ppc-fpconv-3.c: Likewise. * gcc.target/powerpc/dfp-td-2.c: Likewise. * gcc.target/powerpc/p8vector-builtin-5.c: Likewise. * gcc.target/powerpc/vsx-builtin-2.c: Likewise. * gcc.target/powerpc/p8vector-vectorize-5.c: Likewise. * gcc.target/powerpc/lhs-3.c: Likewise. * gcc.target/powerpc/440-nmachhw-1.c: Likewise. * gcc.target/powerpc/builtins-2.c: Likewise. * gcc.target/powerpc/vsx-vectorize-4.c: Likewise. * gcc.target/powerpc/pr52199.c: Likewise. * gcc.target/powerpc/440-machhwu-1.c: Likewise. * gcc.target/powerpc/pr57949-2.c: Likewise. * gcc.target/powerpc/recip-5.c: Likewise. * gcc.target/powerpc/popcount-3.c: Likewise. * gcc.target/powerpc/vsx-vector-1.c: Likewise. * gcc.target/powerpc/swaps-p8-1.c: Likewise. * gcc.target/powerpc/optimize-bswapdi-2.c: Likewise. * gcc.target/powerpc/ppc-fma-6.c: Likewise. * gcc.target/powerpc/vsx-extract-1.c: Likewise. * gcc.target/powerpc/pr48226.c: Likewise. * gcc.target/powerpc/swaps-p8-9.c: Likewise. * gcc.target/powerpc/pr47755-2.c: Likewise. * gcc.target/powerpc/direct-move-float2.c: Likewise. * gcc.target/powerpc/cell_builtin-4.c: Likewise. * gcc.target/powerpc/direct-move-double1.c: Likewise. * gcc.target/powerpc/swaps-p8-17.c: Likewise. * gcc.target/powerpc/ppc-fpconv-4.c: Likewise. * gcc.target/powerpc/dfp-td-3.c: Likewise. * gcc.target/powerpc/p8vector-builtin-6.c: Likewise. * gcc.target/powerpc/440-nmacchw-1.c: Likewise. * gcc.target/powerpc/vsx-builtin-3.c: Likewise. * gcc.target/powerpc/440-nmachhw-2.c: Likewise. * gcc.target/powerpc/vsx-vectorize-5.c: Likewise. * gcc.target/powerpc/bool2-p5.c: Likewise. * gcc.target/powerpc/440-machhwu-2.c: Likewise. * gcc.target/powerpc/fusion.c: Likewise. * gcc.target/powerpc/recip-6.c: Likewise. * gcc.target/powerpc/altivec-cell-6.c: Likewise. * gcc.target/powerpc/vsx-vector-2.c: Likewise. * gcc.target/powerpc/swaps-p8-2.c: Likewise. * gcc.target/powerpc/optimize-bswapdi-3.c: Likewise. * gcc.target/powerpc/ppc-fma-7.c: Likewise. * gcc.target/powerpc/vsx-extract-2.c: Likewise. * gcc.target/powerpc/direct-move-long1.c: Likewise. * gcc.target/powerpc/dfp-dd.c: Likewise. * gcc.target/powerpc/swaps-p8-10.c: Likewise. * gcc.target/powerpc/cell_builtin-5.c: Likewise. * gcc.target/powerpc/direct-move-double2.c: Likewise. * gcc.target/powerpc/440-mullhw-1.c: Likewise. * gcc.target/powerpc/ppc-fpconv-5.c: Likewise. * gcc.target/powerpc/440-maclhw-1.c: Likewise. * gcc.target/powerpc/dfp-td.c: Likewise. * gcc.target/powerpc/p8vector-builtin-7.c: Likewise. * gcc.target/powerpc/pr48053-1.c: Likewise. * gcc.target/powerpc/440-nmacchw-2.c: Likewise. * gcc.target/powerpc/vsx-builtin-4.c: Likewise. * gcc.target/powerpc/pr60676.c: Likewise. * gcc.target/powerpc/pr48258-1.c: Likewise. * gcc.target/powerpc/vsx-vectorize-6.c: Likewise. * gcc.target/powerpc/pr48857.c: Likewise. * gcc.target/powerpc/quad-atomic.c: Likewise. * gcc.target/powerpc/altivec-cell-7.c: Likewise. * gcc.target/powerpc/atomic_load_store-p8.c: Likewise. * gcc.target/powerpc/vsx-vector-3.c: Likewise. * gcc.target/powerpc/swaps-p8-3.c: Likewise. * gcc.target/powerpc/pr56605.c: Likewise. * gcc.target/powerpc/vsx-extract-3.c: Likewise. * gcc.target/powerpc/pr53199.c: Likewise. * gcc.target/powerpc/direct-move-long2.c: Likewise. * gcc.target/powerpc/swaps-p8-11.c: Likewise. * gcc.target/powerpc/vsx-float0.c: Likewise. * gcc.target/powerpc/ppc-target-1.c: Likewise. * gcc.target/powerpc/altivec-20.c: Likewise. * gcc.target/powerpc/cell_builtin-6.c: Likewise. * gcc.target/powerpc/440-mullhw-2.c: Likewise. * gcc.target/powerpc/darwin-ehreturn-1.c: Likewise. * gcc.target/powerpc/ppc-fpconv-6.c: Likewise. * gcc.target/powerpc/440-maclhw-2.c: Likewise. * gcc.target/powerpc/440-dlmzb-strlen-1.c: Likewise. * gcc.target/powerpc/pr60137.c: Likewise. * gcc.target/powerpc/bswap64-1.c: Likewise. * gcc.target/powerpc/pr48053-2.c: Likewise. * gcc.target/powerpc/vsx-builtin-5.c: Likewise. * gcc.target/powerpc/pr48258-2.c: Likewise. * gcc.target/powerpc/vsx-vectorize-7.c: Likewise. * gcc.target/powerpc/vsx-sfminmax.c: Likewise. * gcc.target/powerpc/bool2-p7.c: Likewise. * gcc.target/powerpc/ppc-round.c: Likewise. * gcc.target/powerpc/altivec-cell-8.c: Likewise. * gcc.target/powerpc/vsx-vector-4.c: Likewise. * gcc.target/powerpc/ppc-fma-1.c: Likewise. * gcc.target/powerpc/swaps-p8-4.c: Likewise. * gcc.target/powerpc/ppc-fpconv-10.c: Likewise. * gcc.target/powerpc/pr47755.c: Likewise. From-SVN: r217081
2014-11-04[ARM] Migrate to new reduc_[us](min|max)_scal_optabAlan Lawrence2-32/+48
config/arm/neon.md (reduc_smin_<mode> *2): Rename to... (reduc_smin_scal_<mode> *2): ...this; extract scalar result. (reduc_smax_<mode> *2): Rename to... (reduc_smax_scal_<mode> *2): ...this; extract scalar result. (reduc_umin_<mode> *2): Rename to... (reduc_umin_scal_<mode> *2): ...this; extract scalar result. (reduc_umax_<mode> *2): Rename to... (reduc_umax_scal_<mode> *2): ...this; extract scalar result. From-SVN: r217080
2014-11-04[ARM] Migrate to new reduc_plus_scal_optabAlan Lawrence2-20/+28
config/arm/neon.md (reduc_plus_*): Rename to... (reduc_plus_scal_*): ...this; reduce to temp and extract scalar result. From-SVN: r217079
2014-11-04[AArch64] Fix predicate and constraint mismatch in logical atomic operationsMichael Collison3-6/+21
2014-11-04 Michael Collison <michael.collison@linaro.org> * config/aarch64/iterators.md (lconst_atomic): New mode attribute to support constraints for CONST_INT in atomic operations. * config/aarch64/atomics.md (atomic_<atomic_optab><mode>): Use lconst_atomic constraint. (atomic_nand<mode>): Likewise. (atomic_fetch_<atomic_optab><mode>): Likewise. (atomic_fetch_nand<mode>): Likewise. (atomic_<atomic_optab>_fetch<mode>): Likewise. (atomic_nand_fetch<mode>): Likewise. From-SVN: r217076
2014-11-04Fix typo in definition of __ARM_FEATURE_IDIVRamana Radhakrishnan1-1/+1
From-SVN: r217073
2014-11-04Fix typo in definition of __ARM_FEATURE_IDIVRamana Radhakrishnan1-0/+5
From-SVN: r217072
2014-11-04ubsan.c (instrument_object_size): Optimize [x & CST] array accesses.Marek Polacek4-0/+108
* ubsan.c (instrument_object_size): Optimize [x & CST] array accesses. testsuite/ * c-c++-common/ubsan/object-size-10.c: New test. From-SVN: r217071
2014-11-04rx.c (rx_handle_func_attribute): Mark unused argument.Jan-Benedict Glaw2-1/+5
2014-11-03 Jan-Benedict Glaw <jbglaw@lug-owl.de> * config/rx/rx.c (rx_handle_func_attribute): Mark unused argument. From-SVN: r217070
2014-11-04revert: ifcvt.c (noce_emit_cmove, [...]): Allow CC mode if HAVE_cbranchcc4.Zhenqiang Chen2-20/+11
2014-11-04 Zhenqiang Chen <zhenqiang.chen@arm.com> Revert: 2014-11-03 Zhenqiang Chen <zhenqiang.chen@arm.com> * ifcvt.c (noce_emit_cmove, noce_get_alt_condition, noce_get_condition): Allow CC mode if HAVE_cbranchcc4. From-SVN: r217062
2014-11-04Daily bump.GCC Administrator1-1/+1
From-SVN: r217061
2014-11-04godump.c (go_format_type): Rewrite RECORD_TYPE nad UNION_TYPE support with ↵Dominik Vogt4-335/+708
-fdump-go-spec. gcc/: * godump.c (go_format_type): Rewrite RECORD_TYPE nad UNION_TYPE support with -fdump-go-spec. Anonymous substructures are now flattened and replaced by their fields (record) or the first named, non-bitfield field (union). gcc/testsuite/: * build-go/gcc/testsuite/gcc/godump-1.out: Update godump tests. From-SVN: r217058
2014-11-03input.c (expand_location_to_spelling_point): Fix typo.Manuel López-Ibáñez2-8/+14
2014-11-04 Manuel López-Ibáñez <manu@gcc.gnu.org> * input.c (expand_location_to_spelling_point): Fix typo. (expansion_point_location_if_in_system_header): Fix comment. From-SVN: r217057
2014-11-03coarray_collectives_14.f90: Fix testcase.Tobias Burnus2-19/+23
2014-11-03 Tobias Burnus <burnus@net-b.de> * gfortran.dg/coarray_collectives_14.f90: Fix testcase. From-SVN: r217053
2014-11-03* config/avr/gen-avr-mmcu-specs.c: Remove unnecessary format specifier.Pitchumani Sivanupandi2-1/+5
From-SVN: r217051
2014-11-03tree-eh.c (operation_could_trap_helper_p): Handle conversions like ordinary ↵Richard Biener3-5/+11
operations. 2014-11-03 Richard Biener <rguenther@suse.de> * tree-eh.c (operation_could_trap_helper_p): Handle conversions like ordinary operations. * gimplify.c (gimplify_conversion): Gimplify CONVERT_EXPR as NOP_EXPR. From-SVN: r217048
2014-11-03Implement TARGET_ATOMIC_ASSIGN_EXPAND_FENV for powerpc*-*-linux* soft-float ↵Joseph Myers7-5/+118
and e500. This patch implements support for TARGET_ATOMIC_ASSIGN_EXPAND_FENV for powerpc*-*-linux* soft-float and e500, provided GCC is configured for glibc 2.19 or later on the target. New functions __atomic_feholdexcept, __atomic_feclearexcept and __atomic_feupdateenv were added (to libc) in that glibc version (for powerpc soft-float / e500 only) in order to support this part of C11. For soft-float, libc functions are needed because the floating-point exception state is in TLS variables in libc that aren't directly accessible outside of glibc. For e500, they are also needed because of the prctl syscalls involved in controlling trapping for exceptions and informing the kernel when certain exception flags have been cleared. The actual implementation in GCC is a straightforward matter of calling those functions. Tested with no regressions for cross to powerpc-linux-gnu (soft-float); the c11-atomic-exec-5.c results go from FAIL to PASS. * configure.ac (TARGET_GLIBC_MAJOR, TARGET_GLIBC_MINOR): Define macros. * configure, config.h.in: Regenerate. * config/rs6000/linux.h [TARGET_GLIBC_MAJOR > 2 || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19)] (RS6000_GLIBC_ATOMIC_FENV): New macro. * config/rs6000/linux64.h [TARGET_GLIBC_MAJOR > 2 || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19)] (RS6000_GLIBC_ATOMIC_FENV): New macro. * config/rs6000/rs6000.c (atomic_hold_decl, atomic_clear_decl) (atomic_update_decl): New static variables. (rs6000_atomic_assign_expand_fenv) [RS6000_GLIBC_ATOMIC_FENV]: Generate calls to __atomic_feholdexcept, __atomic_feclearexcept and __atomic_feupdateenv for soft-float and no-FPRs. From-SVN: r217040
2014-11-03match.pd: Add two abs patterns.Richard Biener4-38/+23
2014-11-03 Richard Biener <rguenther@suse.de> * match.pd: Add two abs patterns. Announce tree_expr_nonnegative_p. Also drop bogus FLOAT_EXPR and FIX_TRUNC_EXPR. * fold-const.c (fold_unary_loc): Remove them here. (tree_unary_nonnegative_warnv_p): Use CASE_CONVERT. * gimple-fold.c (fold_gimple_assign): Remove now obsolete GIMPLE_UNARY_RHS case. (gimple_fold_stmt_to_constant_1): Likewise. (replace_stmt_with_simplification): Fix inverted comparison. From-SVN: r217039
2014-11-03re PR c/52769 (Unspecified designated initializer might not set to zero in ↵Marek Polacek2-0/+29
some cases) PR c/52769 * gcc.dg/pr52769.c: New test. From-SVN: r217036
2014-11-03re PR c++/57820 ([DR 253] NSDMI and const objects)Paolo Carlini3-0/+30
2014-11-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57820 * g++.dg/cpp0x/constexpr-ctor16.C: New. * g++.dg/cpp0x/constexpr-ctor17.C: Likewise. From-SVN: r217035
2014-11-03re PR tree-optimization/60770 (disappearing clobbers)Marc Glisse7-28/+78
2014-11-03 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/60770 gcc/ * tree-into-ssa.c (rewrite_update_stmt): Return whether the statement should be removed. (maybe_register_def): Likewise. Replace clobbers with default definitions. (rewrite_dom_walker::before_dom_children): Remove statement if rewrite_update_stmt says so. * tree-ssa-live.c: Include tree-ssa.h. (set_var_live_on_entry): Do not mark undefined variables as live. (verify_live_on_entry): Do not check undefined variables. * tree-ssa.h (ssa_undefined_value_p): New parameter for the case of partially undefined variables. * tree-ssa.c (ssa_undefined_value_p): Likewise. (execute_update_addresses_taken): Do not drop clobbers. gcc/testsuite/ * gcc.dg/tree-ssa/pr60770-1.c: New file. From-SVN: r217034
2014-11-03re PR tree-optimization/63666 (FAIL: gcc.dg/vect/pr45752.c (internal ↵Marc Glisse2-10/+29
compiler error)) 2014-11-03 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/63666 * fold-const.c: Include "optabs.h". (fold_ternary_loc) <VEC_PERM_EXPR>: Avoid canonicalizing a can_vec_perm_p permutation to one that is not. From-SVN: r217033
2014-11-03x86: extend vect-args testcase to AVX flavorsJan Beulich3-2/+39
gcc/testsuite: 2014-11-03 Jan Beulich <jbeulich@suse.com> * gcc.target/i386/i386.exp: Extend option set to test vect-args.c with to include -mavx, -mavx2, and -mavx512f. * gcc.target/i386/vect-args.c: Add AVX* modes and tests. From-SVN: r217032
2014-11-0320010129-1.c: Compile with -mtune=i686 for ia32 targets only.Uros Bizjak5-5/+12
* gcc.c-torture/execute/20010129-1.c: Compile with -mtune=i686 for ia32 targets only. * g++.dg/ext/attrib42.C: Compile for ia32 targets only. * g++.dg/tree-ssa/pr29902.C: Ditto. * g++.dg/cpp0x/gen-attrs-42.C: Ditto. From-SVN: r217030
2014-11-03ifcvt.c (noce_try_store_flag_mask): Check rtx cost.Zhenqiang Chen4-0/+32
ChangeLog: 2014-11-03 Zhenqiang Chen <zhenqiang.chen@arm.com> * ifcvt.c (noce_try_store_flag_mask): Check rtx cost. testsuite/ChangeLog: 2014-11-03 Zhenqiang Chen <zhenqiang.chen@arm.com> * gcc.target/arm/ifcvt-size-check.c: New test. From-SVN: r217029
2014-11-03[multiple changes]Naveen H.S9-20/+201
2014-10-31 Andrew Pinski <apinski@cavium.com> * config/mips/mips-cpus.def (octeon3): New cpu. * config/mips/mips.c (mips_rtx_cost_data): Add octeon3. (mips_print_operand <case 'T', case 't'>): Fix a bug as the mode of the comparison no longer matches mode of the operands. (mips_issue_rate): Handle PROCESSOR_OCTEON3. * config/mips/mips.h (TARGET_OCTEON): Add Octeon3. (TARGET_OCTEON2): Likewise. (TUNE_OCTEON): Add Octeon3. * config/mips/mips.md (processor): Add octeon3. * config/mips/octeon.md (octeon_fpu): New automaton and cpu_unit. (octeon_arith): Add octeon3. (octeon_condmove): Remove. (octeon_condmove_o1): New reservation. (octeon_condmove_o2): New reservation. (octeon_condmove_o3_int_on_cc): New reservation. (octeon_load_o2): Add octeon3. (octeon_cop_o2): Likewise. (octeon_store): Likewise. (octeon_brj_o2): Likewise. (octeon_imul3_o2): Likewise. (octeon_imul_o2): Likewise. (octeon_mfhilo_o2): Likewise. (octeon_imadd_o2): Likewise. (octeon_idiv_o2_si): Likewise. (octeon_idiv_o2_di): Likewise. (octeon_fpu): Add to the automaton. (octeon_fpu): New cpu unit. (octeon_condmove_o2): Check for non floating point modes. (octeon_load_o2): Add prefetchx. (octeon_cop_o2): Don't check for octeon3. (octeon3_faddsubcvt): New reservation. (octeon3_fmul): Likewise. (octeon3_fmadd): Likewise. (octeon3_div_sf): Likewise. (octeon3_div_df): Likewise. (octeon3_sqrt_sf): Likewise. (octeon3_sqrt_df): Likewise. (octeon3_rsqrt_sf): Likewise. (octeon3_rsqrt_df): Likewise. (octeon3_fabsnegmov): Likewise. (octeon_fcond): Likewise. (octeon_fcondmov): Likewise. (octeon_fpmtc1): Likewise. (octeon_fpmfc1): Likewise. (octeon_fpload): Likewise. (octeon_fpstore): Likewise. * config/mips/mips-tables.opt: Regenerate. * doc/invoke.texi (-march=@var{arch}): Add octeon3. 2014-10-31 Naveen H.S <Naveen.Hurugalawadi@caviumnetworks.com> * gcc.target/mips/octeon3-pipe-1.c: New test. From-SVN: r217028