From: Vladimir Makarov Date: Thu, 12 Dec 2019 20:46:39 +0000 (+0000) Subject: Merged latest trunk changes to ira-select. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fdevel%2Fira-select;p=thirdparty%2Fgcc.git Merged latest trunk changes to ira-select. From-SVN: r279316 --- 3a8c69ecd95f708f5d489d92ff12dfbe2a93b00b diff --cc gcc/ChangeLog index c6f7c0936e8b,6ed7abaa3432..05afcea32364 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@@ -1,5344 -1,10610 +1,10628 @@@ +2018-07-18 Vladimir Makarov + + Merge with trunk. + * common.opt (fira-select): New. Choose the selection algorithm + by default. + * ira-costs.c (struct op_info, op_infos, insn_selection): New. + (insn_selections): New. + (CONST_POOL_OK_P, SMALL_REGISTER_CLASS_P, general_constant_p): + New. + (insn_constraints, setup_insn_alt): New. + (record_address_regs): Forward declaration. + (define_op_cost_from_alt): New. + (scan_one_insn): Call setup_insn_alt and define_op_cost_from_alt + for the selection algorithm. + (find_costs_and_classes): Release insn_constraints and + insn_selections. Don't reuse already calculated pseudo classes + for the selection algorithm. + - 2018-07-18 Richard Biener + 2019-11-22 Jakub Jelinek - PR tree-optimization/86557 - * tree-vect-patterns.c (vect_recog_divmod_pattern): Also handle - EXACT_DIV_EXPR. + PR c++/92458 + * tree-hash-traits.h (tree_decl_hash, tree_ssa_name_hash, + tree_hash): Move to ... + * tree.h (tree_decl_hash, tree_ssa_name_hash, tree_hash): ... here. + (struct decl_tree_cache_traits, struct type_tree_cache_traits): New + types. + (decl_tree_cache_map, tree_tree_cache_map): New typedefs. + + PR tree-optimization/92618 + * tree-ssa-reassoc.c (v_info): Change from auto_vec to a struct + containing the auto_vec and a tree. + (undistribute_bitref_for_vector): Handle the case when element type + of vec is not the same as type of the BIT_FIELD_REF. Formatting + fixes. + + 2019-11-22 Martin Sebor + + PR middle-end/83859 + * attribs.h (struct attr_access): New. + * attribs.c (decl_attributes): Add an informational note. + * builtins.c (check_access): Make extern. Consistently set no-warning + after issuing a warning. Handle calls through function pointers. Set + no-warning. + * builtins.h (check_access): Declare. + * calls.c (rdwr_access_hash): New type. + (rdwr_map): Same. + (init_attr_rdwr_indices): New function. + (maybe_warn_rdwr_sizes): Same. + (initialize_argument_information): Call init_attr_rdwr_indices. + Call maybe_warn_rdwr_sizes. + (get_size_range): Avoid null argument. + * doc/extend.texi (attribute access): Document new attribute. + + 2019-11-22 Andrew Stubbs + + * config/gcn/gcn.c (OMP_LDS_SIZE): Define. + (ACC_LDS_SIZE): Define. + (OTHER_LDS_SIZE): Define. + (LDS_SIZE): Redefine using above. + (gcn_expand_prologue): Initialize m0 with LDS_SIZE-1. + + 2019-11-22 Martin Sebor + + PR middle-end/88226 + * builtins.c (check_nul_terminated_array): New function. + (fold_builtin_0): Remove declaration. + (fold_builtin_1): Same. + (fold_builtin_2): Same. + (fold_builtin_3): Same. + (fold_builtin_strpbrk): Add argument. + (fold_builtin_strspn): Same. + (fold_builtin_strcspn): Same. + (expand_builtin_strcat): Call it. Remove unused argument. + (expand_builtin_stpncpy): Same. + (expand_builtin_strncat): Same. + (expand_builtin_strncpy): Same. Adjust indentation. + (expand_builtin_strcmp): Same. + (expand_builtin_strncmp): Same. + (expand_builtin_fork_or_exec): Same. + (expand_builtin): Handle more built-ins. + (fold_builtin_2): Add argument. + (fold_builtin_n): Make static. Add argument. + (fold_call_expr): Pass new argument to fold_builtin_n and fold_builtin_2. + (fold_builtin_call_array): Pass new argument to fold_builtin_n. + (fold_builtin_strpbrk): Add argument. Call check_nul_terminated_array. + (fold_call_stmt): Pass new argument to fold_builtin_n. + * builtins.h: Correct a comment. + * gimple-fold.c (gimple_fold_builtin_strchr): Call + check_nul_terminated_array. + * tree-ssa-strlen.c (handle_builtin_strlen): Call + check_nul_terminated_array. + (handle_builtin_strchr): Same. + (handle_builtin_string_cmp): Same. - 2018-07-18 Ilya Leoshkevich + 2019-11-22 Martin Sebor - * config/s390/s390.c (s390_function_profiler): Generate CFI. + PR tree-optimization/92501 + * gimple-fold.c ((gimple_fold_builtin_string_compare): Let strncmp + handle unterminated arrays. Rename local variables for clarity. - 2018-07-17 Jeff Law + 2019-11-22 Andrew Stubbs - * config/arm/arm.c (get_label_padding): Update for recent - changes to label_to_alignment. + * config/gcn/gcn.c (gcn_hsa_declare_function_name): Calculate + granulated_sgprs according to architecture. - PR tree-optimization/86010 - * tree-ssa-dse.c (compute_trims): Fix typo/thinko. + 2019-11-22 Jan Hubicka - * config/mips/mips.c (vr4130_align_insns): Update for recent - changes to label_to_alignment. + * ggc-page.c (ggc_collect): Call memory_block_pool::trim. + * memory-block.cc (memory_block_pool::clear_free_list): Rename to ... + (memory_block_pool::reduce_free_list): ... this one. + (memory_block_pool::trim): New static function. + * memory-block.h (memory_block_pool::freelist_size): New constant + (memory_block_pool::clear_free_list): Rename to ... + (memory_block_pool::reduce_free_list): ... this one. + (memory_block_pool::trim): Declare. - * config/frv/frv.c (frv_label_align): Update for recent changes - to label_to_alignment. + 2019-11-22 Richard Sandiford - * config/nios2/nios2.c (nios2_label_align): Update for recent - changes which dropped ALIGN_LABELS_LOG. + * tree-vect-stmts.c (vect_model_simple_cost): Take an optional + vect_cost_for_stmt. + (vectorizable_condition): Calculate the cost of EXTRACT_LAST_REDUCTION + here rather than... + * tree-vect-loop.c (vect_model_reduction_cost): ...here. - 2018-07-17 Andreas Schwab + 2019-11-22 Claudiu Zissulescu - * config/m68k/m68k.md (umulsi3_highpart+1, const_umulsi3_highpart) - (smulsi3_highpart+1, const_smulsi3_highpart): Add CC_STATUS_INIT. + * config/arc/arc.md (bic_f): Use cc_set_register predicate. + (bic_cmp0_noout): New pattern. + (bic_cmp0): Likewise. + (neg_scc_insn): Remove pattern. + (not_scc_insn): Likewise. - 2018-07-17 Claudiu Zissulescu + 2019-11-21 Harald van Dijk - * config/arc/arc.c (arc_label_align): Use align_labels instead of - deprecated align_labels_log. + * doc/invoke.texi (-fcommon): Remove claim about ISO C. - 2018-07-17 Richard Biener + 2019-11-21 Joseph Myers - PR lto/86456 - * dwarf2out.c (init_sections_and_labels): Always generate - a debug_line_str_section for early LTO debug. - (dwarf2out_finish): Reset debug_line_str_hash output early. - Bump counter for extra dwarf5 .debug_loc labels to not conflict - with fat LTO part. - (dwarf2out_early_finish): Output debug_line_str. + * gimplify.c (expand_FALLTHROUGH_r, expand_FALLTHROUGH): Use + pedwarn instead of warning_at for fallthrough not preceding a case + or default label. - 2018-07-17 Robin Dapp + 2019-11-22 Prathamesh Kulkarni - * config/s390/s390.c (preferred_la_operand_p): Do not use LA with - index register on z196 or later. + PR tree-optimization/92608 + * tree-ssa-loop-unswitch.c (find_loop_guard): Use safe_dyn_cast instead + of dyn_cast. - 2018-07-17 Robin Dapp + 2019-11-21 Segher Boessenkool - * config/s390/s390.c (s390_default_align): Set default function - alignment to 16. - (s390_override_options_after_change): Call s390_default align. - (s390_option_override_internal): Call s390_default_align. - (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define. + * config/rs6000/predicates.md (extra_insn_branch_comparison_operator): + New predicate. + * config/rs6000/rs6000-protos.h (rs6000_emit_fp_cror): New declaration. + * config/rs6000/rs6000.c (rs6000_generate_compare): Don't do anything + special for FP comparisons that need a cror instruction eventually. + (rs6000_emit_fp_cror): New function. + (rs6000_emit_sCOND): Expand all floating point comparisons to one + instruction, for normal FP modes, with HONOR_NANS. + (rs6000_emit_cbranch): Reformat. + * config/rs6000/rs6000.md (fp_rev): New iterator. + (fp_two): New iterator. + *_cc for fp_rev and GPR: New define_insn_and_split. + *_cc for fp_two and GPR: New define_insn_and_split. + *cbranch_2insn: New define_insn_and_split. + + 2019-11-21 Richard Sandiford + + PR tree-optimization/92526 + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Reject + versioning for alignment if the accesses do not have a consistent + mask, rather than asserting that the masks are consistent. + + 2019-11-21 Richard Sandiford + + PR tree-optimization/92595 + * tree-vect-stmts.c (get_group_load_store_type): Add a VECTOR_MODE_P + check. + (vectorizable_store, vectorizable_load): Likewise. - 2018-07-17 Jakub Jelinek + 2019-11-21 Jan Hubicka - PR middle-end/86542 - * omp-low.c (create_task_copyfn): Copy over also fields corresponding - to _looptemp_ clauses, other than the first two. + * ipa-inline.c (update_callee_keys): Add parameter UPDATE_SINCE. + (resolve_noninline_speculation, inline_small_functions): Avoid + redundant updates. - 2018-07-17 Martin Liska + 2019-11-21 Richard Biener - * opts.c: Do not enable OPT_falign_* for -Os. + * lra.c (lra_insn_recog_data_pool): New. + (free_insn_recog_data): Adjust. + (finish_insn_recog_data): Release lra_insn_recog_data_pool. + (lra_set_insn_recog_data): Allocate from lra_insn_recog_data_pool. - 2018-07-17 Martin Liska + 2019-11-21 Richard Biener - * align.h (MAX_CODE_ALIGN): New. - (MAX_CODE_ALIGN_VALUE): New. - * common/config/i386/i386-common.c (ix86_handle_option): - (MAX_CODE_ALIGN): Moved to align.h. - * final.c (MAX_CODE_ALIGN): Likewise. - * opts.c (parse_and_check_align_values): - (MAX_CODE_ALIGN): Likewise. - (MAX_CODE_ALIGN_VALUE): Likewise. + PR tree-optimization/92596 + * tree-vect-slp.c (vect_build_slp_tree): Fix pasto. - 2018-07-17 Martin Liska + 2019-11-21 Jan Hubicka - * config/i386/att.h (ASM_OUTPUT_ALIGN): Fix spacing - in order to fulfil coding style. - * config/i386/cygming.h (ASM_OUTPUT_ALIGN): Likewise. - * config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_PAD): Likewise. - * config/iq2000/iq2000.h (ASM_OUTPUT_ALIGN): Likewise. - * config/pa/pa.h (ASM_OUTPUT_ALIGN): Likewise. - * config/sparc/sol2.h (ASM_OUTPUT_ALIGN_WITH_NOP): Likewise. - * config/sparc/sparc.h (ASM_OUTPUT_ALIGN): Likewise. - * config/visium/visium.h (ASM_OUTPUT_ALIGN): Likewise. - (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. + * ipa-fnsummary.c (evaluate_conditions_for_known_args): Be + ready for some vectors to not be allocated. + (evaluate_properties_for_edge): Document better; make + known_vals and known_aggs caller allocated; avoid determining + values of parameters which are not used. + (ipa_merge_fn_summary_after_inlining): Pre allocate known_vals and + known_aggs. + * ipa-inline-analysis.c (do_estimate_edge_time): Likewise. + (do_estimate_edge_size): Likewise. + (do_estimate_edge_hints): Likewise. + * ipa-cp.c (ipa_get_indirect_edge_target_1): Do not early exit when + values are not known. + (ipa_release_agg_values): Add option to not release vector itself. + * ipa-prop.h (ipa_release_agg_values): Add parameter RELEASE_VECTOR. + + 2019-11-21 Richard Biener + + * cfgloop.h (loop_iterator::~loop_iterator): Remove. + (loop_iterator::to_visit): Use an auto_vec with internal storage. + (loop_iterator::loop_iterator): Adjust. + * cfganal.c (compute_dominance_frontiers_1): Fold into... + (compute_dominance_frontiers): ... this. Hoist invariant + get_immediate_dominator call. + (compute_idf): Use a work-set instead of a work-list for more + optimal iteration order and duplicate avoidance. + * tree-into-ssa.c (mark_phi_for_rewrite): Avoid re-allocating + the vector all the time, instead pre-allocate the vector only + once. + (delete_update_ssa): Simplify. + * vec.h (va_heap::release): Disable -Wfree-nonheap-object around it. - 2018-07-17 Martin Liska + 2019-11-21 Jakub Jelinek - * align.h: New file. - * config/alpha/alpha.c (alpha_align_insns_1): Use align_functions directly. - * config/i386/i386.c (ix86_avoid_jump_mispredicts): Use new return type - align_flags of label_to_alignment. - * config/m32r/m32r.h (LOOP_ALIGN): Wrap returned values into align_flags - class. - * config/m68k/m68k.c: Do not use removed align_labels_value and - align_loops_value. - * config/nds32/nds32.h (JUMP_ALIGN): Wrap result into align_flags class. - (LOOP_ALIGN): Likewise. - (LABEL_ALIGN): Likewise. - * config/powerpcspe/powerpcspe.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): - Remove not used macro. - (rs6000_loop_align): Change return type to align_flags. - (rs6000_loop_align_max_skip): Remove. - * config/rs6000/rs6000-protos.h (rs6000_loop_align): - Change return type to align_flags. - * config/rs6000/rs6000.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): - Remove not used macro. - (rs6000_loop_align): Change return type to align_flags. - (rs6000_loop_align_max_skip): Remove. - * config/rx/rx.h (JUMP_ALIGN): Wrap integer values - * config/rx/rx-protos.h (rx_align_for_label): Make it - static function. - * config/rx/rx.c (rx_align_for_label): Change return type - to align_flags. - (rx_max_skip_for_label): Remove TARGET_ASM_*_ALIGN_MAX_SKIP - macro definitions. - into align_flags class. - (LABEL_ALIGN): Likewise. - (LOOP_ALIGN): Likewise. - * config/s390/s390.c (s390_label_align): Use align_flags - class member. - (s390_asm_output_function_label): Likewise. - * config/sh/sh.c (sh_override_options_after_change): - Use align_flags class directly without macros. - (find_barrier): Likewise. - (barrier_align): Likewise. - (sh_loop_align): Likewise. - * config/spu/spu.c (spu_option_override): - Use align_flags_tuple::get_value instead of removed macros. - (spu_sched_init): Likewise. - * config/spu/spu.h (GTY): Likewise. - * config/visium/visium.c (visium_option_override): - Set "8" as default secondary alignment. - * config/visium/visium.h (SUBALIGN_LOG): Define to 3 - in order to guarantee secondary alignment of 8. - * coretypes.h: Include align.h header file. - * doc/tm.texi: Remove TARGET_ASM_JUMP_ALIGN_MAX_SKIP, - TARGET_ASM_LOOP_ALIGN_MAX_SKIP, TARGET_ASM_LABEL_ALIGN_MAX_SKIP - and TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP macros. - * doc/tm.texi.in: Likewise. - * final.c (struct label_alignment): Remove not used structure. - (LABEL_ALIGN): Change type to align_flags. - (LOOP_ALIGN): Likewise. - (JUMP_ALIGN): Likewise. - (default_loop_align_max_skip): Remove. - (default_label_align_max_skip): Likewise. - (default_jump_align_max_skip): Likewise. - (default_label_align_after_barrier_max_skip): - (LABEL_TO_ALIGNMENT): Change to access label_align vector. - (LABEL_TO_MAX_SKIP): Remove. - (label_to_alignment): Return align_flags type instead of integer. - (label_to_max_skip): Remove. - (align_fuzz): Use align_flags type. - (compute_alignments): Use align_flags type and use align_flags::max - to combine multiple alignments. - (grow_label_align): Grow vec instead of C array. - (update_alignments): Assign just LABEL_TO_ALIGNMENT. - (shorten_branches): Use align_flags type and use align_flags::max - to combine multiple alignments. - (final_scan_insn_1): Remove usage of secondary alignment that comes - from label alignment, but instead use proper secondary alignment - which is computed in grow_label_align. - * flags.h (struct align_flags_tuple): Move to align.h. - (struct align_flags): Likewise. - (state_align_loops): Rename to align_loops. - (state_align_jumps): Rename to align_jumps. - (state_align_labels): Rename to align_labels. - (state_align_functions): Rename to align_functions. - (align_loops_log): Remove. - (align_jumps_log): Remove. - (align_labels_log): Remove. - (align_functions_log): Remove. - (align_loops_max_skip): Remove. - (align_jumps_max_skip): Remove. - (align_labels_max_skip): Remove. - (align_functions_max_skip): Remove. - (align_loops_value): Remove. - (align_jumps_value): Remove. - (align_labels_value): Remove. - (align_functions_value): Remove. - * output.h (label_to_alignment): Change return type to align_flags. - (label_to_max_skip): Remove. - * target.def: Remove loop_align_max_skip, label_align_max_skip, - jump_align_max_skip macros. - * targhooks.h (default_loop_align_max_skip): Remove. - (default_label_align_max_skip): Likewise. - (default_jump_align_max_skip): Likewise. - (default_label_align_after_barrier_max_skip): Remove. - * toplev.c (read_log_maxskip): Use ::normalize function. - (parse_N_M): Remove not used argument and also call ::normalize. - (parse_alignment_opts): Do not pass unused arguments. - * varasm.c (assemble_start_function): Use directly align_functions - instead of removed macros. - * system.h: Do not poison removed macros. - - 2018-07-17 Jakub Jelinek - - PR middle-end/86539 - * gimplify.c (gimplify_omp_for): Ensure taskloop firstprivatized init - and cond temporaries don't have reference type if iterator has - pointer type. For init use &for_pre_body instead of pre_p if - for_pre_body is non-empty. - - 2018-07-16 Segher Boessenkool - - * config/rs6000/rs6000.md (truncsf2): Expand truncates of - double-double modes to SFmode directly directly. - (truncsf2_fprs): Delete. - - 2018-07-16 Segher Boessenkool - - * config/rs6000/rs6000.c (init_float128_ibm): Use the correct names - for conversions between IFmode and the decimal floating point modes. - (init_float128_ieee): Use the correct names for conversions between - KFmode and the decimal floating point modes. - - 2018-07-16 Segher Boessenkool - - * config/rs6000/rs6000.c (init_float128_ibm): Use more correct names - for the conversions between TDmode and IFmode. - (init_float128_ieee): Use more correct names for the conversions - between TDmode and KFmode. - - 2018-07-16 Jakub Jelinek - - PR tree-optimization/86526 - * builtins.c (expand_builtin_memcmp): Formatting fixes. - (inline_expand_builtin_string_cmp): Likewise. - (inline_string_cmp): Likewise. Use c_readstr instead of - builtin_memcpy_read_str. Add unit_mode temporary. - - 2018-07-16 Bernd Edlinger - - PR middle-end/86528 - * builtins.c (check_access): Bail out if range[0] is no INTEGER_CST. - * expr.c (string_constant): Fix the element size of ARRAY_TYPE. - - 2018-07-16 Kelvin Nilsen - - * doc/extend.texi (PowerPC AltiVec Built-in Functions): - Alphabetize prototypes of built-in functions, separating out - built-in functions that are listed in this section but should be - described elsewhere. - - 2018-07-16 Uros Bizjak - - PR target/86511 - * expmed.c (emit_store_flag): Do not emit setcc followed by a - conditional move when trapping comparison was split to a - non-trapping one (and vice versa). - - 2018-07-16 Ilya Leoshkevich - - * config/s390/s390.c (s390_function_profiler): Generate nops - instead of profiler call sequences. - * config/s390/s390.opt: Add the new option. - - 2018-07-16 Ilya Leoshkevich - - * config/s390/s390.c (s390_function_profiler): Generate - __mcount_loc section. - * config/s390/s390.opt: Add the new option. - - 2018-07-16 Ilya Leoshkevich - - * common.opt: Add the new warning. - * config/s390/s390.c (s390_function_profiler): Emit "brasl - %r0,__fentry__" when -mfentry is specified. - (s390_option_override_internal): Disallow -mfentry for 31-bit - CPUs. - * config/s390/s390.opt: Add the new option. - - 2018-07-16 Richard Biener - - PR lto/86523 - * dwarf2out.c (dwarf2out_register_external_die): Assign DIE parents - for function-local FUNCTION_DECL and RESULT_DECL immediately. - - 2018-07-16 Martin Liska + PR tree-optimization/91355 + * tree-ssa-sink.c (select_best_block): Use >= rather than > + for early_bb scaled count with best_bb count comparison. - PR ipa/86529 - * ipa-pure-const.c (malloc_candidate_p): Revert ::get - to ::get_create. + * ipa-fnsummary.h (enum ipa_hints_vals): Fix comment typo, + preffer -> prefer. + * ipa-inline.c (edge_badness): Likewise. + * lto-streamer.h (class lto_location_cache): Likewise. + * tree-ssa-sink.c (select_best_block): Likewise. Fix comment typos, + gratutious -> gratuitous. - 2017-07-16 Claudiu Zissulescu + 2019-11-21 Richard Biener - * config/arc/arcHS.md: Update ARCHS scheduling rules. + Revert + 2019-09-17 Richard Biener - 2017-07-16 Claudiu Zissulescu + PR tree-optimization/91790 + * tree-vect-stmts.c (vectorizable_load): For BB vectorization + use the correct DR for setting up realignment. - * config/arc/arc-arch.h (arc_tune_attr): Add new tune parameters - for ARCHS4x. - * config/arc/arc-cpus.def (hs4x): New cpu. - (hs4xd): Likewise. - * config/arc/arc-tables.opt: Regenerate. - * config/arc/arc.c (arc_sched_issue_rate): New function. - (TARGET_SCHED_ISSUE_RATE): Define. - (TARGET_SCHED_EXPOSED_PIPELINE): Likewise. - * config/arc/arc.md (attr type): Add fpu_fuse, fpu_sdiv, fpu_ddiv, - fpu_cvt. - (attr tune): Add ARCHS4x tune values. - (attr tune_dspmpy): Define. - (*tst): Correct instruction type. - * config/arc/arcHS.md: Don't use this automaton for ARCHS4x cpus. - * config/arc/arcHS4x.md: New file. - * config/arc/fpu.md: Update instruction type attributes. - * config/arc/t-multilib: Regenerate. + 2019-11-21 Richard Biener - 2018-07-16 Tom de Vries + * tree-ssa-structalias.c (equiv_class_hasher): Change to nofree. + (equiv_class_obstack): New. + (equiv_class_lookup_or_add): Allocate from equiv_class_obstack. + (perform_var_substitution): Initialize equiv_class_obstack. + (free_var_substitution_info): Free equiv_class_obstack. - PR debug/86455 - * var-tracking.c (vt_initialize): Fix pre_dec handling. + 2019-11-20 Jan Hubicka - 2018-07-16 Ramana Radhakrishnan + * ipa-inline.c (want_early_inline_function_p): Do not estimate + edge growth when callee function is very large. + * ipa-inline.h (estimate_min_edge_growth): New. - * config/aarch64/atomics.md (aarch64_store_execlusive): Add - early clobber. + 2019-11-20 Jan Hubicka - 2018-07-16 Eric Botcazou + * ipa-fnsummary.c (ipa_fn_summary::account_size_time): Allow + negative time in calls summary; correct roundoff errors + leading to negative times. + (ipa_merge_fn_summary_after_inlining): Update calls size time table + if present. + (ipa_update_overall_fn_summary): Add RESET parameter. + * ipa-fnsummary.h (ipa_update_overall_fn_summary): Update prototype. + * ipa-inline-transform.c (inline_call): Enable incremental updates. + + 2019-11-20 Richard Sandiford - PR tree-optimization/86514 - * tree-ssa-reassoc.c (init_range_entry) : Return for a - conversion to a boolean type from a type with greater precision. + * tree-vect-slp.c (vect_schedule_slp_instance): Restore stmt + def types for two-operation SLP. - 2018-07-16 Tom de Vries + 2019-11-20 Richard Sandiford - * var-tracking.c (vt_initialize): Print adjusted insn slim if - dump_flags request TDF_SLIM. + PR testsuite/92366 + * doc/sourcebuild.texi (vect_char_add): Document. - 2018-07-16 Aldy Hernandez + 2019-11-20 Alexandre Oliva - * fold-const.c (int_const_binop_1): Abstract... - (wide_int_binop): ...wide int code here. - (poly_int_binop): ...poly int code here. - Abstract the rest of int_const_binop_1 into int_const_binop. - * fold-const.h (wide_int_binop): New. - * tree-vrp.c (vrp_int_const_binop): Call wide_int_binop. - Remove useless PLUS/MINUS_EXPR case. - (zero_nonzero_bits_from_vr): Move wide int code... - (zero_nonzero_bits_from_bounds): ...here. - (extract_range_from_binary_expr_1): Move mask optimization code... - (range_easy_mask_min_max): ...here. - * tree-vrp.h (zero_nonzero_bits_from_bounds): New. - (range_easy_mask_min_max): New. + * function.h (CALLEE_FROM_CGRAPH_P): Remove. + * function.c (record_final_call): Record even calls that might + have been in the cgraph. + * toplev.c (dump_final_node_vcg): Skip iteration over cgraph + callees. - 2018-07-15 Jeff Law + 2019-11-20 Janne Blomqvist - PR target/85993 - * config/sh/sh.c (output_mi_thunk): Remove dead conditional - block. + * configure.ac: Use https for gcc.gnu.org + * configure: Regenerated. + * doc/install.texi: Use https for gcc.gnu.org. + * doc/sourcebuild.texi: Likewise. - 2018-07-14 Jim Wilson + 2019-11-20 Julian Brown - * config/riscv/linux.h (TARGET_ASM_FILE_END): New. + * config/gcn/gcn.c (gcn_asm_output_symbol_ref): Handle null cfun. - 2018-07-14 Paul Koning + 2019-11-20 Jan Hubicka - * config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes. + * ipa-fnsummary.c (ipa_fn_summary::account_size_time): Add CALL + parameter and update call_size_time_table. + (ipa_fn_summary::max_size_time_table_size): New constant. + (estimate_calls_size_and_time_1): Break out from ... + (estimate_calls_size_and_time): ... here; implement summary production. + (summarize_calls_size_and_time): New function. + (ipa_call_context::estimate_size_and_time): Bypass + estimate_calls_size_and_time for leaf functions. + (ipa_update_overall_fn_summary): Likewise. + * ipa-fnsummary.h (call_size_time_table): New. + (ipa_fn_summary::account_size_time): Update prototype. - 2018-07-13 Jan Hubicka + 2019-11-20 Joseph Myers - * lto-streamer-out.c (copy_function_or_variable): Dump info about - copying section. + * doc/invoke.texi (-Wc11-c2x-compat): Document. - 2018-07-13 Bill Schmidt - Steve Munroe + 2019-11-20 Wilco Dijkstra - * config/rs6000/emmintrin.h (_mm_and_si128): New function. - (_mm_andnot_si128): Likewise. - (_mm_or_si128): Likewise. - (_mm_xor_si128): Likewise. + PR85678 + * common.opt (fcommon): Change init to 1. + * doc/invoke.texi (-fcommon): Update documentation. - 2018-07-13 Qing Zhao + 2019-11-20 Jan Hubicka - PR middle-end/78809 - * builtins.c (expand_builtin_memcmp): Inline the calls first - when result_eq is false. - (expand_builtin_strcmp): Inline the calls first. - (expand_builtin_strncmp): Likewise. - (inline_string_cmp): New routine. Expand a string compare - call by using a sequence of char comparison. - (inline_expand_builtin_string_cmp): New routine. Inline expansion - a call to str(n)cmp/memcmp. - * doc/invoke.texi (--param builtin-string-cmp-inline-length): - New option. - * params.def (BUILTIN_STRING_CMP_INLINE_LENGTH): New. + * fibonacci_heap.h (fibonacci_heap::consolidate): Turn auto_vec + to ordinary array. - 2018-07-13 Richard Earnshaw + 2019-11-20 Jan Hubicka - * config/arm/driver-arm.c: Include arm-native.h. - (host_detect_local_cpu): Use auto-generated data tables. - (vendors, arm_cpu_table): Delete. Move part information to ... - * config/arm/arm-cpus.in: ... here. - * config/arm/parsecpu.awk (gen_native): New function. - (vendor, part): New CPU fields. - (END): Add support for building the native CPU detection tables. - * config/arm/t-arm (arm-native.h): Add build rule. - (driver-arm.o): Add dependency on arm-native.h. + * fibonacci_heap.h (fibonacci_heap::fibonacci_heap): + Add allocator parameter. + (fibonacci_heap::~fibonacci_heap): Optimize destruction. + (fibonacci_heap::m_allocator): New. + (fibonacci_heap::m_own_allocator): New. + (fibonacci_heap::insert): Use allocator. + (fibonacci_heap::extract_min): Likewise. + (fibonacci_heap::union_with): Assert that both heaps share + allocator. + (fibonacci_heap::consolidate): Allocate constant sized vector + on stack. + * fibonacci_heap.c: Include alloc-pool + (test_empty_heap): Initialize allocator. + (test_union): Likewise. + * bb-reorder.c: Include alloc-pool.h. + * tracer.c: Inlclude alloc-pool.h. - 2018-07-13 Richard Biener + 2019-11-20 Jan Hubicka - PR middle-end/85974 - * match.pd (addr1 - addr2): Allow either of the operand to - have a conversion. + * lto-streamer-out.c (DFS::sccstack): Turn into auto-vec. + Preallocate for 32 entries. + (DFS::worklist): Likewise. + (DFS::DFS): Do not initialize sccstack and worklist. + (DFS::~DFS): Do not release sccstack. - 2018-07-13 Tom de Vries + 2019-11-20 Segher Boessenkool - * tree-inline.c (remap_ssa_name): Save and reuse debug exprs generated - in remap_ssa_name. + PR target/92573 + * config/rs6000/dfp.md (dfptstsfi__ for DFP_TEST and DDTD): + Handle UNORDERED if !HONOR_NANS. - 2018-07-13 Jackson Woodruff + 2019-11-20 Jan Hubicka - * config/aarch64/aarch64.c (aarch64_operands_adjust_ok_for_ldpstp): Use - arrays instead of numbered variables. + * ipa-inline.c (wrapper_heuristics_may_apply): Break out from ... + (edge_badness): ... here. + (inline_small_functions): Use monotonicity of badness calculation + to avoid redundant updates. - 2018-07-13 Eric Botcazou + 2019-11-20 Richard Biener - * config/sparc/sparc-protos.h (sparc_compute_frame_size): Delete. - * config/sparc/sparc.c (sparc_compute_frame_size): Make static. + * tree-vect-slp.c (vect_analyze_slp_instance): Dump + constructors we are actually analyzing. + (vect_slp_check_for_constructors): Do not vectorize uniform + constuctors, do not dump here. - 2018-07-13 Richard Biener + 2019-11-20 Richard Biener - PR debug/86452 - * dwarf2out.c (gen_type_die_with_usage): Use scope_die_for - instead of get_context_die. + PR tree-optimization/92537 + * tree-vect-slp.c (vect_analyze_slp_instance): Move CTOR + vectorization validity check... + (vect_slp_analyze_operations): ... here. - 2018-07-13 Kugan Vivekanandarajah - Richard Biener + 2019-11-20 Claudiu Zissulescu - PR middle-end/86489 - * tree-ssa-loop-niter.c (number_of_iterations_popcount): Check - that the loop latch destination where phi is defined. + * config/arc/arc-protos.h (make_pass_arc_ifcvt): Declare. + (make_pass_arc_predicate_delay_insns): Likewise. + * config/arc/arc.c (class pass_arc_ifcvt): Reformat text, add gate + method, remove clone. + (class pass_arc_predicate_delay_insns): Likewise. + (arc_init): Remove registering of ARC specific passes. + * config/arc/t-arc (PASSES_EXTRA): Add arc-passes.def. + * config/arc/arc-passes.def: New file. - 2018-07-12 Kito Cheng + 2019-11-20 Jakub Jelinek - * config/riscv/riscv.c (enum riscv_privilege_levels): Add UNKNOWN_MODE. - (riscv_expand_epilogue): Add assertion to check interrupt mode. - (riscv_set_current_function): Extract getting interrupt type to new - function. - (riscv_get_interrupt_type): New function. - (riscv_merge_decl_attributes): New function, checking interrupt type is - same. - (TARGET_MERGE_DECL_ATTRIBUTES): Define. + PR middle-end/90840 + * expmed.c (store_bit_field_1): Handle the case where op0 is not a MEM + and has a mode that doesn't have corresponding integral type. - 2018-07-12 Paul Koning + PR target/90867 + * config/i386/i386-options.c (ix86_valid_target_attribute_tree): Don't + clear opts->x_ix86_isa_flags{,2} here... + (ix86_valid_target_attribute_inner_p): ... but here when seeing + arch=. Also clear opts->x_ix86_isa_flags{,2}_explicit. - * config/pdp11/pdp11.c (pdp11_output_def): Fix typo in .set - directive. + PR c/90898 + * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Remove + assertion. + (insert_clobbers_for_var): Fix a typo in function comment. - 2018-07-12 Paul Koning + 2019-11-20 Jiangning Liu + Jakub Jelinek - * doc/rtl.texi (REG_NONNEG): Remove decrement and branch until - zero reference, add doloop_end instead. - * doc/md.texi (decrement_and_branch_until_zero): Remove. - (Looping patterns): Remove decrement_and_branch_until_zero. Add - detail for doloop_end. + PR middle-end/91195 + * tree-ssa-phiopt.c (cond_store_replacement): Move lhs unsharing + earlier. Set TREE_NO_WARNING on the rhs1 of the artificially added + load. - 2018-07-12 Martin Sebor + 2019-11-20 Georg-Johann Lay - PR c/86453 - * attribs.c (decl_attributes): Reject conflicting attributes before - calling attribute handlers. + Make 0-series device specs work with older versions of avr-gcc. - 2018-07-12 Jan Hubicka + PR target/92545 + * config/avr/specs.h (LINK_SPEC) <%(link_pm_base_address)>: Remove. + * config/avr/gen-avr-mmcu-specs.c (print_mcu) + <*link_pm_base_address>: Don't write spec. + <*link_arch>: Add --defsym=__RODATA_PM_OFFSET__= as needed. - * dumpfile.c (gcc::dump_manager::get_dump_file_name): Add PART - parameter. - (gcc::dump_manager::get_dump_file_name): likewise. - (dump_begin): Likewise. - * dumpfile.h (dump_begin): Update prototype. - (gcc::dump_manager::get_dump_file_name, - gcc::dump_manager::get_dump_file_name): Update prototype. + 2019-11-20 Richard Biener - 2018-07-12 Richard Sandiford + PR c/92088 + * builtins.c (compute_objsize): Deal with VLAs. - * internal-fn.h (vectorizable_internal_fn_p): New function. - * tree-vect-slp.c (compatible_calls_p): Likewise. - (vect_build_slp_tree_1): Remove nops argument. Handle calls - to internal functions. - (vect_build_slp_tree_2): Update call to vect_build_slp_tree_1. + 2019-11-19 Pat Haugen - 2018-07-12 Richard Sandiford + * config/rs6000/rs6000.c (move_to_end_of_ready): New, factored out + from common code. + (power6_sched_reorder2): Factored out from rs6000_sched_reorder2, + call new function. + (power9_sched_reorder2): Call new function. + (rs6000_sched_reorder2): Likewise. - * fold-const.h (inverse_conditions_p): Declare. - * fold-const.c (inverse_conditions_p): New function. - * match.pd: Use inverse_conditions_p. Add folds of view_converts - that test the inverse condition of a conditional internal function. - * internal-fn.h (vectorized_internal_fn_supported_p): Declare. - * internal-fn.c (internal_fn_mask_index): Handle conditional - internal functions. - (vectorized_internal_fn_supported_p): New function. - * tree-if-conv.c: Include internal-fn.h and fold-const.h. - (any_pred_load_store): Replace with... - (need_to_predicate): ...this new variable. - (redundant_ssa_names): New variable. - (ifcvt_can_use_mask_load_store): Move initial checks to... - (ifcvt_can_predicate): ...this new function. Handle tree codes - for which a conditional internal function exists. - (if_convertible_gimple_assign_stmt_p): Use ifcvt_can_predicate - instead of ifcvt_can_use_mask_load_store. Update after variable - name change. - (predicate_load_or_store): New function, split out from - predicate_mem_writes. - (check_redundant_cond_expr): New function. - (value_available_p): Likewise. - (predicate_rhs_code): Likewise. - (predicate_mem_writes): Rename to... - (predicate_statements): ...this. Use predicate_load_or_store - and predicate_rhs_code. - (combine_blocks, tree_if_conversion): Update after above name changes. - (ifcvt_local_dce): Handle redundant_ssa_names. - * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Handle - general conditional functions. - * tree-vect-stmts.c (vectorizable_call): Likewise. - - 2018-07-12 Richard Sandiford - Alan Hayward - David Sherwood - - * internal-fn.h (can_interpret_as_conditional_op_p): Declare. - * internal-fn.c (can_interpret_as_conditional_op_p): New function. - * tree-ssa-math-opts.c (convert_mult_to_fma_1): Handle conditional - plus and minus and convert them into IFN_COND_FMA-based sequences. - (convert_mult_to_fma): Handle conditional plus and minus. - - 2018-07-12 Richard Sandiford - - * doc/md.texi (cond_fma, cond_fms, cond_fnma, cond_fnms): Document. - * optabs.def (cond_fma_optab, cond_fms_optab, cond_fnma_optab) - (cond_fnms_optab): New optabs. - * internal-fn.def (COND_FMA, COND_FMS, COND_FNMA, COND_FNMS): New - internal functions. - (FMA): Use DEF_INTERNAL_FLT_FN rather than DEF_INTERNAL_FLT_FLOATN_FN. - * internal-fn.h (get_conditional_internal_fn): Declare. - (get_unconditional_internal_fn): Likewise. - * internal-fn.c (cond_ternary_direct): New macro. - (expand_cond_ternary_optab_fn): Likewise. - (direct_cond_ternary_optab_supported_p): Likewise. - (FOR_EACH_COND_FN_PAIR): Likewise. - (get_conditional_internal_fn): New function. - (get_unconditional_internal_fn): Likewise. - * gimple-match.h (gimple_match_op::MAX_NUM_OPS): Bump to 5. - (gimple_match_op::gimple_match_op): Add a new overload for 5 - operands. - (gimple_match_op::set_op): Likewise. - (gimple_resimplify5): Declare. - * genmatch.c (decision_tree::gen): Generate simplifications for - 5 operands. - * gimple-match-head.c (gimple_simplify): Define an overload for - 5 operands. Handle calls with 5 arguments in the top-level overload. - (convert_conditional_op): Handle conversions from unconditional - internal functions to conditional ones. - (gimple_resimplify5): New function. - (build_call_internal): Pass a fifth operand. - (maybe_push_res_to_seq): Likewise. - (try_conditional_simplification): Try converting conditional - internal functions to unconditional internal functions. - Handle 3-operand unconditional forms. - * match.pd (UNCOND_TERNARY, COND_TERNARY): Operator lists. - Define ternary equivalents of the current rules for binary conditional - internal functions. - * config/aarch64/aarch64.c (aarch64_preferred_else_value): Handle - ternary operations. - * config/aarch64/iterators.md (UNSPEC_COND_FMLA, UNSPEC_COND_FMLS) - (UNSPEC_COND_FNMLA, UNSPEC_COND_FNMLS): New unspecs. - (optab): Handle them. - (SVE_COND_FP_TERNARY): New int iterator. - (sve_fmla_op, sve_fmad_op): New int attributes. - * config/aarch64/aarch64-sve.md (cond_) - (*cond__2, *cond__any): New SVE_COND_FP_TERNARY patterns. - - 2018-07-12 Richard Sandiford - - * target.def (preferred_else_value): New target hook. - * doc/tm.texi.in (TARGET_PREFERRED_ELSE_VALUE): New hook. - * doc/tm.texi: Regenerate. - * targhooks.h (default_preferred_else_value): Declare. - * targhooks.c (default_preferred_else_value): New function. - * internal-fn.h (conditional_internal_fn_code): Declare. - * internal-fn.c (FOR_EACH_CODE_MAPPING): New macro. - (get_conditional_internal_fn): Use it. - (conditional_internal_fn_code): New function. - * gimple-match.h (gimple_match_cond): New struct. - (gimple_match_op): Add a cond member function. - (gimple_match_op::gimple_match_op): Update all forms to take a - gimple_match_cond. - * genmatch.c (expr::gen_transform): Use the same condition as res_op - for the suboperation, but don't specify a particular else_value. - * tree-ssa-sccvn.c (vn_nary_simplify, vn_reference_lookup_3) - (visit_nary_op, visit_reference_op_load): Pass - gimple_match_cond::UNCOND to the gimple_match_op constructor. - * gimple-match-head.c: Include tree-eh.h - (convert_conditional_op): New function. - (maybe_resimplify_conditional_op): Likewise. - (gimple_resimplify1): Call maybe_resimplify_conditional_op. - (gimple_resimplify2): Likewise. - (gimple_resimplify3): Likewise. - (gimple_resimplify4): Likewise. - (maybe_push_res_to_seq): Return null for conditional operations. - (try_conditional_simplification): New function. - (gimple_simplify): Call it. Pass conditions to the gimple_match_op - constructor. - * match.pd: Fold VEC_COND_EXPRs of an IFN_COND_* call to a new - IFN_COND_* call. - * config/aarch64/aarch64.c (aarch64_preferred_else_value): New - function. - (TARGET_PREFERRED_ELSE_VALUE): Redefine. + 2019-11-18 Jan Hubicka + + * ipa-fnsummary.c (estimate_edge_size_and_time): Drop parameter PROB. + (estimate_calls_size_and_time): Update. + + 2019-11-18 Jan Hubicka + + * ipa-inline.c (inlining_speedup): New function. + (edge_badness): Use it. - 2018-07-12 Jan Hubicka + 2019-11-19 Zoran Jovanovic + Dragan Mladjenovic + + * config/mips/mips-msa.md (msa__, msa__v_): + Mark as not having "likely" version. + * config/mips/mips.md (insn_count): The simd_div instruction with + TARGET_CHECK_ZERO_DIV consists of 3 instructions. + (can_delay): Exclude simd_branch. + (defile_delay *): Add simd_branch instructions. + They have one regular delay slot. + + 2019-11-19 Richard Sandiford + + Revert: + 2019-11-18 Richard Sandiford + + * cse.c (cse_insn): Delete no-op register moves too. + * simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons. + Take a second comparison to control the value for NE. + (mask_to_comparison): Handle unsigned comparisons. + (simplify_logical_relational_operation): Likewise. Update call + to comparison_to_mask. Handle AND if !HONOR_NANs. + (simplify_binary_operation_1): Call the above for AND too. + + 2019-11-19 Martin Liska + + * toplev.c (general_init): Move the call... + (toplev::main): ... here as we need init_options_struct + being called. + + 2019-11-19 Wilco Dijkstra + + PR target/79262 + * config/aarch64/aarch64.c (generic_vector_cost): Adjust + vec_to_scalar_cost. + + 2019-11-19 Wilco Dijkstra + + * config/arm/arm-cpus.in (armv7): Set tune to Cortex-A53. + (armv7-a): Likewise. + (armv7ve): Likewise. + + 2019-11-19 Richard Biener + + PR tree-optimization/92581 + * tree-vect-loop.c (vect_create_epilog_for_reduction): For + condition reduction chains gather all conditions involved + for computing the index reduction vector. + + 2019-11-19 Dennis Zhang + + * config/aarch64/aarch64-builtins.c (enum aarch64_builtins): Add + AARCH64_MEMTAG_BUILTIN_START, AARCH64_MEMTAG_BUILTIN_IRG, + AARCH64_MEMTAG_BUILTIN_GMI, AARCH64_MEMTAG_BUILTIN_SUBP, + AARCH64_MEMTAG_BUILTIN_INC_TAG, AARCH64_MEMTAG_BUILTIN_SET_TAG, + AARCH64_MEMTAG_BUILTIN_GET_TAG, and AARCH64_MEMTAG_BUILTIN_END. + (aarch64_init_memtag_builtins): New. + (AARCH64_INIT_MEMTAG_BUILTINS_DECL): New macro. + (aarch64_general_init_builtins): Call aarch64_init_memtag_builtins. + (aarch64_expand_builtin_memtag): New. + (aarch64_general_expand_builtin): Call aarch64_expand_builtin_memtag. + (AARCH64_BUILTIN_SUBCODE): New macro. + (aarch64_resolve_overloaded_memtag): New. + (aarch64_resolve_overloaded_builtin_general): New. Call + aarch64_resolve_overloaded_memtag to handle overloaded MTE builtins. + * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define + __ARM_FEATURE_MEMORY_TAGGING when enabled. + (aarch64_resolve_overloaded_builtin): Call + aarch64_resolve_overloaded_builtin_general. + * config/aarch64/aarch64-protos.h + (aarch64_resolve_overloaded_builtin_general): New declaration. + * config/aarch64/aarch64.h (AARCH64_ISA_MEMTAG): New macro. + (TARGET_MEMTAG): Likewise. + * config/aarch64/aarch64.md (UNSPEC_GEN_TAG): New unspec. + (UNSPEC_GEN_TAG_RND, and UNSPEC_TAG_SPACE): Likewise. + (irg, gmi, subp, addg, ldg, stg): New instructions. + * config/aarch64/arm_acle.h (__arm_mte_create_random_tag): New macro. + (__arm_mte_exclude_tag, __arm_mte_ptrdiff): Likewise. + (__arm_mte_increment_tag, __arm_mte_set_tag): Likewise. + (__arm_mte_get_tag): Likewise. + * config/aarch64/predicates.md (aarch64_memtag_tag_offset): New. + (aarch64_granule16_uimm6, aarch64_granule16_simm9): New. + * config/arm/types.md (memtag): New. + * doc/invoke.texi (-memtag): Update description. + + 2019-11-19 Richard Henderson + + * config/arm/arm-c.c (arm_cpu_builtins): Use def_or_undef_macro + to define __GCC_ASM_FLAG_OUTPUTS__. + * config/arm/arm.c (thumb1_md_asm_adjust): New function. + (arm_option_params_internal): Swap out targetm.md_asm_adjust + depending on TARGET_THUMB1. + * doc/extend.texi (FlagOutputOperands): Document thumb1 restriction. + + 2019-11-19 Jakub Jelinek + + PR target/92549 + * config/i386/i386.md (peephole2 for *swap): New peephole2. + + PR middle-end/91450 + * internal-fn.c (expand_mul_overflow): For s1 * s2 -> ur, if one + operand is negative and one non-negative, compare the non-negative + one against 0 rather than comparing s1 & s2 against 0. Otherwise, + don't compare (s1 & s2) == 0, but compare separately both s1 == 0 + and s2 == 0, unless one of them is known to be negative. Remove + tem2 variable, use tem where tem2 has been used before. + + 2019-11-19 Eric Botcazou + + * doc/invoke.texi (-gno-internal-reset-location-views): Fix typo. + + 2019-11-19 Jakub Jelinek + + PR tree-optimization/92557 + * omp-low.c (omp_clause_aligned_alignment): Punt if TYPE_MODE is not + vmode rather than asserting it always is. + + 2019-11-19 Richard Biener + + PR tree-optimization/92554 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Look + for the actual condition stmt and deal with sign-changes. + + 2019-11-19 Richard Biener + + PR tree-optimization/92555 + * tree-vect-loop.c (vect_update_vf_for_slp): Also scan PHIs + for non-SLP stmts. + + 2019-11-19 Martin Liska + + PR bootstrap/92540 + * config/riscv/riscv.c (riscv_address_insns): Initialize + addr in order to remove boostrap -Wmaybe-uninitialized + error. + + 2019-11-18 Martin Sebor + + PR tree-optimization/92493 + * gimple-ssa-sprintf.c (get_origin_and_offset): Remove spurious + assignment. + + 2019-11-18 Giuliano Belinassi + + * cfgloop.c (get_loop_body_in_custom_order): New. + * cfgloop.h (get_loop_body_in_custom_order): New prototype. + * tree-loop-distribution.c (class loop_distribution): New. + (bb_top_order_cmp): Remove. + (bb_top_order_cmp_r): New. + (create_rdg_vertices): Move into class loop_distribution. + (stmts_from_loop): Same as above. + (update_for_merge): Same as above. + (partition_merge_into): Same as above. + (get_data_dependence): Same as above. + (data_dep_in_cycle_p): Same as above. + (update_type_for_merge): Same as above. + (build_rdg_partition_for-vertex): Same as above. + (classify_builtin_ldst): Same as above. + (classify_partition): Same as above. + (share_memory_accesses): Same as above. + (rdg_build_partitions): Same as above. + (pg_add_dependence_edges): Same as above. + (build_partition_graph): Same as above. + (merge_dep_scc_partitions): Same as above. + (break_alias_scc_partitions): Same as above. + (finalize_partitions): Same as above. + (distribute_loop): Same as above. + (bb_top_order_init): New method + (bb_top_order_destroy): New method. + (get_bb_top_order_index_size): New method. + (get_bb_top_order_index_index): New method. + (get_bb_top_order_index_index): New method. + (loop_distribution::execute): New method. + (pass_loop_distribution::execute): Instantiate loop_distribution. + + 2019-11-18 Jan Hubicka + + PR ipa/92508 + * ipa-inline.c (inline_small_functions): Add new edges after reseting + caches. + * ipa-inline-analysis.c (do_estimate_edge_time): Fix sanity check. + + 2019-11-18 Richard Sandiford + + * doc/sourcebuild.texi (vect_check_ptrs): Document. + * optabs.def (check_raw_ptrs_optab, check_war_ptrs_optab): New optabs. + * doc/md.texi: Document them. + * internal-fn.def (IFN_CHECK_RAW_PTRS, IFN_CHECK_WAR_PTRS): New + internal functions. + * internal-fn.h (internal_check_ptrs_fn_supported_p): Declare. + * internal-fn.c (check_ptrs_direct): New macro. + (expand_check_ptrs_optab_fn): Likewise. + (direct_check_ptrs_optab_supported_p): Likewise. + (internal_check_ptrs_fn_supported_p): New fuction. + * tree-data-ref.c: Include internal-fn.h. + (create_ifn_alias_checks): New function. + (create_intersect_range_checks): Use it. + * config/aarch64/iterators.md (SVE2_WHILE_PTR): New int iterator. + (optab, cmp_op): Handle it. + (raw_war, unspec): New int attributes. + * config/aarch64/aarch64.md (UNSPEC_WHILERW, UNSPEC_WHILE_WR): New + constants. + * config/aarch64/predicates.md (aarch64_bytes_per_sve_vector_operand): + New predicate. + * config/aarch64/aarch64-sve2.md (check__ptrs): New + expander. + (@aarch64_sve2_while_ptest): New + pattern. - * lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream - DECL_FCONTEXT - (hash_tree): Do not hash DECL_FCONTEXT - * tree-streamer-in.c (lto_input_ts_field_decl_tree_pointers): - Do not stream DECL_FCONTEXT. - * tree-streamer-out.c (write_ts_field_decl_tree_pointers): Likewise. - * tree.c (free_lang_data_in_decl): Free DECL_FCONTEXT. + 2019-11-18 Richard Sandiford + + * tree.c (build_vector_from_ctor): Directly return a zero vector for + empty constructors. + + 2019-11-18 Richard Sandiford + + * cse.c (cse_insn): Delete no-op register moves too. + * simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons. + Take a second comparison to control the value for NE. + (mask_to_comparison): Handle unsigned comparisons. + (simplify_logical_relational_operation): Likewise. Update call + to comparison_to_mask. Handle AND if !HONOR_NANs. + (simplify_binary_operation_1): Call the above for AND too. + + 2019-11-18 Richard Sandiford + + * fold-const.c (native_encode_vector): Turn into a wrapper function, + splitting the main code out into... + (native_encode_vector_part): ...this new function. + (native_decode_vector_tree): New function. + (fold_view_convert_vector_encoding): Likewise. + (fold_view_convert_expr): Use it for converting VECTOR_CSTs + to VECTOR_TYPEs. + + 2019-11-18 Richard Sandiford + + * tree-data-ref.c (create_intersect_range_checks_index): If the + alias pair describes simple WAW and WAR dependencies, just check + whether the first B access overlaps later A accesses. + (create_waw_or_war_checks): New function that performs the same + optimization on addresses. + (create_intersect_range_checks): Call it. + + 2019-11-18 Richard Sandiford + + * lra-constraints.c (valid_address_p): Take the operand and a + constraint as argument. If the operand is a MEM and the constraint + is a memory constraint, check whether the eliminated form of the + MEM already satisfies the constraint. + (process_address_1): Update calls accordingly. + + 2019-11-18 Tom Tromey + + * doc/tm.texi: Rebuild. + * doc/tm.texi.in (Misc): Don't document MODIFY_JNI_METHOD_CALL. + * config/i386/cygming.h (MODIFY_JNI_METHOD_CALL): Don't define. + + 2019-11-18 Richard Biener + + PR tree-optimization/92516 + * tree-vect-slp.c (vect_analyze_slp_instance): Add bst_map + argument, hoist bst_map creation/destruction to ... + (vect_analyze_slp): ... here, forming a true graph with + SLP instances being the entries. + (vect_detect_hybrid_slp_stmts): Remove wrapper. + (vect_detect_hybrid_slp): Use one visited set for all + graph entries. + (vect_slp_analyze_node_operations): Simplify visited/lvisited + to hash-sets of slp_tree. + (vect_slp_analyze_operations): Likewise. + (vect_bb_slp_scalar_cost): Remove wrapper. + (vect_bb_vectorization_profitable_p): Use one visited set for + all graph entries. + (vect_schedule_slp_instance): Elide bst_map use. + (vect_schedule_slp): Likewise. - 2018-07-12 Richard Biener + 2019-11-18 Richard Biener - PR debug/86462 - * dwarf2out.c (gen_block_die): Only output blocks when they have - at least one !DECL_IGNORED_P variable. + * tree-vect-slp.c (vect_analyze_slp_instance): When a CTOR + was vectorized with just external refs fail. - 2018-07-12 Richard Biener + 2019-11-18 Martin Liska - PR target/84829 - * config/gnu-user.h (GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC): - Remove -mieee-fp handling. + PR ipa/92525 + * ipa-icf.c (sem_function::init): Unset m_checker + at the end of the function. - 2018-07-12 Richard Biener + 2019-11-18 Richard Biener - * tree-ssa-sccvn.c (vn_lookup_simplify_result): Remove bogus - left-over from last patch. + PR tree-optimization/92558 + * tree-vect-loop.c (vect_create_epilog_for_reduction): When + reducting the width of a reduction vector def update new_phis. - 2018-07-12 Jakub Jelinek + 2019-11-18 Szabolcs Nagy - PR tree-optimization/86492 - * gimple-ssa-store-merging.c - (imm_store_chain_info::coalesce_immediate_stores): Call - check_no_overlap even for the merge_overlapping case. Formatting fix. + * configure.ac (gcc_cv_target_ldbl128): Set for powerpc*-*-linux-musl* + and s390*-*-linux-musl* targets. + * configure: Regenerate. - 2018-07-12 Richard Biener + 2019-11-18 Szabolcs Nagy - PR middle-end/86479 - * fold-const.c (fold_binary_op_with_conditional_arg): Do not - move possibly trapping operations into the conditional. + * config/s390/linux.h (MUSL_DYNAMIC_LINKER32): Define. + (MUSL_DYNAMIC_LINKER64): Define. - 2018-07-12 Richard Biener + 2019-11-18 Martin Liska - * tree-ssa-sccvn.c (mprts_hook_cnt): Remove. - (vn_lookup_simplify_result): Remove recursion limit applied - here. - (vn_nary_build_or_lookup_1): Adjust. - (try_to_simplify): Likewise. - * gimple-match-head.c (gimple_resimplify1): Instead apply one - here. - (gimple_resimplify2): Likewise. - (gimple_resimplify3): Likewise. - (gimple_resimplify4): Likewise. - - 2018-07-11 Jakub Jelinek - - * config/i386/avx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask): - Use __mmask64 type instead of __mmask8 for __M argument. - * config/i386/avx512fintrin.h (_mm512_mask_xor_epi64, - _mm512_maskz_xor_epi64): Use __mmask8 type instead of __mmask16 for - __U argument. - (_mm512_mask_cmpneq_epi64_mask): Use __mmask8 type instead of - __mmask16 for __M argument. - (_mm512_maskz_insertf32x4, _mm512_maskz_inserti32x4, - _mm512_mask_insertf32x4, _mm512_mask_inserti32x4): Cast last argument - to __mmask16 instead of __mmask8. - * config/i386/avx512vlintrin.h (_mm_mask_add_ps, _mm_maskz_add_ps, - _mm256_mask_add_ps, _mm256_maskz_add_ps, _mm_mask_sub_ps, - _mm_maskz_sub_ps, _mm256_mask_sub_ps, _mm256_maskz_sub_ps, - _mm256_maskz_cvtepi32_ps, _mm_maskz_cvtepi32_ps): Use __mmask8 type - instead of __mmask16 for __U argument. - * config/i386/avx512vlbwintrin.h (_mm_mask_cmp_epi8_mask): Use - __mmask16 instead of __mmask8 for __U argument. - (_mm256_mask_cmp_epi8_mask): Use __mmask32 instead of __mmask16 for - __U argument. - (_mm256_cmp_epi8_mask): Use __mmask32 return type instead of - __mmask16. - (_mm_mask_cmp_epu8_mask): Use __mmask16 instead of __mmask8 for __U - argument. - (_mm256_mask_cmp_epu8_mask): Use __mmask32 instead of __mmask16 for - __U argument. - (_mm256_cmp_epu8_mask): Use __mmask32 return type instead of - __mmask16. - (_mm_mask_cmp_epi16_mask): Cast last argument to __mmask8 instead - of __mmask16. - (_mm256_mask_cvtepi8_epi16): Use __mmask16 instead of __mmask32 for - __U argument. - (_mm_mask_cvtepi8_epi16): Use __mmask8 instead of __mmask32 for - __U argument. - (_mm256_mask_cvtepu8_epi16): Use __mmask16 instead of __mmask32 for - __U argument. - (_mm_mask_cvtepu8_epi16): Use __mmask8 instead of __mmask32 for - __U argument. - (_mm256_mask_cmpneq_epu8_mask, _mm256_mask_cmplt_epu8_mask, - _mm256_mask_cmpge_epu8_mask, _mm256_mask_cmple_epu8_mask): Change - return type as well as __M argument type and all casts from __mmask8 - to __mmask32. - (_mm256_mask_cmpneq_epu16_mask, _mm256_mask_cmplt_epu16_mask, - _mm256_mask_cmpge_epu16_mask, _mm256_mask_cmple_epu16_mask): Change - return type as well as __M argument type and all casts from __mmask8 - to __mmask16. - (_mm256_mask_cmpneq_epi8_mask, _mm256_mask_cmplt_epi8_mask, - _mm256_mask_cmpge_epi8_mask, _mm256_mask_cmple_epi8_mask): Change - return type as well as __M argument type and all casts from __mmask8 - to __mmask32. - (_mm256_mask_cmpneq_epi16_mask, _mm256_mask_cmplt_epi16_mask, - _mm256_mask_cmpge_epi16_mask, _mm256_mask_cmple_epi16_mask): Change - return type as well as __M argument type and all casts from __mmask8 - to __mmask16. - * config/i386/avx512vbmi2vlintrin.h (_mm_mask_shrdi_epi32, - _mm_mask_shldi_epi32): Cast last argument to __mmask8 instead of - __mmask16. - - 2018-07-11 Grazvydas Ignotas - - * config/i386/avx512bwintrin.h: (_mm512_mask_cmp_epi8_mask, - _mm512_mask_cmp_epu8_mask): Use __mmask64 type instead of __mmask32 - for __U argument. - - 2018-07-11 Paul Koning - - * doc/md.texi (define_subst): Document how multiple occurrences of - the same argument in the replacement pattern are handled. - - 2018-07-11 Paul Koning - - * doc/extend.texi (Common Variable Attributes): Move "mode" into - alphabetical order. - (Common Type Attributes): Add "mode" attribute. - - 2018-07-11 Jan Hubicka - - * lto-streamer-out.c (DFS::DFS_write_tree_body): Do not - stream DECL_ORIGINAL_TYPE. - (DFS::DFS_write_tree_body): Drop hack handling local external decls. - (hash_tree): Do not walk DECL_ORIGINAL_TYPE. - * tree-streamer-in.c (lto_input_ts_decl_non_common_tree_pointers): - Do not walk original type. - * tree-streamer-out.c (streamer_write_chain): Drop hack handling - external decls. - (write_ts_decl_non_common_tree_pointers): Do not stream - DECL_ORIGINAL_TYPE - * tree.c (free_lang_data_in_decl): Clear DECL_ORIGINAL_TYPE. - (find_decls_types_r): Do not walk DEC_ORIGINAL_TYPE. - - 2018-07-11 Aldy Hernandez - - * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not jump - thread twice from the same starting edge. - - 2018-07-11 Aldy Hernandez - - * vr-values.c (gimple_stmt_nonzero_p): Abstract common code to... - * gimple.c (gimple_call_nonnull_result_p): ...here... - (gimple_call_nonnull_arg): ...and here. - * gimple.h (gimple_call_nonnull_result_p): New. - (gimple_call_nonnull_arg): New. - - 2018-07-11 Richard Earnshaw - - * config/arm/arm-cpus.in: Move information from fpu field of each - cpu definition to the isa field. - * config/arm/parsecpu.awk (fpu): Delete match rule. - (gen_comm_data): Don't add bits from the CPU's FPU entry. - - 2018-07-11 Richard Biener - - PR debug/86457 - * dwarf2out.c (init_sections_and_labels): Use - output_asm_line_debug_info consistently. - (dwarf2out_early_finish): Likewise. - (dwarf2out_finish): Remove DW_AT_stmt_list from early generated - type units. - - 2018-07-11 Richard Biener - - * tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): - Rework father_bb setting in a way to avoid propagating constants - multiple times on a loop body. - - 2018-07-10 Mark Wielaard - - PR debug/86459 - * dwarf2out.c (output_macinfo_op): Fix dwarf_FORM typo in gcc_assert. - - 2018-07-10 Richard Biener - - * hash-map.h (hash_map::iterator::operator*): Return - references to key and value. - - 2018-07-10 Jakub Jelinek - - PR c++/86443 - * gimplify.c (find_combined_omp_for): Add DATA argument, in addition - to finding the inner OMP_FOR/OMP_SIMD stmt find non-trivial wrappers, - BLOCKs with BLOCK_VARs, OMP_PARALLEL in between, OMP_FOR in between. - (gimplify_omp_for): For composite loops, move outer - OMP_{DISTRIBUTE,TASKLOOP,FOR,PARALLEL} right around innermost - OMP_FOR/OMP_SIMD if there are any non-trivial wrappers. For class - iterators add any needed clauses. Allow OMP_FOR_ORIG_DECLS to contain - TREE_LIST for both the original class iterator and the "last" helper - var. Gimplify OMP_FOR_PRE_BODY before the outermost composite - loop, remember has_decl_expr from outer composite loops for the - innermost OMP_SIMD in TREE_PRIVATE bit on OMP_FOR_INIT. - - 2018-07-09 Martin Sebor - - PR middle-end/77357 - PR middle-end/86428 - * builtins.c (c_strlen): Avoid out-of-bounds warnings when - accessing implicitly initialized array elements. - * expr.c (string_constant): Handle string initializers of - character arrays within aggregates. - * gimple-fold.c (fold_array_ctor_reference): Add argument. - Store element offset. As a special case, handle zero size. - (fold_nonarray_ctor_reference): Same. - (fold_ctor_reference): Add argument. Store subobject offset. - * gimple-fold.h (fold_ctor_reference): Add argument. - - 2018-07-09 Paul Koning - - * config/pdp11/pdp11.c (pdp11_addr_cost): New function. - (pdp11_insn_cost): New function. - (pdp11_md_asm_adjust): New function. - (TARGET_INVALID_WITHIN_DOLOOP): Define. - (pdp11_rtx_costs): Update to match machine better. - (output_addr_const_pdp11): Correct format mismatch warnings. - * config/pdp11/pdp11.h (SLOW_BYTE_ACCESS): Correct definition. - * config/pdp11/pdp11.md: General change to add base_cost and/or - length attributes for use by new pdp11_insn_cost function. - (MIN_BRANCH): Correct definition. - (MIN_SOB): Ditto. - (doloop_end): Use standard pattern name for looping pattern. - (doloop_end_nocc): New. - (movsf): Add another constraint alternative. - (zero_extendqihi2): Add constraint alternatives for not in place - extend. - (zero_extendhisi2): Remove. - (shift patterns): Add CC handling variants. - (bswaphi2): New. - (bswapsi2): New. - (rothi3): New. - (define_peephole2): New peephole to recognize mov that sets CC for - subsequent test. - - 2018-07-09 Rainer Orth - - * config/sparc/sparc.c (sparc_fold_builtin) : Adapt for signature change of wi::neg, - wi::add. - - 2018-07-09 Jakub Jelinek - - PR c/86420 - * real.c (real_nextafter): Return true if result is denormal. - - 2018-07-09 Martin Liska - - * common.opt: Add back wrongly removed attribute. - - 2018-07-09 Richard Biener - - PR debug/86413 - * dwarf2out.c (gen_block_die): For an early generated DIE - always output high/low PC attributes. - - 2018-07-09 Tom de Vries - - * cfgexpand.c (expand_debug_source_expr): Handle VAR_DECL. - * tree-inline.c (remap_ssa_name): Handle default def ssa_name mapping - onto VAR_DECL with abstract origin. - - 2018-07-07 Jim Wilson - - * config/riscv/riscv.c (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): New. - - 2018-07-07 Tom de Vries - - * tree-dfa.c (dump_enumerated_decls): Handle cfun->cfg == NULL. - - 2018-07-07 Aldy Hernandez - - * tree-vrp.c (vrp_int_const_binop): Change overflow type to - overflow_type. - (combine_bound): Use wide-int overflow calculation instead of - rolling our own. - * calls.c (maybe_warn_alloc_args_overflow): Change overflow type to - overflow_type. - * fold-const.c (int_const_binop_2): Same. - (extract_muldiv_1): Same. - (fold_div_compare): Same. - (fold_abs_const): Same. - * match.pd: Same. - * poly-int.h (add): Same. - (sub): Same. - (neg): Same. - (mul): Same. - * predict.c (predict_iv_comparison): Same. - * profile-count.c (slow_safe_scale_64bit): Same. - * simplify-rtx.c (simplify_const_binary_operation): Same. - * tree-chrec.c (tree_fold_binomial): Same. - * tree-data-ref.c (split_constant_offset_1): Same. - * tree-if-conv.c (idx_within_array_bound): Same. - * tree-scalar-evolution.c (iv_can_overflow_p): Same. - * tree-ssa-phiopt.c (minmax_replacement): Same. - * tree-vect-loop.c (is_nonwrapping_integer_induction): Same. - * tree-vect-stmts.c (vect_truncate_gather_scatter_offset): Same. - * vr-values.c (vr_values::adjust_range_with_scev): Same. - * wide-int.cc (wi::add_large): Same. - (wi::mul_internal): Same. - (wi::sub_large): Same. - (wi::divmod_internal): Same. - * wide-int.h: Change overflow type to overflow_type for neg, add, - mul, smul, umul, div_trunc, div_floor, div_ceil, div_round, - mod_trunc, mod_ceil, mod_round, add_large, sub_large, - mul_internal, divmod_internal. - (overflow_type): New enum. - (accumulate_overflow): New. - - 2018-07-06 Kugan Vivekanandarajah - - * tree-ssa-phiopt.c (cond_removal_in_popcount_pattern): New. - (tree_ssa_phiopt_worker): Call cond_removal_in_popcount_pattern. - - 2018-07-06 Kugan Vivekanandarajah - - * tree-ssa-loop-niter.c (number_of_iterations_popcount): If popcount - argument is checked for zero before entering loop, avoid checking again. - - 2018-07-06 Kugan Vivekanandarajah - - * gimplify.h (generic_expr_could_trap_p): Set as global function. - * gimplify.h (generic_expr_could_trap_p): Likwise. - * tree-scalar-evolution.c (expression_expensive_p): Handle COND_EXPR. - - 2018-07-06 Jakub Jelinek - - PR tree-optimization/86401 - * fold-const.c (fold_binary_loc) : Move the - ((A & N) + B) & M -> (A + B) & M etc. optimization into ... - (fold_bit_and_mask): ... here. New helper function for match.pd. - * fold-const.h (fold_bit_and_mask): Declare. - * match.pd (((A & N) + B) & M -> (A + B) & M): New optimization. - - 2018-07-06 Peter Bergner - - PR target/86324 - * target.def (translate_mode_attribute): New hook. - * targhooks.h (default_translate_mode_attribute): Declare. - * targhooks.c (default_translate_mode_attribute): New function. - * doc/tm.texi.in (TARGET_TRANSLATE_MODE_ATTRIBUTE): New hook. - * doc/tm.texi: Regenerate. - * config/rs6000/rs6000.c (TARGET_TRANSLATE_MODE_ATTRIBUTE): Define. - (rs6000_translate_mode_attribute): New function. + * dbgcnt.c (dbg_cnt_set_limit_by_name): Provide error + message for an unknown counter. + (dbg_cnt_process_single_pair): Support 0 as minimum value. + (dbg_cnt_process_opt): Remove unreachable code. - 2018-07-06 Paul Koning + 2019-11-18 Martin Liska - * doc/md.texi (define_split): Document DONE and FAIL. - (define_peephole2): Ditto. + PR ipa/92529 + * ipa-icf-gimple.c (func_checker::compare_gimple_assign): + Compare LHS types of NOP_EXPR. - 2018-07-05 Jeff Law + 2019-11-18 Matthew Malcomson - PR tree-optimization/86010 - * tree-ssa-dse.c (compute_trims): More aggressively trim at - both the head and tail of mem* and str* calls. + * run-rtl-passes.c (run_rtl_passes): Accept and handle empty + "initial_pass_name" argument -- by running "*clean_state" pass. + Also free the "initial_pass_name" when done. - 2018-07-05 Jim Wilson + 2019-11-18 Richard Biener - * config.gcc (riscv*-*-*): When setting xlen, handle riscv-*. + PR rtl-optimization/92462 + * alias.c (find_base_term): Restrict the look through ANDs. + (find_base_value): Likewise. - 2018-07-05 Indu Bhagat + 2019-11-18 Georg-Johann Lay - * config/aarch64/aarch64-simd.md: correct flags text for - MIN_EXPR replacement. + Add support for AVR devices from the 0-series. - 2018-07-05 James Clarke + PR target/92545 + * config/avr/avr-arch.h (avr_mcu_t) : New field. + * config/avr/avr-devices.c (avr_mcu_types): Adjust initializers. + * config/avr/avr-mcus.def (AVR_MCU): Add respective field. + * config/avr/specs.h (LINK_SPEC) <%(link_pm_base_address)>: Add. + * config/avr/gen-avr-mmcu-specs.c (print_mcu) + <*cpp, *cpp_mcu, *cpp_avrlibc, *link_pm_base_address>: Emit code + for spec definitions. + * doc/avr-mmcu.texi: Regenerate. - * configure: Regenerated. + 2019-11-18 Hongtao Liu - 2018-07-05 Carl Love + PR target/92448 + * config/i386/i386-expand.c (ix86_expand_set_or_cpymem): + Replace TARGET_AVX128_OPTIMAL with TARGET_AVX256_SPLIT_REGS. + * config/i386/i386-option.c (ix86_vec_cost): Ditto. + (ix86_reassociation_width): Ditto. + * config/i386/i386-options.c (ix86_option_override_internal): + Replace TARGET_AVX128_OPTIAML with + ix86_tune_features[X86_TUNE_AVX128_OPTIMAL] + * config/i386/i386.h (TARGET_AVX256_SPLIT_REGS): New macro. + (TARGET_AVX128_OPTIMAL): Deleted. + * config/i386/x86-tune.def (X86_TUNE_AVX256_SPLIT_REGS): New + DEF_TUNE. - * config/rs6000/rs6000-c.c: Map ALTIVEC_BUILTIN_VEC_UNPACKH for - float argument to VSX_BUILTIN_DOUBLEH_V4SF. - Map ALTIVEC_BUILTIN_VEC_UNPACKL for float argument to - VSX_BUILTIN_DOUBLEL_V4SF. + 2019-11-16 Segher Boessenkool - 2018-07-05 Martin Sebor + * config/rs6000/rs6000.md (cceq_ior_compare): Rename to... + (@cceq_ior_compare_ for GPR): ... this. Allow GPR instead of + just SI. + (cceq_rev_compare): Rename to... + (@cceq_rev_compare_ for GPR): ... this. Allow GPR instead of + just SI. + (define_split for tf_): Add SImode first argument to + gen_cceq_ior_compare. - PR c++/86400 - * tree-ssa-strlen.c (maybe_set_strlen_range): Use type size rather - than its domain to compute its the upper bound of a char array. + 2019-11-16 Segher Boessenkool - 2018-07-05 Nathan Sidwell + * common/config/powerpcspe: Delete. - Replace NO_IMPLICIT_EXTERN_C with SYSTEM_IMPLICIT_EXTERN_C. - * doc/cpp.texi: Update comment. - * doc/tm.texi: Rebuilt. - * doc/tm.texi.in (NO_IMPLICIT_EXTERN_C): Replace with ... - (SYSTEM_IMPLICIT_EXTERN_C): ... this, opposite sense. - * doc/extend.texi (Backwards Compatibility): Clarify it is system - headers affected by extern "C". - * system.h: Poison NO_IMPLICIT_EXTERN_C. - * config/alpha/alpha.h, config/arm/uclinux-elf.h, - config/bfin/elf.h, config/cris/cris.h, config/darwin.h, - config/dragonfly.h, config/freebsd.h, config/gnu-user.h, - config/i386/cygming.h, config/i386/djgpp.h, config/i386/nto.h, - config/ia64/hpux.h, config/lm32/lm32.h, config/lm32/uclinux-elf.h, - config/lynx.h, config/mips/elf.h, config/mmix/mmix.h, - config/netbsd.h, config/pa/pa-hpux.h, config/powerpcspe/sysv4.h, - config/riscv/elf.h, config/rs6000/sysv4.h, config/rtems.h, - config/s390/tpf.h, config/sh/newlib.h, config/sol2.h, - config/sparc/openbsd64.h, config/sparc/sp-elf.h, - config/sparc/sp64-elf.h, config/spu/spu.h, - config/stormy16/stormy16.h, config/v850/v850.h, - config/visium/visium.h, config/vx-common.h, config/xtensa/elf.h: Don't - define NO_IMPLICIT_EXTERN_C. - * config/rs6000/aix.h: Set SYSTEM_IMPLICIT_EXTERN_C. + 2019-11-16 Richard Sandiford - 2018-07-05 Tamar Christina + * config/aarch64/aarch64-sve.md (aarch64_wrffr): Wrap the FFRT + output in UNSPEC_WRFFR. - PR target/84711 - * config/arm/arm.c (arm_can_change_mode_class): Use GET_MODE_UNIT_SIZE - instead of GET_MODE_SIZE when comparing Units. + 2019-11-16 Richard Sandiford - 2018-07-05 Tamar Christina + * tree-data-ref.c (create_intersect_range_checks_index): Rewrite + the index tests to have the form (unsigned T) (B - A + bias) <= limit. - PR target/84711 - * rtlanal.c (set_noop_p): Constrain on mode change, - include hard-reg-set.h + 2019-11-16 Richard Sandiford - 2018-07-05 Tamar Christina + * tree-data-ref.c (create_intersect_range_checks_index) + (create_intersect_range_checks): Print dump messages. - * config/aarch64/aarch64.c (aarch64_expand_movmem): Fix mode size. + 2019-11-16 Richard Sandiford - 2018-07-05 Jakub Jelinek + * tree-data-ref.c (dump_alias_pair): New function. + (prune_runtime_alias_test_list): Use it to dump each merged alias pair. - Revert - 2018-07-04 Maxim Ostapenko + 2019-11-16 Richard Sandiford - PR sanitizer/84250 - * config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static - libasan. - * gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan. + * tree-data-ref.h (DR_ALIAS_MIXED_STEPS): New flag. + * tree-data-ref.c (prune_runtime_alias_test_list): Set it when + merging data references with different steps. + (create_intersect_range_checks_index): Take a + dr_with_seg_len_pair_t instead of two dr_with_seg_lens. + Bail out if DR_ALIAS_MIXED_STEPS is set. + (create_intersect_range_checks): Take a dr_with_seg_len_pair_t + instead of two dr_with_seg_lens. Update call to + create_intersect_range_checks_index. + (create_runtime_alias_checks): Update call accordingly. - 2018-07-04 Maxim Ostapenko + 2019-11-16 Richard Sandiford + + * tree-data-ref.h (DR_ALIAS_RAW, DR_ALIAS_WAR, DR_ALIAS_WAW) + (DR_ALIAS_ARBITRARY, DR_ALIAS_SWAPPED, DR_ALIAS_UNSWAPPED): New flags. + (dr_with_seg_len_pair_t::sequencing): New enum. + (dr_with_seg_len_pair_t::flags): New member variable. + (dr_with_seg_len_pair_t::dr_with_seg_len_pair_t): Take a sequencing + parameter and initialize the flags member variable. + * tree-loop-distribution.c (compute_alias_check_pairs): Update + call accordingly. + * tree-vect-data-refs.c (vect_prune_runtime_alias_test_list): Likewise. + Ensure the two data references in an alias pair are in statement + order, if there is a defined order. + * tree-data-ref.c (prune_runtime_alias_test_list): Use + DR_ALIAS_SWAPPED and DR_ALIAS_UNSWAPPED to record whether we've + swapped the references in a dr_with_seg_len_pair_t. OR together + the flags when merging two dr_with_seg_len_pair_ts. After merging, + try to restore the original dr_with_seg_len order, updating the + flags if that fails. + + 2019-11-16 Richard Sandiford + + * tree-data-ref.c (prune_runtime_alias_test_list): Delay + swapping the dr_as based on init values until we've decided + whether to merge them. + + 2019-11-16 Richard Sandiford + + * tree-data-ref.c (prune_runtime_alias_test_list): Sort the + two accesses in each dr_with_seg_len_pair_t before trying to + combine separate dr_with_seg_len_pair_ts. + * tree-loop-distribution.c (compute_alias_check_pairs): Don't do + that here. + * tree-vect-data-refs.c (vect_prune_runtime_alias_test_list): Likewise. + + 2019-11-16 Richard Sandiford - PR sanitizer/84250 - * config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static - libasan. - * gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan. + * config/aarch64/aarch64-sve.md + (scatter_store): Extend to... + (scatter_store): ...this. + (mask_scatter_store): Extend to... + (mask_scatter_store): ...this. + (mask_scatter_store): Extend to... + (mask_scatter_store): ...this. + (*mask_scatter_store_xtw_unpacked): New + pattern. + (*mask_scatter_store_sxtw): Extend to... + (*mask_scatter_store_sxtw): ...this. + (*mask_scatter_store_uxtw): Extend to... + (*mask_scatter_store_uxtw): ...this. - 2018-07-04 Eric Botcazou + 2019-11-16 Richard Sandiford - PR middle-end/86380 - * expmed.c (choose_multiplier): Fix incorrect comparison with mask. + * config/aarch64/iterators.md (SVE_2BHSI, SVE_2HSDI, SVE_4BHI) + (SVE_4HSI): New mode iterators. + (ANY_EXTEND2): New code iterator. + * config/aarch64/aarch64-sve.md + (@aarch64_gather_load_): + Extend to... + (@aarch64_gather_load_): + ...this, handling extension to partial modes as well as full modes. + Describe the extension as a predicated rather than unpredicated + extension. + (@aarch64_gather_load_): + Likewise extend to... + (@aarch64_gather_load_): + ...this, making the same adjustments. + (*aarch64_gather_load__sxtw): + Likewise extend to... + (*aarch64_gather_load__sxtw) + ...this, making the same adjustments. + (*aarch64_gather_load__uxtw): + Likewise extend to... + (*aarch64_gather_load__uxtw) + ...this, making the same adjustments. + (*aarch64_gather_load__xtw_unpacked): + New pattern. + (*aarch64_ldff1_gather_sxtw): Canonicalize to a constant + extension predicate. + (@aarch64_ldff1_gather_) + (@aarch64_ldff1_gather_) + (*aarch64_ldff1_gather__uxtw): + Describe the extension as a predicated rather than unpredicated + extension. + (*aarch64_ldff1_gather__sxtw): + Likewise. Canonicalize to a constant extension predicate. + * config/aarch64/aarch64-sve-builtins-base.cc + (svld1_gather_extend_impl::expand): Add an extra predicate for + the extension. + (svldff1_gather_extend_impl::expand): Likewise. - 2018-07-04 Aldy Hernandez + 2019-11-16 Richard Sandiford - * tree-vrp.c (extract_range_from_binary_expr_1): Initialize - neg_*_op* variables. + * config/aarch64/iterators.md (SVE_24, SVE_2, SVE_4): New mode + iterators. + * config/aarch64/aarch64-sve.md + (gather_load): Extend to... + (gather_load): ...this. + (mask_gather_load): Extend to... + (mask_gather_load): ...this. + (mask_gather_load): Extend to... + (mask_gather_load): ...this. + (*mask_gather_load_xtw_unpacked): + New pattern. + (*mask_gather_load_sxtw): Extend to... + (*mask_gather_load_sxtw): ...this. + Allow the nominal extension predicate to be different from the + load predicate. + (*mask_gather_load_uxtw): Extend to... + (*mask_gather_load_uxtw): ...this. - 2018-07-04 Martin Liska + 2019-11-16 Richard Sandiford - * tree-switch-conversion.c: Define - max_ratio_for_speed and max_ratio_for_size constants. + * config/aarch64/aarch64-sve.md + (trunc2): New pattern. + * config/aarch64/aarch64.c (aarch64_integer_truncation_p): New + function. + (aarch64_sve_adjust_stmt_cost): Call it. - 2018-07-04 Denys Vlasenko - Martin Liska + 2019-11-16 Richard Sandiford - PR middle-end/66240 - PR target/45996 - PR c/84100 - * common.opt: Rename align options with 'str_' prefix. - * common/config/i386/i386-common.c (set_malign_value): New + * config/aarch64/aarch64-sve.md + (@aarch64_load_): + (@aarch64_load_) + (@aarch64_load_): + Combine into... + (@aarch64_load_): + ...this new pattern, handling extension to partial modes as well + as full modes. Describe the extension as a predicated rather than + unpredicated extension. + (@aarch64_ldf1_) + (@aarch64_ldf1_) + (@aarch64_ldf1_): + Combine into... + (@aarch64_ldf1_): + ...this new pattern, handling extension to partial modes as well + as full modes. Describe the extension as a predicated rather than + unpredicated extension. + * config/aarch64/aarch64-sve-builtins.cc + (function_expander::use_contiguous_load_insn): Add an extra + predicate for extending loads. + * config/aarch64/aarch64.c (aarch64_extending_load_p): New function. + (aarch64_sve_adjust_stmt_cost): Likewise. + (aarch64_add_stmt_cost): Use aarch64_sve_adjust_stmt_cost to adjust + the cost of SVE vector stmts. + + 2019-11-16 Richard Sandiford + + * config/aarch64/iterators.md (SVE_HSDI): New mode iterator. + (narrower_mask): Handle VNx4HI, VNx2HI and VNx2SI. + * config/aarch64/aarch64-sve.md + (2): New pattern. + (*2): Likewise. + (@aarch64_pred_sxt): Update + comment. Avoid new narrower_mask ambiguity. + (@aarch64_cond_sxt): Likewise. + (*cond_uxt_2): Update comment. + (*cond_uxt_any): Likewise. + + 2019-11-16 Richard Sandiford + + * config/aarch64/aarch64-modes.def: Define partial SVE vector + float modes. + * config/aarch64/aarch64-protos.h (aarch64_sve_pred_mode): New function. - (ix86_handle_option): Use it to set -falign-* options/ - * config/aarch64/aarch64-protos.h (struct tune_params): Change - type from int to string. - * config/aarch64/aarch64.c: Update default values from int - to string. - * config/alpha/alpha.c (alpha_override_options_after_change): - Likewise. - * config/arm/arm.c (arm_override_options_after_change_1): Likewise. - * config/i386/dragonfly.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - * config/i386/freebsd.h (SUBALIGN_LOG): New. - (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - * config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - * config/i386/gnu-user.h (SUBALIGN_LOG): New. - (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - * config/i386/i386.c (struct ptt): Change type from int to - string. - (ix86_default_align): Set default values. - * config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Print - max skip conditionally. - * config/i386/iamcu.h (SUBALIGN_LOG): New. - (ASM_OUTPUT_MAX_SKIP_ALIGN): - * config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN): - * config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - * config/i386/openbsdelf.h (SUBALIGN_LOG): New. - (ASM_OUTPUT_MAX_SKIP_ALIGN) Print max skip conditionally.: - * config/i386/x86-64.h (SUBALIGN_LOG): New. - (ASM_OUTPUT_MAX_SKIP_ALIGN): Print - max skip conditionally. - (ASM_OUTPUT_MAX_SKIP_PAD): Likewise. - * config/ia64/ia64.c (ia64_option_override): Set default values - for alignment options. - * config/m68k/m68k.c: Handle new str_align_* options. - * config/mips/mips.c (mips_set_compression_mode): Change - type of constants. - (mips_option_override): Set default values for options. - * config/powerpcspe/powerpcspe.c (rs6000_option_override_internal): - Likewise. - * config/rs6000/rs6000.c (rs6000_option_override_internal): + * config/aarch64/aarch64.c (aarch64_classify_vector_mode): Handle the + new vector float modes. + (aarch64_sve_container_bits): New function. + (aarch64_sve_pred_mode): Likewise. + (aarch64_get_mask_mode): Use it. + (aarch64_sve_element_int_mode): Handle structure modes and partial + modes. + (aarch64_sve_container_int_mode): New function. + (aarch64_vectorize_related_mode): Return SVE modes when given + SVE modes. Handle partial modes, taking the preferred number + of units from the size of the given mode. + (aarch64_hard_regno_mode_ok): Allow partial modes to be stored + in registers. + (aarch64_expand_sve_ld1rq): Use the mode form of aarch64_sve_pred_mode. + (aarch64_expand_sve_const_vector): Handle partial SVE vectors. + (aarch64_split_sve_subreg_move): Use the mode form of + aarch64_sve_pred_mode. + (aarch64_secondary_reload): Handle partial modes in the same way + as full big-endian vectors. + (aarch64_vector_mode_supported_p): Allow partial SVE vectors. + (aarch64_autovectorize_vector_modes): Try unpacked SVE vectors, + merging with the Advanced SIMD modes. If two modes have the + same size, try the Advanced SIMD mode first. + (aarch64_simd_valid_immediate): Use the container rather than + the element mode for INDEX constants. + (aarch64_simd_vector_alignment): Make the alignment of partial + SVE vector modes the same as their minimum size. + (aarch64_evpc_sel): Use the mode form of aarch64_sve_pred_mode. + * config/aarch64/aarch64-sve.md (mov): Extend to... + (mov): ...this. + (movmisalign): Extend to... + (movmisalign): ...this. + (*aarch64_sve_mov_le): Rename to... + (*aarch64_sve_mov_ldr_str): ...this. + (*aarch64_sve_mov_be): Rename and extend to... + (*aarch64_sve_mov_no_ldr_str): ...this. Handle + partial modes regardless of endianness. + (aarch64_sve_reload_be): Rename to... + (aarch64_sve_reload_mem): ...this and enable for little-endian. + Use aarch64_sve_pred_mode to get the appropriate predicate mode. + (@aarch64_pred_mov): Extend to... + (@aarch64_pred_mov): ...this. + (*aarch64_sve_mov_subreg_be): Extend to... + (*aarch64_sve_mov_subreg_be): ...this. + (@aarch64_sve_reinterpret): Extend to... + (@aarch64_sve_reinterpret): ...this. + (*aarch64_sve_reinterpret): Extend to... + (*aarch64_sve_reinterpret): ...this. + (maskload): Extend to... + (maskload): ...this. + (maskstore): Extend to... + (maskstore): ...this. + (vec_duplicate): Extend to... + (vec_duplicate): ...this. + (*vec_duplicate_reg): Extend to... + (*vec_duplicate_reg): ...this. + (sve_ld1r): Extend to... + (sve_ld1r): ...this. + (vec_series): Extend to... + (vec_series): ...this. + (*vec_series_plus): Extend to... + (*vec_series_plus): ...this. + (@aarch64_pred_sxt): Avoid + new VPRED ambiguity. + (@aarch64_cond_sxt): Likewise. + (add3): Extend to... + (add3): ...this. + * config/aarch64/iterators.md (SVE_ALL, SVE_I): New mode iterators. + (Vetype, Vesize, VEL, Vel, vwcore): Handle partial SVE vector modes. + (VPRED, vpred): Likewise. + (Vctype): New iterator. + (vw): Remove SVE modes. + + 2019-11-16 Richard Sandiford + + * config/aarch64/iterators.md (SVE_PARTIAL): Rename to... + (SVE_PARTIAL_I): ...this. + * config/aarch64/aarch64-sve.md: Apply the above renaming throughout. + + 2019-11-16 Richard Sandiford + + * config/aarch64/iterators.md (SVE_ALL): Rename to... + (SVE_FULL): ...this. + (SVE_I): Rename to... + (SVE_FULL_I): ...this. + (SVE_F): Rename to... + (SVE_FULL_F): ...this. + (SVE_BHSI): Rename to... + (SVE_FULL_BHSI): ...this. + (SVE_HSD): Rename to... + (SVE_FULL_HSD): ...this. + (SVE_HSDI): Rename to... + (SVE_FULL_HSDI): ...this. + (SVE_HSF): Rename to... + (SVE_FULL_HSF): ...this. + (SVE_SD): Rename to... + (SVE_FULL_SD): ...this. + (SVE_SDI): Rename to... + (SVE_FULL_SDI): ...this. + (SVE_SDF): Rename to... + (SVE_FULL_SDF): ...this. + (SVE_S): Rename to... + (SVE_FULL_S): ...this. + (SVE_D): Rename to... + (SVE_FULL_D): ...this. + * config/aarch64/aarch64-sve.md: Apply the above renaming throughout. + * config/aarch64/aarch64-sve2.md: Likewise. + + 2019-11-16 Richard Sandiford + + * config/aarch64/aarch64.opt (--param=aarch64-sve-compare-costs): + New option. + * doc/invoke.texi: Document it. + * config/aarch64/aarch64.c (aarch64_autovectorize_vector_modes): + By default, return VECT_COMPARE_COSTS for SVE. + + 2019-11-16 Richard Sandiford + + * target.h (VECT_COMPARE_COSTS): New constant. + * target.def (autovectorize_vector_modes): Return a bitmask of flags. + * doc/tm.texi: Regenerate. + * targhooks.h (default_autovectorize_vector_modes): Update accordingly. + * targhooks.c (default_autovectorize_vector_modes): Likewise. + * config/aarch64/aarch64.c (aarch64_autovectorize_vector_modes): Likewise. - * config/rx/rx.c (rx_option_override): Likewise. - * config/rx/rx.h (JUMP_ALIGN): Use align_jumps_log. - (LABEL_ALIGN): Use align_labels_log. - (LOOP_ALIGN): Use align_loops_align. - * config/s390/s390.c (s390_asm_output_function_label): Use new - macros. - * config/sh/sh.c (sh_override_options_after_change): - Change type of constants. - * config/spu/spu.c (spu_sched_init): Likewise. - * config/sparc/sparc.c (sparc_option_override): Set default - values for options. - * config/visium/visium.c (visium_option_override): Likewise. - * config/visium/visium.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Do not - emit p2align format with last argument if it's not needed. - * doc/invoke.texi: Document extended format of -falign-*. - * final.c: Use align_labels alignment. - * flags.h (struct target_flag_state): Change type to use - align_flags. - (struct align_flags_tuple): New. - (struct align_flags): Likewise. - (align_loops_log): Redefine macro to use new types. - (align_loops_max_skip): Redefine macro to use new types. - (align_jumps_log): Redefine macro to use new types. - (align_jumps_max_skip): Redefine macro to use new types. - (align_labels_log): Redefine macro to use new types. - (align_labels_max_skip): Redefine macro to use new types. - (align_functions_log): Redefine macro to use new types. - (align_loops): Redefine macro to use new types. - (align_jumps): Redefine macro to use new types. - (align_labels): Redefine macro to use new types. - (align_functions): Redefine macro to use new types. - (align_functions_max_skip): Redefine macro to use new types. - (align_loops_value): New macro. - (align_jumps_value): New macro. - (align_labels_value): New macro. - (align_functions_value): New macro. - * function.c (invoke_set_current_function_hook): Propagate - alignment values from flags to global variables default in - topleev.h. - * ipa-icf.c (sem_function::equals_wpa): Use - cl_optimization_option_eq instead of memcmp. - * lto-streamer.h (cl_optimization_stream_out): Support streaming - of string types. - (cl_optimization_stream_in): Likewise. - * optc-save-gen.awk: Support strings in cl_optimization. - * opth-gen.awk: Likewise. - * opts.c (finish_options): Remove error checking of invalid - value ranges. - (MAX_CODE_ALIGN): Remove. - (MAX_CODE_ALIGN_VALUE): Likewise. - (parse_and_check_align_values): New function. - (check_alignment_argument): Likewise. - (common_handle_option): Use check_alignment_argument. - * opts.h (parse_and_check_align_values): Declare. - * toplev.c (init_alignments): Remove. - (read_log_maxskip): New. - (parse_N_M): Likewise. - (parse_alignment_opts): Likewise. - (backend_init_target): Remove usage of init_alignments. - * toplev.h (parse_alignment_opts): Declare. - * tree-streamer-in.c (streamer_read_tree_bitfields): Add new - argument. - * tree-streamer-out.c (streamer_write_tree_bitfields): Likewise. - * tree.c (cl_option_hasher::equal): New. - * varasm.c: Use new global macros. - - 2018-07-04 Denys Vlasenko - - * config/i386/dragonfly.h: (ASM_OUTPUT_MAX_SKIP_ALIGN): - Use a simpler align directive also if MAXSKIP = ALIGN-1. - * config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Likewise. - * config/i386/freebsd.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Remove "If N - is large, do at least 8 byte alignment" code. Add SUBALIGN_LOG - define. Use a simpler align directive also if MAXSKIP = ALIGN-1. - * config/i386/gnu-user.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/iamcu.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/openbsdelf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - * config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. - - 2018-07-04 Martin Liska - Jonathan Wakely - - * coverage.c: Use correct type. - * doc/invoke.texi: Language correction. - - 2018-07-03 H.J. Lu - - PR target/85620 - * config/i386/i386.c (rest_of_insert_endbranch): Also generate - ENDBRANCH for non-tail call which may return via indirect branch. - * doc/extend.texi: Document indirect_return attribute. - - 2018-07-03 Martin Sebor - - PR tree-optimization/86274 - * gimple-ssa-sprintf.c (fmtresult::type_max_digits): Verify - precondition. - (format_floating): Correct handling of infinities and NaNs. - - 2018-07-03 Martin Sebor - - * print-tree.c (print_real_cst): New function. - (print_node_brief): Call it. - (print_node): Ditto. - - 2018-07-03 Jeff Law - - * config/h8300/h8300.md (logical3_sn, logical3): Merge - into a single pattern. - - * config/h8300/h8300.md (ors code_iterator): New. - (bsetqi_msx, bnotqi_msx patterns and splitters): Consolidate into - a single pattern and single splitter. - (bsethi_msx, bnothi_msx patterns): Consolidate into a single pattern. - (iorqi3_1, xorqi3_1): Likewise. - (iorqi3, xorqi3 expanders): Similarly. - - * config/h8300/h8300.md (movmd_internal_normal): Consolidated with - (movmd_internal) into a single pattern using the P mode iterator. - (movmd splitters): Similarly. - (stpcpy_internal_normal, stpcpy_internal): Similarly for thes patterns. - (movsd splitters): Similarly. - - * config/h8300/h8300.c (h8300_insn_length_from_table): Consolidate - ADDB, ADDW and ADDL into a single ADD attribute which selects the - right table based on the size of the operand. - * config/h8300/h8300.md (length_table): Corresponding changes. All - references to "addb", "addw" and "addl" changed to "add". - (btst patterns): Merge two variants into a single pattern. - (tstqi, tsthi): Likewise. - (addhi3_incdec, addsi3_incdec): Likewise. - (subhi3_h8300hs, subsi3_h8300hs): Likewise. - (mulhi3, mulsi3): Likewise. - (udivhi3, udivsi3): Likewise. - (divhi3, divsi3): Likewise. - (andorqi3, andorhi3, andorsi3): Likewise. - - 2018-07-03 Uros Bizjak - - PR target/85694 - * config/i386/sse.md (uavg3_ceil): New expander. - (_uavg3): Simplify expander. - - 2018-07-03 Richard Sandiford - - PR tree-optimization/85694 - * config/aarch64/iterators.md (HADD, RHADD): New int iterators. - (u): Handle UNSPEC_SHADD, UNSPEC_UHADD, UNSPEC_SRHADD and - UNSPEC_URHADD. - * config/aarch64/aarch64-simd.md (avg3_floor) - (avg3_ceil): New patterns. - - 2018-07-03 David Malcolm - - * gcc.dg/vect/slp-perm-1.c: Remove "note: " prefix from - scan-tree-dump directive. - * gcc.dg/vect/slp-perm-2.c: Likewise. - * gcc.dg/vect/slp-perm-3.c: Likewise. - * gcc.dg/vect/slp-perm-5.c: Likewise. - * gcc.dg/vect/slp-perm-6.c: Likewise. - * gcc.dg/vect/slp-perm-7.c: Likewise. - * gcc.dg/vect/slp-perm-8.c: Likewise. - - 2018-07-03 Marek Polacek - - PR middle-end/86202 - * gimple-fold.c (size_must_be_zero_p): Check the type of the size. - - 2018-07-03 Richard Biener - - PR ipa/86389 - * tree-ssa-structalias.c (find_func_clobbers): Properly - handle indirect calls. - - 2018-07-03 Jeff Law - - * config/h8300/h8300.md (HSI, QHSI, QHSIF): New mode iterators. - (shifts): New code iterator. - (movqi, movhi, movsi, movsf expanders): Consolidate into a single - expander. Fix HImode handling on H8/SX. - (addqi3, addhi3, addsi3 expanders): Consolidate into a single expander. - (subqi3, subhi3, subsi3 expanders): Likewise. - (andqi3, andhi3, andsi3 expanders): Likewise. - (iorqi3, iorhi3, iorsi3 expanders): Likewise. - (xorqi3, xorhi3, xorsi3 expanders): Likewise. - (negqi2, neghi2, negsi2, negsf2 expanders): Likewise. - (one_cmplqi2, one_cmplhi2, one_cmplsi2): Likewise. - (zero_extendqihi2, zero_extendqisi2): Likewise. - (extendqihi2, extendqisi2): Likewise. - (rotlqi3, rotlhi3, rotlsi3): Likewise. - (neghi2_h8300, negsi2_h8300): Likewise for these patterns. - (rotlqi3_1, rotlhi3_1): Likewise. - (logicalhi3_sn, logicalsi3_sn): Likewise. - (logicalhi3, logicalsi3): Likewise. - - 2018-07-03 Richard Sandiford - - * tree-vect-patterns.c (vect_recog_rotate_pattern) - (vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern) - (vect_recog_mixed_size_cond_pattern, adjust_bool_pattern_cast) - (adjust_bool_pattern, vect_recog_bool_pattern): Pass the vector - type to append_pattern_def_seq instead of creating a stmt_vec_info - directly. - (build_mask_conversion): Likewise. Remove vinfo argument. - (vect_add_conversion_to_patterm): Likewise, renaming to... - (vect_add_conversion_to_pattern): ...this. - (vect_recog_mask_conversion_pattern): Update call to - build_mask_conversion. Pass the vector type to - append_pattern_def_seq here too. - (vect_recog_gather_scatter_pattern): Update call to - vect_add_conversion_to_pattern. - - 2018-07-03 Richard Sandiford - - * tree-vect-patterns.c (new_pattern_def_seq): Delete. - (vect_recog_dot_prod_pattern, vect_recog_sad_pattern) - (vect_recog_widen_op_pattern, vect_recog_over_widening_pattern) - (vect_recog_rotate_pattern, vect_synth_mult_by_constant): Don't set - STMT_VINFO_PATTERN_DEF_SEQ to null here. - (vect_recog_pow_pattern, vect_recog_vector_vector_shift_pattern) - (vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern): Use - append_pattern_def_seq instead of new_pattern_def_seq. - (vect_recog_divmod_pattern): Do both of the above. - (vect_pattern_recog_1): Assert that STMT_VINO_PATTERN_DEF_SEQ - is null. - - 2018-07-03 Richard Sandiford - - * tree-vect-patterns.c (vect_recog_dot_prod_pattern): - (vect_recog_sad_pattern, vect_recog_widen_op_pattern) - (vect_recog_widen_mult_pattern, vect_recog_pow_pattern): - (vect_recog_widen_sum_pattern, vect_recog_over_widening_pattern) - (vect_recog_average_pattern, vect_recog_cast_forwprop_pattern) - (vect_recog_widen_shift_pattern, vect_recog_rotate_pattern) - (vect_recog_vector_vector_shift_pattern, vect_synth_mult_by_constant) - (vect_recog_mult_pattern, vect_recog_divmod_pattern) - (vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern) - (vect_recog_mask_conversion_pattern): Replace vec - parameter with a single stmt_vec_info. - (vect_recog_func_ptr): Likewise. - (vect_recog_gather_scatter_pattern): Likewise, folding in... - (vect_try_gather_scatter_pattern): ...this. - (vect_pattern_recog_1): Remove stmts_to_replace and just pass - the stmt_vec_info of the statement to be matched. Don't clear - STMT_VINFO_RELATED_STMT. - (vect_pattern_recog): Update call accordingly. - - 2018-07-03 Richard Sandiford - - PR tree-optimization/85694 - * doc/md.texi (avgM3_floor, uavgM3_floor, avgM3_ceil) - (uavgM3_ceil): Document new optabs. - * doc/sourcebuild.texi (vect_avg_qi): Document new target selector. - * internal-fn.def (IFN_AVG_FLOOR, IFN_AVG_CEIL): New internal - functions. - * optabs.def (savg_floor_optab, uavg_floor_optab, savg_ceil_optab) - (savg_ceil_optab): New optabs. - * tree-vect-patterns.c (vect_recog_average_pattern): New function. - (vect_vect_recog_func_ptrs): Add it. - * tree-vect-stmts.c (vectorizable_call): Get the type of the zero - constant directly from the associated lhs. - - 2018-07-03 Richard Sandiford - - * tree-vect-patterns.c (vect_split_statement): New function. - (vect_convert_input): Use it to try to split an existing cast. - - 2018-07-03 Richard Sandiford - - * poly-int.h (print_hex): New function. - * dumpfile.h (dump_dec, dump_hex): Declare. - * dumpfile.c (dump_dec, dump_hex): New poly_wide_int functions. - * tree-vectorizer.h (_stmt_vec_info): Add min_output_precision, - min_input_precision, operation_precision and operation_sign. - * tree-vect-patterns.c (vect_get_range_info): New function. - (vect_same_loop_or_bb_p, vect_single_imm_use) - (vect_operation_fits_smaller_type): Delete. - (vect_look_through_possible_promotion): Add an optional - single_use_p parameter. - (vect_recog_over_widening_pattern): Rewrite to use new - stmt_vec_info infomration. Handle one operation at a time. - (vect_recog_cast_forwprop_pattern, vect_narrowable_type_p) - (vect_truncatable_operation_p, vect_set_operation_type) - (vect_set_min_input_precision): New functions. - (vect_determine_min_output_precision_1): Likewise. - (vect_determine_min_output_precision): Likewise. - (vect_determine_precisions_from_range): Likewise. - (vect_determine_precisions_from_users): Likewise. - (vect_determine_stmt_precisions, vect_determine_precisions): Likewise. - (vect_vect_recog_func_ptrs): Put over_widening first. - Add cast_forwprop. - (vect_pattern_recog): Call vect_determine_precisions. - - 2018-07-03 Richard Sandiford - - * tree-vect-patterns.c (vect_mark_pattern_stmts): Remove pattern - statements that have been replaced by further pattern statements. - (vect_pattern_recog_1): Clear STMT_VINFO_PATTERN_DEF_SEQ on failure. - - 2018-07-03 Richard Biener - - * tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, - always set *dt. Dump vectype in vectype overload. - * dumpfile.h (dump_gimple_expr): New function. - (dump_gimple_expr_loc): Likewise. - * dumpfile.c (dump_gimple_expr): New function. - (dump_gimple_expr_loc): Likewise. - - 2018-07-02 Jeff Law - - * config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate - the H8/300, H8/300H and H8/S variants into a single pattern. - (movhi_h8300, movqi_h8300hs): Similarly. - (pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern. - (QHI mode iterator): New. - - * config/h8300/h8300.md: Remove trailing whitespace. - - 2018-07-02 Jim Wilson - - * config/riscv/riscv.c (riscv_expand_epilogue): Use emit_jump_insn - instead of emit_insn for interrupt returns. - * config/riscv/riscv.md (riscv_met): Add (return) to rtl. - (riscv_sret, riscv_uret): Likewise. - - 2018-07-02 David Malcolm - - * pretty-print.c (selftest::test_pp_format): Move save and restore - of quotes to class auto_fix_quotes, and add an instance. - * selftest.c: Include "intl.h". - (selftest::auto_fix_quotes::auto_fix_quotes): New ctor. - (selftest::auto_fix_quotes::~auto_fix_quotes): New dtor. - * selftest.h (selftest::auto_fix_quotes): New class. - - 2018-07-02 Richard Henderson - - * config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c - (aarch64_sve_prepare_conditional_op): Remove. - * config/aarch64/aarch64-sve.md (cond_): - Allow aarch64_simd_reg_or_zero as select operand; remove - the aarch64_sve_prepare_conditional_op call. - (cond_): Likewise. - (cond_): Likewise. - (*cond__z): New pattern. - (*cond__z): New pattern. - (*cond__z): New pattern. - (*cond__any): New pattern. - (*cond__any): New pattern. - (*cond__any): New pattern - and a splitters to match all of the *_any patterns. - * config/aarch64/predicates.md (aarch64_sve_any_binary_operator): New. - - * config/aarch64/iterators.md (SVE_INT_BINARY_REV): Remove. - (SVE_COND_FP_BINARY_REV): Remove. - (sve_int_op_rev, sve_fp_op_rev): New. - * config/aarch64/aarch64-sve.md (*cond__0): New. - (*cond__0): New. - (*cond__0): New. - (*cond__2): Rename, add movprfx alternative. - (*cond__2): Similarly. - (*cond__2): Similarly. - (*cond__3): Similarly; use sve_int_op_rev. - (*cond__3): Similarly. - (*cond__3): Similarly; use sve_fp_op_rev. - - * config/aarch64/aarch64-sve.md (cond_): - Remove match_dup 1 from the inner unspec. - (*cond_): Likewise. - - * config/aarch64/aarch64.md (movprfx): New attr. - (length): Default movprfx to 8. - * config/aarch64/aarch64-sve.md (*mul3): Add movprfx alt. - (*madd, *msubmul3_highpart): Likewise. - (*3): Likewise. - (*v3): Likewise. - (*3): Likewise. - (*3): Likewise. - (*fma4, *fnma4): Likewise. - (*fms4, *fnms4): Likewise. - (*div4): Likewise. - - 2018-07-02 Richard Sandiford - - * tree-vect-patterns.c (vect_recog_widen_shift_pattern): Fix typo - in dump string. - - 2018-07-02 Richard Biener - - PR tree-optimization/86363 - * tree-ssa-sccvn.c (vn_reference_lookup_3): Check the - memset argument refers to a non-variable address. - - 2018-07-02 Aldy Hernandez - - * tree-vrp.c (extract_range_from_binary_expr_1): Abstract a lot of the - {PLUS,MINUS}_EXPR code to... - (adjust_symbolic_bound): ...here, - (combine_bound): ...here, - (set_value_range_with_overflow): ...and here. - - 2018-07-02 Aldy Hernandez - - * tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR - code... - (extract_range_from_abs_expr): ...here. - - 2018-07-02 Eric Botcazou - - * config/i386/i386.c (ix86_finalize_stack_frame_flags): Do not overrule - -fno-omit-frame-pointer when not optimizing. - - 2018-07-02 Martin Liska - - PR ipa/86279 - * ipa-pure-const.c (malloc_candidate_p): Revert usage of ::get. - (propagate_nothrow): Likewise. + * config/arc/arc.c (arc_autovectorize_vector_modes): Likewise. + * config/arm/arm.c (arm_autovectorize_vector_modes): Likewise. + * config/i386/i386.c (ix86_autovectorize_vector_modes): Likewise. + * config/mips/mips.c (mips_autovectorize_vector_modes): Likewise. + * tree-vectorizer.h (_loop_vec_info::vec_outside_cost) + (_loop_vec_info::vec_inside_cost): New member variables. + * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize them. + (vect_better_loop_vinfo_p, vect_joust_loop_vinfos): New functions. + (vect_analyze_loop): When autovectorize_vector_modes returns + VECT_COMPARE_COSTS, try vectorizing the loop with each available + vector mode and picking the one with the lowest cost. + (vect_estimate_min_profitable_iters): Record the computed costs + in the loop_vec_info. + + 2019-11-16 Richard Sandiford + + * tree-vectorizer.h (can_duplicate_and_interleave_p): Take an + element type rather than an element mode. + * tree-vect-slp.c (can_duplicate_and_interleave_p): Likewise. + Use get_vectype_for_scalar_type to query the natural types + for a given element type rather than basing everything on + GET_MODE_SIZE (vinfo->vector_mode). Limit int_mode_for_size + query to MAX_FIXED_MODE_SIZE. + (duplicate_and_interleave): Update call accordingly. + * tree-vect-loop.c (vectorizable_reduction): Likewise. + + 2019-11-16 Richard Sandiford + + * tree-vectorizer.h (vect_get_vector_types_for_stmt): Take an + optional maximum nunits. + (get_vectype_for_scalar_type): Likewise. Also declare a form that + takes an slp_tree. + (get_mask_type_for_scalar_type): Take an optional slp_tree. + (vect_get_mask_type_for_stmt): Likewise. + * tree-vect-data-refs.c (vect_analyze_data_refs): Don't store + the vector type in STMT_VINFO_VECTYPE for BB vectorization. + * tree-vect-patterns.c (vect_recog_bool_pattern): Use + vect_get_vector_types_for_stmt instead of STMT_VINFO_VECTYPE + to get an assumed vector type for data references. + * tree-vect-slp.c (vect_update_shared_vectype): New function. + (vect_update_all_shared_vectypes): Likewise. + (vect_build_slp_tree_1): Pass the group size to + vect_get_vector_types_for_stmt. Use vect_update_shared_vectype + for BB vectorization. + (vect_build_slp_tree_2): Call vect_update_all_shared_vectypes + before building the vectof from scalars. + (vect_analyze_slp_instance): Pass the group size to + get_vectype_for_scalar_type. + (vect_slp_analyze_node_operations_1): Don't recompute the vector + types for BB vectorization here; just handle the case in which + we deferred the choice for booleans. + (vect_get_constant_vectors): Pass the slp_tree to + get_vectype_for_scalar_type. + * tree-vect-stmts.c (vect_prologue_cost_for_slp_op): Likewise. + (vectorizable_call): Likewise. + (vectorizable_simd_clone_call): Likewise. + (vectorizable_conversion): Likewise. + (vectorizable_shift): Likewise. + (vectorizable_operation): Likewise. + (vectorizable_comparison): Likewise. + (vect_is_simple_cond): Take the slp_tree as argument and + pass it to get_vectype_for_scalar_type. + (vectorizable_condition): Update call accordingly. + (get_vectype_for_scalar_type): Take a group_size argument. + For BB vectorization, limit the the vector to that number + of elements. Also define an overload that takes an slp_tree. + (get_mask_type_for_scalar_type): Add an slp_tree argument and + pass it to get_vectype_for_scalar_type. + (vect_get_vector_types_for_stmt): Add a group_size argument + and pass it to get_vectype_for_scalar_type. Don't use the + cached vector type for BB vectorization if a group size is given. + Handle data references in that case. + (vect_get_mask_type_for_stmt): Take an slp_tree argument and + pass it to get_mask_type_for_scalar_type. + + 2019-11-15 Jan Hubicka + + * ipa-inline.h (do_estimate_edge_time): Add nonspec_time + parameter. + (estimate_edge_time): Use it. + * ipa-inline-analysis.c (do_estimate_edge_time): Add + ret_nonspec_time parameter. - 2018-07-02 Martin Liska - - PR ipa/86323 - * ipa-inline.c (early_inliner): Revert wrongly added ::get call. - - 2018-07-02 David Malcolm - - * dumpfile.c (dump_generic_expr_loc): Undo removal of this - function in r262149, changing "loc" param from source_location to - const dump_location_t &. - * dumpfile.h (dump_generic_expr_loc): Undo removal of this - declaration, as above. - - 2018-07-01 Paul Koning - - * common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle - -munit-asm, -mgnu-asm, -mdec-asm. - * config/pdp11/pdp11-protos.h (pdp11_gen_int_label): New. - (pdp11_output_labelref): New. - (pdp11_output_def): New. - (pdp11_output_addr_vec_elt): New. - * config/pdp11/pdp11.c: Use tab between opcode and operands. Use - %# and %@ format codes. - (pdp11_option_override): New. - (TARGET_ASM_FILE_START_FILE_DIRECTIVE): Define. - (pdp11_output_ident): New. - (pdp11_asm_named_section): New. - (pdp11_asm_init_sections): New. - (pdp11_file_start): New. - (pdp11_file_end): New. - (output_ascii): Use .ascii/.asciz for -mdec-asm. - (pdp11_asm_print_operand): Update %# and %$ for -mdec-asm. Add - %o, like %c but octal. - (pdp11_option_override): New. - * config/pdp11/pdp11.h (TEXT_SECTION_ASM_OP): Update for - -mdec-asm. - (DATA_SECTION_ASM_OP): Ditto. - (READONLY_DATA_SECTION_ASM_OP): New. - (IS_ASM_LOGICAL_LINE_SEPARATOR): New. - (ASM_GENERATE_INTERNAL_LABEL): Use new function. - (ASM_OUTPUT_LABELREF): Ditto. - (ASM_OUTPUT_DEF): Ditto. - (ASM_OUTPUT_EXTERNAL): New. - (ASM_OUTPUT_SOURCE_FILENAME): New. - (ASM_OUTPUT_ADDR_VEC_ELT): Use new function. - (ASM_OUTPUT_SKIP): Update for -mdec-asm. - * config/pdp11/pdp11.md: Use tab between opcode and operands. Use - %# and %@ format codes. - * config/pdp11/pdp11.opt (mgnu-asm): New. - (mdec-asm): Conflicts with -mgnu-asm and -munix-asm. - (munix-asm): Conflicts with -mdec-asm and -mgnu-asm. - * doc/invoke.txt (PDP-11 Options): Add -mgnu-asm. - - 2018-07-01 Aldy Hernandez - - * tree-ssa-threadupdate.c (mark_threaded_blocks): Avoid - dereferencing path[] beyond its length. - (debug_path): New. - (debug_all_paths): New. - (rewire_first_differing_edge): New. - (adjust_paths_after_duplication): New. - (duplicate_thread_path): Call adjust_paths_after_duplication. - Add new argument. - (thread_through_all_blocks): Add new argument to - duplicate_thread_path. - - 2018-06-30 Jim Wilson - - * config/riscv/predicates.md (p2m1_shift_operand): New. - (high_mask_shift_operand): New. - * config/riscv/riscv.md (lshrsi3_zero_extend_3+1): New combiner - pattern using p2m1_shift_operand. - (lshsi3_zero_extend_3+2): New combiner pattern using - high_mask_shift_operand. - - 2018-06-30 Richard Sandiford - - * tree-vect-patterns.c (vect_get_external_def_edge): New function, - split out from... - (vect_recog_rotate_pattern): ...here. - (vect_convert_input): Try to insert casts of invariants in the - preheader. - * tree-vect-loop-manip.c (vect_loop_versioning): Don't require the - preheader to be empty. - - 2018-06-30 Richard Sandiford - - * tree-vect-patterns.c (append_pattern_def_seq): Take an optional - vector type. If given, install it in the new statement's - STMT_VINFO_VECTYPE. - (vect_element_precision): New function. - (vect_unpromoted_value): New struct. - (vect_unpromoted_value::vect_unpromoted_value): New function. - (vect_unpromoted_value::set_op): Likewise. - (vect_look_through_possible_promotion): Likewise. - (vect_joust_widened_integer, vect_joust_widened_type): Likewise. - (vect_widened_op_tree, vect_convert_input): Likewise. - (vect_convert_inputs, vect_convert_output): Likewise. - (vect_recog_dot_prod_pattern): Use vect_look_through_possible_promotion - to handle the optional cast of the multiplication result and - vect_widened_op_tree to detect the widened multiplication itself. - Do not require the input and output of promotion casts to have - the same sign, but base the signedness of the operation on the - input rather than the result. If the pattern includes two - promotions, check that those promotions have the same sign. - Do not restrict the MULT_EXPR handling to a double-width result; - handle quadruple-width results and wider. Use vect_convert_inputs - to convert the inputs to the common type. - (vect_recog_sad_pattern): Use vect_look_through_possible_promotion - to handle the optional cast of the ABS result. Also allow a sign - change or a sign extension between the ABS and MINUS. - Use vect_widened_op_tree to detect the widened subtraction and use - vect_convert_inputs to convert the inputs to the common type. - (vect_handle_widen_op_by_const): Delete. - (vect_recog_widen_op_pattern): New function. - (vect_recog_widen_mult_pattern): Use it. - (vect_recog_widen_shift_pattern): Likewise. - (vect_recog_widen_sum_pattern): Use - vect_look_through_possible_promotion to handle the promoted - PLUS_EXPR operand. - - 2018-06-30 Richard Sandiford - - * gimple-iterator.c (gsi_for_stmt): Add a new overload that takes - the containing gimple_seq *. - * gimple-iterator.h (gsi_for_stmt): Declare it. - * tree-vect-patterns.c (vect_recog_dot_prod_pattern) - (vect_recog_sad_pattern, vect_recog_widen_sum_pattern) - (vect_recog_widen_shift_pattern, vect_recog_rotate_pattern) - (vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern) - (vect_recog_mask_conversion_pattern): Remove STMT_VINFO_IN_PATTERN_P - checks. - (vect_init_pattern_stmt, vect_set_pattern_stmt): New functions, - split out from... - (vect_mark_pattern_stmts): ...here. Handle cases in which the - statement being replaced is part of an existing pattern - definition sequence, inserting the new pattern statements before - the original one. - (vect_pattern_recog_1): Don't return a bool. If the statement - is already part of a pattern, instead apply pattern matching - to the pattern definition statements. Don't clear the - STMT_VINFO_RELATED_STMT if is_pattern_stmt_p. - (vect_pattern_recog): Don't break after the first match; - continue processing the pattern definition statements instead. - Don't bail out for STMT_VINFO_IN_PATTERN_P here. - - 2018-06-30 Richard Sandiford - - * tree-vect-patterns.c (vect_reassociating_reduction_p): New function. - (vect_recog_dot_prod_pattern, vect_recog_sad_pattern) - (vect_recog_widen_sum_pattern): Use it. - - 2018-06-30 Richard Sandiford - - * tree-vect-loop.c (vectorizable_reduction): Assert that the - phi is not a pattern statement and has not been replaced by - a pattern statement. - * tree-vect-patterns.c (type_conversion_p): Don't check - STMT_VINFO_IN_PATTERN_P. - (vect_recog_vector_vector_shift_pattern): Likewise. - (vect_recog_dot_prod_pattern): Expect vect_is_simple_use to return - the pattern statement rather than the original statement; check - directly for a WIDEN_MULT_EXPR here. - * tree-vect-slp.c (vect_get_and_check_slp_defs): Expect - vect_is_simple_use to return the pattern statement rather - than the original statement; use is_pattern_stmt_p to check - for such a pattern statement. - * tree-vect-stmts.c (process_use): Expect vect_is_simple_use - to return the pattern statement rather than the original statement; - don't do the same transformation here. - (vect_is_simple_use): If the defining statement has been replaced - by a pattern statement, return the pattern statement instead. - Remove the corresponding (local) transformation from the vectype - overload. - - 2018-06-30 Richard Sandiford - - * tree-vectorizer.h (vect_is_simple_use): Move the gimple ** to the - end and default to null. - * tree-vect-loop.c (vect_create_epilog_for_reduction) - (vectorizable_reduction): Update calls accordingly, dropping the - gimple ** argument if the passed-back statement isn't needed. - * tree-vect-patterns.c (vect_get_internal_def, type_conversion_p) - (vect_recog_rotate_pattern): Likewise. - (vect_recog_mask_conversion_pattern): Likewise. - * tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise. - (vect_mask_constant_operand_p): Likewise. - * tree-vect-stmts.c (is_simple_and_all_uses_invariant, process_use): - (vect_model_simple_cost, vect_get_vec_def_for_operand): Likewise. - (get_group_load_store_type, get_load_store_type): Likewise. - (vect_check_load_store_mask, vect_check_store_rhs): Likewise. - (vectorizable_call, vectorizable_simd_clone_call): Likewise. - (vectorizable_conversion, vectorizable_assignment): Likewise. - (vectorizable_shift, vectorizable_operation): Likewise. - (vectorizable_store, vect_is_simple_cond): Likewise. - (vectorizable_condition, vectorizable_comparison): Likewise. - (get_same_sized_vectype, vect_get_mask_type_for_stmt): Likewise. - (vect_is_simple_use): Rename the def_stmt argument to def_stmt_out - and move it to the end. Cope with null def_stmt_outs. - - 2018-06-30 Bernd Edlinger - - * Makefile.in (FLAGS_TO_PASS): Add RANLIB_FOR_TARGET. - - 2018-06-29 Jeff Law - - * config/v850/v850.c (v850_legitimate_address_p): Handle large - displacements for TARGET_V850E2V3 and newer. - (TARGET_LRA_P): Remove. Defaults to LRA now. - * config/v850/v850.md (sign23byte_load): Remove. - (unsign23byte_load, sign23hword_load, unsign23hword_load): Likewise. - (23word_load, 23byte_store, 23hword_store, 23word_store): Likewise. - - 2018-06-29 Martin Liska - - PR lto/85759 - * coverage.c (coverage_init): Mangle full path name. - * doc/invoke.texi: Document the change. - * gcov-io.c (mangle_path): New. - * gcov-io.h (mangle_path): Likewise. - * gcov.c (mangle_name): Use mangle_path for path mangling. - - 2018-06-29 Kyrylo Tkachov - - * config/arm/arm.c (output_move_double): Don't allow STRD instructions - if starting source register is not even. - - 2018-06-29 Martin Liska - - PR tree-optimization/86263 - * tree-switch-conversion.c (switch_decision_tree::try_switch_expansion): - Make edge redirection. - - 2018-06-29 David Malcolm - - * dumpfile.c (dump_loc): Add indentation based on scope depth. - (dump_scope_depth): New variable. - (get_dump_scope_depth): New function. - (dump_begin_scope): New function. - (dump_end_scope): New function. - * dumpfile.h (get_dump_scope_depth): New declaration. - (dump_begin_scope): New declaration. - (dump_end_scope): New declaration. - (class auto_dump_scope): New class. - (AUTO_DUMP_SCOPE): New macro. - * tree-vectorizer.h (DUMP_VECT_SCOPE): Reimplement in terms of - AUTO_DUMP_SCOPE. - - 2018-06-29 Richard Biener - - * tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Assert - compute_all_dependences succeeds. - * tree-vect-loop.c (vect_get_datarefs_in_loop): Fail early if we - exceed --param loop-max-datarefs-for-datadeps. - - 2018-06-29 Jakub Jelinek - - * config/rs6000/t-rs6000: Append rs6000-modes.h to TM_H. - - 2018-06-28 Uros Bizjak - - PR target/86348 - * config/i386/sse.md (*vec_extractv4si_0_zext_sse4): Use - alternative 0 in preferred_for_speed attribute. - - 2018-06-28 Paul Koning - - * config/pdp11/pdp11-protos.h (pdp11_shift_length): New function. - * config/pdp11/pdp11.c (pdp11_shift_length): New function. - * config/pdp11/pdp11.h (ADJUST_INSN_LENGTH): Remove. - * config/pdp11/pdp11.md: Correct "length" attribute calculation - for shift insn patterns. - - 2018-06-28 David Malcolm - - * cgraph.c (cgraph_node::get_body): Replace assignments to - "dump_file" with calls to set_dump_file. - * dumpfile.c (alt_dump_file): Make static, and group with... - (alt_flags): ...this definition. - (dumps_are_enabled): New variable. - (refresh_dumps_are_enabled): New function. - (set_dump_file): New function. - (set_alt_dump_file): New function. - (gcc::dump_manager::dump_start): Replace assignments to - "dump_file" and "alt_dump_file" with calls to set_dump_file and - set_alt_dump_file. - (gcc::dump_manager::dump_finish): Likewise. - * dumpfile.h (alt_dump_file): Delete decl. - (dumps_are_enabled): New variable decl. - (set_dump_file): New function decl. - (dump_enabled_p): Rewrite in terms of new "dumps_are_enabled" - global. - * tree-nested.c (lower_nested_functions): Replace assignments to - "dump_file" with calls to set_dump_file. + 2019-11-15 Szabolcs Nagy - 2018-06-28 Eric Botcazou + * config/m68k/linux.h (MUSL_DYNAMIC_LINKER): Define. - * tree-cfg.c (verify_gimple_in_cfg): Call verify_location on the - goto_locus of each outgoing edge of each basic block. + 2019-11-15 Nick Clifton + Szabolcs Nagy - 2018-06-28 Richard Biener + PR target/65649 + * config/microblaze/microblaze.c (print_operand): Print value as long. - * dwarf2out.c (decl_scope_table): Remove. - (push_decl_scope): Likewise. - (pop_decl_scope): Likewise. - (gen_type_die_for_member): Do not call push/pop_decl_scope. - (gen_struct_or_union_type_die): Likewise. - (gen_tagged_type_die): Likewise. - (dwarf2out_init): Do not initialize decl_scope_table. - (dwarf2out_c_finalize): Do not free it. + 2019-11-15 Jan Hubicka - 2018-06-28 Richard Biener + * ipa-inline.c (edge_badness, inline_small_functions): Revert + accidental commit. - * dwarf2out.c (gen_subprogram_die): Use is_unit_die when - deciding whether to not re-use a DIE. - - 2018-06-28 Richard Biener + 2019-11-15 Kwok Cheung Yeung - * dwarf2out.c (gen_subprogram_die): Always re-use DIEs with an - DW_AT_abstract_origin attribute. + * config/gcn/gcn.h (FIXED_REGISTERS): Unfix frame pointer. + (CALL_USED_REGISTERS): Make frame pointer callee-saved. - 2018-06-28 Martin Liska + 2019-11-15 Kwok Cheung Yeung - * tree-switch-conversion.c (jump_table_cluster::can_be_handled): - Use newly introduced constants. - * tree-switch-conversion.h (struct jump_table_cluster): - Define max_ratio_for_size and max_ratio_for_speed. + * config/gcn/gcn.c (MAX_NORMAL_SGPR_COUNT, MAX_NORMAL_VGPR_COUNT): New. + (gcn_conditional_register_usage): Use constants in place of hard-coded + values. + (gcn_hsa_declare_function_name): Set lower bound for number of + SGPRs/VGPRs in non-leaf kernels to MAX_NORMAL_SGPR_COUNT and + MAX_NORMAL_VGPR_COUNT. - 2018-06-28 Martin Liska + 2019-11-15 Martin Jambor - * tree-switch-conversion.c (jump_table_cluster::find_jump_tables): - Add new checking assert to catch invalid state. - (jump_table_cluster::can_be_handled): Handle single case - clusters. - (jump_table_cluster::is_beneficial): Bail out for such case. - (bit_test_cluster::find_bit_tests): - Add new checking assert to catch invalid state. - (bit_test_cluster::can_be_handled): Handle single case - clusters. - (bit_test_cluster::is_beneficial): Bail out for such case. - (switch_decision_tree::analyze_switch_statement): - Fix comment. - - 2018-06-28 Martin Liska - - * common.opt: Introduce -completion option. - * gcc.c (driver_handle_option): Handle it. - (driver::main): Print completions if completion - is set. - * opt-suggestions.c (option_proposer::get_completions): - New function. - (option_proposer::suggest_completion): Likewise. - (option_proposer::find_param_completions): Likewise. - (verify_autocompletions): Likewise. - (test_completion_valid_options): Likewise. - (test_completion_valid_params): Likewise. - (in_completion_p): Likewise. - (empty_completion_p): Likewise. - (test_completion_partial_match): Likewise. - (test_completion_garbage): Likewise. - (opt_proposer_c_tests): Likewise. - * opt-suggestions.h: Declare new functions. - * opts.c (common_handle_option): Handle OPT__completion_. - * selftest-run-tests.c (selftest::run_tests): Add - opt_proposer_c_tests. - * selftest.c (assert_str_startswith): New. - * selftest.h (assert_str_startswith): Likewise. - (opt_proposer_c_tests): New. - (ASSERT_STR_STARTSWITH): Likewise. - - 2018-06-28 Martin Liska - - * Makefile.in: Add opt-suggestions.o. - * gcc-main.c: Include opt-suggestions.h. - * gcc.c (driver::driver): Likewise. - (driver::~driver): Remove m_option_suggestions. - (driver::build_option_suggestions): Moved to option_proposer. - (driver::suggest_option): Likewise. - (driver::handle_unrecognized_options): Use option_proposer. - * gcc.h (class driver): Add new memver m_option_proposer. - * opt-suggestions.c: New file. - * opt-suggestions.h: New file. - - 2018-06-28 Martin Liska - - * vec.h (class auto_string_vec): New (moved from auto_argvec). - (auto_string_vec::~auto_string_vec): Likewise. - - 2018-06-28 Eric Botcazou - - * tree-inline.h (struct copy_body_data): Move remapping_type_depth and - prevent_decl_creation_for_types fields up and add reset_location field. - * tree-inline.c (remap_gimple_stmt): Force input_location on the new - statement if id->reset_location is true. - (copy_edges_for_bb): Do not set goto_locus on the new edges if - id->reset_location is true. - (copy_phis_for_bb): Force input_location on the arguments if - id->reset_location is true. - (expand_call_inline): Set id->reset_location if DECL_IGNORED_P - is set on the function to be inlined. - - 2018-06-27 Stephan Bergmann - - * doc/invoke.texi (Debugging Options): Add -gsplit-dwarf. - - 2018-06-27 Dimitar Dimitrov - - * lra-eliminations.c (update_reg_eliminate): Mark all spanning hard - registers for Pmode. - * lra-lives.c (check_pseudos_live_through_calls): Mark all spanning - hard registers for the clobbered pseudo. - - 2018-06-27 Paul Koning - - * common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle - mutually exclusive options. - * config/pdp11/constraints.md (h): New constraint. - (O): Update definition to match shift code generation. - (D): New constraint. - * config/pdp11/pdp11-modes.def (CCNZ): Define mode. - (CCFP): Remove. - * config/pdp11/pdp11-protos.h (int_no_side_effect_operand): New + * ipa-utils.h (ipa_remove_useless_jump_functions): Remove stray + declaration. + + 2019-11-15 Kwok Cheung Yeung + + * config/gcn/gcn.c (default_requested_args): New. + (gcn_parse_amdgpu_hsa_kernel_attribute): Initialize requested args + set with default_requested_args. + (gcn_conditional_register_usage): Limit register usage of non-kernel + functions. Reassign fixed registers if a non-standard set of args is + requested. + * config/gcn/gcn.h (FIXED_REGISTERS): Fix registers according to ABI. + + 2019-11-15 Feng Xue + + PR ipa/92528 + * ipa-prop.c (update_jump_functions_after_inlining): Invalidate + aggregate jump function when inlined-to caller has no edge summary. + + 2019-11-15 Kwok Cheung Yeung + + * config/gcn/gcn.c (gcn_init_cumulative_args): Call reinit_regs. + + 2019-11-15 Kwok Cheung Yeung + + * config/gcn/gcn.c (gcn_expand_prologue): Remove initialization and + prologue use of v0. + (print_operand_address): Use v1 for zero vector offset. + + 2019-11-15 Richard Sandiford + + PR tree-optimization/92515 + * tree-vect-stmts.c (vectorizable_shift): Record incompatible op1 + types when converting a vector/scalar shift into a vector/vector one, + using tree_nop_conversion_p instead of useless_type_conversion_p. + Move the conversion code to the transform block. + + 2019-11-15 Matthew Malcomson + + * read-rtl-function.c + (function_reader::add_fixup_source_location): Take additional + parameter of a column. + (function_reader::maybe_read_location): Optionally parse column + information and pass to add_fixup_source_location. + + 2019-11-15 Richard Biener + + PR tree-optimization/92512 + * tree-vect-loop.c (check_reduction_path): Fix operand index + computability check. Add check for second use in COND_EXPRs. + + 2019-11-15 Richard Sandiford + + PR target/92515 + * config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Use + VIEW_CONVERT_EXPR to reinterpret vectors as different types. + + 2019-11-15 Kwok Cheung Yeung + + * config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG + register class for VCC_LO and VCC_HI. + (gcn_spill_class): Use SGPR_REGS to spill registers in + VCC_CONDITIONAL_REG. + + 2019-11-15 Richard Biener + + PR tree-optimization/92324 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Fix + singedness of SLP reduction epilouge operations. Also reduce + the vector width for SLP reductions before doing elementwise + operations if possible. + + 2019-11-15 Matthew Malcomson + + * passes.c (skip_pass): Set epilogue_completed if skipping the + pro_and_epilogue pass. + + 2019-11-15 Matthew Malcomson + + * passes.c (should_skip_pass_p): Always run "dfinish". + + 2019-11-15 Richard Biener + + * ipa-inline.c (inline_small_functions): Move assignment + to next before call destroying edge. + + 2019-11-15 Richard Biener + + PR tree-optimization/92039 + PR tree-optimization/91975 + * tree-ssa-loop-ivcanon.c (constant_after_peeling): Revert + previous change, treat invariants consistently as non-constant. + (tree_estimate_loop_size): Ternary ops with just the first op + constant are not optimized away. + + 2019-11-15 Jakub Jelinek + + * gimplify.c (gimplify_call_expr): Don't call + omp_resolve_declare_variant after gimplification. + * omp-general.c (omp_context_selector_matches): For isa that might + match in some other function, defer if in declare simd function. + (omp_context_compute_score): Don't look for " score" in construct + trait set. Set *score to -1 if it can't ever match. + (omp_resolve_declare_variant): If any variants need to be deferred, + don't punt immediately, but compute scores of all variants and if + ther eis a score winner that doesn't need to be deferred, return that. + + 2019-11-15 Luo Xiong Hu + + * ipa-comdats.c: Fix comments typo. + * ipa-profile.c: Fix comments typo. + * tree-profile.c (gimple_gen_ic_profiler): Use the new variable + __gcov_indirect_call.counters and __gcov_indirect_call.callee. + (gimple_gen_ic_func_profiler): Likewise. + (pass_ipa_tree_profile::gate): Fix comments typo. + + 2019-11-15 Xiong Hu Luo + + * ipa-inline.c (inline_small_functions): Update iterator of next. + + 2019-11-14 Kwok Cheung Yeung + + * lra-spills.c (assign_spill_hard_regs): Check that the spill + register is suitable for the mode. + + 2019-11-14 Andrew MacLeod + + * range-op.h (range_operator::fold_range): Return a bool. + * range-op.cc (range_operator::wi_fold): Assert supported type. + (range_operator::fold_range): Assert supported type and return true. + (operator_equal::fold_range): Return true. + (operator_not_equal::fold_range): Same. + (operator_lt::fold_range): Same. + (operator_le::fold_range): Same. + (operator_gt::fold_range): Same. + (operator_ge::fold_range): Same. + (operator_plus::op1_range): Adjust call to fold_range. + (operator_plus::op2_range): Same. + (operator_minus::op1_range): Same. + (operator_minus::op2_range): Same. + (operator_exact_divide::op1_range): Same. + (operator_lshift::fold_range): Return true and adjust fold_range call. + (operator_rshift::fold_range): Same. + (operator_cast::fold_range): Return true. + (operator_logical_and::fold_range): Same. + (operator_logical_or::fold_range): Same. + (operator_logical_not::fold_range): Same. + (operator_bitwise_not::fold_range): Adjust call to fold_range. + (operator_bitwise_not::op1_range): Same. + (operator_cst::fold_range): Return true. + (operator_identity::fold_range): Return true. + (operator_negate::fold_range): Return true and adjust fold_range call. + (operator_addr_expr::fold_range): Return true. + (operator_addr_expr::op1_range): Adjust call to fold_range. + (range_cast): Same. + * tree-vrp.c (range_fold_binary_symbolics_p): Adjust call to fold_range. + (range_fold_unary_symbolics_p): Same. + + 2019-11-14 Andrew MacLeod + + PR tree-optimization/92506 + * range-op.cc (range_operator::fold_range): Start with range undefined. + (operator_abs::wi_fold): Fix wrong line copy... With wrapv, abs with + overflow is varying. + + 2019-11-14 Aldy Hernandez + + * range-op.cc (*operator*::*range): Remove calls to + range_intersect, range_invert, and range_union in favor of calling + the in-place API methods. + (range_tests): Same. + * range.cc (range_intersect): Remove. + (range_union): Remove. + (range_invert): Remove. + * range.h (range_intersect): Remove. + (range_union): Remove. + (range_intersect): Remove. + + 2019-11-14 Ilya Leoshkevich + + PR rtl-optimization/92430 + * cfgcleanup.c (pass_jump_after_combine::gate): New function. + (pass_jump_after_combine::execute): Perform jump threading + unconditionally. + + 2019-11-14 Jerome Lambourg + Doug Rupp + Olivier Hainque + + * config.gcc: Collapse the arm-vxworks entries into + a single arm-wrs-vxworks7* one, bpabi based. Update + the default cpu from arm8 to armv7-a + * config/arm/vxworks.h (CC1_SPEC): Simplify, knowing that + we always use ARM_UNWIND_INFO. + (DWARF2_UNWIND_INFO): Remove redefinition. + (ARM_TARGET2_DWARF_FORMAT): Likewise. + (VXWORKS_PERSONALITY): Define, to "llvm". + (VXWORKS_EXTRA_LIBS_RTP): Define, to "-lllvm". + + 2019-11-14 Jerome Lambourg + + * config/arm/vxworks.h (TARGET_OS_CPP_BUILTINS): Use + _VX_CPU instead of CPU and handle arm_arch8. + + 2019-11-14 Doug Rupp + Olivier Hainque + Jerome Lambourg + + * config.gcc: Handle aarch64*-wrs-vxworks7*. + * config/aarch64/aarch64-vxworks.h: New file. + * config/aarch64/t-aarch64-vxworks: New file. + + 2019-11-06 Jerome Lambourg + Olivier Hainque + + * config/vx-common.h (USE_TM_CLONE_REGISTRY): Remove + definition, pointless with a VxWorks specific version + of crtstuff. + (DWARF2_UNWIND_INFO): Conditionalize on !ARM_UNWIND_INFO. + * config/vxworks.h (VX_CRTBEGIN_SPEC, VX_CRTEND_SPEC): + New local macros, controlling the addition of vxworks specific + crtstuff objects depending on the EH mechanism and kind of + module being linked. + (VXWORKS_STARTFILE_SPEC, VXWORKS_ENDFILE_SPEC): Use them. + + 2019-11-06 Pat Bernardi + Jerome Lambourg + Olivier Hainque + + * config.gcc: Add comment to introduce the TARGET_VXWORKS + common macro definitions, conveying VXWORKS7 or 64bit general + variations. Add a block to set gcc_cv_initfini_array + unconditionally to "yes" for VxWorks7. + config/vx-common.h (VXWORKS_CC1_SPEC): New macro, empty string + by default. Update some comments. + config/vxworks.h (VXWORKS_EXTRA_LIBS_RTP): New macro, empty by + default, to be added the end of VXWORKS_LIBS_RTP. + (VXWORKS_LIBS_RTP): Replace hardcoded part by VXWORKS_BASE_LIBS_RTP + and append VXWORKS_EXTRA_LIBS_RTP, both of which specific ports may + redefine. + (VXWORKS_NET_LIBS_RTP): Account for VxWorks7 specificities. + (VXWORKS_CC1_SPEC): Common base definition, with VxWorks7 variation + to account for the now available TLS abilities. + (TARGET_LIBC_HAS_FUNCTION): Account for VxWorks7 abilities. + (VXWORKS_HAVE_TLS): Likewise. + + 2019-11-14 Richard Sandiford + + * tree-vect-slp.c (vect_contains_pattern_stmt_p): New function. + (vect_slp_convert_to_external): Likewise. + (vect_slp_analyze_node_operations): If analysis fails, try building + the node from scalars instead. + + 2019-11-14 Richard Sandiford + + * tree-cfg.c (verify_gimple_assign_unary): Handle conversions + between vector types. + * tree-vect-stmts.c (vectorizable_conversion): Extend the + non-widening and non-narrowing path to handle standard + conversion codes, if the target supports them. + * expr.c (convert_move): Try using the extend and truncate optabs + for vectors. + * optabs-tree.c (supportable_convert_operation): Likewise. + * config/aarch64/iterators.md (Vnarroqw): New iterator. + * config/aarch64/aarch64-simd.md (2) + (trunc2): New patterns. + + 2019-11-14 Richard Sandiford + + * tree-vect-stmts.c (vect_get_vector_types_for_stmt): Don't + require vectype and nunits_vectype to have the same size; + instead assert that nunits_vectype has at least as many + elements as vectype. Don't compute a separate nunits_vectype + if the scalar type is obviously the same as vectype's. + Tweak dump messages. + + 2019-11-14 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_vectorize_related_mode): New function. - (output_jump): Change arguments. - (pdp11_fixed_cc_regs): New function. - (pdp11_cc_mode): Ditto. - (pdp11_expand_shift): Ditto. - (pdp11_assemble_shift): Ditto. - (pdp11_small_shift): Ditto. - (pdp11_branch_cost): Remove. - * config/pdp11/pdp11.c (pdp11_assemble_integer): Remove comments - from output. - (pdp11_register_move_cost): Update for CC registers. - (pdp11_rtx_costs): Add case for LSHIFTRT. - (pdp11_output_jump): Add CCNZ mode conditional branches. - (notice_update_cc_on_set): Remove. - (pdp11_cc_mode): New function. - (simple_memory_operand): Correct pre/post decrement case. - (no_side_effect_operand): New function. - (pdp11_regno_reg_class): Add CC_REGS class. - (pdp11_fixed_cc_regs): New function. - (pdp11_small_shift): New function. - (pdp11_expand_shift): New function to expand shift insns. - (pdp11_assemble_shift): New function to output shifts. - (pdp11_branch_cost): Remove. - (pdp11_modes_tieable_p): Make QI/HI modes tieable. - * config/pdp11/pdp11.h (SIZE_TYPE): Ensure 16-bit type. - (WCHAR_TYPE): Ditto. - (PTRDIFF_TYPE): Ditto. - (ADJUST_INSN_LENGTH): New macro. - (FIXED_REGISTERS): Add CC registers. - (CALL_USED_REGISTERS): Ditto. - (reg_class): Ditto. - (REG_CLASS_NAMES): Ditto. - (REG_CLASS_CONTENTS): Ditto. - (SELECT_CC_MODE): Use new function. - (TARGET_FLAGS_REGNUM): New macro. - (TARGET_FIXED_CONDITION_CODE_REGS): Ditto. - (cc0_reg_rtx): Remove. - (CC_STATUS_MDEP): Remove. - (CC_STATUS_MDEFP_INIT): Remove. - (CC_IN_FPU): Remove. - (NOTICE_UPDATE_CC): Remove. - (REGISTER_NAMES): Add CC registers. - (BRANCH_COST): Change to constant 1. - * config/pdp11/pdp11.md: Rewrite for CCmode condition code - handling. - * config/pdp11/pdp11.opt (mbcopy): Remove. - (mbcopy-builtin): Remove. - (mbranch-cheap): Remove. - (mbranch-expensive): Remove. - * config/pdp11/predicates.md (expand_shift_operand): Update to - match shift code generation. - (ccnz_operator): New predicate. - * doc/invoke.texi (PDP-11 Options): Remove deleted options - -mbcopy, -mbcopy-builtin, -mbranch-cheap, -mbranch-expensive. - Remove non-existent option -mabshi, -mno-abshi. Document mutually - exclusive options. - * doc/md.texi (PDP-11): Document new D and h constraints. Update - description of O constraint. - - 2018-06-27 Jeff Law - Austin Law - - * config/v850/v850.md (addsi3_set_flags): New pattern. - (subsi3_set_flags, negsi2_set_flags, andsi3_set_flags): Likewise. - (iorsi3_set_flags, xorsi3_set_flags, one_cmplsi2_set_flags): Likewise. - (zero_extendhisi2_v850_set_flags): Likewise. - (zero_extendqisi2_v850_set_flags): Likewise. - (ashlsi3_set_flags, ashlsi3_v850e2_set_flags): Likewise. - (lshrsi3_set_flags, lshrsi3_v850e2_set_flags): Likewise. - (ashrsi3_set_flags, ashrsi3_v850e2_set_flags): Likewise. - - * config/v850/v850-protos.h (notice_update_cc): Remove. - * config/v850/v850.c (v850_compare_op0, v850_compare_op1): Remove. - (v850_print_operand): Handle 'D' and "d". - (v850_select_cc_mode): Remove ATTRIBUTE_UNUSED for last argument. - Add handling of arithmetic/logical operations compared against zero. - (v850_gen_float_compare): Remove ATTRIBUTE_UNUSED for last argument. - Do not look at v850_compare_op, instead get mode from last argument. - (v850_gen_compare): Remove - (increment_stack): Use addsi3_clobber_flags to avoid splitting failure - after reload for prologue insns. - (expand_prologue): Account for CLOBBER of CC_REGNUM in various - patterns. - (construct_save_jarl): Likewise. - (TARGET_FLAGS_REGNUM): Define. - * config/v850/v850.h (v850_compare_op0, v850_compare_op1): Remove. - (NOTICE_UPDATE_CC): Remove. - * config/v850/v850.md (v850_tst1): Use (reg:CCZ CC_REGNUM) rather - than cc0. Conditionalize on reload_completed. - (cmpsi_insn, setfcc_insn): Likewise. - (tst1 splitter): Turn into define_and_split which sets the flags - after reload. - (cstoresi4, cbranchsf4, cbranchdf4, cbranchsi4_insn): Likewise. - (cbranchsi4, branch_normal, branch_invert): Do not expose cc0 here. - (cstoresf4, cstoredf4): Clobber the flags. - (cmpsi, cmpsf, cmpdf): Remove expanders. - (setf_insn): Remove pattern. - (addsi3): Turn into define_and_split which clobbers the flags after - reload and a suitable pattern (addsi3_clobber_flags) for use after - reload. - (subsi3, negsi2, andsi3, iorsi3, xorsi3, one_cmplsi2) Likewise. - (ashlsi3, ashlsi3_v850e2, lshrsi3, lsh4si3_v850e2): Likewise. - (ashrsi3, ashrsi3_v850e2): Likewise. - (bins): Clobber the flags. - (movsicc_normal_cc, movsicc_normal, movsicc_tst1): Likewise. - (movsicc_tst1_revesed, sasf, swap and rotate patterns): Likewise. - (fix_loop_counter, call_internal_short, call_internal_long): Likewise. - (call_value_internal_short, call_value_internal_long): Likewise. - (callt_save_interrupt, callt_return_interrupt): Likewise. - (save_interrupt, return_interrupt): Likewise. - (callt_save_all_interrupt, save_all_interrupt): Likewise. - (_save_all_interrupt, callt_restore_all_interrupt): Likewise. - (restore_all_interrupt, _restore_all_interrupt): Likewise. - (All FP comparisons): Only allow after reload has completed. - (trfsr): Likewise. - (divh, divhu): Tweak output template. - (branch_z_normal, branch_z_invert): Remove - (branch_nz_normal, branch_nz_invert): Likewise. - (extendhisi_insn, extendqisi_insn): Do not clobber flags. - - * config/v850/v850-modes.def (CCZ, CCNZ): Add new modes. - * config/v850/v850.c (notice_update_cc): Remove. - * config/v850/v850.h (CC_OVERFLOW_UNUSABLE): Remove - (CC_NO_CARRY): Likewise. - (NOTICE_UPDATE_CC): Define to nothing. - * config/v850/v850.md: Remove block comment on cc0 handling - Remove "cc" attribute from all patterns. Remove cc_status handling - from all patterns. Minor formatting fixes. - - 2018-06-27 Kyrylo Tkachov - - * config/aarch64/aarch64-cores.def (cortex-a76): New entry. - (cortex-a76.cortex-a55): Likewise. - * config/aarch64/aarch64-tune.md: Regenerate. - * doc/invoke.texi (AArch64 Options): Document cortex-a76 and - cortex-a76.cortex-a55. + (aarch64_autovectorize_vector_modes): Also add V4HImode and V2SImode. + (TARGET_VECTORIZE_RELATED_MODE): Define. + + 2019-11-14 Richard Sandiford + + * tree-vectorizer.h (vec_info::mode_set): New typedef. + (vec_info::used_vector_mode): New member variable. + (vect_chooses_same_modes_p): Declare. + * tree-vect-stmts.c (get_vectype_for_scalar_type): Record each + chosen vector mode in vec_info::used_vector_mode. + (vect_chooses_same_modes_p): New function. + * tree-vect-loop.c (vect_analyze_loop): Use it to avoid trying + the same vector statements multiple times. + * tree-vect-slp.c (vect_slp_bb_region): Likewise. + + 2019-11-14 Richard Sandiford + + * machmode.h (opt_machine_mode::operator==): New function. + (opt_machine_mode::operator!=): Likewise. + * tree-vectorizer.h (vec_info::vector_mode): Update comment. + (get_related_vectype_for_scalar_type): Delete. + (get_vectype_for_scalar_type_and_size): Declare. + * tree-vect-slp.c (vect_slp_bb_region): Print dump messages to say + whether analysis passed or failed, and with what vector modes. + Use related_vector_mode to check whether trying a particular + vector mode would be redundant with the autodetected mode, + and print a dump message if we decide to skip it. + * tree-vect-loop.c (vect_analyze_loop): Likewise. + (vect_create_epilog_for_reduction): Use + get_related_vectype_for_scalar_type instead of + get_vectype_for_scalar_type_and_size. + * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): Replace + with... + (get_related_vectype_for_scalar_type): ...this new function. + Take a starting/"prevailing" vector mode rather than a vector size. + Take an optional nunits argument, with the same meaning as for + related_vector_mode. Use related_vector_mode when not + auto-detecting a mode, falling back to mode_for_vector if no + target mode exists. + (get_vectype_for_scalar_type): Update accordingly. + (get_same_sized_vectype): Likewise. + * tree-vectorizer.c (get_vec_alignment_for_array_type): Likewise. - 2018-06-27 Jeff Law + 2019-11-14 Richard Sandiford - * config/v850/t-v850 (MULTILIB_OPTIONS): Remove 8byte-align. - (MULTILIB_DIRNAMES): Similarly. + * tree-vect-stmts.c (vectorizable_call): Require the types + to have the same size. - 2018-06-27 Eric Botcazou + 2019-11-14 Richard Sandiford - * gimple.h (gimple_return_retbnd): Delete. - (gimple_return_set_retbnd): Likewise. - * cgraphunit.c (cgraph_node::expand_thunk): Remove call to - gimple_return_set_retbnd. - * gimple-pretty-print.c (dump_gimple_return): Remove call to - gimple_return_retbnd and adjust. - * tree-inline.h (struct copy_body_data): Remove retbnd field. - * tree-inline.c (remap_gimple_stmt): Remove handling of retbnd. - Explicitly return NULL in a couple more cases. Move assertion - on debug statements and remove unreachable code. - (reset_debug_binding): Do not test id->retbnd. - (expand_call_inline): Do not set it. + * tree-vect-stmts.c (vectorizable_call): If an operand is + constant or external, use get_vectype_for_scalar_type + rather than get_same_sized_vectype to get its vector type. + (vectorizable_conversion, vectorizable_shift): Likewise. + (vectorizable_operation): Likewise. - 2018-06-27 Rasmus Villemoes + 2019-11-14 Richard Sandiford + + * tree-vectorizer.h (vec_info::vector_size): Replace with... + (vec_info::vector_mode): ...this new field. + * tree-vect-loop.c (vect_update_vf_for_slp): Update accordingly. + (vect_analyze_loop, vect_transform_loop): Likewise. + * tree-vect-loop-manip.c (vect_do_peeling): Likewise. + * tree-vect-slp.c (can_duplicate_and_interleave_p): Likewise. + (vect_make_slp_decision, vect_slp_bb_region): Likewise. + * tree-vect-stmts.c (get_vectype_for_scalar_type): Likewise. + * tree-vectorizer.c (try_vectorize_loop_1): Likewise. + + 2019-11-14 Richard Sandiford + + * target.h (vector_sizes, auto_vector_sizes): Delete. + (vector_modes, auto_vector_modes): New typedefs. + * target.def (autovectorize_vector_sizes): Replace with... + (autovectorize_vector_modes): ...this new hook. + * doc/tm.texi.in (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): + Replace with... + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): ...this new hook. + * doc/tm.texi: Regenerate. + * targhooks.h (default_autovectorize_vector_sizes): Delete. + (default_autovectorize_vector_modes): New function. + * targhooks.c (default_autovectorize_vector_sizes): Delete. + (default_autovectorize_vector_modes): New function. + * omp-general.c (omp_max_vf): Use autovectorize_vector_modes instead + of autovectorize_vector_sizes. Use the number of units in the mode + to calculate the maximum VF. + * omp-low.c (omp_clause_aligned_alignment): Use + autovectorize_vector_modes instead of autovectorize_vector_sizes. + Use a loop based on related_mode to iterate through all supported + vector modes for a given scalar mode. + * optabs-query.c (can_vec_mask_load_store_p): Use + autovectorize_vector_modes instead of autovectorize_vector_sizes. + * tree-vect-loop.c (vect_analyze_loop, vect_transform_loop): Likewise. + * tree-vect-slp.c (vect_slp_bb_region): Likewise. + * config/aarch64/aarch64.c (aarch64_autovectorize_vector_sizes): + Replace with... + (aarch64_autovectorize_vector_modes): ...this new function. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Delete. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. + * config/arc/arc.c (arc_autovectorize_vector_sizes): Replace with... + (arc_autovectorize_vector_modes): ...this new function. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Delete. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. + * config/arm/arm.c (arm_autovectorize_vector_sizes): Replace with... + (arm_autovectorize_vector_modes): ...this new function. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Delete. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. + * config/i386/i386.c (ix86_autovectorize_vector_sizes): Replace with... + (ix86_autovectorize_vector_modes): ...this new function. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Delete. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. + * config/mips/mips.c (mips_autovectorize_vector_sizes): Replace with... + (mips_autovectorize_vector_modes): ...this new function. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Delete. + (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. + + 2019-11-14 Richard Sandiford + + * tree-vect-stmts.c (vectorizable_shift): Check the number + of vector elements as well as the type mode when deciding + whether an op1_vectype is compatible. Reuse the result of + this check when generating vector statements. + + 2019-11-14 Richard Sandiford + + * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): If + targetm.vectorize.preferred_simd_mode returns an integer mode, + use mode_for_vector to decide what the vector type's mode + should actually be. Use build_vector_type_for_mode instead + of build_vector_type. + + 2019-11-14 Richard Sandiford + + * target.def (get_mask_mode): Take a vector mode itself as argument, + instead of properties about the vector mode. + * doc/tm.texi: Regenerate. + * targhooks.h (default_get_mask_mode): Update to reflect new + get_mode_mask interface. + * targhooks.c (default_get_mask_mode): Likewise. Use + related_int_vector_mode. + * optabs-query.c (can_vec_mask_load_store_p): Update call + to get_mask_mode. + * tree-vect-stmts.c (check_load_store_masking): Likewise, checking + first that the original mode really is a vector. + * tree.c (build_truth_vector_type_for): Likewise. + * config/aarch64/aarch64.c (aarch64_get_mask_mode): Update for new + get_mode_mask interface. + (aarch64_expand_sve_vcond): Update call accordingly. + * config/gcn/gcn.c (gcn_vectorize_get_mask_mode): Update for new + get_mode_mask interface. + * config/i386/i386.c (ix86_get_mask_mode): Likewise. - * configure.ac: Add --disable-gcov option. - * configure: Regenerate. - * Makefile.in: Honour @enable_gcov@. - * doc/install.texi: Document --disable-gcov. + 2019-11-14 Richard Sandiford + + * tree.h (build_truth_vector_type): Delete. + (build_same_sized_truth_vector_type): Likewise. + * tree.c (build_truth_vector_type): Rename to... + (build_truth_vector_type_for): ...this. Make static and take + a vector type as argument. + (truth_type_for): Update accordingly. + (build_same_sized_truth_vector_type): Delete. + * tree-vect-generic.c (expand_vector_divmod): Use truth_type_for + instead of build_same_sized_truth_vector_type. + * tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise. + (vect_record_loop_mask, vect_get_loop_mask): Likewise. + * tree-vect-patterns.c (build_mask_conversion): Likeise. + * tree-vect-slp.c (vect_get_constant_vectors): Likewise. + * tree-vect-stmts.c (vect_get_vec_def_for_operand): Likewise. + (vect_build_gather_load_calls, vectorizable_call): Likewise. + (scan_store_can_perm_p, vectorizable_scan_store): Likewise. + (vectorizable_store, vectorizable_condition): Likewise. + (get_mask_type_for_scalar_type, get_same_sized_vectype): Likewise. + (vect_get_mask_type_for_stmt): Use truth_type_for instead of + build_truth_vector_type. + * config/aarch64/aarch64-sve-builtins.cc (gimple_folder::convert_pred): + Use truth_type_for instead of build_same_sized_truth_vector_type. + * config/rs6000/rs6000-call.c (fold_build_vec_cmp): Likewise. + + 2019-11-14 Richard Sandiford + + * tree.h (build_truth_vector_type_for_mode): Declare. + * tree.c (build_truth_vector_type_for_mode): New function, + split out from... + (build_truth_vector_type): ...here. + (build_opaque_vector_type): Fix head comment. + * tree-vectorizer.h (supportable_narrowing_operation): Remove + vec_info parameter. + (vect_halve_mask_nunits): Replace vec_info parameter with the + mode of the new vector. + (vect_double_mask_nunits): Likewise. + * tree-vect-loop.c (vect_halve_mask_nunits): Likewise. + (vect_double_mask_nunits): Likewise. + * tree-vect-loop-manip.c: Include insn-config.h, rtl.h and recog.h. + (vect_maybe_permute_loop_masks): Remove vinfo parameter. Update call + to vect_halve_mask_nunits, getting the required mode from the unpack + patterns. + (vect_set_loop_condition_masked): Update call accordingly. + * tree-vect-stmts.c (supportable_narrowing_operation): Remove vec_info + parameter and update call to vect_double_mask_nunits. + (vectorizable_conversion): Update call accordingly. + (simple_integer_narrowing): Likewise. Remove vec_info parameter. + (vectorizable_call): Update call accordingly. + (supportable_widening_operation): Update call to + vect_halve_mask_nunits. + * config/aarch64/aarch64-sve-builtins.cc (register_builtin_types): + Use build_truth_vector_type_mode instead of build_truth_vector_type. + + 2019-11-14 Richard Sandiford + + * machmode.h (mode_for_int_vector): Delete. + (related_int_vector_mode): Declare. + * stor-layout.c (mode_for_int_vector): Delete. + (related_int_vector_mode): New function. + * optabs.c (expand_vec_perm_1): Use related_int_vector_mode + instead of mode_for_int_vector. + (expand_vec_perm_const): Likewise. + * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Likewise. + (aarch64_evpc_sve_tbl): Likewise. + * config/s390/s390.c (s390_expand_vec_compare_cc): Likewise. + (s390_expand_vcond): Likewise. + + 2019-11-14 Richard Sandiford + + * target.def (related_mode): New hook. + * doc/tm.texi.in (TARGET_VECTORIZE_RELATED_MODE): New hook. + * doc/tm.texi: Regenerate. + * targhooks.h (default_vectorize_related_mode): Declare. + * targhooks.c (default_vectorize_related_mode): New function. + * machmode.h (related_vector_mode): Declare. + * stor-layout.c (related_vector_mode): New function. + * expmed.c (extract_bit_field_1): Use it instead of mode_for_vector. + * optabs-query.c (qimode_for_vec_perm): Likewise. + * tree-vect-stmts.c (get_group_load_store_type): Likewise. + (vectorizable_store, vectorizable_load): Likewise + + 2019-11-14 Richard Henderson + + * config/arm/aarch-common-protos.h (arm_md_asm_adjust): Declare. + * config/arm/aarch-common.c (arm_md_asm_adjust): New. + * config/arm/arm-c.c (arm_cpu_builtins): Define + __GCC_ASM_FLAG_OUTPUTS__. + * config/arm/arm.c (TARGET_MD_ASM_ADJUST): New. + * config/aarch64/aarch64-c.c (aarch64_define_unconditional_macros): + Define __GCC_ASM_FLAG_OUTPUTS__. + * config/aarch64/aarch64.c (TARGET_MD_ASM_ADJUST): New. + * doc/extend.texi (FlagOutputOperands): Add documentation + for ARM and AArch64. + + * config/arm/arm-modes.def (CC_NZ): Rename from CC_NOOV. + * config/arm/predicates.md (nz_comparison_operator): Rename + from noov_comparison_operator. + * config/arm/arm.c (arm_select_cc_mode): Use CC_NZmode name. + (arm_gen_dicompare_reg): Likewise. + (maybe_get_arm_condition_code): Likewise. + (thumb1_final_prescan_insn): Likewise. + (arm_emit_coreregs_64bit_shift): Likewise. + * config/arm/arm.md (addsi3_compare0): Likewise. + (*addsi3_compare0_scratch, subsi3_compare0): Likewise. + (*mulsi3_compare0, *mulsi3_compare0_v6): Likewise. + (*mulsi3_compare0_scratch, *mulsi3_compare0_scratch_v6): Likewise. + (*mulsi3addsi_compare0, *mulsi3addsi_compare0_v6): Likewise. + (*mulsi3addsi_compare0_scratch): Likewise. + (*mulsi3addsi_compare0_scratch_v6): Likewise. + (*andsi3_compare0, *andsi3_compare0_scratch): Likewise. + (*zeroextractsi_compare0_scratch): Likewise. + (*ne_zeroextractsi, *ne_zeroextractsi_shifted): Likewise. + (*ite_ne_zeroextractsi, *ite_ne_zeroextractsi_shifted): Likewise. + (andsi_not_shiftsi_si_scc_no_reuse): Likewise. + (andsi_not_shiftsi_si_scc): Likewise. + (*andsi_notsi_si_compare0, *andsi_notsi_si_compare0_scratch): Likewise. + (*iorsi3_compare0, *iorsi3_compare0_scratch): Likewise. + (*xorsi3_compare0, *xorsi3_compare0_scratch): Likewise. + (*shiftsi3_compare0, *shiftsi3_compare0_scratch): Likewise. + (*not_shiftsi_compare0, *not_shiftsi_compare0_scratch): Likewise. + (*notsi_compare0, *notsi_compare0_scratch): Likewise. + (return_addr_mask, *check_arch2): Likewise. + (*arith_shiftsi_compare0, *arith_shiftsi_compare0_scratch): Likewise. + (*sub_shiftsi_compare0, *sub_shiftsi_compare0_scratch): Likewise. + (compare_scc splitters): Likewise. + (movcond_addsi): Likewise. + * config/arm/thumb2.md (thumb2_addsi3_compare0): Likewise. + (*thumb2_addsi3_compare0_scratch): Likewise. + (*thumb2_mulsi_short_compare0): Likewise. + (*thumb2_mulsi_short_compare0_scratch): Likewise. + (compare peephole2s): Likewise. + * config/arm/thumb1.md (thumb1_cbz): Use CC_NZmode and + nz_comparison_operator names. + (cbranchsi4_insn): Likewise. + + * config/arm/constraints.md (c): Use cc_register predicate. + + * config/aarch64/constraints.md (c): New constraint. + + 2019-11-14 Jan Hubicka + + * ipa-fnsummary.c (ipa_call_context::estimate_size_and_time, + ipa_merge_fn_summary_after_inlining): Micro optimize. + + 2019-11-14 Jan Hubicka + + * params.opt (max-inline-insns-single-O2): Set to 70 (instead of 30). + + 2019-11-14 Jan Hubicka + + * ipa-cp.c (ipa_vr_operation_and_type_effects): Move up in file. + (ipa_value_range_from_jfunc): New function. + * ipa-fnsummary.c (evaluate_conditions_for_known_args): Add + known_value_ranges parameter; use it to evalulate conditions. + (evaluate_properties_for_edge): Compute known value ranges. + (ipa_fn_summary_t::duplicate): Update use of + evaluate_conditions_for_known_args. + (estimate_ipcp_clone_size_and_time): Likewise. + (ipa_merge_fn_summary_after_inlining): Likewise. + * ipa-prop.h (ipa_value_range_from_jfunc): Declare. - 2018-06-27 Kyrylo Tkachov + 2019-11-14 Martin Liska - * config/arm/arm-cpus.in (cortex-a76): New entry. - (cortex-a76.cortex-a55): Likewise. - * config/arm/arm-tables.opt: Regenerate. - * config/arm/arm-tune.md: Likewise. - * config/arm/driver-arm.c (arm_cpu_table): Add Cortex-A76 entry. - * doc/invoke.texi (ARM Options): Document cortex-a76 and - cortex-a76.cortex-a55. + * ipa-inline.c (want_inline_small_function_p): Use + CIF_MAX_INLINE_INSNS_AUTO_LIMIT instead + of CIF_MAX_INLINE_INSNS_SINGLE_O2_LIMIT. - 2018-06-27 Tamar Christina + 2019-11-14 Martin Liska - PR target/85769 - * config/aarch64/aarch64.md (*movhf_aarch64): Add dup v0.4h pattern. + * ipa-cp.c (devirtualization_time_bonus): Use opt_for_fn + of a callee to get value of the param. + * ipa-inline.c (inline_insns_auto): Use proper + opt_for_fn. + * opts.c (maybe_default_option): Do not overwrite param + value if optimization level does not match. Note that + params usually have default value set via Init() keyword. + * params.opt: Remove -param=max-inline-insns-auto-O2. + * cif-code.def (MAX_INLINE_INSNS_AUTO_O2_LIMIT): Remove. + * doc/invoke.texi: Remove documentation of + max-inline-insns-auto-O2. - 2018-06-27 Siddhesh Poyarekar + 2019-11-14 Martin Liska - * config/aarch64/aarch64.h (CALL_USE_REGISTERS): Fix obsolete - comment. - (EPILOGUE_USES): Likewise. - - 2018-06-26 Eric Botcazou - - * tree-inline.c (remap_location): New function extracted from... - (copy_edges_for_bb): Add ID parameter. Remap goto_locus. - (copy_phis_for_bb): ...here. Call remap_location. - (copy_cfg_body): Adjust call to copy_edges_for_bb. - - 2018-06-26 Aaron Sawdey - - * config/rs6000/rs6000-string.c (expand_block_clear): Don't use - unaligned vsx for 16B memset. - - 2018-06-26 Segher Boessenkool - - PR target/86285 - * config/rs6000/rs6000.c (rs6000_init_builtins): Do not set - ieee128_float_type_node to long_double_type_node unless - TARGET_LONG_DOUBLE_128 is set. - - 2018-06-26 David Malcolm - - * cfgloop.c (get_loop_location): Convert return type from - location_t to dump_user_location_t, replacing INSN_LOCATION lookups - by implicit construction from rtx_insn *, and using - dump_user_location_t::from_function_decl for the fallback case. - * cfgloop.h (get_loop_location): Convert return type from - location_t to dump_user_location_t. - * cgraphunit.c (walk_polymorphic_call_targets): Update call to - dump_printf_loc to pass in a dump_location_t rather than a - location_t, via the gimple stmt. - * coverage.c (get_coverage_counts): Update calls to - dump_printf_loc to pass in dump_location_t rather than a - location_t. - * doc/optinfo.texi (Dump types): Convert example of - dump_printf_loc from taking "locus" to taking "insn". Update - description of the "_loc" calls to cover dump_location_t. - * dumpfile.c: Include "backend.h", "gimple.h", "rtl.h", and - "selftest.h". - (dump_user_location_t::dump_user_location_t): New constructors, - from gimple *stmt and rtx_insn *. - (dump_user_location_t::from_function_decl): New function. - (dump_loc): Make static. - (dump_gimple_stmt_loc): Convert param "loc" from location_t to - const dump_location_t &. - (dump_generic_expr_loc): Delete. - (dump_printf_loc): Convert param "loc" from location_t to - const dump_location_t &. - (selftest::test_impl_location): New function. - (selftest::dumpfile_c_tests): New function. - * dumpfile.h: Include "profile-count.h". - (class dump_user_location_t): New class. - (struct dump_impl_location_t): New struct. - (class dump_location_t): New class. - (dump_printf_loc): Convert 2nd param from source_location to - const dump_location_t &. - (dump_generic_expr_loc): Delete. - (dump_gimple_stmt_loc): Convert 2nd param from source_location to - const dump_location_t &. - * gimple-fold.c (fold_gimple_assign): Update call to - dump_printf_loc to pass in a dump_location_t rather than a - location_t, via the gimple stmt. - (gimple_fold_call): Likewise. - * gimple-loop-interchange.cc - (loop_cand::analyze_iloop_reduction_var): Update for change to - check_reduction_path. - (tree_loop_interchange::interchange): Update for change to - find_loop_location. - * graphite-isl-ast-to-gimple.c (scop_to_isl_ast): Update for - change in return-type of find_loop_location. - (graphite_regenerate_ast_isl): Likewise. - * graphite-optimize-isl.c (optimize_isl): Likewise. - * graphite.c (graphite_transform_loops): Likewise. - * ipa-devirt.c (ipa_devirt): Update call to dump_printf_loc to - pass in a dump_location_t rather than a location_t, via the - gimple stmt. - * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise. - * ipa.c (walk_polymorphic_call_targets): Likewise. - * loop-unroll.c (report_unroll): Convert "locus" param from - location_t to dump_location_t. - (decide_unrolling): Update for change to get_loop_location's - return type. - * omp-grid.c (struct grid_prop): Convert field "target_loc" from - location_t to dump_user_location_t. - (grid_find_single_omp_among_assignments_1): Updates calls to - dump_printf_loc to pass in a dump_location_t rather than a - location_t, via the gimple stmt. - (grid_parallel_clauses_gridifiable): Convert "tloc" from - location_t to dump_location_t. Updates calls to dump_printf_loc - to pass in a dump_location_t rather than a location_t, via the - gimple stmt. - (grid_inner_loop_gridifiable_p): Likewise. - (grid_dist_follows_simple_pattern): Likewise. - (grid_gfor_follows_tiling_pattern): Likewise. - (grid_target_follows_gridifiable_pattern): Likewise. - (grid_attempt_target_gridification): Convert initialization - of local "grid" from memset to zero-initialization; FIXME: does - this require C++11? Update call to dump_printf_loc to pass in a - optinfo_location rather than a location_t, via the gimple stmt. - * profile.c (read_profile_edge_counts): Updates call to - dump_printf_loc to pass in a dump_location_t rather than a - location_t - (compute_branch_probabilities): Likewise. - * selftest-run-tests.c (selftest::run_tests): Call - dumpfile_c_tests. - * selftest.h (dumpfile_c_tests): New decl. - * tree-loop-distribution.c (pass_loop_distribution::execute): - Update for change in return type of find_loop_location. - * tree-parloops.c (parallelize_loops): Likewise. - * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Convert - "locus" from location_t to dump_user_location_t. - (canonicalize_loop_induction_variables): Likewise. - * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize_loop): Update - for change in return type of find_loop_location. - * tree-ssa-loop-niter.c (number_of_iterations_exit): Update call - to dump_printf_loc to pass in a dump_location_t rather than a - location_t, via the stmt. - * tree-ssa-sccvn.c (eliminate_dom_walker::before_dom_children): - Likewise. - * tree-vect-loop-manip.c (find_loop_location): Convert return - type from source_location to dump_user_location_t. - (vect_do_peeling): Update for above change. - (vect_loop_versioning): Update for change in type of - vect_location. - * tree-vect-loop.c (check_reduction_path): Convert "loc" param - from location_t to dump_user_location_t. - (vect_estimate_min_profitable_iters): Update for change in type - of vect_location. - * tree-vect-slp.c (vect_print_slp_tree): Convert param "loc" from - location_t to dump_location_t. - (vect_slp_bb): Update for change in type of vect_location. - * tree-vectorizer.c (vect_location): Convert from source_location - to dump_user_location_t. - (try_vectorize_loop_1): Update for change in vect_location's type. - (vectorize_loops): Likewise. - (increase_alignment): Likewise. - * tree-vectorizer.h (vect_location): Convert from source_location - to dump_user_location_t. - (find_loop_location): Convert return type from source_location to - dump_user_location_t. - (check_reduction_path): Convert 1st param from location_t to - dump_user_location_t. - * value-prof.c (check_counter): Update call to dump_printf_loc to - pass in a dump_user_location_t rather than a location_t; update - call to error_at for change in type of "locus". - (check_ic_target): Update call to dump_printf_loc to - pass in a dump_user_location_t rather than a location_t, via the - call_stmt. - - 2018-06-26 Robin Dapp - - * config/s390/s390.h (enum processor_flags): Do not use - default tune parameter when -march was specified. - - 2018-06-26 Jakub Jelinek - - PR target/86314 - * config/i386/i386.md (setcc + movzbl to xor + setcc peephole2s): - Check reg_overlap_mentioned_p in addition to reg_set_p with the same - operands. + * tree-switch-conversion.c (switch_conversion::switch_conversion): + Do not initialize m_other_count. + (switch_conversion::collect): Do not count m_default_count and + m_other_count as we use frequencies for edges. + * tree-switch-conversion.h: Remove m_default_count and m_other_count. - 2018-06-26 Richard Biener + 2019-11-14 Martin Liska - PR tree-optimization/86287 - PR bootstrap/86316 - * tree-vect-loop.c (vect_transform_loop_stmt): Fix read-after-free. - (vect_analyze_loop): Initialize n_stmts. + PR other/92329 + * doc/invoke.texi: Document -fallocation-dce. - 2018-06-26 Richard Biener + 2019-11-14 Martin Liska - PR middle-end/86271 - * fold-const.c (fold_convertible_p): Pointer extension - isn't valid. + PR target/92389 + * config/i386/i386.h: Add PTA_AVX512VPOPCNTDQ to + PTA_ICELAKE_CLIENT which is later interited by + PTA_ICELAKE_SERVER and PTA_TIGERLAKE. - 2018-06-26 Alexandre Oliva + 2019-11-14 Martin Liska - PR debug/86064 - * dwarf2out.c (loc_list_has_views): Adjust comments. - (dw_loc_list): Split single cross-partition range with - nonzero locview. + * ipa-icf.c (sem_item_optimizer::execute): Save + loaded_symbols. + (sem_item_optimizer::parse_nonsingleton_classes): + Return number of loaded symbols. + (sem_item_optimizer::merge_classes): Print + statistics about totally needed symbols. + * ipa-icf.h (parse_nonsingleton_classes): Change return + type. + (merge_classes): Add one argument. + + 2019-11-14 Martin Liska + + * ipa-icf-gimple.c (func_checker::hash_operand): Improve + func_checker::hash_operand by handling of FIELD_DECLs. + + 2019-11-14 Martin Liska + + * ipa-icf-gimple.h (func_checker::func_checker): Add + default constructor. + * ipa-icf.c (sem_function::init): Make operand_equal_p + and hash_operand public. + (sem_item::add_expr): Remove. + (sem_item::add_type): Remove. + (sem_function::hash_stmt): Use m_checker for hashing + of GIMPLE statements. + (sem_function::parse): Init with checker. + (sem_variable::parse): Pass NULL as checker. + (sem_item_optimizer::parse_funcs_and_vars): + Pass checker to ::parse function. + (sem_item_optimizer::parse_nonsingleton_classes): Likewise. + (sem_variable::parse): New function. + (sem_variable::get_hash): Only return computed hash value. + (sem_variable::init): Initialize hash of a variable. + * ipa-icf.h: Remove add_expr, add_type and add func_checker + to couple of functions as a new argument. + + 2019-11-14 Martin Liska + + * ipa-icf-gimple.c (func_checker::compare_gimple_call): Update + bail out reason. + (func_checker::compare_gimple_assign): Likewise. + + 2019-11-14 Jakub Jelinek + + * config/i386/i386-options.c (ix86_omp_device_kind_arch_isa): Don't + change sse4.2 to sse4_2 and sse4.1 to sse4.1. + * config/i386/t-omp-device (omp-device-properties-i386): Likewise. + + * omp-general.c (omp_context_name_list_prop): New function. + (omp_context_selector_matches): Use it. Return 0 if it returns + NULL. + (omp_context_selector_props_compare): Allow equivalency of an + identifier and a string literal containing no embedded zeros. + + 2019-11-14 Aldy Hernandez + + * range-op.cc (RANGE3): Remove. + (range_tests): Remove all selftest that check for multi-ranges. + Put tests in namespace selftest. + * selftest.h: Move range_tests into namespace selftest. + * value-range.h (class value_range): Unfriend range_tests. + + 2019-11-14 Aldy Hernandez + + * tree-vrp.c (range_fold_binary_symbolics_p): Adapt for + normalize_symbolics and normalize_addresses working in place. + (range_fold_unary_symbolics_p): Same. + (range_fold_unary_symbolics_p): Same. + * value-range.cc (num_pairs): Same. + (lower_bound): Same. + (upper_bound): Same. + (contains_p): Same. + (normalize_addresses): Same. + (normalize_symbolics): Same. + * value-range.h (normalize_symbolics): Same. + (normalize_addresses): Same. + + 2019-11-14 Feng Xue + + PR ipa/91682 + * ipa-prop.h (jump_func_type): New value IPA_JF_LOAD_AGG. + (ipa_load_agg_data, ipa_agg_value, ipa_agg_value_set): New structs. + (ipa_agg_jf_item): Add new field jftype and type, redefine field value. + (ipa_agg_jump_function): Remove member function equal_to. + (ipa_agg_jump_function_p): Remove typedef. + (ipa_copy_agg_values, ipa_release_agg_values): New functions. + * ipa-prop.c (ipa_print_node_jump_functions_for_edge): Dump + information for aggregate jump function. + (get_ssa_def_if_simple_copy): Add new parameter rhs_stmt to + record last definition statement. + (load_from_unmodified_param_or_agg): New function. + (ipa_known_agg_contents_list): Add new field type and value, remove + field constant. + (build_agg_jump_func_from_list): Rename parameter const_count to + value_count, build aggregate jump function from ipa_load_agg_data. + (analyze_agg_content_value): New function. + (extract_mem_content): Analyze memory store assignment to prepare + information for aggregate jump function generation. + (determine_known_aggregate_parts): Add new parameter fbi, remove + parameter aa_walk_budeget_p. + (update_jump_functions_after_inlining): Update aggregate jump function. + (ipa_find_agg_cst_for_param): Change type of parameter agg. + (try_make_edge_direct_simple_call): Add new parameter new_root. + (try_make_edge_direct_virtual_call): Add new parameter new_root and + new_root_info. + (update_indirect_edges_after_inlining): Pass new argument to + try_make_edge_direct_simple_call and try_make_edge_direct_virtual_call. + (ipa_write_jump_function): Write aggregate jump function to file. + (ipa_read_jump_function): Read aggregate jump function from file. + (ipa_agg_value::equal_to): Migrate from ipa_agg_jf_item::equal_to. + * ipa-cp.c (ipa_get_jf_arith_result): New function. + (ipa_agg_value_from_node): Likewise. + (ipa_agg_value_set_from_jfunc): Likewise. + (propagate_vals_across_arith_jfunc): Likewise. + (propagate_aggregate_lattice): Likewise. + (ipa_get_jf_pass_through_result): Call ipa_get_jf_arith_result. + (propagate_vals_across_pass_through): Call + propagate_vals_across_arith_jfunc. + (get_clone_agg_value): Move forward. + (propagate_aggs_across_jump_function): Handle value propagation for + aggregate jump function. + (agg_jmp_p_vec_for_t_vec): Remove. + (context_independent_aggregate_values): Replace vec + with vec. + (copy_plats_to_inter, intersect_with_plats): Likewise. + (agg_replacements_to_vector, intersect_with_agg_replacements): Likewise. + (intersect_aggregate_with_edge): Likewise. + (find_aggregate_values_for_callers_subset): Likewise. + (cgraph_edge_brings_all_agg_vals_for_node): Likewise. + (estimate_local_effects): Replace vec and + vec with vec. + (gather_context_independent_values): Likewise. + (perform_estimation_of_a_value, decide_whether_version_node): Likewise. + * ipa-fnsummary.c (evaluate_conditions_for_known_args): Replace + vec with vec. + (evaluate_properties_for_edge): Likewise. + (estimate_edge_devirt_benefit): Likewise. + (estimate_edge_size_and_time): Likewise. + (estimate_calls_size_and_time): Likewise. + (ipa_call_context::ipa_call_context): Likewise. + (estimate_ipcp_clone_size_and_time): Likewise. + * ipa-fnsummary.h (ipa_call_context): Replace + vec with vec. + * ipa-inline-analysis.c (do_estimate_edge_time): Replace + vec with vec. + (do_estimate_edge_size): Likewise. + (do_estimate_edge_hints): Likewise. - 2018-06-25 Jeff Law + 2019-11-13 Jan Hubicka - * common/config/v850/v850-common.c (TARGET_DEFAULT_TARGET_FLAGS): Turn - on -mbig-switch by default. + * ipa-cp.c (propagate_vr_across_jump_function): Propagate also across + binary operations. - * config/v850/predicates.md (const_float_1_operand): Fix match_code - test. - (const_float_0_operand): Remove unused predicate. - * config/v850/v850.md (define_constants): Remove UNSPEC_LOOP. - (define_c_enum unspec): Add LOOP, RCP and RSQRT constants. - (recipsf2): New expander. Original pattern now called - (recipsf2_insn). - (recipdf2, recipdf2_insn): Similarly. - (rsqrtsf2, rsqrtsf2_insn): Similarly - (rsqrtdf2, rsqrtdf2_insn): Similarly + 2019-11-13 Jan Hubicka - 2018-06-26 Gerald Pfeifer + * ipa-profile.c (check_argument_count): Check properly that e_info + is non-NULL; do not check descriptors. - * ginclude/stddef.h: Remove an obsolete comment on FreeBSD 5. - Simplify logic for FreeBSD (twice). + 2019-11-13 Jan Hubicka - 2018-06-25 Martin Sebor + * ipa-inline-analysis.c (do_estimate_edge_time): Relax + check for ipa profiles. - PR tree-optimization/86204 - * tree-ssa-strlen.c (handle_builtin_strlen): Avoid storing - a strnlen result if it's less than the length of the string. + 2019-11-13 Jan Hubicka - 2018-06-25 Martin Sebor + PR c++/92421 + * ipa-prop.c (update_indirect_edges_after_inlining): + Mark parameter as used. + * ipa-inline.c (recursive_inlining): Reset node cache + after inlining. + (inline_small_functions): Remove checking ifdef. + * ipa-inline-analysis.c (do_estimate_edge_time): Verify + cache consistency. - PR tree-optimization/85700 - * gimple-fold.c (gimple_fold_builtin_strncat): Adjust comment. - * tree-ssa-strlen.c (is_strlen_related_p): Handle integer subtraction. - (maybe_diag_stxncpy_trunc): Distinguish strncat from strncpy. + 2019-11-13 Jan Hubicka - 2018-06-25 Martin Sebor + PR ipa/92498 + * ipa-profile.c (check_argument_count): Do not ICE when descriptors + is NULL. + (ipa_profile): Fix reversed test. + + 2019-11-13 Jan Hubicka + + * ipa-cp.c (ignore_edge_p): Do not check caller flags. + (propagate_constants_topo): Fix typo. + + 2019-11-13 Aldy Hernandez + + * Makefile.in (OBJS): Add value-range.o. + (GTFILES): Add value-range.h. + * gengtype.c (open_base_files): Add value-range.h to list of + header files. + * tree-vrp.c: Move the following value_range related functions: + ranges_from_anti_range, value_range, check, equal_p, symbolic_p, + constant_p, set_undefined, set_varying, may_contain_p, + singleton_p, type, dump, dump_value_range, debug, vrp_val_max, + vrp_val_min, vrp_val_is_min, vrp_val_is_max, set, set_nonzero, + set_zero, vrp_operand_equal_p, range_has_numeric_bounds_p, + value_inside_range, ranges_from_anti_range, union_ranges, + intersect_ranges, intersect_helper, union_helper, union_, + normalize_addresses, normalize_symbolics, num_pairs, lower_bound, + upper_bound, contains_p, invert, intersect... + * value-range.cc: ...to here. + * tree-vrp.h: Move class value_range, enum_value_range_kind, and + associated inline methods from here... + * value-range.h: ...to here. + + 2019-11-13 Dragan Mladjenovic + + * config/mips/mips.md (rotr3): Sanitize the constant argument + instead of asserting its value. + + (2019-11-13 Aldy Hernandez + + * gimple-fold.c (size_must_be_zero_p): Rewrite use of value_range + constructors and set methods so value_range_kind is the last + argument and defaults to VR_RANGE. + * gimple-ssa-evrp-analyze.c (record_ranges_from_stmt): Same. + * ipa-cp.c (propagate_vr_across_jump_function): Same. + * ipa-prop.c (ipa_get_value_range): Same. + (ipa_compute_jump_functions_for_edge): Same. + * range-op.cc (value_range_from_overflowed_bounds): Same. + (operator_cast::op1_range): Same. + (range_tests): Same. + * range.cc (range_nonzero): Same. + * tree-ssanames.c (get_range_info): Same. + * tree-vrp.c (value_range_equiv::set): Same. + (value_range::value_range): Same. + (value_range_equiv::value_range_equiv): Same. + (value_range_equiv::update): Same. + (value_range_equiv::deep_copy): Same. + (value_range_equiv::move): Same. + (value_range_equiv::set_undefined): Same. + (value_range::set): Same. + (value_range::set_nonzero): Same. + (ranges_from_anti_range): Same. + (extract_range_from_plus_minus_expr): Same. + (value_range::intersect_helper): Same. + (value_range_equiv::intersect): Same. + (value_range::union_helper): Same. + (value_range_equiv::union_): Same. + (value_range::normalize_symbolics): Same. + (value_range::invert): Same. + (determine_value_range_1): Same. + * tree-vrp.h (class value_range): Same. + (class value_range_equiv): Same. + * vr-values.c (set_value_range_to_nonnegative): Same. + (set_value_range_to_truthvalue): Same. + (vr_values::update_value_range): Same. + (vr_values::extract_range_for_var_from_comparison_expr): Same. + (vr_values::extract_range_from_binary_expr): Same. + (vr_values::extract_range_from_comparison): Same. + (vr_values::extract_range_basic): Same. + (vr_values::adjust_range_with_scev): Same. + (vr_values::vrp_evaluate_conditional_warnv_with_ops): Same. + (vr_values::extract_range_from_phi_node): Same. + + 2019-11-13 Ulrich Drepper + + * tree-dump.c (dequeue_and_dump): Print first tree operand + for VIEW_CONVERT_EXPR. + + 2019-11-13 Joseph Myers + + * ginclude/float.c [__STDC_VERSION__ > 201710L] (FLT_NORM_MAX, + DBL_NORM_MAX, LDBL_NORM_MAX): Define. + * real.c (get_max_float): Add norm_max argument. + * real.h (get_max_float): Update prototype. + * builtins.c (fold_builtin_interclass_mathfn): Update calls to + get_max_float. + + 2019-11-13 Martin Liska + + * dbgcnt.c (test_sorted_dbg_counters): New. + (dbgcnt_c_tests): Likewise. + * selftest-run-tests.c (selftest::run_tests): Likewise. + * selftest.h (dbgcnt_c_tests): Likewise. + + 2019-11-13 Jan Hubicka + Martin Jambor - * doc/extend.texi (Zero-length arrays): Update and clarify. + PR ipa/92454 + * ipa-cp.c (spread_undeadness): Check that IPA_NODE_REF exists. + (identify_dead_nodes): Likewise. - 2018-06-25 Michael Meissner + 2019-11-13 Martin Liska - * config.gcc (powerpc64le*): Revert January 16th, 2018 patch that - added IEEE/IBM long double multilib support on PowerPC little - endian Linux systems. - * config/rs6000/linux64.h (MULTILIB_DEFAULTS_IEEE): Likewise. - (MULTILIB_DEFAULTS): Likewise. - * config/rs6000/rs6000.c (rs6000_option_override_internal): - Likewise. - * config/rs6000/rs6000.h (TARGET_IEEEQUAD_MULTILIB): Likewise. - * config/rs6000/t-ldouble-linux64le-ibm: Delete, no longer used. - * config/rs6000/t-ldouble-linux64le-ieee: Delete, no longer used. - - 2018-06-25 Alexander Monakov - - PR middle-end/86311 - * sort.cc (REORDER_23): Avoid memcpy with same destination and source. - (REORDER_45): Likewise. - - 2018-06-25 Jeff Law - - * config/v850/v850.md (divmodhi4): Make sure to sign extend the - dividend to 32 bits. Adjust length. - (udivmodhi4): Cleanup output template. Fix length. - - 2018-06-25 Carl Love - - * config/rs6000/vsx.md: Change word selector to prefered location. - - 2018-06-25 Richard Biener - - PR tree-optimization/86304 - * tree-vectorizer.c (vectorize_loops): Walk over new possibly - epilogue-if-converted loops as well. - - 2018-06-25 Jan Hubicka - - * lto-section-out.c (lto_begin_section): Do not print section - name for noaddr and unnumbered dumps. - - 2018-06-25 Richard Biener - - * tree-vectorizer.h (struct vec_info_shared): New structure - with parts split out from struct vec_info and loop_nest from - struct _loop_vec_info. - (struct vec_info): Adjust accordingly. - (struct _loop_vec_info): Likewise. - (LOOP_VINFO_LOOP_NEST): Adjust. - (LOOP_VINFO_DATAREFS): Likewise. - (LOOP_VINFO_DDRS): Likewise. - (struct _bb_vec_info): Likewise. - (BB_VINFO_DATAREFS): Likewise. - (BB_VINFO_DDRS): Likewise. - (struct _stmt_vec_info): Add dr_aux member. - (DR_VECT_AUX): Adjust to refer to member of DR_STMTs vinfo. - (DR_MISALIGNMENT_UNINITIALIZED): New. - (set_dr_misalignment): Adjust. - (dr_misalignment): Assert misalign isn't DR_MISALIGNMENT_UNINITIALIZED. - (vect_analyze_loop): Adjust prototype. - (vect_analyze_loop_form): Likewise. - * tree-vect-data-refs.c (vect_analyze_data_ref_dependences): - Compute dependences lazily. - (vect_record_base_alignments): Use shared datarefs/ddrs. - (vect_verify_datarefs_alignment): Likewise. - (vect_analyze_data_refs_alignment): Likewise. - (vect_analyze_data_ref_accesses): Likewise. - (vect_analyze_data_refs): Likewise. - * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Add - constructor parameter for shared part. - (vect_analyze_loop_form): Pass in shared part and adjust. - (vect_analyze_loop_2): Pass in storage for the number of - stmts. Move loop nest finding to the caller. Compute - datarefs lazily. - (vect_analyze_loop): Pass in shared part. - (vect_transform_loop): Verify shared datarefs are unchanged. - * tree-vect-slp.c (_bb_vec_info::_bb_vec_info): Add - constructor parameter for shared part. - (vect_slp_analyze_bb_1): Pass in shared part and adjust. - (vect_slp_bb): Verify shared datarefs are unchanged before - transform. - * tree-vect-stmts.c (ensure_base_align): Adjust for DR_AUX - change. - (new_stmt_vec_info): Initialize DR_AUX misalignment to - DR_MISALIGNMENT_UNINITIALIZED. - * tree-vectorizer.c (vec_info::vec_info): Add constructor - parameter for shared part. - (vec_info::~vec_info): Adjust. - (vec_info_shared::vec_info_shared): New. - (vec_info_shared::~vec_info_shared): Likewise. - (vec_info_shared::save_datarefs): Likewise. - (vec_info_shared::check_datarefs): Likewise. - (try_vectorize_loop_1): Construct shared part live for analyses - of a single loop for multiple vector sizes. - * tree-parloops.c (gather_scalar_reductions): Adjust. + * ipa-icf.c (sem_function::equals_private): Do not overuse + push/pop_cfun functions. - 2018-06-25 Richard Biener + 2019-11-13 Martin Liska - * tree-vect-data-refs.c (vect_find_stmt_data_reference): Modify - DR for SIMD lane accesses here and mark DR with (void *)-1 aux. - (vect_analyze_data_refs): Remove similar code from here and - simplify accordingly. + * common.opt: Document change of -fdbg-cnt option. + * dbgcnt.c (DEBUG_COUNTER): Remove. + (dbg_cnt_is_enabled): Remove. + (dbg_cnt): Work with new intervals. + (dbg_cnt_set_limit_by_index): Set to new + list of intervals. + (dbg_cnt_set_limit_by_name): Likewise. + (dbg_cnt_process_single_pair): Process new format. + (dbg_cnt_process_opt): Likewise. + (dbg_cnt_list_all_counters): Likewise. + * doc/invoke.texi: Document change of -fdbg-cnt option. + (cmp_tuples): New. - 2018-06-25 Richard Biener + 2019-11-13 Jan Hubicka - * tree-vect-data-refs.c (vect_check_gather_scatter): Fail - for reverse storage order accesses rather than asserting - they cannot happen here. + * ipa-inline.c (ipa_inline): Check that function is defined before + flattening. - 2018-06-25 Tom de Vries + 2019-11-13 Andrew Stubbs + Julian Brown - PR debug/86257 - * config/i386/i386.md (define_insn "*tls_global_dynamic_64_"): - Use data16 instead of .byte for insn prefix. + * config/gcn/gcn.c (gcn_goacc_validate_dims): Ensure + flag_worker_partitioning is not set. + (TARGET_GOACC_WORKER_PARTITIONING): Remove target hook definition. + * config/gcn/gcn.opt (macc-experimental-workers): Default to off. - 2018-06-25 Andreas Krebbel + 2019-11-13 Andrew Stubbs - PR C++/86082 - * parser.c (make_char_string_pack): Pass this literal chars - through cpp_interpret_string. - (cp_parser_userdef_numeric_literal): Check the result of - make_char_string_pack. + * config/gcn/gcn-run.c (heap_region): New global variable. + (struct hsa_runtime_fn_info): Add hsa_memory_assign_agent_fn. + (init_hsa_runtime_functions): Initialize hsa_memory_assign_agent. + (get_kernarg_region): Move contents to .... + (get_memory_region): .... here. + (get_heap_region): New function. + (init_device): Initialize the heap_region. + (device_malloc): Add region parameter. + (struct kernargs): Move heap .... + (heap): ... to global scope. + (main): Allocate heap separate to kernargs. - 2018-06-24 Maya Rashish + 2019-11-13 Jan Hubicka - * ginclude/stddef.h: Simplify conditions around avoiding - re-definition of __size_t. + * ipa-prop.c (ipa_print_node_jump_functions, + ipa_print_node_params): Print info about missing summaries. - 2018-06-22 Jan Hubicka + 2019-11-13 Richard Sandiford - * lto-streamer-out.c (tree_is_indexable): Make LABEL_DECL nonindexable - unless it is forced or nonlocal; assert that we stream no IMPORTED_DECL. + * tree-vect-loop.c (vect_estimate_min_profitable_iters): Include + the cost of generating loop masks. - 2018-06-22 Maya Rashish + 2019-11-13 Richard Sandiford - * doc/invoke.texi (mno-fancy-math-387): Update for changes - made to OpenBSD and NetBSD through the years. + * tree-vectorizer.h (vect_apply_runtime_profitability_check_p): + New function. + * tree-vect-loop-manip.c (vect_loop_versioning): Use it. + * tree-vect-loop.c (vect_analyze_loop_2): Likewise. + (vect_transform_loop): Likewise. + (vect_analyze_loop_costing): Don't take the cost of versioning + into account for the static profitability threshold if it turns + out that no versioning is needed. - 2018-06-22 Kelvin Nilsen + 2019-11-13 Jan Hubicka - * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Change - behavior of vec_pack (vector double, vector double) to match - behavior of vec_float2 (vector double, vector double). + * ipa.c (cgraph_build_static_cdtor): Pass optimization_default_node + and target_option_default_node to get -fprofile-generate ctors working + right with LTO. - 2018-06-22 Olivier Hainque + 2019-11-13 Richard Sandiford - * gimplify.c (gimplify_function_tree): Prevent creation - of a trampoline for the address of the current function - passed to entry/exit instrumentation hooks. + * tree-vectorizer.h (vect_nop_conversion_p): Declare. + * tree-vect-stmts.c (vect_nop_conversion_p): New function. + (vectorizable_assignment): Don't add a cost for nop conversions. + * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost): + Likewise. + * tree-vect-slp.c (vect_bb_slp_scalar_cost): Likewise. - 2018-06-22 Aaron Sawdey + 2019-11-13 Richard Sandiford - PR target/86222 - * config/rs6000/rs6000-string.c (expand_strn_compare): Handle -m32 - correctly. + * tree-vect-stmts.c (vect_model_promotion_demotion_cost): Take the + number of ncopies as an additional argument. + (vectorizable_conversion): Update call accordingly. Use "modifier" + to check whether a conversion is between vectors with the same + numbers of units. - 2018-06-22 Martin Liska + 2019-11-13 Richard Sandiford - PR tree-optimization/86263 - * tree-switch-conversion.c (jump_table_cluster::find_jump_tables): - Bail out if is_enabled is false. - * tree-switch-conversion.h (jump_table_cluster::is_enabled): - New declaration. - (jump_table_cluster::is_enabled): New function. + * config/aarch64/aarch64-sve-builtins-functions.h + (unary_count::expand): Use aarch64_sve_int_mode instead of + mode_for_int_vector. - 2018-06-22 Jan Hubicka + 2019-11-13 Martin Liska - * lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream - BINFO_BASE_ACCESSES and BINFO_VPTR_FIELD. - * tree-streamer-in.c (streamer_read_tree_bitfields): Likewise. - (lto_input_ts_binfo_tree_pointers): Likewise. - * tree-streamer-out.c (streamer_write_tree_bitfields, - write_ts_binfo_tree_pointers): Likewise. - * tree.c (free_lang_data_in_binfo): Clear BINFO_VPTR_FIELD. + * opts.c: Update comment about OPT_LEVELS_2_PLUS_SPEED_ONLY. - 2018-06-22 Jan Hubicka + 2019-11-13 Martin Liska - * tree.c (free_lang_data_in_type): Free all TYPE_VFIELDs. + * tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): + Remove call to finalize_options_struct. - 2018-06-22 Martin Liska + 2019-11-13 Georg-Johann Lay - * symbol-summary.h (get): Make it pure and inline move - functionality from ::get function. - (get): Remove and inline into ::get and ::get_create. - (get_create): Move code from ::get function. + PR target/92055 + * config/avr/t-avr (avr-mcus): Do not depend on + $(srcdir)/config/avr/t-multilib. - 2018-06-22 Rainer Orth + 2019-11-13 Richard Biener - PR target/85994 - * config/i386/sol2.h (CPP_SPEC): Don't pass -P for - -x assembler-with-cpp. + PR tree-optimization/92473 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Perform + direct optab reduction in the correct type. - 2018-06-22 Rainer Orth + 2019-11-12 Segher Boessenkool - * config/sol2.h (TARGET_OS_CPP_BUILTINS): Define - _FILE_OFFSET_BITS=64 for C++. + * config/rs6000/rs6000.md (rs6000_set_fpscr_drn): Use ULL on big + hexadecimal literal. - 2018-06-21 Michael Meissner + 2019-11-12 Segher Boessenkool - * config/rs6000/rs6000.md (extendtfif2): Add missing 128-bit - conversion insn that shows up when pr85657-3.c is compiled using - IEEE 128-bit long double. - (neg2_internal): Use the correct mode to check whether the - mode is IBM extended. - * config/rs6000/rs6000.c (init_float128_ieee): Prevent complex - multiply and divide external functions from being created more - than once. + * config/rs6000/vsx.md (xscmpexpdp_ for CMP_TEST): Handle + UNORDERED if !HONOR_NANS (DFmode). + (xscmpexpqp__ for CMP_TEST and IEEE128): Handle UNORDERED + if !HONOR_NANS (mode). - 2018-06-21 Eric Botcazou + 2019-11-12 Jan Hubicka - * cfgrtl.c (fixup_reorder_chain): Do not emit NOPs in DECL_IGNORED_P - functions. - (rtl_merge_blocks): Likewise. Do not emit a NOP if the location of - the edge can be forwarded. - (cfg_layout_merge_blocks): Likewise. + * ipa-cp.c (ignore_edge_p): Also look for optimize flag. + (ipcp_verify_propagated_values): Likewise. + (propagate_constants_across_call): Likewise. + (propagate_constants_topo): Likewise. + (ipcp_propagate_stage): Likewise. - 2018-06-21 Eric Botcazou + 2019-11-12 Jan Hubicka - * except.c (finish_eh_generation): Commit edge insertions only after - the EH edges have been redirected from post-landing to landing pads. + PR ipa/92471 + * ipa-profile.c (check_argument_count): Break out from ...; + watch for missing summaries. + (ipa_profile): Here. - 2018-06-21 Eric Botcazou + 2019-11-12 Martin Sebor - * tree-nested.c (get_frame_type): Use create_tmp_var_raw instead of - create_tmp_var_for to create the FRAME decl. - (finalize_nesting_tree_1): Do not unchain the FRAME decl. + PR tree-optimization/92412 + * targhooks.c (default_ref_may_alias_errno): Errono can only alias + extern variables. - 2018-06-21 Eric Botcazou + 2019-11-12 Martin Sebor - * tree-inline.c (copy_edges_for_bb): Minor tweak. - (maybe_move_debug_stmts_to_successors): Also reset the locus of the - debug statement when resetting its value. - (expand_call_inline): Copy the locus of the call onto the assignment - of the return value, if any. Use local variable in more cases. + PR middle-end/83688 + * gimple-ssa-sprintf.c (format_result::alias_info): New struct. + (directive::argno): New member. + (format_result::aliases, format_result::alias_count): New data members. + (format_result::append_alias): New member function. + (fmtresult::dst_offset): New data member. + (pass_sprintf_length::call_info::dst_origin): New data member. + (pass_sprintf_length::call_info::dst_field, dst_offset): Same. + (char_type_p, array_elt_at_offset, field_at_offset): New functions. + (get_origin_and_offset): Same. + (format_string): Call it. + (format_directive): Call append_alias and set directive argument + number. + (maybe_warn_overlap): New function. + (pass_sprintf_length::compute_format_length): Call it. + (pass_sprintf_length::handle_gimple_call): Initialize new members. + * gcc/tree-ssa-strlen.c (): Also enable when -Wrestrict is on. - 2018-06-21 Martin Liska + 2019-11-12 Ilya Leoshkevich - * ipa-pure-const.c (propagate_nothrow): Use - funct_state_summaries->get. - (dump_malloc_lattice): Likewise. - (propagate_malloc): Likewise. + PR rtl-optimization/92430 + * cfgcleanup.c (pass_jump_after_combine::execute): Free + dominance info at the beginning. - 2018-06-21 Richard Biener + 2019-11-12 Richard Biener - * lto-streamer-out.c (DFS::DFS_write_tree_body): Update outdated - comment. Follow BLOCK_ABSTRACT_ORIGIN unconditionally. - * tree-streamer-in.c (lto_input_ts_block_tree_pointers): Update - comment. - * tree-streamer-out.c (write_ts_block_tree_pointers): Stream - BLOCK_ABSTRACT_ORIGIN unconditionally. + PR tree-optimization/92460 + * tree-vect-stmts.c (vectorizable_simd_clone_call): Unshare + expression before gimplifying. - 2018-06-21 David Malcolm + 2019-11-12 Richard Biener - * ipa-cp.c (ipcp_driver): Set edge_clone_summaries to NULL after - deleting it. - * ipa-reference.c (ipa_reference_c_finalize): Delete - ipa_ref_opt_sum_summaries and set it to NULL. + PR tree-optimization/92461 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Update + stmt after propagation. - 2018-06-21 Tom de Vries + 2019-11-12 Martin Liska - PR tree-optimization/85859 - * tree-ssa-tail-merge.c (stmt_local_def): Copy gimple_is_call - test with comment from bb_no_side_effects_p. + * config/i386/i386-options.c (ix86_recompute_optlev_based_flags): + Use SET_OPTION_IF_UNSET. + (ix86_option_override_internal): Likewise. + * opts.c (default_options_optimization): Likewise. + (finish_options): Likewise. + (enable_fdo_optimizations): Likewise. + (common_handle_option): Likewise. - 2018-06-21 Richard Biener + 2019-11-12 Martin Liska - PR tree-optimization/86232 - * tree-ssa-loop-niter.c (number_of_iterations_popcount): Adjust - max for constant niter. + * common/common-target.def: Remove option_validate_param and + option_default_params. + * common/common-targhooks.c (default_option_validate_param): + Remove. + * common/common-targhooks.h (default_option_validate_param): + Remove. + * common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAMS): + Remove usage of this. + (TARGET_OPTION_VALIDATE_PARAM): Likewise. + (aarch64_option_validate_param): Likewise. + (aarch64_option_default_params): Likewise + * common/config/bpf/bpf-common.c (bpf_option_default_params): Likewise. + (TARGET_OPTION_DEFAULT_PARAMS): Likewise. + * common/config/ia64/ia64-common.c (ia64_option_default_params): Likewise. + (TARGET_OPTION_DEFAULT_PARAMS): Likewise. + * common/config/powerpcspe/powerpcspe-common.c (rs6000_option_default_params): Likewise. + (TARGET_OPTION_DEFAULT_PARAMS): Likewise. + * common/config/rs6000/rs6000-common.c (rs6000_option_default_params): Likewise. + (TARGET_OPTION_DEFAULT_PARAMS): Likewise. + * common/config/sh/sh-common.c (sh_option_default_params): Likewise. + (TARGET_OPTION_DEFAULT_PARAMS): Likewise. + * config/aarch64/aarch64.c (aarch64_override_options_internal): Validate + guard_size here. + * doc/tm.texi: Remove option_default_params and option_validate_param. + * doc/tm.texi.in: Likewise. - 2018-06-21 Andre Vieira + 2019-11-12 Martin Liska - * config/aarch64/aarch64-simd.md - (*aarch64_crypto_aesv16qi_xor_combine): New. - - 2018-06-21 Andre Vieira - - * config/aarch64/aarch64-simd.md (aarch64_crypto_aesv16qi): - Make opernads of the unspec commutative. - - 2018-06-21 Richard Biener - - * tree-data-ref.c (dr_step_indicator): Handle NULL DR_STEP. - * tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr): - Avoid calling vect_mark_for_runtime_alias_test with gathers or scatters. - (vect_analyze_data_ref_dependence): Re-order checks to deal with - NULL DR_STEP. - (vect_record_base_alignments): Do not record base alignment - for gathers or scatters. - (vect_compute_data_ref_alignment): Drop return value that is always - true. Bail out early for gathers or scatters. - (vect_enhance_data_refs_alignment): Bail out early for gathers - or scatters. - (vect_find_same_alignment_drs): Likewise. - (vect_analyze_data_refs_alignment): Remove dead code. - (vect_slp_analyze_and_verify_node_alignment): Likewise. - (vect_analyze_data_refs): For possible gathers or scatters do - not create an alternate DR, just check their possible validity - and mark them. Adjust DECL_NONALIASED handling to not rely - on DR_BASE_ADDRESS. - * tree-vect-loop-manip.c (vect_update_inits_of_drs): Do not - update inits of gathers or scatters. - * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): - Also copy gather/scatter flag to pattern vinfo. - - 2018-06-20 Kelvin Nilsen - - * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Change - behavior of vec_packsu (vector unsigned long long, vector unsigned - long long) to match behavior of vec_packs with same signature. - - 2018-06-20 Chung-Lin Tang - Thomas Schwinge - Cesar Philippidis - - * gimplify.c (gimplify_scan_omp_clauses): Add support for - OMP_CLAUSE_{IF_PRESENT,FINALIZE}. + * common/common-target.def: + Do not mention set_default_param_value + and set_param_value. + * doc/tm.texi: Likewise. + + 2019-11-12 Martin Liska + + * common.opt: Remove param_values. + * config/i386/i386-options.c (ix86_valid_target_attribute_p): + Remove finalize_options_struct. + * gcc.c (driver::decode_argv): Do not call global_init_params + and finish_params. + (driver::finalize): Do not call params_c_finalize + and finalize_options_struct. + * opt-suggestions.c (option_proposer::get_completions): Remove + special casing of params. + (option_proposer::find_param_completions): Remove. + (test_completion_partial_match): Update expected output. + * opt-suggestions.h: Remove find_param_completions. + * opts-common.c (add_misspelling_candidates): Add + --param with a space. + * opts.c (handle_param): Remove. + (init_options_struct):. Remove init_options_struct and + similar calls. + (finalize_options_struct): Remove. + (common_handle_option): Use SET_OPTION_IF_UNSET. + * opts.h (finalize_options_struct): Remove. + * toplev.c (general_init): Do not call global_init_params. + (toplev::finalize): Do not call params_c_finalize and + finalize_options_struct. + + 2019-11-12 Martin Liska + + * Makefile.in: Remove PARAMS_H and params.list + and params.options. + * params-enum.h: Remove. + * params-list.h: Remove. + * params-options.h: Remove. + * params.c: Remove. + * params.def: Remove. + * params.h: Remove. + * asan.c: Do not include params.h. + * auto-profile.c: Likewise. + * bb-reorder.c: Likewise. + * builtins.c: Likewise. + * cfgcleanup.c: Likewise. + * cfgexpand.c: Likewise. + * cfgloopanal.c: Likewise. + * cgraph.c: Likewise. + * combine.c: Likewise. + * common/config/aarch64/aarch64-common.c: Likewise. + * common/config/gcn/gcn-common.c: Likewise. + * common/config/ia64/ia64-common.c: Likewise. + * common/config/powerpcspe/powerpcspe-common.c: Likewise. + * common/config/rs6000/rs6000-common.c: Likewise. + * common/config/sh/sh-common.c: Likewise. + * config/aarch64/aarch64.c: Likewise. + * config/alpha/alpha.c: Likewise. + * config/arm/arm.c: Likewise. + * config/avr/avr.c: Likewise. + * config/csky/csky.c: Likewise. + * config/i386/i386-builtins.c: Likewise. + * config/i386/i386-expand.c: Likewise. + * config/i386/i386-features.c: Likewise. + * config/i386/i386-options.c: Likewise. + * config/i386/i386.c: Likewise. + * config/ia64/ia64.c: Likewise. + * config/rs6000/rs6000-logue.c: Likewise. + * config/rs6000/rs6000.c: Likewise. + * config/s390/s390.c: Likewise. + * config/sparc/sparc.c: Likewise. + * config/visium/visium.c: Likewise. + * coverage.c: Likewise. + * cprop.c: Likewise. + * cse.c: Likewise. + * cselib.c: Likewise. + * dse.c: Likewise. + * emit-rtl.c: Likewise. + * explow.c: Likewise. + * final.c: Likewise. + * fold-const.c: Likewise. + * gcc.c: Likewise. + * gcse.c: Likewise. + * ggc-common.c: Likewise. + * ggc-page.c: Likewise. + * gimple-loop-interchange.cc: Likewise. + * gimple-loop-jam.c: Likewise. + * gimple-loop-versioning.cc: Likewise. + * gimple-ssa-split-paths.c: Likewise. + * gimple-ssa-sprintf.c: Likewise. + * gimple-ssa-store-merging.c: Likewise. + * gimple-ssa-strength-reduction.c: Likewise. + * gimple-ssa-warn-alloca.c: Likewise. + * gimple-ssa-warn-restrict.c: Likewise. + * graphite-isl-ast-to-gimple.c: Likewise. + * graphite-optimize-isl.c: Likewise. + * graphite-scop-detection.c: Likewise. + * graphite-sese-to-poly.c: Likewise. + * graphite.c: Likewise. + * haifa-sched.c: Likewise. + * hsa-gen.c: Likewise. + * ifcvt.c: Likewise. + * ipa-cp.c: Likewise. + * ipa-fnsummary.c: Likewise. + * ipa-inline-analysis.c: Likewise. + * ipa-inline.c: Likewise. + * ipa-polymorphic-call.c: Likewise. + * ipa-profile.c: Likewise. + * ipa-prop.c: Likewise. + * ipa-split.c: Likewise. + * ipa-sra.c: Likewise. + * ira-build.c: Likewise. + * ira-conflicts.c: Likewise. + * loop-doloop.c: Likewise. + * loop-invariant.c: Likewise. + * loop-unroll.c: Likewise. + * lra-assigns.c: Likewise. + * lra-constraints.c: Likewise. + * modulo-sched.c: Likewise. + * opt-suggestions.c: Likewise. + * opts.c: Likewise. + * postreload-gcse.c: Likewise. + * predict.c: Likewise. + * reload.c: Likewise. + * reorg.c: Likewise. + * resource.c: Likewise. + * sanopt.c: Likewise. + * sched-deps.c: Likewise. + * sched-ebb.c: Likewise. + * sched-rgn.c: Likewise. + * sel-sched-ir.c: Likewise. + * sel-sched.c: Likewise. + * shrink-wrap.c: Likewise. + * stmt.c: Likewise. + * targhooks.c: Likewise. + * toplev.c: Likewise. + * tracer.c: Likewise. + * trans-mem.c: Likewise. + * tree-chrec.c: Likewise. + * tree-data-ref.c: Likewise. + * tree-if-conv.c: Likewise. + * tree-inline.c: Likewise. + * tree-loop-distribution.c: Likewise. + * tree-parloops.c: Likewise. + * tree-predcom.c: Likewise. + * tree-profile.c: Likewise. + * tree-scalar-evolution.c: Likewise. + * tree-sra.c: Likewise. + * tree-ssa-ccp.c: Likewise. + * tree-ssa-dom.c: Likewise. + * tree-ssa-dse.c: Likewise. + * tree-ssa-ifcombine.c: Likewise. + * tree-ssa-loop-ch.c: Likewise. + * tree-ssa-loop-im.c: Likewise. + * tree-ssa-loop-ivcanon.c: Likewise. + * tree-ssa-loop-ivopts.c: Likewise. + * tree-ssa-loop-manip.c: Likewise. + * tree-ssa-loop-niter.c: Likewise. + * tree-ssa-loop-prefetch.c: Likewise. + * tree-ssa-loop-unswitch.c: Likewise. + * tree-ssa-math-opts.c: Likewise. + * tree-ssa-phiopt.c: Likewise. + * tree-ssa-pre.c: Likewise. + * tree-ssa-reassoc.c: Likewise. + * tree-ssa-sccvn.c: Likewise. + * tree-ssa-scopedtables.c: Likewise. + * tree-ssa-sink.c: Likewise. + * tree-ssa-strlen.c: Likewise. + * tree-ssa-structalias.c: Likewise. + * tree-ssa-tail-merge.c: Likewise. + * tree-ssa-threadbackward.c: Likewise. + * tree-ssa-threadedge.c: Likewise. + * tree-ssa-uninit.c: Likewise. + * tree-switch-conversion.c: Likewise. + * tree-vect-data-refs.c: Likewise. + * tree-vect-loop.c: Likewise. + * tree-vect-slp.c: Likewise. + * tree-vrp.c: Likewise. + * tree.c: Likewise. + * value-prof.c: Likewise. + * var-tracking.c: Likewise. + + 2019-11-12 Martin Liska + + * asan.c (asan_sanitize_stack_p): Replace old parameter syntax + with the new one, include opts.h if needed. Use SET_OPTION_IF_UNSET + macro. + (asan_sanitize_allocas_p): Likewise. + (asan_emit_stack_protection): Likewise. + (asan_protect_global): Likewise. + (instrument_derefs): Likewise. + (instrument_builtin_call): Likewise. + (asan_expand_mark_ifn): Likewise. + * auto-profile.c (auto_profile): Likewise. + * bb-reorder.c (copy_bb_p): Likewise. + (duplicate_computed_gotos): Likewise. + * builtins.c (inline_expand_builtin_string_cmp): Likewise. + * cfgcleanup.c (try_crossjump_to_edge): Likewise. + (try_crossjump_bb): Likewise. + * cfgexpand.c (defer_stack_allocation): Likewise. + (stack_protect_classify_type): Likewise. + (pass_expand::execute): Likewise. + * cfgloopanal.c (expected_loop_iterations_unbounded): Likewise. + (estimate_reg_pressure_cost): Likewise. + * cgraph.c (cgraph_edge::maybe_hot_p): Likewise. + * combine.c (combine_instructions): Likewise. + (record_value_for_reg): Likewise. + * common/config/aarch64/aarch64-common.c (aarch64_option_validate_param): Likewise. + (aarch64_option_default_params): Likewise. + * common/config/ia64/ia64-common.c (ia64_option_default_params): Likewise. + * common/config/powerpcspe/powerpcspe-common.c (rs6000_option_default_params): Likewise. + * common/config/rs6000/rs6000-common.c (rs6000_option_default_params): Likewise. + * common/config/sh/sh-common.c (sh_option_default_params): Likewise. + * config/aarch64/aarch64.c (aarch64_output_probe_stack_range): Likewise. + (aarch64_allocate_and_probe_stack_space): Likewise. + (aarch64_expand_epilogue): Likewise. + (aarch64_override_options_internal): Likewise. + * config/alpha/alpha.c (alpha_option_override): Likewise. + * config/arm/arm.c (arm_option_override): Likewise. + (arm_valid_target_attribute_p): Likewise. + * config/i386/i386-options.c (ix86_option_override_internal): Likewise. + * config/i386/i386.c (get_probe_interval): Likewise. + (ix86_adjust_stack_and_probe_stack_clash): Likewise. + (ix86_max_noce_ifcvt_seq_cost): Likewise. + * config/ia64/ia64.c (ia64_adjust_cost): Likewise. + * config/rs6000/rs6000-logue.c (get_stack_clash_protection_probe_interval): Likewise. + (get_stack_clash_protection_guard_size): Likewise. + * config/rs6000/rs6000.c (rs6000_option_override_internal): Likewise. + * config/s390/s390.c (allocate_stack_space): Likewise. + (s390_emit_prologue): Likewise. + (s390_option_override_internal): Likewise. + * config/sparc/sparc.c (sparc_option_override): Likewise. + * config/visium/visium.c (visium_option_override): Likewise. + * coverage.c (get_coverage_counts): Likewise. + (coverage_compute_profile_id): Likewise. + (coverage_begin_function): Likewise. + (coverage_end_function): Likewise. + * cse.c (cse_find_path): Likewise. + (cse_extended_basic_block): Likewise. + (cse_main): Likewise. + * cselib.c (cselib_invalidate_mem): Likewise. + * dse.c (dse_step1): Likewise. + * emit-rtl.c (set_new_first_and_last_insn): Likewise. + (get_max_insn_count): Likewise. + (make_debug_insn_raw): Likewise. + (init_emit): Likewise. + * explow.c (compute_stack_clash_protection_loop_data): Likewise. + * final.c (compute_alignments): Likewise. + * fold-const.c (fold_range_test): Likewise. + (fold_truth_andor): Likewise. + (tree_single_nonnegative_warnv_p): Likewise. + (integer_valued_real_single_p): Likewise. + * gcse.c (want_to_gcse_p): Likewise. + (prune_insertions_deletions): Likewise. + (hoist_code): Likewise. + (gcse_or_cprop_is_too_expensive): Likewise. + * ggc-common.c: Likewise. + * ggc-page.c (ggc_collect): Likewise. + * gimple-loop-interchange.cc (MAX_NUM_STMT): Likewise. + (MAX_DATAREFS): Likewise. + (OUTER_STRIDE_RATIO): Likewise. + * gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise. + * gimple-loop-versioning.cc (loop_versioning::max_insns_for_loop): Likewise. + * gimple-ssa-split-paths.c (is_feasible_trace): Likewise. + * gimple-ssa-store-merging.c (imm_store_chain_info::try_coalesce_bswap): Likewise. + (imm_store_chain_info::coalesce_immediate_stores): Likewise. + (imm_store_chain_info::output_merged_store): Likewise. + (pass_store_merging::process_store): Likewise. + * gimple-ssa-strength-reduction.c (find_basis_for_base_expr): Likewise. + * graphite-isl-ast-to-gimple.c (class translate_isl_ast_to_gimple): Likewise. + (scop_to_isl_ast): Likewise. + * graphite-optimize-isl.c (get_schedule_for_node_st): Likewise. + (optimize_isl): Likewise. + * graphite-scop-detection.c (build_scops): Likewise. + * haifa-sched.c (set_modulo_params): Likewise. + (rank_for_schedule): Likewise. + (model_add_to_worklist): Likewise. + (model_promote_insn): Likewise. + (model_choose_insn): Likewise. + (queue_to_ready): Likewise. + (autopref_multipass_dfa_lookahead_guard): Likewise. + (schedule_block): Likewise. + (sched_init): Likewise. + * hsa-gen.c (init_prologue): Likewise. + * ifcvt.c (bb_ok_for_noce_convert_multiple_sets): Likewise. + (cond_move_process_if_block): Likewise. + * ipa-cp.c (ipcp_lattice::add_value): Likewise. + (merge_agg_lats_step): Likewise. + (devirtualization_time_bonus): Likewise. + (hint_time_bonus): Likewise. + (incorporate_penalties): Likewise. + (good_cloning_opportunity_p): Likewise. + (ipcp_propagate_stage): Likewise. + * ipa-fnsummary.c (decompose_param_expr): Likewise. + (set_switch_stmt_execution_predicate): Likewise. + (analyze_function_body): Likewise. + (compute_fn_summary): Likewise. + * ipa-inline-analysis.c (estimate_growth): Likewise. + * ipa-inline.c (caller_growth_limits): Likewise. + (inline_insns_single): Likewise. + (inline_insns_auto): Likewise. + (can_inline_edge_by_limits_p): Likewise. + (want_early_inline_function_p): Likewise. + (big_speedup_p): Likewise. + (want_inline_small_function_p): Likewise. + (want_inline_self_recursive_call_p): Likewise. + (edge_badness): Likewise. + (recursive_inlining): Likewise. + (compute_max_insns): Likewise. + (early_inliner): Likewise. + * ipa-polymorphic-call.c (csftc_abort_walking_p): Likewise. + * ipa-profile.c (ipa_profile): Likewise. + * ipa-prop.c (determine_known_aggregate_parts): Likewise. + (ipa_analyze_node): Likewise. + (ipcp_transform_function): Likewise. + * ipa-split.c (consider_split): Likewise. + * ipa-sra.c (allocate_access): Likewise. + (process_scan_results): Likewise. + (ipa_sra_summarize_function): Likewise. + (pull_accesses_from_callee): Likewise. + * ira-build.c (loop_compare_func): Likewise. + (mark_loops_for_removal): Likewise. + * ira-conflicts.c (build_conflict_bit_table): Likewise. + * loop-doloop.c (doloop_optimize): Likewise. + * loop-invariant.c (gain_for_invariant): Likewise. + (move_loop_invariants): Likewise. + * loop-unroll.c (decide_unroll_constant_iterations): Likewise. + (decide_unroll_runtime_iterations): Likewise. + (decide_unroll_stupid): Likewise. + (expand_var_during_unrolling): Likewise. + * lra-assigns.c (spill_for): Likewise. + * lra-constraints.c (EBB_PROBABILITY_CUTOFF): Likewise. + * modulo-sched.c (sms_schedule): Likewise. + (DFA_HISTORY): Likewise. + * opts.c (default_options_optimization): Likewise. + (finish_options): Likewise. + (common_handle_option): Likewise. + * postreload-gcse.c (eliminate_partially_redundant_load): Likewise. + (if): Likewise. + * predict.c (get_hot_bb_threshold): Likewise. + (maybe_hot_count_p): Likewise. + (probably_never_executed): Likewise. + (predictable_edge_p): Likewise. + (predict_loops): Likewise. + (expr_expected_value_1): Likewise. + (tree_predict_by_opcode): Likewise. + (handle_missing_profiles): Likewise. + * reload.c (find_equiv_reg): Likewise. + * reorg.c (redundant_insn): Likewise. + * resource.c (mark_target_live_regs): Likewise. + (incr_ticks_for_insn): Likewise. + * sanopt.c (pass_sanopt::execute): Likewise. + * sched-deps.c (sched_analyze_1): Likewise. + (sched_analyze_2): Likewise. + (sched_analyze_insn): Likewise. + (deps_analyze_insn): Likewise. + * sched-ebb.c (schedule_ebbs): Likewise. + * sched-rgn.c (find_single_block_region): Likewise. + (too_large): Likewise. + (haifa_find_rgns): Likewise. + (extend_rgns): Likewise. + (new_ready): Likewise. + (schedule_region): Likewise. + (sched_rgn_init): Likewise. + * sel-sched-ir.c (make_region_from_loop): Likewise. + * sel-sched-ir.h (MAX_WS): Likewise. + * sel-sched.c (process_pipelined_exprs): Likewise. + (sel_setup_region_sched_flags): Likewise. + * shrink-wrap.c (try_shrink_wrapping): Likewise. + * targhooks.c (default_max_noce_ifcvt_seq_cost): Likewise. + * toplev.c (print_version): Likewise. + (process_options): Likewise. + * tracer.c (tail_duplicate): Likewise. + * trans-mem.c (tm_log_add): Likewise. + * tree-chrec.c (chrec_fold_plus_1): Likewise. + * tree-data-ref.c (split_constant_offset): Likewise. + (compute_all_dependences): Likewise. + * tree-if-conv.c (MAX_PHI_ARG_NUM): Likewise. + * tree-inline.c (remap_gimple_stmt): Likewise. + * tree-loop-distribution.c (MAX_DATAREFS_NUM): Likewise. + * tree-parloops.c (MIN_PER_THREAD): Likewise. + (create_parallel_loop): Likewise. + * tree-predcom.c (determine_unroll_factor): Likewise. + * tree-scalar-evolution.c (instantiate_scev_r): Likewise. + * tree-sra.c (analyze_all_variable_accesses): Likewise. + * tree-ssa-ccp.c (fold_builtin_alloca_with_align): Likewise. + * tree-ssa-dse.c (setup_live_bytes_from_ref): Likewise. + (dse_optimize_redundant_stores): Likewise. + (dse_classify_store): Likewise. + * tree-ssa-ifcombine.c (ifcombine_ifandif): Likewise. + * tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise. + * tree-ssa-loop-im.c (LIM_EXPENSIVE): Likewise. + * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Likewise. + (try_peel_loop): Likewise. + (tree_unroll_loops_completely): Likewise. + * tree-ssa-loop-ivopts.c (avg_loop_niter): Likewise. + (CONSIDER_ALL_CANDIDATES_BOUND): Likewise. + (MAX_CONSIDERED_GROUPS): Likewise. + (ALWAYS_PRUNE_CAND_SET_BOUND): Likewise. + * tree-ssa-loop-manip.c (can_unroll_loop_p): Likewise. + * tree-ssa-loop-niter.c (MAX_ITERATIONS_TO_TRACK): Likewise. + * tree-ssa-loop-prefetch.c (PREFETCH_BLOCK): Likewise. + (L1_CACHE_SIZE_BYTES): Likewise. + (L2_CACHE_SIZE_BYTES): Likewise. + (should_issue_prefetch_p): Likewise. + (schedule_prefetches): Likewise. + (determine_unroll_factor): Likewise. + (volume_of_references): Likewise. + (add_subscript_strides): Likewise. + (self_reuse_distance): Likewise. + (mem_ref_count_reasonable_p): Likewise. + (insn_to_prefetch_ratio_too_small_p): Likewise. + (loop_prefetch_arrays): Likewise. + (tree_ssa_prefetch_arrays): Likewise. + * tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Likewise. + * tree-ssa-math-opts.c (gimple_expand_builtin_pow): Likewise. + (convert_mult_to_fma): Likewise. + (math_opts_dom_walker::after_dom_children): Likewise. + * tree-ssa-phiopt.c (cond_if_else_store_replacement): Likewise. + (hoist_adjacent_loads): Likewise. + (gate_hoist_loads): Likewise. + * tree-ssa-pre.c (translate_vuse_through_block): Likewise. + (compute_partial_antic_aux): Likewise. + * tree-ssa-reassoc.c (get_reassociation_width): Likewise. + * tree-ssa-sccvn.c (vn_reference_lookup_pieces): Likewise. + (vn_reference_lookup): Likewise. + (do_rpo_vn): Likewise. + * tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr): Likewise. + * tree-ssa-sink.c (select_best_block): Likewise. + * tree-ssa-strlen.c (new_stridx): Likewise. + (new_addr_stridx): Likewise. + (get_range_strlen_dynamic): Likewise. + (class ssa_name_limit_t): Likewise. + * tree-ssa-structalias.c (push_fields_onto_fieldstack): Likewise. + (create_variable_info_for_1): Likewise. + (init_alias_vars): Likewise. + * tree-ssa-tail-merge.c (find_clusters_1): Likewise. + (tail_merge_optimize): Likewise. + * tree-ssa-threadbackward.c (thread_jumps::profitable_jump_thread_path): Likewise. + (thread_jumps::fsm_find_control_statement_thread_paths): Likewise. + (thread_jumps::find_jump_threads_backwards): Likewise. + * tree-ssa-threadedge.c (record_temporary_equivalences_from_stmts_at_dest): Likewise. + * tree-ssa-uninit.c (compute_control_dep_chain): Likewise. + * tree-switch-conversion.c (switch_conversion::check_range): Likewise. + (jump_table_cluster::can_be_handled): Likewise. + * tree-switch-conversion.h (jump_table_cluster::case_values_threshold): Likewise. + (SWITCH_CONVERSION_BRANCH_RATIO): Likewise. + (param_switch_conversion_branch_ratio): Likewise. + * tree-vect-data-refs.c (vect_mark_for_runtime_alias_test): Likewise. + (vect_enhance_data_refs_alignment): Likewise. + (vect_prune_runtime_alias_test_list): Likewise. + * tree-vect-loop.c (vect_analyze_loop_costing): Likewise. + (vect_get_datarefs_in_loop): Likewise. + (vect_analyze_loop): Likewise. + * tree-vect-slp.c (vect_slp_bb): Likewise. + * tree-vectorizer.h: Likewise. + * tree-vrp.c (find_switch_asserts): Likewise. + (vrp_prop::check_mem_ref): Likewise. + * tree.c (wide_int_to_tree_1): Likewise. + (cache_integer_cst): Likewise. + * var-tracking.c (EXPR_USE_DEPTH): Likewise. + (reverse_op): Likewise. + (vt_find_locations): Likewise. + + 2019-11-12 Martin Liska + + * Makefile.in: Include params.opt. + * flag-types.h (enum parloops_schedule_type): Add + parloops_schedule_type used in params.opt. + * params.opt: New file. + + 2019-11-12 Martin Liska + + * common.opt: Remove --param and --param= options. + * opt-functions.awk: Mark CL_PARAMS for options + that have Param keyword. + * opts-common.c (decode_cmdline_options_to_array): + Replace --param key=value with --param=key=value. + * opts.c (print_filtered_help): Remove special + printing of params. + (print_specific_help): Update title for params. + (common_handle_option): Do not handle OPT__param. + opts.h (SET_OPTION_IF_UNSET): New macro. + * doc/options.texi: Document Param keyword. + + 2019-11-12 Maciej W. Rozycki + Frederik Harwath + Thomas Schwinge + + gcc/ + * gimple.h (gf_mask): Add GF_OMP_TARGET_KIND_OACC_SERIAL + enumeration constant. + (is_gimple_omp_oacc): Handle GF_OMP_TARGET_KIND_OACC_SERIAL. + (is_gimple_omp_offloaded): Likewise. + * gimplify.c (omp_region_type): Add ORT_ACC_SERIAL enumeration + constant. Adjust the value of ORT_NONE accordingly. + (is_gimple_stmt): Handle OACC_SERIAL. + (oacc_default_clause): Handle ORT_ACC_SERIAL. + (gomp_needs_data_present): Likewise. (gimplify_adjust_omp_clauses): Likewise. - (gimplify_oacc_declare_1): Add support for GOMP_MAP_RELEASE, remove - support for GOMP_MAP_FORCE_{ALLOC,TO,FROM,TOFROM}. - (gimplify_omp_target_update): Update handling of acc update and - enter/exit data. - * omp-low.c (install_var_field): Remove unused parameter - base_pointers_restrict. - (scan_sharing_clauses): Remove base_pointers_restrict parameter. - Update call to install_var_field. Handle OMP_CLAUSE_{IF_PRESENT, - FINALIZE} - (omp_target_base_pointers_restrict_p): Delete. - (scan_omp_target): Update call to scan_sharing_clauses. - * tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_{IF_PRESENT, - FINALIZE}. - * tree-nested.c (convert_nonlocal_omp_clauses): Handle - OMP_CLAUSE_{IF_PRESENT,FINALIZE}. - (convert_local_omp_clauses): Likewise. - * tree-pretty-print.c (dump_omp_clause): Likewise. - * tree.c (omp_clause_num_ops): Add entries for OMP_CLAUSE_{IF_PRESENT, - FINALIZE}. - (omp_clause_code_name): Likewise. + (gimplify_omp_workshare): Handle OACC_SERIAL. + (gimplify_expr): Likewise. + * omp-expand.c (expand_omp_target): + Handle GF_OMP_TARGET_KIND_OACC_SERIAL. + (build_omp_regions_1, omp_make_gimple_edges): Likewise. + * omp-low.c (is_oacc_parallel): Rename function to... + (is_oacc_parallel_or_serial): ... this. + Handle GF_OMP_TARGET_KIND_OACC_SERIAL. + (scan_sharing_clauses): Adjust accordingly. + (scan_omp_for): Likewise. + (lower_oacc_head_mark): Likewise. + (convert_from_firstprivate_int): Likewise. + (lower_omp_target): Likewise. + (check_omp_nesting_restrictions): Handle + GF_OMP_TARGET_KIND_OACC_SERIAL. + (lower_oacc_reductions): Likewise. + (lower_omp_target): Likewise. + * tree.def (OACC_SERIAL): New tree code. + * tree-pretty-print.c (dump_generic_node): Handle OACC_SERIAL. + + * doc/generic.texi (OpenACC): Document OACC_SERIAL. + + 2019-11-12 Jakub Jelinek + + PR target/92449 + * tree-complex.c (expand_complex_multiplication): If !HONOR_NANS, + don't emit UNORDERED_EXPR guarded libcall. Formatting fixes. + + PR tree-optimization/92452 + * tree-vrp.c (vrp_prop::check_array_ref): If TRUNC_DIV_EXPR folds + into NULL_TREE, set up_bound to NULL_TREE instead of computing + MINUS_EXPR on it. + + 2019-11-12 Andre Vieira + + * tree-vect-loop.c (vect_transform_loop): Don't overwrite epilogues + safelen with 0. + + 2019-11-12 Alan Modra + + * config/rs6000/predicates.md (unspec_tls): Allow const0_rtx for got + element of unspec vec. + * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Support + PC-relative TLS. + * config/rs6000/rs6000.md (UNSPEC_TLSTLS_PCREL): New unspec. + (tls_gd_pcrel, tls_ld_pcrel): New insns. + (tls_dtprel, tls_tprel): Set attr prefixed when tls_size is not 16. + (tls_got_tprel_pcrel, tls_tls_pcrel): New insns. + + 2019-11-12 Alan Modra + + * config/rs6000/rs6000.opt (mtls-markers): Delete. + * config/rs6000/rs6000.h (TARGET_TLS_MARKERS): Don't define. + (IS_NOMARK_TLSGETADDR): Likewise. + * config/rs6000/rs6000-protos.h (rs6000_output_tlsargs): Delete. + * config/rs6000/rs6000.c (rs6000_output_tlsargs): Delete. + (rs6000_legitimize_tls_address): Remove !TARGET_TLS_MARKERS code. + (rs6000_call_template_1): Delete TARGET_TLS_MARKERS test and + allow other UNSPECs besides UNSPEC_TLSGD and UNSPEC_TLSLD. + (rs6000_indirect_call_template_1): Likewise. + (rs6000_pltseq_template): Likewise. + (rs6000_opt_vars): Remove "tls-markers" entry. + * config/rs6000/rs6000.md (tls_gd): Replace TARGET_TLS_MARKERS + with TARGET_ELF. + (tls_gd_high, tls_gd_low): Likewise. + (tls_ld, tls_ld_high, tls_ld_low): Likewise. + (pltseq_plt_pcrel): Likewise. + (call_value_local32): Remove IS_NOMARK_TLSGETADDR predicate test. + (call_value_local64): Likewise. + (call_value_indirect_nonlocal_sysv): Remove IS_NOMARK_TLSGETADDR + output and length attribute sub-expression. + (call_value_nonlocal_sysv), + (call_value_nonlocal_sysv_secure), + (call_value_local_aix, call_value_nonlocal_aix), + (call_value_indirect_aix, call_value_indirect_elfv2), + (call_value_indirect_pcrel): Likewise. + * doc/install.texi (powerpc-*-*): Require binutils-2.20. + * configure.ac (HAVE_AS_TLS_MARKERS): Delete test. + * configure: Regenerate. + * config.in: Regenerate. - 2018-06-20 Jakub Jelinek + 2019-11-11 Michael Meissner - PR debug/86194 - * var-tracking.c (use_narrower_mode_test): Check if shift amount can - be narrowed. + * config/rs6000/predicates.md (prefixed_memory): New predicate. + * config/rs6000/rs6000.md (stack_protect_setdi): Deal with either + address being a prefixed load/store. + (stack_protect_testdi): Deal with either address being a prefixed + load. - PR tree-optimization/86231 - * tree-vrp.c (union_ranges): For ( [ ) ] or ( )[ ] range and - anti-range don't overwrite *vr0min before using it to compute *vr0max. + 2019-11-11 Jakub Jelinek - 2018-06-20 Tom de Vries + PR bootstrap/92433 + * config/rs6000/rs6000-c.c (altivec_build_resolved_builtin): Guard + ALTIVEC_BUILTIN_VEC_VCMPGE_P argument swapping with n == 3 check. Use + std::swap. - PR tree-optimization/86097 - * tree-ssa-loop-manip.c (canonicalize_loop_ivs): Also convert *nit to - iv type if signedness of iv type is not the same as that of *nit. + 2019-11-11 Richard Sandiford - 2018-06-20 Jakub Jelinek + PR tree-optimization/92420 + * tree-vect-stmts.c (get_negative_load_store_type): Move further + up file. + (get_group_load_store_type): Use it for reversed SLP accesses. - * cfgrtl.c (rtl_verify_edges): Formatting fix. If bb->preds has any - EDGE_EH edges, verify they are all EDGE_EH. + 2019-11-11 Jan Hubicka - 2018-06-20 Maya Rashish + * ipa-prop.c (ipa_propagate_indirect_call_infos): Remove ipcp + summary. + (ipcp_transformation_t::duplicate): Break out from ... + (ipa_node_params_t::duplicate): ... here; add copying of agg + replacements. + * ipa-prop.h (ipcp_transformation): Add constructor and destructor. + (ipcp_transformation_t): Add duplicate. - * ginclude/stddef.h: Limit #include to NetBSD. + 2019-11-11 Janne Blomqvist - 2018-06-20 Kyrylo Tkachov + PR fortran/91828 + * doc/install.texi: Document that the minimum MPFR version is + 3.1.0. - * config/aarch64/aarch64-tuning-flags.def (no_ldp_stp_qregs): New. - * config/aarch64/aarch64.c (xgene1_tunings): Add - AARCH64_EXTRA_TUNE_NO_LDP_STP_QREGS to tune_flags. - (aarch64_mode_valid_for_sched_fusion_p): - Allow 16-byte modes. - (aarch64_classify_address): Allow 16-byte modes for load_store_pair_p. - * config/aarch64/aarch64-ldpstp.md: Add peepholes for LDP STP of - 128-bit modes. - * config/aarch64/aarch64-simd.md (load_pair): - New pattern. - (vec_store_pair): Likewise. - * config/aarch64/iterators.md (VQ2): New mode iterator. + 2019-11-11 Claudiu Zissulescu - 2018-06-20 Martin Liska + * config/arc/arc.md (movsi_ne): Reorder instruction variants and + use new register constraint letters. - * tree-switch-conversion.c (jump_table_cluster::can_be_handled): - Change default ratio from 10 to 8. + 2019-11-11 Claudiu Zissulescu - 2018-06-20 Martin Liska + * config/arc/arc.c (arc_legitimize_pic_address): Consider UNSPECs + as well, if interesting recover the symbol and re-legitimize the + pic address. - * tree-switch-conversion.c (jump_table_cluster::find_jump_tables): - New. - (bit_test_cluster::find_bit_tests): Likewise. - (switch_decision_tree::analyze_switch_statement): Find clusters. - * tree-switch-conversion.h (struct jump_table_cluster): Document - hierarchy. - - 2018-06-20 Martin Liska - - * tree-switch-conversion.c (switch_conversion::collect): - Record m_uniq property. - (switch_conversion::expand): Bail out for special conditions. - (group_cluster::~group_cluster): New. - (group_cluster::group_cluster): Likewise. - (group_cluster::dump): Likewise. - (jump_table_cluster::emit): New. - (switch_decision_tree::fix_phi_operands_for_edges): New. - (struct case_node): Remove struct. - (jump_table_cluster::can_be_handled): New. - (case_values_threshold): Moved to header. - (reset_out_edges_aux): Likewise. - (jump_table_cluster::is_beneficial): New. - (bit_test_cluster::can_be_handled): Likewise. - (add_case_node): Remove. - (bit_test_cluster::is_beneficial): New. - (case_bit_test::cmp): New. - (bit_test_cluster::emit): New. - (expand_switch_as_decision_tree_p): Remove. - (bit_test_cluster::hoist_edge_and_branch_if_true): New. - (fix_phi_operands_for_edge): Likewise. - (switch_decision_tree::analyze_switch_statement): New. - (compute_cases_per_edge): Move ... - (switch_decision_tree::compute_cases_per_edge): ... here. - (try_switch_expansion): Likewise. - (switch_decision_tree::try_switch_expansion): Likewise. - (record_phi_operand_mapping): Likewise. - (switch_decision_tree::record_phi_operand_mapping): Likewise. - (emit_case_decision_tree): Likewise. - (switch_decision_tree::emit): Likewise. - (balance_case_nodes): Likewise. - (switch_decision_tree::balance_case_nodes): Likewise. - (dump_case_nodes): Likewise. - (switch_decision_tree::dump_case_nodes): Likewise. - (emit_jump): Likewise. - (switch_decision_tree::emit_jump): Likewise. - (emit_cmp_and_jump_insns): Likewise. - (switch_decision_tree::emit_cmp_and_jump_insns): Likewise. - (emit_case_nodes): Likewise. - (switch_decision_tree::emit_case_nodes): Likewise. - (conditional_probability): Remove. - * tree-switch-conversion.h (enum cluster_type): New. - (PRINT_CASE): New. - (struct cluster): Likewise. - (cluster::cluster): Likewise. - (struct simple_cluster): Likewise. - (simple_cluster::simple_cluster): Likewise. - (struct group_cluster): Likewise. - (struct jump_table_cluster): Likewise. - (struct bit_test_cluster): Likewise. - (struct min_cluster_item): Likewise. - (struct case_tree_node): Likewise. - (case_tree_node::case_tree_node): Likewise. - (jump_table_cluster::case_values_threshold): Likewise. - (struct case_bit_test): Likewise. - (struct switch_decision_tree): Likewise. - (struct switch_conversion): Likewise. - (switch_decision_tree::reset_out_edges_aux): Likewise. - - 2018-06-20 Martin Liska - - * tree-switch-conversion.c (MAX_CASE_BIT_TESTS): Remove. - (hoist_edge_and_branch_if_true): Likewise. - (expand_switch_using_bit_tests_p): Likewise. - (struct case_bit_test): Likewise. - (case_bit_test_cmp): Likewise. - (emit_case_bit_tests): Likewise. - (switch_conversion::switch_conversion): New class. - (struct switch_conv_info): Remove old struct. - (collect_switch_conv_info): More to ... - (switch_conversion::collect): ... this. - (check_range): Likewise. - (switch_conversion::check_range): Likewise. - (check_all_empty_except_final): Likewise. - (switch_conversion::check_all_empty_except_final): Likewise. - (check_final_bb): Likewise. - (switch_conversion::check_final_bb): Likewise. - (create_temp_arrays): Likewise. - (switch_conversion::create_temp_arrays): Likewise. - (free_temp_arrays): Likewise. - (gather_default_values): Likewise. - (switch_conversion::gather_default_values): Likewise. - (build_constructors): Likewise. - (switch_conversion::build_constructors): Likewise. - (constructor_contains_same_values_p): Likewise. - (switch_conversion::contains_same_values_p): Likewise. - (array_value_type): Likewise. - (switch_conversion::array_value_type): Likewise. - (build_one_array): Likewise. - (switch_conversion::build_one_array): Likewise. - (build_arrays): Likewise. - (switch_conversion::build_arrays): Likewise. - (gen_def_assigns): Likewise. - (switch_conversion::gen_def_assigns): Likewise. - (prune_bbs): Likewise. - (switch_conversion::prune_bbs): Likewise. - (fix_phi_nodes): Likewise. - (switch_conversion::fix_phi_nodes): Likewise. - (gen_inbound_check): Likewise. - (switch_conversion::gen_inbound_check): Likewise. - (process_switch): Use the newly created class. - (switch_conversion::expand): New. - (switch_conversion::~switch_conversion): New. - * tree-switch-conversion.h: New file. - - 2018-06-20 Richard Sandiford - - * tree-vectorizer.h (NUM_PATTERNS, vect_recog_func_ptr): Move to - tree-vect-patterns.c. - * tree-vect-patterns.c (vect_supportable_direct_optab_p): New function. - (vect_recog_dot_prod_pattern): Use it. Remove the type_in argument. - (vect_recog_sad_pattern): Likewise. - (vect_recog_widen_sum_pattern): Likewise. - (vect_recog_pow_pattern): Likewise. Check for a null vectype. - (vect_recog_widen_shift_pattern): Remove the type_in argument. - (vect_recog_rotate_pattern): Likewise. - (vect_recog_mult_pattern): Likewise. - (vect_recog_vector_vector_shift_pattern): Likewise. - (vect_recog_divmod_pattern): Likewise. - (vect_recog_mixed_size_cond_pattern): Likewise. - (vect_recog_bool_pattern): Likewise. - (vect_recog_mask_conversion_pattern): Likewise. - (vect_try_gather_scatter_pattern): Likewise. - (vect_recog_widen_mult_pattern): Likewise. Check for a null vectype. - (vect_recog_over_widening_pattern): Likewise. - (vect_recog_gather_scatter_pattern): Likewise. - (vect_recog_func_ptr): Move from tree-vectorizer.h - (vect_vect_recog_func_ptrs): Move further down the file. - (vect_recog_func): Likewise. Remove the third argument. - (NUM_PATTERNS): Define based on vect_vect_recog_func_ptrs. - (vect_pattern_recog_1): Expect the pattern function to do any - necessary target tests. Also expect it to provide a vector type. - Remove the type_in handling. - - 2018-06-20 Richard Sandiford - - * tree-vect-patterns.c (vect_pattern_detected): New function. - (vect_recog_dot_prod_patternm, vect_recog_sad_pattern) - (vect_recog_widen_mult_pattern, vect_recog_widen_sum_pattern) - (vect_recog_over_widening_pattern, vect_recog_widen_shift_pattern - (vect_recog_rotate_pattern, vect_recog_vector_vector_shift_pattern) - (vect_recog_mult_pattern, vect_recog_divmod_pattern) - (vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern) - (vect_recog_mask_conversion_pattern) - (vect_try_gather_scatter_pattern): Likewise. + 2019-11-11 Martin Liska - 2018-06-20 Richard Sandiford + * dbgcnt.def (DEBUG_COUNTER): Sort counters + alphabetically. - * tree-vect-patterns.c (vect_get_internal_def): New function. - (vect_recog_dot_prod_pattern, vect_recog_sad_pattern) - (vect_recog_vector_vector_shift_pattern, check_bool_pattern) - (search_type_for_mask_1): Use it. + 2019-11-11 Andre Vieira - 2018-06-20 Richard Sandiford + * tree-vect-loop-manip.c (vect_do_peeling): Take epilogue gaps into + account when checking if there are enough iterations to vectorize + epilogue. - * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove - redundant WIDEN_SUM_EXPR handling. - (vect_recog_sad_pattern): Likewise. + 2019-11-11 Tobias Burnus + Kwok Cheung Yeung - 2018-06-20 Richard Sandiford + * langhooks-def.h (LANG_HOOKS_OMP_CHECK_OPTIONAL_ARGUMENT): + Renamed from LANG_HOOKS_OMP_IS_OPTIONAL_ARGUMENT; update define. + (LANG_HOOKS_DECLS): Rename also here. + * langhooks.h (lang_hooks_for_decls): Rename + omp_is_optional_argument to omp_check_optional_argument; take + additional bool argument. + * omp-general.h (omp_check_optional_argument): Likewise. + * omp-general.h (omp_check_optional_argument): Likewise. + * omp-low.c (lower_omp_target): Update calls; handle absent + Fortran optional arguments with USE_DEVICE_ADDR/USE_DEVICE_PTR. - * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Remove - redundant check that the types of a PLUS_EXPR or MULT_EXPR agree. - (vect_recog_sad_pattern): Likewise PLUS_EXPR, ABS_EXPR and MINUS_EXPR. - (vect_recog_widen_mult_pattern): Likewise MULT_EXPR. - (vect_recog_widen_sum_pattern): Likewise PLUS_EXPR. + 2019-11-11 H.J. Lu - 2018-06-20 Richard Sandiford + PR target/87833 + * config/i386/intelmic-mkoffload.c (prepare_target_image): Put + -fPIC and -shared the last to create offload image. - * tree-vect-stmts.c (vectorizable_call): Make sure that we - use the stmt_vec_info of the original bb statement for the - new zero assignment, even if the call is part of a pattern. + 2019-11-11 Thomas Schwinge - 2018-06-20 Richard Sandiford + * gimplify.c (gimplify_scan_omp_clauses): Assert 'offset2' instead + of 'offset'. - * tree-vectorizer.h (_stmt_vec_info): Note above pattern_def_seq - that the sequence is attached to the original statement rather - than the pattern statement. - * tree-vect-loop.c (vect_determine_vf_for_stmt): Take the - PATTERN_DEF_SEQ from the original statement rather than - the main pattern statement. - * tree-vect-stmts.c (free_stmt_vec_info): Likewise. - * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Likewise. - (vect_mark_pattern_stmts): Don't copy the PATTERN_DEF_SEQ. + * Makefile.in (LANG_CONFIGUREFRAGS): Define. + (config.status): Use/depend on it. + * configure.ac (all_lang_configurefrags): Track, 'AC_SUBST'. + * configure: Regenerate. - 2018-06-20 Richard Sandiford + 2019-11-11 Jiufu Guo - * tree-vect-stmts.c (vect_analyze_stmt): Move the handling of pattern - definition statements before the early exit for statements that aren't - live or relevant. - * tree-vect-loop.c (vect_transform_loop_stmt): New function, - split out from... - (vect_transform_loop): ...here. Process pattern definition - statements without first checking whether the main pattern - statement is live or relevant. + PR tree-optimization/88760 + * gcc/config/rs6000/rs6000.opt (-munroll-only-small-loops): New option. + * gcc/common/config/rs6000/rs6000-common.c + (rs6000_option_optimization_table) [OPT_LEVELS_2_PLUS_SPEED_ONLY]: + Turn on -funroll-loops and -munroll-only-small-loops. + [OPT_LEVELS_ALL]: Turn off -fweb and -frename-registers. + * config/rs6000/rs6000.c (rs6000_option_override_internal): Remove + set of PARAM_MAX_UNROLL_TIMES and PARAM_MAX_UNROLLED_INSNS. + Turn off -munroll-only-small-loops for explicit -funroll-loops. + (TARGET_LOOP_UNROLL_ADJUST): Add loop unroll adjust hook. + (rs6000_loop_unroll_adjust): Define it. Use -munroll-only-small-loops. - 2018-06-19 Eric Botcazou + 2019-11-11 Kewen Lin - * tree-cfgcleanup.c (tree_forwarder_block_p): Do not return false at - -O0 if the locus represent UNKNOWN_LOCATION but have different values. + * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): + Make scalar_load, vector_load, unaligned_load and + vector_gather_load cost more to conform hardware latency and + insn cost settings. - 2018-06-19 Aaron Sawdey + 2019-11-10 Iain Sandoe - * config/rs6000/rs6000-string.c (select_block_compare_mode): Check - TARGET_EFFICIENT_OVERLAPPING_UNALIGNED here instead of in caller. - (do_and3, do_and3_mask, do_compb3, do_rotl3): New functions. - (expand_block_compare): Change select_block_compare_mode call. - (expand_strncmp_align_check): Use new functions, fix comment. - (emit_final_str_compare_gpr): New function. - (expand_strn_compare): Refactor and clean up code. - * config/rs6000/vsx.md (vsx_mov_64bit): Remove *. + * config/darwin.h (MACHO_SYMBOL_FLAG_LINKER_VIS): New. + (MACHO_SYMBOL_LINKER_VIS_P): New. - 2018-06-19 Tony Reix - Damien Bergamini - David Edelsohn + 2019-11-10 Kwok Cheung Yeung - * collect2.c (static_obj): New variable. - (static_libs): New variable. - (is_in_list): Uncomment declaration. - (main): Track AIX libraries linked statically. - (is_in_list): Uncomment definition. - (scan_prog_file): Don't add AIX shared libraries initializer - to constructor list if linking statically. + * lra-spills.c (assign_spill_hard_regs): Do not spill into + registers in eliminable_regset. - 2018-06-19 Max Filippov + 2019-11-10 Jan Hubicka - * config/xtensa/xtensa.md (UNSPEC_FRAME_BLOCKAGE): New unspec - constant. - (allocate_stack, frame_blockage, *frame_blockage): New patterns. + * ipa-inline.c (compute_uninlined_call_time, + compute_inlined_call_time): Take edge frequency as + parameter rather than computing it by itself. + (big_speedup_p, edge_badness): Manually CSE sreal + frequency calculations. - 2018-06-19 Jan Hubicka + 2019-11-10 Jan Hubicka - * tree.c (find_decls_types_r): Remove all non-VAR_DECLs from - blocks. + * profile-count.c (profile_count::to_sreal_scale): Short circuit + case where profiles are same. - 2018-06-19 Martin Liska + 2019-11-10 Jan Hubicka - * config/i386/i386.c (ix86_can_inline_p): Do not use - ipa_fn_summaries::get_create. - * ipa-cp.c (ipcp_cloning_candidate_p): Replace get_create with - get. - (devirtualization_time_bonus): Likewise. - (ipcp_propagate_stage): Likewise. - * ipa-fnsummary.c (redirect_to_unreachable): Likewise. - (edge_set_predicate): Likewise. - (evaluate_conditions_for_known_args): Likewise. - (evaluate_properties_for_edge): Likewise. - (ipa_call_summary::reset): Tranform to ... - (ipa_call_summary::~ipa_call_summary): ... this. - (ipa_fn_summary::reset): Transform to ... - (ipa_fn_summary::~ipa_fn_summary): ... this. - (ipa_fn_summary_t::remove): Rename to ... - (ipa_fn_summary_t::remove_callees): ... this. - (ipa_fn_summary_t::duplicate): Use placement new - instead of memory copy. - (ipa_call_summary_t::duplicate): Likewise. - (ipa_call_summary_t::remove): Remove. - (dump_ipa_call_summary): Change get_create to get. - (ipa_dump_fn_summary): Dump only when summary exists. - (analyze_function_body): Use symbol_summary::get instead - of get_create. - (compute_fn_summary): Likewise. - (estimate_edge_devirt_benefit): Likewise. - (estimate_edge_size_and_time): Likewise. - (inline_update_callee_summaries): Likewise. - (remap_edge_change_prob): Likewise. - (remap_edge_summaries): Likewise. - (ipa_merge_fn_summary_after_inlining): Likewise. - (write_ipa_call_summary): Likewise. - (ipa_fn_summary_write): Likewise. - (ipa_free_fn_summary): Likewise. - * ipa-fnsummary.h (struct GTY): Add new ctor and copy ctor. - (struct ipa_call_summary): Likewise. - * ipa-icf.c (sem_function::merge): Use symbol_summary::get instead - of get_create. - * ipa-inline-analysis.c (do_estimate_edge_time): Likewise. - (estimate_size_after_inlining): Likewise. - (estimate_growth): Likewise. - (growth_likely_positive): Likewise. - * ipa-inline-transform.c (clone_inlined_nodes): Likewise. - (inline_call): Likewise. - * ipa-inline.c (caller_growth_limits): Likewise. - (can_inline_edge_p): Likewise. - (can_inline_edge_by_limits_p): Likewise. - (compute_uninlined_call_time): Likewise. - (compute_inlined_call_time): Likewise. - (want_inline_small_function_p): Likewise. - (edge_badness): Likewise. - (update_caller_keys): Likewise. - (update_callee_keys): Likewise. - (inline_small_functions): Likewise. - (inline_to_all_callers_1): Likewise. - (dump_overall_stats): Likewise. - (early_inline_small_functions): Likewise. - (early_inliner): Likewise. - * ipa-profile.c (ipa_propagate_frequency_1): Likewise. - * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise. - * ipa-pure-const.c (malloc_candidate_p): Likewise. - * ipa-split.c (execute_split_functions): Likewise. - * symbol-summary.h: Likewise. - * tree-sra.c (ipa_sra_preliminary_function_checks): Likewise. - - 2018-06-19 Richard Biener - - * tree-vectorizer.c (try_vectorize_loop_1): Split out of ... - (vectorize_loops): ... here. Fix dbgcnt handling. - (try_vectorize_loop): Wrap try_vectorize_loop_1. - - 2018-06-19 Segher Boessenkool - - PR target/86197 - * config/rs6000/rs6000.md (rs6000_discover_homogeneous_aggregate): An - ieee128 argument takes up only one (vector) register, not two (floating - point) registers. - - 2018-06-19 Eric Botcazou - - * gimplify.c (gimplify_init_constructor): Really never clear for an - incomplete constructor if CONSTRUCTOR_NO_CLEARING is set. - - 2018-06-19 Richard Biener - - PR tree-optimization/86179 - * tree-vect-patterns.c (vect_pattern_recog_1): Clean up - after failed recognition. - - 2018-06-18 Martin Sebor - - PR middle-end/85602 - * calls.c (maybe_warn_nonstring_arg): Handle strncat. - * tree-ssa-strlen.c (is_strlen_related_p): Make extern. - Handle integer subtraction. - (maybe_diag_stxncpy_trunc): Handle nonstring source arguments. - * tree-ssa-strlen.h (is_strlen_related_p): Declare. - - 2018-06-18 David Malcolm - - * config/frv/frv-protos.h (frv_ifcvt_modify_insn): Strengthen 3rd - param from rtx to rtx_insn *. - * config/frv/frv.c (frv_ifcvt_add_insn): Likewise for "insn" - param. - (frv_ifcvt_modify_insn): Likwise. - (frv_ifcvt_modify_final): Likwise for local "existing_insn", - adding an as_a cast. Likewise for local "insn". - * config/mips/mips.c (r10k_insert_cache_barriers): Add an - as_a cast to local "unprotected_region" once - it's been established that it's not NULL or pc_rtx. - * config/nds32/nds32-relax-opt.c (nds32_group_insns): Strengthen - param "sethi" from rtx to rtx_insn *. - (nds32_group_float_insns): Likewise for param "insn". - * config/vax/vax-protos.h (vax_output_int_add): Likewise for 1st - param. - (vax_output_int_subtract): Likewise. - * config/vax/vax.c (vax_output_int_add): Likewise for param - "insn". - (vax_output_int_subtract): Likewise. - * emit-rtl.c (set_insn_deleted): Likewise, removing cast. - (emit_pattern_after): Likewise for param "after". - (emit_insn_after): Likewise. - (emit_jump_insn_after): Likewise. - (emit_call_insn_after): Likewise. - (emit_debug_insn_after): Likewise. - (emit_pattern_before): Likewise for param "before". - (emit_insn_before): Likewise. - (emit_jump_insn_before): Likewise. - * final.c (get_insn_template): Likewise for param "insn", removing - a cast. - * output.h (get_insn_template): Likewise for 2nd param. - * rtl.h (emit_insn_before): Likewise. - (emit_jump_insn_before): Likewise. - (emit_debug_insn_before_noloc): Likewise. - (emit_insn_after): Likewise. - (emit_jump_insn_after): Likewise. - (emit_call_insn_after): Likewise. - (emit_debug_insn_after): Likewise. - (set_insn_deleted): Likewise for param. - - 2018-06-18 Michael Meissner - - PR target/85358 - * config/rs6000/rs6000-modes.def (toplevel): Rework the 128-bit - floating point modes, so that IFmode is numerically greater than - TFmode, which is greater than KFmode using FRACTIONAL_FLOAT_MODE - to declare the ordering. This prevents IFmode from being - converted to TFmode when long double is IEEE 128-bit on an ISA 3.0 - machine. Include rs6000-modes.h to share the fractional values - between genmodes* and the rest of the compiler. - (IFmode): Likewise. - (KFmode): Likewise. - (TFmode): Likewise. - * config/rs6000/rs6000-modes.h: New file. - * config/rs6000/rs6000.c (rs6000_debug_reg_global): Change the - meaning of rs6000_long_double_size so that 126..128 selects an - appropriate 128-bit floating point type. - (rs6000_option_override_internal): Likewise. - * config/rs6000/rs6000.h (toplevel): Include rs6000-modes.h. - (TARGET_LONG_DOUBLE_128): Change the meaning of - rs6000_long_double_size so that 126..128 selects an appropriate - 128-bit floating point type. - (LONG_DOUBLE_TYPE_SIZE): Update comment. - * config/rs6000/rs6000.md (trunciftf2): Correct the modes of the - source and destination to match the standard usage. - (truncifkf2): Likewise. - (copysign3, IEEE iterator): Rework copysign of float128 on - ISA 2.07 to use an explicit clobber, instead of passing in a - temporary. - (copysign3_soft): Likewise. + * cgraph.c (cgraph_edge::maybe_hot_p): Do not use sreal_frequency. - 2018-06-18 David Malcolm + 2019-11-10 Jan Hubicka - * tree-vect-data-refs.c (vect_analyze_data_ref_dependences): - Replace dump_printf_loc call with DUMP_VECT_SCOPE. - (vect_slp_analyze_instance_dependence): Likewise. - (vect_enhance_data_refs_alignment): Likewise. - (vect_analyze_data_refs_alignment): Likewise. - (vect_slp_analyze_and_verify_instance_alignment - (vect_analyze_data_ref_accesses): Likewise. - (vect_prune_runtime_alias_test_list): Likewise. - (vect_analyze_data_refs): Likewise. - * tree-vect-loop-manip.c (vect_update_inits_of_drs): Likewise. - * tree-vect-loop.c (vect_determine_vectorization_factor): Likewise. - (vect_analyze_scalar_cycles_1): Likewise. - (vect_get_loop_niters): Likewise. - (vect_analyze_loop_form_1): Likewise. - (vect_update_vf_for_slp): Likewise. - (vect_analyze_loop_operations): Likewise. - (vect_analyze_loop): Likewise. - (vectorizable_induction): Likewise. - (vect_transform_loop): Likewise. - * tree-vect-patterns.c (vect_pattern_recog): Likewise. - * tree-vect-slp.c (vect_analyze_slp): Likewise. - (vect_make_slp_decision): Likewise. - (vect_detect_hybrid_slp): Likewise. - (vect_slp_analyze_operations): Likewise. - (vect_slp_bb): Likewise. - * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise. - (vectorizable_bswap): Likewise. - (vectorizable_call): Likewise. - (vectorizable_simd_clone_call): Likewise. - (vectorizable_conversion): Likewise. - (vectorizable_assignment): Likewise. - (vectorizable_shift): Likewise. - (vectorizable_operation): Likewise. - * tree-vectorizer.h (DUMP_VECT_SCOPE): New macro. - - 2018-06-18 Martin Sebor - - PR tree-optimization/81384 - * builtin-types.def (BT_FN_SIZE_CONST_STRING_SIZE): New. - * builtins.c (expand_builtin_strnlen): New function. - (expand_builtin): Call it. - (fold_builtin_n): Avoid setting TREE_NO_WARNING. - * builtins.def (BUILT_IN_STRNLEN): New. - * calls.c (maybe_warn_nonstring_arg): Handle BUILT_IN_STRNLEN. - Warn for bounds in excess of maximum object size. - * tree-ssa-strlen.c (maybe_set_strlen_range): Return tree representing - single-value ranges. Handle strnlen. - (handle_builtin_strlen): Handle strnlen. - (strlen_check_and_optimize_stmt): Same. - * doc/extend.texi (Other Builtins): Document strnlen. - - 2018-06-18 Maya Rashish - - * config/alpha/openbsd.h (TARGET_DEFAULT): Define. - (LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): Likewise. - (INTMAX_TYPE, UINTMAX_TYPE, WINT_TYPE): Likewise. - - * config/alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Move from - here to ... - * config/alpha/linux.h (STARTFILE_SPEC, ENDFILE_SPEC): Here. - - 2018-06-18 Prathamesh Kulkarni - - * tree.c (escaped_string::escape): Replace cast to char * by - const_cast (unescaped). - - 2018-06-18 Nick Clifton - - PR 84195 - * tree.c (escaped_string): New class. Converts an unescaped - string into its escaped equivalent. - (warn_deprecated_use): Use the new class to convert the - deprecation message, if present. - (test_escaped_strings): New self test. - (test_c_tests): Add test_escaped_strings. - * doc/extend.texi (deprecated): Add a note that the - deprecation message is affected by the -fmessage-length - option, and that control characters will be escaped. - (#pragma GCC error): Document this pragma. - (#pragma GCC warning): Likewise. - * doc/invoke.texi (-fmessage-length): Document this option's - effect on the #warning and #error preprocessor directives and - the deprecated attribute. - - 2018-06-18 Eric Botcazou - - * tree.c (decl_value_expr_lookup): Revert latest change. - (decl_value_expr_insert): Likewise. - - 2018-06-17 Eric Botcazou - - * gimplify.c (nonlocal_vlas): Delete. - (nonlocal_vla_vars): Likewise. - (gimplify_var_or_parm_decl): Do not add debug VAR_DECLs for non-local - referenced VLAs. - (gimplify_body): Do not create and destroy nonlocal_vlas. - * tree-nested.c: Include diagnostic.h. - (use_pointer_in_frame): Tweak. - (lookup_field_for_decl): Add assertion and declare the transformation. - (convert_nonlocal_reference_op) : Rework and issue an - internal error when the reference is in a wrong context. Do not - create a debug decl by default. - (note_nonlocal_block_vlas): Delete. - (convert_nonlocal_reference_stmt) : Do not call it. - (convert_local_reference_op) : Skip the frame decl. Do not - create a debug decl by default. - (convert_gimple_call) : Issue an internal error when the - call is in a wrong context. - (fixup_vla_decls): New function. - (finalize_nesting_tree_1): Adjust comment. Call fixup_vla_decls if no - debug variables were created. - * tree.c (decl_value_expr_lookup): Add checking assertion. - (decl_value_expr_insert): Likewise. - - 2018-06-16 Kugan Vivekanandarajah - - PR middle-end/82479 - * ipa-fnsummary.c (will_be_nonconstant_expr_predicate): Handle CALL_EXPR. - * tree-scalar-evolution.c (interpret_expr): Likewise. - (expression_expensive_p): Likewise. - * tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Likewise. - * tree-ssa-loop-niter.c (number_of_iterations_popcount): New. - (number_of_iterations_exit_assumptions): Use number_of_iterations_popcount. - (ssa_defined_by_minus_one_stmt_p): New. - - 2018-06-16 Kugan Vivekanandarajah - - PR middle-end/64946 - * cfgexpand.c (expand_debug_expr): Hande ABSU_EXPR. - * config/i386/i386.c (ix86_add_stmt_cost): Likewise. - * dojump.c (do_jump): Likewise. - * expr.c (expand_expr_real_2): Check operand type's sign. - * fold-const.c (const_unop): Handle ABSU_EXPR. - (fold_abs_const): Likewise. - * gimple-pretty-print.c (dump_unary_rhs): Likewise. - * gimple-ssa-backprop.c (backprop::process_assign_use): Likesie. - (strip_sign_op_1): Likesise. - * match.pd: Add new pattern to generate ABSU_EXPR. - * optabs-tree.c (optab_for_tree_code): Handle ABSU_EXPR. - * tree-cfg.c (verify_gimple_assign_unary): Likewise. - * tree-eh.c (operation_could_trap_helper_p): Likewise. - * tree-inline.c (estimate_operator_cost): Likewise. - * tree-pretty-print.c (dump_generic_node): Likewise. - * tree-vect-patterns.c (vect_recog_sad_pattern): Likewise. - * tree.def (ABSU_EXPR): New. - - 2018-06-16 Jakub Jelinek - - PR middle-end/86095 - * common.opt (Wunsafe-loop-optimizations): Add Ignore, remove Var, - documented as preserved for backward compatibility only. - * doc/invoke.texi: Remove -Wunsafe-loop-optimizations documentation. - - PR rtl-optimization/86108 - * bb-reorder.c (create_forwarder_block): Renamed to ... - (create_eh_forwarder_block): ... this. Split OLD_BB after labels and - jump from new landing pad to the second part. - (sjlj_fix_up_crossing_landing_pad, dw2_fix_up_crossing_landing_pad): - Adjust callers. - - 2018-06-15 Jakub Jelinek - - PR middle-end/85878 - * expr.c (expand_assignment): Remove now redundant COMPLEX_MODE_P - check from first store_expr, use to_mode instead of GET_MODE (to_rtx). - Only call store_expr for halves if the mode is the same. - - PR middle-end/86123 - * match.pd ((X / Y) == 0 -> X < Y): Don't transform complex divisions. - Fix up comment formatting. - - 2018-06-15 Bernd Edlinger - - * typed-splay-tree.h (typed_splay_tree::remove): New function. - (typed_splay_tree::closure, - typed_splay_tree::inner_foreach_fn, typed_splay_tree::m_inner): Deleted. - (typed_splay_tree::typed_splay_tree, - typed_splay_tree::operator =): Declared private. - (typed_splay_tree::splay_tree_key, typed_splay_tree::splay_tree_value, - typed_splay_tree::splay_tree_node_s, typed_splay_tree::KDEL, - typed_splay_tree::VDEL, typed_splay_tree::splay_tree_delete_helper, - typed_splay_tree::rotate_left, typed_splay_tree::rotate_right, - typed_splay_tree::splay_tree_splay, - typed_splay_tree::splay_tree_foreach_helper, - typed_splay_tree::splay_tree_insert, - typed_splay_tree::splay_tree_remove, - typed_splay_tree::splay_tree_lookup, - typed_splay_tree::splay_tree_predecessor, - typed_splay_tree::splay_tree_successor, - typed_splay_tree::splay_tree_min, - typed_splay_tree::splay_tree_max): Took over from splay-tree.c/.h. - (typed_splay_tree::root, typed_splay_tree::comp, - typed_splay_tree::delete_key, - typed_splay_tree::delete_value): New data members. - * typed-splay-tree.c (selftest::test_str_to_int): Add a test for - typed_splay_tree::remove. - - 2018-06-15 Matthew Fortune - - * config/mips/mips.h (ASM_SPEC): Pass through -mcrc, -mno-crc, - -mginv and -mno-ginv to the assembler. - * config/mips/mips.opt (-mcrc): New option. - (-mginv): Likewise. - * doc/invoke.text (-mcrc): Document. - (-mginv): Likewise. - - 2018-06-15 Nick Clifton - - PR 84195 - * tree.c (escaped_string): New class. Converts an unescaped - string into its escaped equivalent. - (warn_deprecated_use): Use the new class to convert the - deprecation message, if present. - (test_escaped_strings): New self test. - (test_c_tests): Add test_escaped_strings. - * doc/extend.texi (deprecated): Add a note that the - deprecation message is affected by the -fmessage-length - option, and that control characters will be escaped. - (#pragma GCC error): Document this pragma. - (#pragma GCC warning): Likewise. - * doc/invoke.texi (-fmessage-length): Document this option's - effect on the #warning and #error preprocessor directives and - the deprecated attribute. - - 2018-06-15 Richard Biener - - * tree-vect-slp.c (vect_slp_bb): Dump MSG_OPTIMIZED_LOCATIONS - here, also noting vector size used. - * tree-vectorizer.c (vectorize_loops): Adjust. Note vector - size used in MSG_OPTIMIZED_LOCATIONS dump. - (pass_slp_vectorize::execute): Adjust. - - 2018-06-15 Claudiu Zissulescu - - PR target/85968 - * config/arc/arc.c (arc_return_address_register): Fix - if-condition. - - 2018-06-15 Richard Biener - - PR middle-end/86159 - * tree-cfg.c (gimplify_build3): Do not strip sign conversions, - leave useless conversion stripping to force_gimple_operand_gsi. - (gimplify_build2): Likewise. - (gimplify_build1): Likewise. - - 2018-06-15 Richard Biener - - PR middle-end/86076 - * tree-cfg.c (move_stmt_op): unshare invariant addresses - before adjusting their block. - - 2018-06-15 Sebastian Huber - - * config.gcc (riscv*-*-elf* | riscv*-*-rtems*): Use custom - multilibs for *-*-rtems*. - * config/riscv/t-rtems: New file. - - 2018-06-14 Jakub Jelinek - - PR middle-end/86122 - * match.pd ((A +- CST1) +- CST2): Punt if last resort - unsigned_type_for returns NULL. - - PR target/85945 - * lower-subreg.c (find_decomposable_subregs): Don't decompose float - subregs of multi-word pseudos unless the float mode has word size. - - 2018-06-14 Richard Biener - - PR middle-end/86139 - * tree-vect-generic.c (build_word_mode_vector_type): Remove - duplicate and harmful type_hash_canon. - * tree.c (type_hash_canon): Assert we didn't find ourselves. - - 2018-06-14 Richard Biener - - PR ipa/86124 - * tree-ssa-struct-alias.c (create_variable_info_for): Handle - NULL cgraph_node. - - 2018-06-14 Sebastian Huber - - * config/rtems.h (STDINT_LONG32): Define. - - 2018-06-13 Matthew Fortune - Prachi Godbole - - * config/mips/mips-cpus.def: Define P6600. - * config/mips/mips-tables.opt: Regenerate. - * config/mips/mips.c (mips_ucbranch_type): New enum. - (mips_rtx_cost_data): Add support for P6600. - (mips_issue_rate): Likewise. - (mips_multipass_dfa_lookahead): Likewise. - (mips_avoid_hazard): Likewise. - (mips_reorg_process_insns): Likewise. - (mips_classify_branch_p6600): New function. - * config/mips/mips.h (TUNE_P6600): New define. - (MIPS_ISA_LEVEL_SPEC): Infer mips64r6 from p6600. - (ENABLE_LD_ST_PAIRS): Enable load/store bonding for p6600. - * config/mips/mips.md: Include p6600.md. - (processor): Add p6600. - * config/mips/p6600.md: New file. - * doc/invoke.texi: Add p6600 to supported architectures. - - 2018-06-13 Martin Sebor - - PR tree-optimization/86114 - * gimple-fold.c (gimple_fold_builtin_strlen): Only handle LHS - of integer types. - * tree-ssa-strlen.c (maybe_set_strlen_range): Same. - - 2018-06-13 Richard Biener - - * tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): - Properly set vector type of the intermediate stmt. - * tree-vect-stmts.c (vectorizable_operation): The destination - var always has vectype_out type. - - 2018-06-13 Jeff Law - - * config/rl78/rl78.c (move_elim_pass): Use TDF_NONE rather than - integer 0 for argument to print_rtl_with_bb. - (rl78_reorg): Likewise. - - 2018-06-13 David Malcolm - - * config/arc/arc.c (hwloop_optimize): Strengthen local "end_label" - from rtx to rtx_insn *. - * config/bfin/bfin.c (hwloop_optimize): Likewise for local - "label". - (add_sched_insns_for_speculation): Likewise for local "target", - converting usage of JUMP_LABEL to JUMP_LABEL_AS_INSN. - * config/c6x/c6x.c (reorg_split_calls): Strengthen param "call_labels" - from rtx_insn ** to rtx_code_label **. - (reorg_emit_nops): Likewise. - (c6x_reorg): Likewise for local "call_labels". - * config/sh/sh-protos.h (get_dest_uid): Strengthen 1st param from - rtx to rtx_insn *. - * config/sh/sh.c (dump_table): Strengthen local "lab" from rtx to - rtx_code_label *, adding safe_as_a casts to - the loops over LABEL_REFS. - (fixup_addr_diff_vecs): Add as_a to usage of - braf_label. - (barrier_align): Convert usage of JUMP_LABEL to JUMP_LABEL_AS_INSN. - (get_dest_uid): Strengthen param "label" from rtx to rtx_insn *. - (split_branches): Strengthen local "olabel" from rtx to - rtx_insn *, adding a safe_as_a cast. - * emit-rtl.c (next_real_insn): Strengthen param from "rtx" - to "rtx_insn *". - (add_insn_after): Likewise for first two params. - (add_insn_before): Likewise. - (remove_insn): Likewise for param. - (emit_pattern_before_noloc): Likewise for second and third params. - (emit_jump_insn_before_noloc): Convert NULL_RTX to NULL. - (emit_call_insn_before_noloc): Likewise. - (emit_debug_insn_before_noloc): Strengthen "before" param from "rtx" - to "rtx_insn *". - (emit_barrier_before): Likewise. - (emit_label_before): Strengthen "label" param from "rtx" to - "rtx_code_label *". Strengthen "before" param from "rtx" to - "rtx_insn *". - (emit_insn_after_1): Strengthen "after" param from "rtx" to - "rtx_insn *". - (emit_pattern_after_noloc): Likewise. - (emit_insn_after_noloc): Likewise. - (emit_jump_insn_after_noloc): Likewise. - (emit_call_insn_after_noloc): Likewise. - (emit_debug_insn_after_noloc): Likewise. - (emit_barrier_after): Likewise. - (emit_label_after): Likewise for both params. - (emit_pattern_after_setloc): Likewise for "after" param. Convert - "loc" param from "int" to "location_t". - (emit_insn_after_setloc): Likewise. - (emit_jump_insn_after_setloc): Likewise. - (emit_call_insn_after_setloc): Likewise. - (emit_debug_insn_after_setloc): Likewise. - (emit_pattern_before_setloc): Likewise for "before" param. Convert - "loc" param from "int" to "location_t". - (emit_pattern_before): Convert NULL_RTX to NULL. - (emit_insn_before_setloc): Convert "loc" param from "int" to - "location_t". - (emit_jump_insn_before_setloc): Likewise. - (emit_call_insn_before_setloc): Likewise. - (emit_debug_insn_before_setloc): Strengthen "before" param from rtx to - rtx_insn *. Convert "loc" param from "int" to "location_t". - * rtl.h (emit_insn_before_setloc, emit_jump_insn_before_setloc, - emit_call_insn_before_setloc, emit_debug_insn_before_setloc): - Convert 3rd param from "int" to "location_t". - (emit_barrier_before, emit_barrier_after, next_real_insn): - Strengthen param from rtx to rtx_insn *. - (emit_label_before): Strengthen 1st param from "rtx" to - "rtx_code_label *". Strengthen 2nd param from "rtx" to - "rtx_insn *". - (emit_insn_after_noloc, emit_jump_insn_after_noloc, - emit_call_insn_after_noloc, emit_debug_insn_after_noloc): - Strengthen 2nd param from "rtx" to "rtx_insn *". - (emit_insn_after_setloc, emit_jump_insn_after_setloc) - emit_call_insn_after_setloc, emit_debug_insn_after_setloc): - Likewise. Convert 3rd param from "int" to "location_t". - (emit_label_after): Strengthen 1st param from "rtx" to - "rtx_code_label *". - (next_real_insn, remove_insn): Strengthen param from "rtx" to - "rtx_insn *". - (add_insn_before, add_insn_after): Strengthen 1st and 2nd params - from "rtx" to "rtx_insn *". - - 2018-06-13 Jan Hubicka - - * cgraph.c (cgraph_node::get_untransformed_body): Dump function - bodies streamed in with -Q. - * dumpfile.c (dump_files): Add lto-stream-out dump file. - * dumpfile.h (tree_dump_index): Add lto_stream_out. - * gimple-streamer-out.c: Include gimple-pretty-print.h - (output_bb): Dump stmts streamed. - * lto-section-out.c: Include print-tree.h - (lto_begin_section): Dump sections created. - (lto_output_decl_index): Dump decl encoded. - * lto-streamer-out.c: Include print-tree.h - (create_output_block): Dump output block created. - (DFS::DFS_write_tree_body): Dump DFS SCCs streamed. - (output_function): Dump function output. - (output_constructor): Dump constructor streamed. - (write_global_stream): Output indexes encoded. - (produce_asm_for_decls): Dump streams encoded. - * lto-streamer.c (streamer_dump_file): New global var. - * lto-streamer.h (streamer_dump_file): Declare. - * passes.c (ipa_write_summaries): Initialize streamer dump. - * varpool.c (varpool_node::get_constructor): Dump constructors streamed - in. - - 2018-06-13 Eric Botcazou - - PR target/86048 - * config/i386/winnt.c (i386_pe_seh_cold_init): Do not emit negative - offsets for register save directives. Emit a second batch of save - directives, if need be, when the function accesses prior frames. - - 2018-06-12 Claudiu Zissulescu - - * config/arc/fpu.md (fmasf4): Force operand to register. - (fnmasf4): Likewise. - - 2018-06-12 Claudiu Zissulescu - - * config/arc/arc-protos.h (arc_pad_return): Remove. - * config/arc/arc.c (machine_function): Remove force_short_suffix - and size_reason. - (arc_print_operand): Adjust printing of '&'. - (arc_verify_short): Remove conditional printing of short suffix. - (arc_final_prescan_insn): Remove reference to size_reason. - (pad_return): New function. - (arc_reorg): Call pad_return. - (arc_pad_return): Remove. - (arc_init_machine_status): Remove reference to force_short_suffix. - * config/arc/arc.md (vunspec): Add VUNSPEC_ARC_BLOCKAGE. - (attr length): When attribute iscompact is true force to 2 - regardless; in the case of maybe check if we want to force the - instruction to have 4 bytes length. - (nopv): Change it to generate 4 byte long nop as well. - (blockage): New pattern. - (simple_return): Remove call to arc_pad_return. - (p_return_i): Likewise. - - 2018-06-12 Claudiu Zissulescu - - * config/arc/elf.h (LINK_GCC_C_SEQUENCE_SPEC): Define. - - 2018-06-12 Claudiu Zissulescu - - * config/arc/builtins.def (SYNC): SYNC instruction is valid on all - ARC cores. - - 2018-06-12 Claudiu Zissulescu - - * config/arc/arc.c (atomic_exchangesi): EX instruction is default - for ARC700 and ARCv2. - - 2018-06-13 Chenghua Xu - - PR target/86076 - * config/mips/loongson.md (vec_setv4hi): Gen_lowpart for - operands[2] instead of operands[1]. - - - 2018-06-12 Richard Sandiford - - * lra-constraints.c (simplify_operand_subreg): In the paradoxical - case, check whether the outer register overlaps an unallocatable - register, not just whether it fits the required class. - - 2018-06-12 Richard Sandiford - - * poly-int.h (can_div_trunc_p): Add new overload in which all values - are poly_ints. - * alias.c (get_addr): Extend CONST_INT handling to poly_int_rtx_p. - (memrefs_conflict_p): Likewise. - (init_alias_analysis): Likewise. - * cfgexpand.c (expand_debug_expr): Likewise. - * combine.c (combine_simplify_rtx, force_int_to_mode): Likewise. - * cse.c (fold_rtx): Likewise. - * explow.c (adjust_stack, anti_adjust_stack): Likewise. - * expr.c (emit_block_move_hints): Likewise. - (clear_storage_hints, push_block, emit_push_insn): Likewise. - (store_expr_with_bounds, reduce_to_bit_field_precision): Likewise. - (emit_group_load_1): Use rtx_to_poly_int64 for group offsets. - (emit_group_store): Likewise. - (find_args_size_adjust): Use strip_offset. Use rtx_to_poly_int64 - to read the PRE/POST_MODIFY increment. - * calls.c (store_one_arg): Use strip_offset. - * rtlanal.c (rtx_addr_can_trap_p_1): Extend CONST_INT handling to - poly_int_rtx_p. - (set_noop_p): Use rtx_to_poly_int64 for the elements selected - by a VEC_SELECT. - * simplify-rtx.c (avoid_constant_pool_reference): Use strip_offset. - (simplify_binary_operation_1): Extend CONST_INT handling to - poly_int_rtx_p. - * var-tracking.c (compute_cfa_pointer): Take a poly_int64 rather - than a HOST_WIDE_INT. - (hard_frame_pointer_adjustment): Change from HOST_WIDE_INT to - poly_int64. - (adjust_mems, add_stores): Update accodingly. - (vt_canonicalize_addr): Track polynomial offsets. - (emit_note_insn_var_location): Likewise. - (vt_add_function_parameter): Likewise. - (vt_initialize): Likewise. - - 2018-06-12 Jeff Law - - * config.gcc (alpha*-*-freebsd*): Remove. - * config/alpha/freebsd.h: Remove. - - 2018-06-12 David Malcolm - - PR other/69968 - * spellcheck-tree.c (levenshtein_distance): Rename to... - (get_edit_distance): ...this, and update for underlying renaming. - * spellcheck-tree.h (levenshtein_distance): Rename to... - (get_edit_distance): ...this. - * spellcheck.c (levenshtein_distance): Rename to... - (get_edit_distance): ...this. Convert from Levenshtein distance - to Damerau-Levenshtein distance by supporting transpositions of - adjacent characters. Rename "v1" to "v_next" and "v0" to - "v_one_ago". - (selftest::levenshtein_distance_unit_test_oneway): Rename to... - (selftest::test_edit_distance_unit_test_oneway): ...this, and - update for underlying renaming. - (selftest::levenshtein_distance_unit_test): Rename to... - (selftest::test_get_edit_distance_unit): ...this, and update for - underlying renaming. - (selftest::test_find_closest_string): Add example from PR 69968 - where transposition helps - (selftest::test_metric_conditions): Update for renaming. - (selftest::test_metric_conditions): Likewise. - (selftest::spellcheck_c_tests): Likewise. - * spellcheck.h (levenshtein_distance): Rename both overloads to... - (get_edit_distance): ...this. - (best_match::consider): Update for renaming. - - 2018-06-12 Martin Sebor - - PR tree-optimization/85259 - * builtins.c (compute_objsize): Handle constant offsets. - * gimple-ssa-warn-restrict.c (maybe_diag_offset_bounds): Return - true iff a warning has been issued. - * gimple.h (gimple_nonartificial_location): New function. - * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Call - gimple_nonartificial_location and handle -Wno-system-headers. - (handle_builtin_stxncpy): Same. + * ipa-prop.c (ipa_propagate_indirect_call_infos): Remove ipa edge + args summaries of inlined edge unless it holds info about + described reference. - 2018-06-12 Martin Sebor + 2019-11-10 Segher Boessenkool - PR c/85931 - * fold-const.c (operand_equal_p): Handle SAVE_EXPR. + * config/rs6000/rs6000.md (CC_any): New mode iterator. + (*movcc_internal1): Rename to... + (*movcc_ for CC_any): ... this. Support moves of all CC modes. - 2018-06-12 Will Schmidt + 2019-11-09 Jan Hubicka - * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add - BUILTIN_VEC_XST entries for pointer to double and long long. + * cgraph.h (struct cgraph_node): Add ipcp_clone flag. + (cgraph_node::create_virtual_clone): Copy it. + * ipa-cp.c (ipcp_versionable_function_p): Watch for missing + summaries. + (ignore_edge_p): If caller has ipa-cp disabled, skip the edge, too. + (ipcp_verify_propagated_values): Do not verify nodes where ipcp + is disabled. + (propagate_constants_across_call): If callee is not analyzed, give up. + (propagate_constants_topo): Lower to bottom latties of all callees of + functions with ipa-cp disabled. + (ipcp_propagate_stage): Skip functions with ipa-cp disabled. + (cgraph_edge_brings_value_p): Check for availability first. + (create_specialized_node): Set ipcp_clone. + (ipcp_store_bits_results): Check that info is present. + * ipa-fnsummary.c (evaluate_properties_for_edge): Do not analyze + thunks. + (ipa_call_context::duplicate_from, ipa_call_context::equal_to): Be + conservative when callee summary is missing. + (remap_edge_summaries): Lookup call summary only when needed. + * ipa-icf.c (sem_function::param_used_p): Be ready for missing summary. + * ipa-prpo.c (ipa_alloc_node_params, ipa_initialize_node_params): + Use get_create. + (ipa_analyze_node): Use get_create. + (propagate_controlled_uses): Do not propagate when function is not + analyzed. + (ipa_propagate_indirect_call_infos): Remove summary of inline clone. + (ipa_read_node_info): Use get_create. + * ipa-prop.h (IPA_NODE_REF): Use get. + (IPA_NODE_REF_GET_CREATE): New. + + 2019-11-09 Jan Hubicka + + * ipa-fnsummary.c (evaluate_properties_for_edge): Call IPA_NODE_REF + on function symbol. + + 2019-11-09 Jan Hubicka + + * tree.c (fld_incomplete_type_of): Clear TYPE_FINAL_P, TYPE_EMPTY_P, + ENUM_IS_OPAQUE and ENUM_IS_SCOPED. + (free_lang_data_in_binfo): Clear TREE_PUBLIC in BINFO + (free_lang_data_in_type): Clear ENUM_IS_OPAQUE and ENUM_IS_SCOPED. + + 2019-11-09 Jan Hubicka + + * ipa-inline-analysis.c (do_estimate_growth_1): Add support for + capping the growth cumulated. + (offline_size): Break out from ... + (estimate_growth): ... here. + (check_callers): Add N, OFFLINE and MIN_SIZE and KNOWN_EDGE + parameters. + (growth_likely_positive): Turn to ... + (growth_positive_p): Re-implement. + * ipa-inline.h (growth_likely_positive): Remove. + (growth_positive_p): Declare. + * ipa-inline.c (want_inline_small_function_p): Use + growth_positive_p. + (want_inline_function_to_all_callers_p): Likewise. + + 2019-11-09 Jan Hubicka + + * ipa-fnsummary.c (ipa_call_context::estimate_size_and_time): Fix + calculation of min_size. + (ipa_update_overall_fn_summary): Likewise. - 2018-06-12 H.J. Lu + 2019-11-09 Jan Hubicka + + * ipa-fnsummary.c (estimate_edge_size_and_time): Do not call + estimate_edge_devirt_benefit when not computing hints; + do not compute time when not asked for. + (estimate_calls_size_and_time): Pass NULL hints and time when + these are not computed; do not evaluate hint predicates when these are + not computed. + (ipa_merge_fn_summary_after_inlining): Do not re-evaluate edge + frequency. + + 2019-11-09 Jakub Jelinek + + PR tree-optimization/92401 + * gimple-match-head.c (gimple_resimplify1): Call const_unop only + if res_op->code is an expression with code length 1. + * gimple-match-head.c (gimple_resimplify2): Call const_binop only + if res_op->code is an expression with code length 2. + * gimple-match-head.c (gimple_resimplify3): Call fold_ternary only + if res_op->code is an expression with code length 3. + + 2019-11-09 Iain Sandoe + + * config/darwin.c (machopic_mcount_stub_name): Validate the + symbol stub name when it is created. + * config/i386/darwin.h (FUNCTION_PROFILER): Remove the symbol + stub validation. + + 2019-11-09 Jakub Jelinek + + * symtab.c: Fix comment typos. + * cgraphunit.c: Likewise. + * cgraph.h: Likewise. + * cgraphclones.c: Likewise. + * cgraph.c: Likewise. + * varpool.c: Likewise. + * tree-ssa-strlen.c: Likewise. + * ipa-sra.c: Likewise. + (scan_expr_access, check_all_callers_for_issues): Fix typo + in a dump message. + + 2019-11-08 Iain Sandoe + + * config/darwin-protos.h: Add include quard. + + 2019-11-08 Andrew MacLeod + + * range-op.h (range_operator::fold_range): Return result in a + reference parameter instead of by value. + (range_operator::wi_fold): Same. + * range-op.cc (range_operator::wi_fold): Return result in a reference + parameter instead of by value. + (range_operator::fold_range): Same. + (value_range_from_overflowed_bounds): Same. + (value_range_with_overflow): Same + (create_possibly_reversed_range): Same. + (operator_equal::fold_range): Same. + (operator_not_equal::fold_range): Same. + (operator_lt::fold_range): Same. + (operator_le::fold_range): Same. + (operator_gt::fold_range): Same. + (operator_ge::fold_range): Same. + (operator_plus::wi_fold): Same. + (operator_plus::op1_range): Change call to fold_range. + (operator_plus::op2_range): Change call to fold_range. + (operator_minus::wi_fold): Return result via reference parameter. + (operator_minus::op1_range): Change call to fold_range. + (operator_minus::op2_range): Change call to fold_range. + (operator_min::wi_fold): Return result via reference parameter. + (operator_max::wi_fold): Same. + (cross_product_operator::wi_cross_product): Same. + (operator_mult::wi_fold): Same. + (operator_div::wi_fold): Same. + (operator_div op_floor_div): Fix whitespace. + (operator_exact_divide::op1_range): Change call to fold_range. + (operator_lshift::fold_range): Return result via reference parameter. + (operator_lshift::wi_fold): Same. + (operator_rshift::fold_range): Same. + (operator_rshift::wi_fold): Same. + (operator_cast::fold_range): Same. + (operator_cast::op1_range): Change calls to fold_range. + (operator_logical_and::fold_range): Return result via reference. + (wi_optimize_and_or): Adjust call to value_range_with_overflow. + (operator_bitwise_and::wi_fold): Return result via reference. + (operator_logical_or::fold_range): Same. + (operator_bitwise_or::wi_fold): Same. + (operator_bitwise_xor::wi_fold): Same. + (operator_trunc_mod::wi_fold): Same. + (operator_logical_not::fold_range): Same. + (operator_bitwise_not::fold_range): Same. + (operator_bitwise_not::op1_range): Change call to fold_range. + (operator_cst::fold_range): Return result via reference. + (operator_identity::fold_range): Same. + (operator_abs::wi_fold): Same. + (operator_absu::wi_fold): Same. + (operator_negate::fold_range): Same. + (operator_negate::op1_range): Change call to fold_range. + (operator_addr_expr::fold_range): Return result via reference. + (operator_addr_expr::op1_range): Change call to fold_range. + (operator_pointer_plus::wi_fold): Return result via reference. + (operator_pointer_min_max::wi_fold): Same. + (operator_pointer_and::wi_fold): Same. + (operator_pointer_or::wi_fold): Same. + (range_op_handler): Change call to fold_range. + (range_cast): Same. + * tree-vrp.c (range_fold_binary_symbolics_p): Change call to + fold_range. + (range_fold_unary_symbolics_p): Same. + (range_fold_binary_expr): Same. + (range_fold_unary_expr): Same. + + 2019-11-08 Richard Sandiford + + * tree-vect-loop.c (neutral_op_for_slp_reduction): Take the + vector type as an argument rather than reading it from the + stmt_vec_info. + (vect_create_epilog_for_reduction): Update accordingly. + (vectorizable_reduction): Likewise. + (vect_transform_cycle_phi): Likewise. + + 2019-11-08 Segher Boessenkool + + * config/rs6000/predicates.md (branch_comparison_operator): Allow only + the comparison codes that make sense for the mode used, and only the + codes that can be done with a single branch instruction. + + 2019-11-08 Andre Vieira + + PR tree-optimization/92351 + * tree-vect-data-refs.c (vect_compute_data_ref_alignment): When we are + peeling the main loop for alignment, make sure to set the misalignment + of the epilogue's data references to DR_MISALIGNMENT_UNKNOWN. + + 2019-11-08 Richard Biener + + * dbgcnt.def (ivopts_loop): Add. + * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Check + ivopts_loop before optimizing a loop. + + 2019-11-08 Richard Biener + + PR ipa/92409 + * tree-inline.c (declare_return_variable): Properly handle + type mismatches for the return slot. + + 2019-11-08 Eric Botcazou + + PR target/92095 + * config/sparc/sparc-protos.h (output_load_pcrel_sym): Declare. + * config/sparc/sparc.c (sparc_cannot_force_const_mem): Revert latest + change. + (got_helper_needed): New static variable. + (output_load_pcrel_sym): New function. + (get_pc_thunk_name): Remove after inlining... + (load_got_register): ...here. Rework the initialization of the GOT + register and of the GOT helper. + (save_local_or_in_reg_p): Test the REGNO of the GOT register. + (sparc_file_end): Test got_helper_needed to decide whether the GOT + helper must be emitted. Use output_asm_insn instead of fprintf. + (sparc_init_pic_reg): In PIC mode, always initialize the PIC register + if optimization is enabled. + * config/sparc/sparc.md (load_pcrel_sym): Emit the assembly + by calling output_load_pcrel_sym. + + 2019-11-08 Richard Sandiford + + * tree-sra.c (create_access): Delay disqualifying the base + for poly_int values until we know we have a base. + + 2019-11-08 Andre Vieira + + * tree-vect-loop.c (vect_analyze_loop): Disable epilogue vectorization + for loops with SIMDUID set. Enable epilogue vectorization for loops + with SIMDLEN set after finding a main loop with a VF that matches it. + + 2019-11-08 Jakub Jelinek + + PR target/92038 + * gimple-ssa-store-merging.c (find_constituent_stores): For return + value only, return non-NULL if there is a single non-clobber + constituent store even if there are constituent clobbers and return + one of clobber constituent stores if all constituent stores are + clobbers. + (split_group): Handle clobbers. + (imm_store_chain_info::output_merged_store): When computing + bzero_first, look after all clobbers at the start. Don't count + clobber stmts in orig_num_stmts, except if the first orig store is + a clobber covering the whole area and split_stores cover the whole + area, consider equal number of stmts ok. Punt if split_stores + contains only ->orig stores and their number plus number of original + clobbers is equal to original number of stmts. For ->orig, look past + clobbers in the constituent stores. + (imm_store_chain_info::output_merged_stores): Don't remove clobber + stmts. + (rhs_valid_for_store_merging_p): Don't return false for clobber stmt + rhs. + (store_valid_for_store_merging_p): Allow clobber stmts. + (verify_clear_bit_region_be): Fix up a thinko in function comment. + + PR c++/92384 + * function.c (assign_parm_setup_block, assign_parm_setup_stack): Don't + copy TYPE_EMPTY_P arguments from data->entry_parm to data->stack_parm + slot. + (assign_parms): For TREE_ADDRESSABLE parms with TYPE_EMPTY_P type + force creation of a unique data.stack_parm slot. + + 2019-11-08 Richard Biener + + * genmatch.c (expr::gen_transform): Use the resimplify + member function instead of hard-coding the gimple_resimplifyN variant. + (dt_simplify::gen_1): Likewise. + + 2019-11-08 Richard Sandiford + + * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle + POLY_INT_CST. - PR target/85990 - * config/i386/gnu-user.h (TARGET_THREAD_SPLIT_STACK_OFFSET): - Update comments. - * config/i386/gnu-user64.h (TARGET_THREAD_SPLIT_STACK_OFFSET): - Likewise. + 2019-11-08 Richard Sandiford + + * tree-inline.c (declare_return_variable): Check for poly_int_tree_p + instead of INTEGER_CST. + + 2019-11-08 Richard Biener + + PR tree-optimization/92324 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Use + STMT_VINFO_REDUC_VECTYPE for all computations, inserting + sign-conversions as necessary. + (vectorizable_reduction): Reject conversions in the chain + that are not sign-conversions, base analysis on a non-converting + stmt and its operation sign. Set STMT_VINFO_REDUC_VECTYPE. + * tree-vect-stmts.c (vect_stmt_relevant_p): Don't dump anything + for debug stmts. + * tree-vectorizer.h (_stmt_vec_info::reduc_vectype): New. + (STMT_VINFO_REDUC_VECTYPE): Likewise. + + 2019-11-08 Georg-Johann Lay + + PR target/92055 + * config/avr/avr.opt (-mdouble=, -mlong-double=): + Fix a missing '-' when displaying these options in the + help screen. + + 2019-11-08 Richard Sandiford + + * config/aarch64/iterators.md (SVE_BH, SVE_BHS): Delete. + + 2019-11-08 Richard Sandiford + + * config/aarch64/aarch64-builtins.c + (aarch64_builtin_vectorized_function): Remove bswap handling. + + 2019-11-08 Richard Sandiford + + * tree-core.h (tree_type_common::indivisible_p): New member variable. + * tree.h (TYPE_INDIVISIBLE_P): New macro. + * config/aarch64/aarch64-sve-builtins.cc (register_builtin_types): + Treat the vector types as indivisible. + + 2019-11-08 Richard Sandiford + + * optabs.def (gather_load_optab, mask_gather_load_optab) + (scatter_store_optab, mask_scatter_store_optab): Turn into + conversion optabs, with the offset mode given explicitly. + * doc/md.texi: Update accordingly. + * config/aarch64/aarch64-sve-builtins-base.cc + (svld1_gather_impl::expand): Likewise. + (svst1_scatter_impl::expand): Likewise. + * internal-fn.c (gather_load_direct, scatter_store_direct): Likewise. + (expand_scatter_store_optab_fn): Likewise. + (direct_gather_load_optab_supported_p): Likewise. + (direct_scatter_store_optab_supported_p): Likewise. + (expand_gather_load_optab_fn): Likewise. Expect the mask argument + to be argument 4. + (internal_fn_mask_index): Return 4 for IFN_MASK_GATHER_LOAD. + (internal_gather_scatter_fn_supported_p): Replace the offset sign + argument with the offset vector type. Require the two vector + types to have the same number of elements but allow their element + sizes to be different. Treat the optabs as conversion optabs. + * internal-fn.h (internal_gather_scatter_fn_supported_p): Update + prototype accordingly. + * optabs-query.c (supports_at_least_one_mode_p): Replace with... + (supports_vec_convert_optab_p): ...this new function. + (supports_vec_gather_load_p): Update accordingly. + (supports_vec_scatter_store_p): Likewise. + * tree-vectorizer.h (vect_gather_scatter_fn_p): Take a vec_info. + Replace the offset sign and bits parameters with a scalar type tree. + * tree-vect-data-refs.c (vect_gather_scatter_fn_p): Likewise. + Pass back the offset vector type instead of the scalar element type. + Allow the offset to be wider than the memory elements. Search for + an offset type that the target supports, stopping once we've + reached the maximum of the element size and pointer size. + Update call to internal_gather_scatter_fn_supported_p. + (vect_check_gather_scatter): Update calls accordingly. + When testing a new scale before knowing the final offset type, + check whether the scale is supported for any signed or unsigned + offset type. Check whether the target supports the source and + target types of a conversion before deciding whether to look + through the conversion. Record the chosen offset_vectype. + * tree-vect-patterns.c (vect_get_gather_scatter_offset_type): Delete. + (vect_recog_gather_scatter_pattern): Get the scalar offset type + directly from the gs_info's offset_vectype instead. Pass a zero + of the result type to IFN_GATHER_LOAD and IFN_MASK_GATHER_LOAD. + * tree-vect-stmts.c (check_load_store_masking): Update call to + internal_gather_scatter_fn_supported_p, passing the offset vector + type recorded in the gs_info. + (vect_truncate_gather_scatter_offset): Update call to + vect_check_gather_scatter, leaving it to search for a valid + offset vector type. + (vect_use_strided_gather_scatters_p): Convert the offset to the + element type of the gs_info's offset_vectype. + (vect_get_gather_scatter_ops): Get the offset vector type directly + from the gs_info. + (vect_get_strided_load_store_ops): Likewise. + (vectorizable_load): Pass a zero of the result type to IFN_GATHER_LOAD + and IFN_MASK_GATHER_LOAD. + * config/aarch64/aarch64-sve.md (gather_load): Rename to... + (gather_load): ...this. + (mask_gather_load): Rename to... + (mask_gather_load): ...this. + (scatter_store): Rename to... + (scatter_store): ...this. + (mask_scatter_store): Rename to... + (mask_scatter_store): ...this. + + 2019-11-08 Kewen Lin + + PR target/92132 + * config/rs6000/predicates.md + (signed_or_equality_comparison_operator): New predicate. + (unsigned_or_equality_comparison_operator): Likewise. + * config/rs6000/rs6000.md (one_cmpl2): Remove expand. + (one_cmpl3_internal): Rename to one_cmpl2. + * config/rs6000/vector.md + (vcond_mask_ for VEC_I and VEC_I): New expand. + (vec_cmp for VEC_I and VEC_I): Likewise. + (vec_cmpu for VEC_I and VEC_I): Likewise. + (vcond_mask_ for VEC_F): New expand for float + vector modes and same-size integer vector modes. + (vec_cmp for VEC_F): Likewise. + (vector_lt for VEC_F): New expand. + (vector_le for VEC_F): Likewise. + (vector_ne for VEC_F): Likewise. + (vector_unge for VEC_F): Likewise. + (vector_ungt for VEC_F): Likewise. + (vector_unle for VEC_F): Likewise. + (vector_unlt for VEC_F): Likewise. + (vector_uneq): Expose name. + (vector_ltgt): Likewise. + (vector_unordered): Likewise. + (vector_ordered): Likewise. + + 2019-11-08 Hongtao Liu + + PR target/92295 + * config/i386/i386-expand.c (ix86_expand_vector_init_concat) + Enhance ix86_expand_vector_init_concat. + + 2019-11-08 Joseph Myers + + * doc/invoke.texi (-Wold-style-definition): Document () not being + considered an old-style definition for C2x. + + 2019-11-07 John David Anglin + + * config/pa/pa.md (memory_barrier): Revise to use ldcw barriers. + Enhance comment. + (memory_barrier_coherent, memory_barrier_64, memory_barrier_32): New + insn patterns using ldcw instruction. + (memory_barrier): Remove insn pattern using sync instruction. + * config/pa/pa.opt (coherent-ldcw): New option. + (ordered): New option. + + 2019-11-07 Segher Boessenkool + + * config/rs6000/rs6000.c (validate_condition_mode): Don't assert for + valid conditions. + + 2019-11-07 Jakub Jelinek + + * ipa-utils.c (ipa_merge_profiles): Fix fprintf format string + typo - mistmatch -> mismatch. + * ipa-profile.c (ipa_profile): Likewise. + * ipa-devirt.c (compare_virtual_tables): Fix a comment typo + - mistmatch -> mismatch. + + 2018-11-07 Segher Boessenkool + + * simplify-rtx.c (comparison_to_mask): New function. + (mask_to_comparison): New function. + (simplify_logical_relational_operation): New function. + (simplify_binary_operation_1): Call + simplify_logical_relational_operation. + + 2019-11-07 Peter Bergner + + PR other/92090 + * config/rs6000/predicates.md (input_operand): Allow MODE_PARTIAL_INT + modes for integer constants. + + 2019-11-07 Jan Hubicka + + PR ipa/92406 + * ipa-fnsummary.c (analyze_function_body): Use get_create to copy + summary. - 2018-06-12 Martin Liska + 2019-11-07 Jan Hubicka + + * optc-save-gen.awk: Generate cl_target_option_free + and cl_optimization_option_free. + * opth-en.awk: Declare cl_target_option_free + and cl_optimization_option_free. + * tree.c (free_node): Use it. + + 2019-11-06 Jan Hubicka + + * lto-streamer-in.c: Include alloc-pool.h. + (freeing_string_slot_hasher): Remove. + (string_slot_allocator): New object allocator. + (file_name_hash_table): Turn to hash_table. + (file_name_obstack): New obstack. + (canon_file_name): Allocate in obstack and allocator. + (lto_reader_init): Initialize obstack and allocator. + (lto_free_file_name_hash): New function. + * lto-streamer.h (lto_free_file_name_hash): New. + + 2019-11-07 Feng Xue + + PR tree-optimization/89134 + * doc/invoke.texi (min-loop-cond-split-prob): Document new --params. + * params.def: Add min-loop-cond-split-prob. + * tree-ssa-loop-split.c (split_loop): Remove niter parameter, move some + outside checks on loop into the function. + (split_info): New class. + (find_vdef_in_loop, get_control_equiv_head_block): New functions. + (find_control_dep_blocks, vuse_semi_invariant_p): Likewise. + (ssa_semi_invariant_p, loop_iter_phi_semi_invariant_p): Likewise. + (control_dep_semi_invariant_p, stmt_semi_invariant_p_1): Likewise. + (stmt_semi_invariant_p, branch_removable_p): Likewise. + (get_cond_invariant_branch, compute_added_num_insns): Likewise. + (get_cond_branch_to_split_loop, do_split_loop_on_cond): Likewise. + (split_loop_on_cond): Likewise. + (tree_ssa_split_loops): Add loop split on conditional statement. + + 2019-11-07 Andreas Krebbel + + * config/s390/s390.md ("*cstorecc_z13"): New insn_and_split + pattern. - * doc/options.texi: Document IntegerRange. + 2019-11-07 Richard Biener + + PR tree-optimization/92405 + * tree-vect-loop.c (vectorizable_reduction): Appropriately + restrict lane-reducing ops to single stmt chains. + + 2019-11-07 Martin Jambor + + PR lto/70929 + * cif-code.def (MISMATCHED_ARGUMENTS): Removed. + * cgraph.h (gimple_check_call_matching_types): Remove + * cgraph.c (gimple_check_call_args): Likewise. + (gimple_check_call_matching_types): Likewise. + (symbol_table::create_edge): Do not call + gimple_check_call_matching_types. + (cgraph_edge::make_direct): Likewise. + (cgraph_edge::redirect_call_stmt_to_callee): Likewise. + * value-prof.h (check_ic_target): Remove. + * value-prof.c (check_ic_target): Remove. + (gimple_ic_transform): Do nat call check_ic_target. + * auto-profile.c (function_instance::find_icall_target_map): Likewise. + (afdo_indirect_call): Likewise. + * ipa-prop.c (update_indirect_edges_after_inlining): Do not call + gimple_check_call_matching_types. + * ipa-inline.c (early_inliner): Likewise. - 2018-06-12 Martin Liska + 2019-11-07 Kyrylo Tkachov + + * config/arm/arm.md (arm_): New define_expand. + (arm__insn): New define_insn. + * config/arm/arm_acle.h (__ssat16, __usat16): Define. + * config/arm/arm_acle_builtins.def: Define builtins for the above. + * config/arm/iterators.md (USSAT16): New int_iterator. + (simd32_op): Handle UNSPEC_SSAT16, UNSPEC_USAT16. + (sup): Likewise. + * config/arm/predicates.md (ssat16_imm): New predicate. + (usat16_imm): Likewise. + * config/arm/unspecs.md (UNSPEC_SSAT16, UNSPEC_USAT16): Define. + + 2019-11-07 Kyrylo Tkachov + + * config/arm/arm.md (arm__insn): + New define_insns. + (arm_): New define_expands. + * config/arm/arm_acle.h (__smlad, __smladx, __smlsd, __smlsdx, + __smuad, __smuadx): Define. + * config/arm/arm_acle_builtins.def: Define builtins for the above. + * config/arm/iterators.md (SIMD32_TERNOP_Q): New int_iterator. + (SIMD32_BINOP_Q): Likewise. + (simd32_op): Handle the above. + * config/arm/unspecs.md: Define unspecs for the above. + + 2019-11-07 Kyrylo Tkachov + + * config/arm/aout.h (REGISTER_NAMES): Add apsrge. + * config/arm/arm.md (APSRGE_REGNUM): Define. + (arm_): New define_insn. + (arm_sel): Likewise. + * config/arm/arm.h (FIXED_REGISTERS): Add entry for apsrge. + (CALL_USED_REGISTERS): Likewise. + (REG_ALLOC_ORDER): Likewise. + (FIRST_PSEUDO_REGISTER): Update value. + (ARM_GE_BITS_READ): Define. + * config/arm/arm.c (arm_conditional_register_usage): Clear + APSRGE_REGNUM from operand_reg_set. + (arm_ge_bits_access): Define. + * config/arm/arm-builtins.c (arm_check_builtin_call): Handle + ARM_BUIILTIN_sel. + * config/arm/arm-protos.h (arm_ge_bits_access): Declare prototype. + * config/arm/arm-fixed.md (add3): Convert to define_expand. + FAIL if ARM_GE_BITS_READ. + (*arm_add3): New define_insn. + (sub3): Convert to define_expand. FAIL if ARM_GE_BITS_READ. + (*arm_sub3): New define_insn. + * config/arm/arm_acle.h (__sel, __sadd8, __ssub8, __uadd8, __usub8, + __sadd16, __sasx, __ssax, __ssub16, __uadd16, __uasx, __usax, + __usub16): Define. + * config/arm/arm_acle_builtins.def: Define builtins for the above. + * config/arm/iterators.md (SIMD32_GE): New int_iterator. + (simd32_op): Handle the above. + * config/arm/unspecs.md (UNSPEC_GE_SET): Define. + (UNSPEC_SEL, UNSPEC_SADD8, UNSPEC_SSUB8, UNSPEC_UADD8, UNSPEC_USUB8, + UNSPEC_SADD16, UNSPEC_SASX, UNSPEC_SSAX, UNSPEC_SSUB16, UNSPEC_UADD16, + UNSPEC_UASX, UNSPEC_USAX, UNSPEC_USUB16): Define. + + 2019-11-07 Kyrylo Tkachov + + * config/arm/arm.md (arm_smlabb_setq): New define_insn. + (arm_smlabb): New define_expand. + (*maddhisi4tb): Rename to... + (maddhisi4tb): ... This. + (*maddhisi4tt): Rename to... + (maddhisi4tt): ... This. + (arm_smlatb_setq): New define_insn. + (arm_smlatb): New define_expand. + (arm_smlatt_setq): New define_insn. + (arm_smlatt): New define_expand. + (arm__insn): New define_insn. + (arm_): New define_expand. + * config/arm/arm_acle.h (__smlabb, __smlatb, __smlabt, __smlatt, + __smlawb, __smlawt): Define. + * config/arm_acle_builtins.def: Define builtins for the above. + * config/arm/iterators.md (SMLAWBT): New int_iterator. + (slaw_op): New int_attribute. + * config/arm/unspecs.md (UNSPEC_SMLAWB, UNSPEC_SMLAWT): Define. + + 2019-11-07 Kyrylo Tkachov + + * config/arm/arm.md (arm_): New define_expand. + (arm__insn): New define_insn. + * config/arm/arm_acle.h (__qadd, __qsub, __qdbl): Define. + * config/arm/arm_acle_builtins.def: Add builtins for qadd, qsub. + * config/arm/iterators.md (SSPLUSMINUS): New code iterator. + (ss_op): New code_attr. + + 2019-11-07 Kyrylo Tkachov + + * config/arm/aout.h (REGISTER_NAMES): Add apsrq. + * config/arm/arm.md (APSRQ_REGNUM): Define. + (add_setq): New define_subst. + (add_clobber_q_name): New define_subst_attr. + (add_clobber_q_pred): Likewise. + (maddhisi4): Change to define_expand. Split into mult and add if + ARM_Q_BIT_READ. + (arm_maddhisi4): New define_insn. + (*maddhisi4tb): Disable for ARM_Q_BIT_READ. + (*maddhisi4tt): Likewise. + (arm_ssat): New define_expand. + (arm_usat): Likewise. + (arm_get_apsr): New define_insn. + (arm_set_apsr): Likewise. + (arm_saturation_occurred): New define_expand. + (arm_set_saturation): Likewise. + (*satsi_): Rename to... + (satsi_): ... This. + (*satsi__shift): Disable for ARM_Q_BIT_READ. + * config/arm/arm.h (FIXED_REGISTERS): Mark apsrq as fixed. + (CALL_USED_REGISTERS): Mark apsrq. + (FIRST_PSEUDO_REGISTER): Update value. + (REG_ALLOC_ORDER): Add APSRQ_REGNUM. + (machine_function): Add q_bit_access. + (ARM_Q_BIT_READ): Define. + * config/arm/arm.c (TARGET_CHECK_BUILTIN_CALL): Define. + (arm_conditional_register_usage): Clear APSRQ_REGNUM from + operand_reg_set. + (arm_q_bit_access): Define. + * config/arm/arm-builtins.c: Include stringpool.h. + (arm_sat_binop_imm_qualifiers, + arm_unsigned_sat_binop_unsigned_imm_qualifiers, + arm_sat_occurred_qualifiers, arm_set_sat_qualifiers): Define. + (SAT_BINOP_UNSIGNED_IMM_QUALIFIERS, + UNSIGNED_SAT_BINOP_UNSIGNED_IMM_QUALIFIERS, SAT_OCCURRED_QUALIFIERS, + SET_SAT_QUALIFIERS): Likewise. + (arm_builtins): Define ARM_BUILTIN_SAT_IMM_CHECK. + (arm_init_acle_builtins): Initialize __builtin_sat_imm_check. + Handle 0 argument expander. + (arm_expand_acle_builtin): Handle ARM_BUILTIN_SAT_IMM_CHECK. + (arm_check_builtin_call): Define. + * config/arm/arm.md (ssmulsa3, usmulusa3, usmuluha3, + arm_ssatsihi_shift, arm_usatsihi): Disable when ARM_Q_BIT_READ. + * config/arm/arm-protos.h (arm_check_builtin_call): Declare prototype. + (arm_q_bit_access): Likewise. + * config/arm/arm_acle.h (__ssat, __usat, __ignore_saturation, + __saturation_occurred, __set_saturation_occurred): Define. + * config/arm/arm_acle_builtins.def: Define builtins for ssat, usat, + saturation_occurred, set_saturation_occurred. + * config/arm/unspecs.md (UNSPEC_Q_SET): Define. + (UNSPEC_APSR_READ): Likewise. + (VUNSPEC_APSR_WRITE): Likewise. + * config/arm/arm-fixed.md (ssadd3): Convert to define_expand. + (*arm_ssadd3): New define_insn. + (sssub3): Convert to define_expand. + (*arm_sssub3): New define_insn. + (ssmulsa3): Convert to define_expand. + (*arm_ssmulsa3): New define_insn. + (usmulusa3): Convert to define_expand. + (*arm_usmulusa3): New define_insn. + (ssmulha3): FAIL if ARM_Q_BIT_READ. + (arm_ssatsihi_shift, arm_usatsihi): Disable for ARM_Q_BIT_READ. + * config/arm/iterators.md (qaddsub_clob_q): New mode attribute. + + 2019-11-07 Martin Liska + + PR c++/92354 + * cgraph.c (delete_function_version): Clear global + variable version_info_node if equal to deleted + function. - * config/i386/i386.opt: Make MPX-related options as Deprecated. - * opt-functions.awk: Handle Deprecated flag. - * opts-common.c (decode_cmdline_option): Handle cl_deprecated - and report error. - (read_cmdline_option): Report warning for a deprecated option. - * opts.h (struct cl_option): Add new field cl_deprecated. - (CL_ERR_DEPRECATED): New. + 2019-11-07 Martin Liska + + * fold-const.c (operand_compare::operand_equal_p): Add comparison + of CONSTRUCTOR_NO_CLEARING. + (operand_compare::hash_operand): Likewise. + + 2019-11-07 Georg-Johann Lay + + Support 64-bit double and 64-bit long double configurations. + + PR target/92055 + * config.gcc (tm_defines) [avr]: Set from --with-double=, + --with-long-double=. + * config/avr/t-multilib: Remove. + * config/avr/t-avr: Output of genmultilib.awk is now fully + dynamically generated and no more part of the repo. + (HAVE_DOUBLE_MULTILIB, HAVE_LONG_DOUBLE_MULTILIB): New variables. + Pass them down to... + * config/avr/genmultilib.awk: ...here and handle them. + * config/avr/avr.opt (-mdouble=, avr_double). New option and var. + (-mlong-double=, avr_long_double). New option and var. + * common/config/avr/avr-common.c (opts.h, diagnostic.h): Include. + (TARGET_OPTION_OPTIMIZATION_TABLE) <-mdouble=, -mlong-double=>: + Set default as requested by --with-double= + (TARGET_HANDLE_OPTION): Define to this... + (avr_handle_option): ...new hook worker. + * config/avr/avr.h (DOUBLE_TYPE_SIZE): Define to avr_double. + (LONG_DOUBLE_TYPE_SIZE): Define to avr_long_double. + (avr_double_lib): New proto for spec function. + (EXTRA_SPEC_FUNCTIONS) : Add. + (DRIVER_SELF_SPECS): Call %:double-lib. + * config/avr/avr.c (avr_option_override): Assert + sizeof(long double) >= sizeof(double) for the target. + * config/avr/avr-c.c (avr_cpu_cpp_builtins) + [__HAVE_DOUBLE_MULTILIB__, __HAVE_LONG_DOUBLE_MULTILIB__] + [__HAVE_DOUBLE64__, __HAVE_DOUBLE32__, __DEFAULT_DOUBLE__=] + [__HAVE_LONG_DOUBLE64__, __HAVE_LONG_DOUBLE32__] + [__HAVE_LONG_DOUBLE_IS_DOUBLE__, __DEFAULT_LONG_DOUBLE__=]: + New built-in define depending on --with-double=, --with-long-double=. + * config/avr/driver-avr.c (avr_double_lib): New spec function. + * doc/invoke.tex (AVR Options) <-mdouble=,-mlong-double=>: Doc. + * doc/install.texi (Cross-Compiler-Specific Options) + <--with-double=, --with-long-double=>: Doc. + + 2019-11-07 Richard Biener + + * dbgcnt.def (gimple_unroll): New. + * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Check + gimple_unroll debug counter before applying transform. + (try_peel_loop): Likewise. + + 2019-11-07 Kwok Cheung Yeung + + * ira.c (setup_alloc_regs): Setup no_unit_alloc_regs for + frame pointer in multiple registers. + (ira_setup_eliminable_regset): Setup eliminable_regset, + ira_no_alloc_regs and regs_ever_live for frame pointer in + multiple registers. + + 2019-11-06 Kelvin Nilsen + + * config/rs6000/vsx.md (xxswapd_): Add support for V2DF and + V2DI modes. + + 2019-11-06 Jan Hubicka + + * ggc-common.c (ggc_prune_overhead_list): Do not delete surviving + allocations. + * mem-stats.h (mem_alloc_description::release_object_overhead): + Do not silently ignore summary corruptions. + + 2019-11-06 Richard Sandiford + + * tree-vect-loop.c (vect_analyze_loop): Only try to vectorize + the epilogue if there are peeled iterations for it to handle. + + 2019-11-06 Claudiu Zissulescu + + * config/arc/arc.c (arc_split_ior): Add asserts. + (arc_split_mov_const): Likewise. + (arc_check_ior_const): Do not match known short immediate values. + * config/arc/arc.md (movsi): Don't split predicated instructions + (iorsi): Likewise. + + 2019-11-06 Claudiu Zissulescu + + * config/arc/arc.opt (mea): Update help string. + * doc/invoke.texi(ARC): Update mea option info. + + 2019-11-06 Claudiu Zissulescu + + * config/arc/arc.md (zero_extendqihi2_i): Cleanup pattern. + (zero_extendqisi2_ac): Likewise. + (zero_extendhisi2_i): Likewise. + (extendqihi2_i): Likewise. + (extendqisi2_ac): Likewise. + (extendhisi2_i): Likewise. + + 2019-11-06 Richard Biener + + * tree-vect-loop.c (vectorizable_reduction): Remember reduction + PHI. Use STMT_VINFO_REDUC_IDX to skip the reduction operand. + Simplify single_defuse_cycle condition. + + 2019-11-06 Richard Sandiford + + * tree-vect-loop.c (vect_analyze_loop_2): When vectorizing an + epilogue loop, make sure that the VF is small enough or that + the epilogue loop can be fully-masked. + + 2019-11-06 Richard Sandiford + + * tree-vect-loop.c (vect_analyze_loop): Break out of the main + loop when we've finished, rather than returning directly from + the loop. Use a local variable to track whether we're still + searching for the preferred simdlen. Make vect_epilogues + record whether the next iteration should try to treat the + loop as an epilogue. + + 2019-11-06 Vineet Gupta + + * config/arc/arc-c.c (arc_cpu_cpp_builtins) : Add + __arc_hard_float__, __ARC_HARD_FLOAT__, + __arc_soft_float__, __ARC_SOFT_FLOAT__ + + 2019-11-06 Andre Vieira + + PR tree-optimization/92317 + * tree-vect-loop-manip.c (slpeel_update_phi_nodes_for_guard2): Also + update phi's with constant phi arguments. + + 2019-11-06 Eric Botcazou + Alexandre Oliva + + * common.opt (-fcallgraph-info[=]): New option. + * doc/invoke.texi (Developer options): Document it. + * opts.c (common_handle_option): Handle it. + * builtins.c (expand_builtin_alloca): Record allocation if + -fcallgraph-info=da. + * calls.c (expand_call): If -fcallgraph-info, record the call. + (emit_library_call_value_1): Likewise. + * flag-types.h (enum callgraph_info_type): New type. + * explow.c: Include stringpool.h. + (set_stack_check_libfunc): Set SET_SYMBOL_REF_DECL on the symbol. + * function.c (allocate_stack_usage_info): New. + (allocate_struct_function): Call it for -fcallgraph-info. + (prepare_function_start): Call it otherwise. + (record_final_call, record_dynamic_alloc): New. + * function.h (struct callinfo_callee): New. + (CALLEE_FROM_CGRAPH_P): New. + (struct callinfo_dalloc): New. + (struct stack_usage): Add callees and dallocs. + (record_final_call, record_dynamic_alloc): Declare. + * gimplify.c (gimplify_decl_expr): Record dynamically-allocated + object if -fcallgraph-info=da. + * optabs-libfuncs.c (build_libfunc_function): Keep SYMBOL_REF_DECL. + * print-tree.h (print_decl_identifier): Declare. + (PRINT_DECL_ORIGIN, PRINT_DECL_NAME, PRINT_DECL_UNIQUE_NAME): New. + * print-tree.c: Include print-tree.h. + (print_decl_identifier): New function. + * toplev.c: Include print-tree.h. + (callgraph_info_file): New global variable. + (callgraph_info_external_printed): Likewise. + (output_stack_usage): Rename to... + (output_stack_usage_1): ... this. Make it static, add cf + parameter. If -fcallgraph-info=su, print stack usage to cf. + If -fstack-usage, use print_decl_identifier for + pretty-printing. + (INDIRECT_CALL_NAME): New. + (dump_final_node_vcg_start): New. + (dump_final_callee_vcg, dump_final_node_vcg): New. + (output_stack_usage): New. + (lang_dependent_init): Open and start file if + -fcallgraph-info. Allocated callgraph_info_external_printed. + (finalize): If callgraph_info_file is not null, finish it, + close it, and release callgraph_info_external_printed. + + 2019-11-06 Gergö Barany + Frederik Harwath + Thomas Schwinge + + * omp-low.c (struct omp_context): New fields + local_reduction_clauses, outer_reduction_clauses. + (new_omp_context): Initialize these. + (scan_sharing_clauses): Record reduction clauses on OpenACC constructs. + (scan_omp_for): Check reduction clauses for incorrect nesting. + + 2019-11-06 Jakub Jelinek + + PR inline-asm/92352 + * gimplify.c (gimplify_asm_expr): Reject VLA in output or input + operands with non-memory constraints. + + 2019-11-05 Martin Sebor + + PR tree-optimization/92373 + * tree.c (component_ref_size): Only consider initializers of objects + of matching struct types. + Return null for instances of interior zero-length arrays. + + 2019-11-05 Segher Boessenkool + + * doc/md.texi (Insn Splitting): Fix combiner documentation. - 2018-06-12 Martin Liska + 2019-11-05 Jason Merrill + + PR tree-optimization/91825 + * expmed.c: Reduce -Wmaybe-uninitialized to warning. + + 2019-11-05 Jim Wilson + + PR middle-end/92263 + * expr.c (emit_move_complex): Only use BLOCK_OP_NO_LIBCALL when + optimize_insn_for_speed_p is true. + + 2019-11-05 Martin Sebor + + PR middle-end/92333 + PR middle-end/82608 + * tree-vrp.c (vrp_prop::check_array_ref): Handle VLAs with constant + size. + * tree-ssa-ccp.c (fold_builtin_alloca_with_align): Use a meaninful + name and location for a temporary variable. + + 2019-11-05 Aldy Hernandez + + * tree-vrp.c (value_range::value_range): Fix whitespace. + (defined_ranges_p): Same. + (range_fold_binary_symbolics_p): Same. + (value_range::intersect_helper): Same. + (value_range::union_helper): Same. + * tree-vrp.h (range_fold_binary_expr): Same. + + 2019-11-04 Martin Sebor + + PR middle-end/92341 + PR middle-end/82612 + * tree-sra.c (get_access_for_expr): Fail for out-of-bounds offsets. + * tree-vrp.c (vrp_prop::check_array_ref): Correct index and text + of message printed in a warning for empty arrays. + (vrp_prop::check_mem_ref): Also handle function parameters and + empty arrays. + + 2019-11-05 Richard Biener + + PR tree-optimization/92371 + * tree-vect-loop.c (vectorizable_reduction): Set STMT_VINFO_REDUC_DEF + on the original stmt of live stmts in the chain. + (vectorizable_live_operation): Look at the original stmt when + checking STMT_VINFO_REDUC_DEF. + + 2019-11-05 Aldy Hernandez + + * gimple-fold.c, gimple-loop-versioning.cc, + gimple-ssa-evrp-analyze.[ch], gimple-ssa-evrp.c, + gimple-ssa-sprintf.c, ipa-cp.c, ipa-prop.c, ipa-prop.h, + range-op.[hc]*, range.[hc]*, selftest.h, tree-ssa-dom.c, + tree-ssa-strlen.c, tree-ssa-threadedge.c, tree-ssanames.[hc], + tree-vrp.[hc], vr-values.[hc]: Global rename of value_range to + value_range_equiv, and value_range_base to value_range. - * doc/options.texi: Document Deprecated option flag. + 2019-11-05 Matthew Malcomson - 2018-06-12 Claudiu Zissulescu + * expr.c (build_personality_function): Fix generated type to + match actual personality functions. - * config/arc/arc-arch.h (arc_extras): New enum. - (arc_cpu_t):Add field extra. - (arc_cpu_types): Consider the extras. - * config/arc/arc-cpus.def: Add extras info. - * config/arc/arc-opts.h (processor_type): Consider extra field. - * config/arc/arc.c (arc_override_options): Handle extra field. + 2019-11-05 Matthew Malcomson - 2018-06-12 Claudiu Zissulescu + * config/aarch64/aarch64.c (aarch64_handle_attr_cpu): Allocate + enough bytes for the NULL character. - * config/arc/arc-arch.h: Update ARC_OPTX macro. - * config/arc/arc-options.def (ARC_OPTX): Introduce a new doc - field. - * config/arc/arc.c (arc_init): Update pic warning. - (irq_range): Update irq range parsing warnings. - (arc_override_options): Update various warning messages. - (arc_handle_aux_attribute): Likewise. - - 2018-06-12 Robert Suchanek - - * config/mips/i6400.md (i6400_fpu_fadd): Remove frint. - - 2018-06-12 Jozef Lawrynowicz - - * doc/sourcebuild.texi: Document usage of line number 0 in verify - compiler messages directives. - - 2018-06-12 Matthew Fortune - - * config/mips/mips-cpus.def: New MIPS_CPU for i6500. - * config/mips/mips-tables.opt: Regenerate. - * config/mips/mips.h (MIPS_ISA_LEVEL_SPEC): Mark i6500 as - mips64r6. - * doc/invoke.texi: Document -march=i6500. - - 2018-06-12 Prachi Godbole - - * config/mips/i6400.md (i6400_gpmuldiv): Remove cpu_unit. - (i6400_gpmul): Add cpu_unit. - (i6400_gpdiv): Likewise. - (i6400_msa_add_d): Update reservations. - (i6400_msa_int_add) Likewise. - (i6400_msa_short_logic3) Likewise. - (i6400_msa_short_logic2) Likewise. - (i6400_msa_short_logic) Likewise. - (i6400_msa_move) Likewise. - (i6400_msa_cmp) Likewise. - (i6400_msa_short_float2) Likewise. - (i6400_msa_div_d) Likewise. - (i6400_msa_long_logic1) Likewise. - (i6400_msa_long_logic2) Likewise. - (i6400_msa_mult) Likewise. - (i6400_msa_long_float2) Likewise. - (i6400_msa_long_float4) Likewise. - (i6400_msa_long_float5) Likewise. - (i6400_msa_long_float8) Likewise. - (i6400_fpu_fadd): Include frint type. - (i6400_fpu_store): New define_insn_reservation. - (i6400_fpu_load): Likewise. - (i6400_fpu_move): Likewise. - (i6400_fpu_fcmp): Likewise. - (i6400_fpu_fmadd): Likewise. - (i6400_int_mult): Include imul3nc type and update reservation. - (i6400_int_div): Include idiv3 type and update reservation. - (i6400_int_load): Update to check type not move_type. - (i6400_int_store): Likewise. - (i6400_int_prefetch): Set zero latency. - - 2018-06-12 Eric Botcazou - - * gcc.c: Document new %@{...} sequence. - (LINK_COMMAND_SPEC): Use it for the -L switches. - (cpp_unique_options): Use it for the -I switches. - (at_file_argbuf): New global variable. - (in_at_file): Likewise. - (alloc_args): Create at_file_argbuf. - (clear_args): Truncate at_file_argbuf. - (store_arg): If in_at_file, push the argument onto at_file_argbuf. - (open_at_file): New function. - (close_at_file): Likewise. - (create_at_file): Delete. - (do_spec_1) <'i'>: Use open_at_file/close_at_file. - <'o'>: Likewise. - <'@'>: New case. - (validate_switches_from_spec): Deal with %@{...} sequence. - (validate_switches): Likewise. - (driver::finalize): Call clear_args. - - 2018-06-11 Rasmus Villemoes - - * config/vx-common.h (USE_TM_CLONE_REGISTRY): #define to 0. - - 2018-06-11 Martin Sebor - - * doc/invoke.texi (-Wall): List -Wc++17-compat. - (Wno-class-memaccess): Add @opindex. - (Wno-templates, Wno-multiple-inheritance): Same. - (Wno-virtual-inheritance, Wno-namespaces): Same. - (Wno-pedantic, Wno-chkp, Wcoverage-mismatch): Same. - (Wno-format-overflow, Wno-format-truncation): Same. - (Wno-unused-local-typedefs, Walloc-size-larger-than): Same. - (Wno-alloc-size-larger-than, Wframe-larger-than): Same - (Wno-stack-usage, Wno-c++-compat, Wno-c++11-compat): Same. - (Wno-c++14-compat, Wno-c++17-compat, Wno-openmp-simd): Same. - (Wno-unsuffixed-float-constants, Wno-addr-space-convert): Same. - (Wno-misspelled-isr): Same. - - 2018-06-11 Martin Sebor - - * PR tree-optimization/86083 - * tree-ssa-strlen.c (handle_char_store): Use tree_expr_nonzero_p. - - 2018-06-11 Zhouyi Zhou - - * tree-eh.c (lower_eh_constructs_2): Add a comma to comment. - - 2018-06-11 Segher Boessenkool - - PR target/85755 - * config/rs6000/rs6000.md (*movdi_internal32): Put constraint modifiers - on the correct operand. - (*movdi_internal64): Ditto. - - 2018-06-11 Martin Liska - - PR tree-optimization/86089 - * tree-ssa-strlen.c (get_string_length): Move back removed hunk. - - 2018-06-11 Julia Koval - - * config/i386/vaesintrin.h (_mm_aesdec_epi128, _mm_aesdeclast_epi128) - _mm_aesenc_epi128, _mm_aesenclast_epi128: Remove. - * config/i386/vpclmulqdqintrin.h (_mm_clmulepi64_epi128): Remove. - - 2018-06-11 Olivier Hainque - - * dwarf2out.c (gen_compile_unit_die): Fallout to DW_LANG_Ada83 - for Ada with strict dwarf2. - - 2018-06-08 Peter Bergner - - PR target/85755 - * config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC - addresses. + 2019-11-05 Richard Biener - 2018-06-08 Jan Hubicka - - * dumpfile.c (FIRST_ME_AUTO_NUMBERED_DUMP): Bump to 4. - - 2018-06-08 David Edelsohn - - * config/rs6000/rs6000.c (rs6000_passes_ieee128): Protect with #if - TARGET_ELF. - - 2018-06-08 Martin Liska - - * tree-cfg.h (debug_function): Fix argument type to match - implementation. - - 2018-06-08 Martin Liska - - * config/powerpcspe/powerpcspe.c (rs6000_xcoff_visibility): - Remove usage of MPX-related (and removed) fields. - * config/rs6000/rs6000.c (rs6000_xcoff_visibility): Likewise. - - 2018-06-08 David Malcolm - - * cfg.c (debug): Use TDF_NONE rather than 0. - * cfghooks.c (debug): Likewise. - * dumpfile.c (DUMP_FILE_INFO): Likewise; also for OPTGROUP. - (struct dump_option_value_info): Convert to... - (struct kv_pair): ...this template type. - (dump_options): Convert to kv_pair; use TDF_NONE - rather than 0. - (optinfo_verbosity_options): Likewise. - (optgroup_options): Convert to kv_pair; use - OPTGROUP_NONE. - (gcc::dump_manager::dump_register): Use optgroup_flags_t rather - than int for "optgroup_flags" param. - (dump_generic_expr_loc): Use dump_flags_t rather than int for - "dump_kind" param. - (dump_dec): Likewise. - (dump_finish): Use TDF_NONE rather than 0. - (gcc::dump_manager::opt_info_enable_passes): Use optgroup_flags_t - rather than int for "optgroup_flags" param. Use TDF_NONE rather - than 0. Update for change to option_ptr. - (opt_info_switch_p_1): Convert "optgroup_flags" param from int * - to optgroup_flags_t *. Use TDF_NONE and OPTGROUP_NONE rather than - 0. Update for changes to optinfo_verbosity_options and - optgroup_options. - (opt_info_switch_p): Convert optgroup_flags from int to - optgroup_flags_t. - (dump_basic_block): Use dump_flags_t rather than int - for "dump_kind" param. - * dumpfile.h (TDF_ADDRESS, TDF_SLIM, TDF_RAW, TDF_DETAILS, - TDF_STATS, TDF_BLOCKS, TDF_VOPS, TDF_LINENO, TDF_UID) - TDF_STMTADDR, TDF_GRAPH, TDF_MEMSYMS, TDF_RHS_ONLY, TDF_ASMNAME, - TDF_EH, TDF_NOUID, TDF_ALIAS, TDF_ENUMERATE_LOCALS, TDF_CSELIB, - TDF_SCEV, TDF_GIMPLE, TDF_FOLDING, MSG_OPTIMIZED_LOCATIONS, - MSG_MISSED_OPTIMIZATION, MSG_NOTE, MSG_ALL, TDF_COMPARE_DEBUG, - TDF_NONE): Convert from macros to... - (enum dump_flag): ...this new enum. - (dump_flags_t): Update to use enum. - (operator|, operator&, operator~, operator|=, operator&=): - Implement for dump_flags_t. - (OPTGROUP_NONE, OPTGROUP_IPA, OPTGROUP_LOOP, OPTGROUP_INLINE, - OPTGROUP_OMP, OPTGROUP_VEC, OPTGROUP_OTHER, OPTGROUP_ALL): - Convert from macros to... - (enum optgroup_flag): ...this new enum. - (optgroup_flags_t): New typedef. - (operator|, operator|=): Implement for optgroup_flags_t. - (struct dump_file_info): Convert field "alt_flags" to - dump_flags_t. Convert field "optgroup_flags" to - optgroup_flags_t. - (dump_basic_block): Use dump_flags_t rather than int for param. - (dump_generic_expr_loc): Likewise. - (dump_dec): Likewise. - (dump_register): Convert param "optgroup_flags" to - optgroup_flags_t. - (opt_info_enable_passes): Likewise. - * early-remat.c (early_remat::dump_edge_list): Use TDF_NONE rather - than 0. - * gimple-pretty-print.c (debug): Likewise. - * gimple-ssa-store-merging.c (bswap_replace): Likewise. - (merged_store_group::apply_stores): Likewise. - * gimple-ssa-strength-reduction.c (insert_initializers): Likewise. - * gimple.c (verify_gimple_pp): Likewise. - * graphite-poly.c (print_pbb_body): Likewise. - * passes.c (pass_manager::register_one_dump_file): Convert - local "optgroup_flags" to optgroup_flags_t. - * print-tree.c (print_node): Use TDF_NONE rather than 0. - (debug): Likewise. - (debug_body): Likewise. - * tree-pass.h (struct pass_data): Convert field "optgroup_flags" - to optgroup_flags_t. - * tree-pretty-print.c (print_struct_decl): Use TDF_NONE rather - than 0. - * tree-ssa-math-opts.c (convert_mult_to_fma_1): Likewise. - (convert_mult_to_fma): Likewise. - * tree-ssa-reassoc.c (undistribute_ops_list): Likewise. - * tree-ssa-sccvn.c (vn_eliminate): Likewise. - * tree-vect-data-refs.c (dump_lower_bound): Convert param - "dump_kind" to dump_flags_t. + PR tree-optimization/92280 + * match.pd (BIT_FIELD_REF of CTOR): Unless the original CTOR + had a single use do not create a new CTOR. + * tree-ssa-forwprop.c (simplify_bitfield_ref): Do not re-fold + BIT_FIELD_REF of a CTOR via GENERIC. - 2018-06-08 Segher Boessenkool + 2019-11-05 Andreas Krebbel - * config/rs6000/rs6000.c (min, max): Delete. + * config/s390/s390.c (s390_vector_alignment): Check if the value + fits into uhwi before using it. - 2018-06-08 Segher Boessenkool + 2019-11-05 Martin Liska - * doc/invoke.texi (RS/6000 and PowerPC Options): Delete mention of - -mabi=spe and -mabi=no-spe. + * symbol-summary.h: Use ggc_delete. - 2018-06-08 Martin Liska + 2019-11-05 Anton Youdkevitch - * ipa-pure-const.c (propagate_pure_const): Use ::get at places - where we expect an existing summary. + * config/aarch64/aarch64.c (thunderx2t99_vector_cost): + Change vec_perm field to 10. - 2018-06-08 Martin Liska + 2019-11-05 Arnaud Charlet - * ipa-inline-analysis.c (simple_edge_hints): Use ::get method. - * ipa-inline.h (estimate_edge_growth): Likewise. + * doc/install.texi: Further fix syntax for html generation. - 2018-06-08 Martin Liska + 2019-11-05 Martin Liska - * cgraph.c (function_version_hasher::hash): Use - cgraph_node::get_uid (). - (function_version_hasher::equal): - * cgraph.h (cgraph_node::get_uid): New method. - * ipa-inline.c (update_caller_keys): Use - cgraph_node::get_uid (). - (update_callee_keys): Likewise. - * ipa-utils.c (searchc): Likewise. - (ipa_reduced_postorder): Likewise. - * lto-cgraph.c (input_node): Likewise. - * passes.c (is_pass_explicitly_enabled_or_disabled): Likewise. - * symbol-summary.h (symtab_insertion): Likewise. - (symtab_removal): Likewise. - (symtab_duplication): Likewise. - * tree-pretty-print.c (dump_function_header): Likewise. - * tree-sra.c (convert_callers_for_node): Likewise. + * symbol-summary.h: Rename allocator to m_allocator and + add comment. - 2018-06-08 Martin Liska + 2019-11-05 Richard Biener - * cgraph.c (symbol_table::create_edge): Always assign a new - unique number. - (symbol_table::free_edge): Do not recycle numbers. - * cgraph.h (cgraph_edge::get): New method. - * symbol-summary.h (symtab_removal): Use it. - (symtab_duplication): Likewise. - (call_summary::hashable_uid): Remove. + PR tree-optimization/92324 + * tree-vect-loop.c (check_reduction_path): For MIN/MAX require + all signed or unsigned operations. - 2018-06-08 Martin Liska + 2019-11-05 Jan Hubicka - * ipa-inline-analysis.c (inline_edge_removal_hook): Remove. - (initialize_growth_caches): Remove. - (free_growth_caches): Likewise. - (do_estimate_edge_time): Use edge_growth_cache. - (do_estimate_edge_size): Likewise. - (do_estimate_edge_hints): Likewise. - * ipa-inline.c (reset_edge_caches): Likewise. - (recursive_inlining): Likewise. - (inline_small_functions): Likewise. - * ipa-inline.h (initialize_growth_caches): Remove. - (estimate_edge_size): Likewise. - (estimate_edge_time): Likewise. - (estimate_edge_hints): Likewise. - (reset_edge_growth_cache): Likewise. - * symbol-summary.h (call_summary::remove): New method. - - 2018-06-08 Martin Liska - - * ipa-cp.c (class edge_clone_summary): New summary. - (grow_edge_clone_vectors): Remove. - (ipcp_edge_duplication_hook): Remove. - (class edge_clone_summary_t): New call_summary class. - (ipcp_edge_removal_hook): Remove. - (edge_clone_summary_t::duplicate): New function. - (get_next_cgraph_edge_clone): Use edge_clone_summaries. - (create_specialized_node): Likewise. - (ipcp_driver): Initialize edge_clone_summaries and do not - register hooks. + * hsa-brig.c: Include alloc-pool.h + * hsa-dump.c: Likewise. + * hsa-gen.c: Likewise. + * hse-regalloc.c: Likewise. + * ipa-hsa.c: Likewise. + * ipa-predicate.c: Likewise. + * ipa-reference.c: Likewise. + * ipa-sra.c: Likewise. + * omp-expand.c: Likewise. + * omp-general.c: Likewise. + * omp-low.c: Likewise. + * sumbol-summary.h (function_summary_base): Add allocator. + (function_summary::function_summary): Update construction. + (fast_function_summary::fast_function_summary): Likewise. + (call_summary_base): Add allcator. + (call_summary::call_summary): Update construction. + (fast_call_summary::fast_call_summary): Likewise. - 2018-06-08 Martin Liska + 2019-11-05 Jakub Jelinek - * symbol-summary.h (get): New function. - (call_summary::m_initialize_when_cloning): New class member. + PR tree-optimization/91945 + * builtins.c (compute_objsize): For ARRAY_REF, only multiply off + by tpsize if it is both non-NULL and INTEGER_CST, otherwise punt. + Formatting fix. - 2018-06-08 Martin Liska + 2019-11-05 Aldy Hernandez - * cgraph.c (cgraph_node::remove): Do not recycle uid. - * cgraph.h (symbol_table::release_symbol): Do not pass uid. - (symbol_table::allocate_cgraph_symbol): Do not set uid. - * passes.c (uid_hash_t): Record removed_nodes by their uids. - (remove_cgraph_node_from_order): Use the removed_nodes set. - (do_per_function_toporder): Likwise. - * symbol-summary.h (symtab_insertion): Use cgraph_node::uid - instead of summary_uid. - (symtab_removal): Likewise. - (symtab_duplication): Likewise. + * range-op.cc (wi_set_zero_nonzero_bits): Remove static qualifier. + * range-op.h (wi_set_zero_nonzero_bits): New prototype. + * tree-vrp.h (vrp_set_zero_nonzero_bits): Remove. + * tree-vrp.c (wide_int_range_set_zero_nonzero_bits): Remove. + (vrp_set_zero_nonzero_bits): Move to... + * vr-values.c (vr_set_zero_nonzero_bits): ...here. + (vr_values::simplify_bit_ops_using_ranges): Rename + vrp_set_zero_nonzero_bits to vr_set_zero_nonzero_bits. - 2018-06-08 Martin Liska + 2019-11-05 Martin Liska - * ipa-cp.c (ipcp_store_bits_results): Use - ipcp_transformation_sum. - (ipcp_store_vr_results): Likewise. - * ipa-prop.c (ipcp_grow_transformations_if_necessary): Renamed - to ... - (ipcp_transformation_initialize): ... this. - (ipa_set_node_agg_value_chain): - (ipa_node_params_t::duplicate): Use ipcp_transformation_sum. - (write_ipcp_transformation_info): Likewise. - (read_ipcp_transformation_info): Likewise. - (ipcp_update_bits): Likewise. - (ipcp_update_vr): Likewise. - (ipcp_transform_function): Likewise. - * ipa-prop.h: Rename ipcp_transformation_summary to - ipcp_transformation. - (class ipcp_transformation_t): New function summary. - (ipcp_get_transformation_summary): Use ipcp_transformation_sum. - (ipa_get_agg_replacements_for_node): Likewise. - - 2018-06-08 Martin Liska - - * ipa-pure-const.c (struct funct_state_d): Do it class instead - of struct. - (class funct_state_summary_t): New function_summary class. - (has_function_state): Remove. - (get_function_state): Likewise. - (set_function_state): Likewise. - (add_new_function): Likewise. - (funct_state_summary_t::insert): New function. - (duplicate_node_data): Remove. - (remove_node_data): Remove. - (funct_state_summary_t::duplicate): New function. - (register_hooks): Create new funct_state_summaries. - (pure_const_generate_summary): Use it. - (pure_const_write_summary): Likewise. - (pure_const_read_summary): Likewise. - (propagate_pure_const): Likewise. - (propagate_nothrow): Likewise. - (dump_malloc_lattice): Likewise. - (propagate_malloc): Likewise. - (execute): Do not register hooks, just remove summary - instead. - (pass_ipa_pure_const::pass_ipa_pure_const): Simplify - constructor. - - 2018-06-08 Martin Liska - - * ipa-reference.c (remove_node_data): Remove. - (duplicate_node_data): Likewise. - (class ipa_ref_var_info_summary_t): New class. - (class ipa_ref_opt_summary_t): Likewise. - (get_reference_vars_info): Use ipa_ref_var_info_summaries. - (get_reference_optimization_summary): Use - ipa_ref_opt_sum_summaries. - (set_reference_vars_info): Remove. - (set_reference_optimization_summary): Likewise. - (ipa_init): Create summaries. - (init_function_info): Use function summary. - (ipa_ref_opt_summary_t::duplicate): New function. - (ipa_ref_opt_summary_t::remove): New function. - (get_read_write_all_from_node): Fix GNU coding style. - (propagate): Use function summary. - (write_node_summary_p): Fix GNU coding style. - (stream_out_bitmap): Likewise. - (ipa_reference_read_optimization_summary): Use function summary. - (ipa_reference_c_finalize): Do not release hooks. - - 2018-06-08 Martin Liska - - * ipa-fnsummary.c (dump_ipa_call_summary): Use ::get method. - (analyze_function_body): Extract multiple calls of get_create. - * ipa-inline-analysis.c (simple_edge_hints): Likewise. - * ipa-inline.c (recursive_inlining): Use ::get method. - * ipa-inline.h (estimate_edge_growth): Likewise. - - 2018-06-08 Martin Liska - - * hsa-common.h (enum hsa_function_kind): Rename HSA_NONE to - HSA_INVALID. - (hsa_function_summary::hsa_function_summary): Use the new enum - value. - (hsa_gpu_implementation_p): Use hsa_summaries::get. - * hsa-gen.c (hsa_get_host_function): Likewise. - (get_brig_function_name): Likewise. - * ipa-hsa.c (process_hsa_functions): Likewise. - (ipa_hsa_write_summary): Likewise. - * symbol-summary.h (symtab_duplication): Use ::get function/ - (get): New function. - - 2018-06-08 Martin Liska - - * config/i386/i386.c (ix86_can_inline_p): Use get_create instead - of get. - * hsa-common.c (hsa_summary_t::link_functions): Likewise. - (hsa_register_kernel): Likewise. - * hsa-common.h (hsa_gpu_implementation_p): Likewise. - * hsa-gen.c (hsa_get_host_function): Likewise. - (get_brig_function_name): Likewise. - (generate_hsa): Likewise. - (pass_gen_hsail::execute): Likewise. - * ipa-cp.c (ipcp_cloning_candidate_p): Likewise. - (devirtualization_time_bonus): Likewise. - (ipcp_propagate_stage): Likewise. - * ipa-fnsummary.c (redirect_to_unreachable): Likewise. - (edge_set_predicate): Likewise. - (evaluate_conditions_for_known_args): Likewise. - (evaluate_properties_for_edge): Likewise. - (ipa_fn_summary::reset): Likewise. - (ipa_fn_summary_t::duplicate): Likewise. - (dump_ipa_call_summary): Likewise. - (ipa_dump_fn_summary): Likewise. - (analyze_function_body): Likewise. - (compute_fn_summary): Likewise. - (estimate_edge_devirt_benefit): Likewise. - (estimate_edge_size_and_time): Likewise. - (estimate_calls_size_and_time): Likewise. - (estimate_node_size_and_time): Likewise. - (inline_update_callee_summaries): Likewise. - (remap_edge_change_prob): Likewise. - (remap_edge_summaries): Likewise. + PR c++/92339 + * fold-const.c (operand_compare::hash_operand): Remove + FIELD_DECL handling. + + 2019-11-05 Aldy Hernandez + + * tree-vrp.h (vrp_bitmap_equal_p): Remove. + * tree-vrp.c (vrp_bitmap_equal_p): Move before use and make + static. + + 2019-11-05 Aldy Hernandez + + * tree-vrp.c (value_range_base::operator==): Use equal_p to + properly handle symbolics. + (range_compatible_p): Remove. + + 2019-11-04 Kamlesh Kumar + + * common.opt (-fabi-version): Document =14. + * doc/invoke.texi (C++ Dialect Options): Likewise. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.c (value_range_base::set): Do not special case pointers. + + 2019-11-04 Tobias Burnus + + * config/gcn/gcn.c (gcn_omp_device_kind_arch_isa): New function. + (TARGET_OMP_DEVICE_KIND_ARCH_ISA): Redefine to + gcn_omp_device_kind_arch_isa. + * config/gcn/t-omp-device: New file. + * configure.ac: Support gcn for omp_device_property. + * configure: Regenerate. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.h (vrp_val_min): Remove handle_pointers argument. + (vrp_val_max): Same. + (vrp_val_is_min): Same. + (vrp_val_is_max): Same. + (value_range_base::nonzero_p): Remove last argument to + vrp_val_is_max. + * tree-vrp.c (vrp_val_min): Remove handle_pointers argument. + (vrp_val_max): Same. + (vrp_val_is_min): Same. + (vrp_val_is_max): Same. + (value_range_base::set_varying): Remove last argument to vrp_val*. + (value_range_base::dump): Same. + (value_range_base::set): Same. + (value_range_base::normalize_symbolics): Same. + (value_range_base::num_pairs): Same. + (value_range_base::lower_bound): Same. + (value_range_base::upper_bound): Same. + (ranges_from_anti_range): Remove handle_pointers argument. + (value_range_base::singleton_p): Remove last argument to + ranges_from_anti_range. + + 2019-11-04 Jan Hubicka + + * ipa-reference.c (init_function_info): Initialize + info->global.statics_read. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.c (value_range_base::invert): Use constructors to build + range. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.c (range_int_cst_singleton_p): Remove. + * tree-vrp.h (range_int_cst_singleton_p): Remove. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.c (value_range_base::normalize_addresses): Handle + VR_UNDEFINED. + + 2019-11-04 Aldy Hernandez + + * tree-vrp.c (dump_assert_info): New. + (dump_asserts_info): New. + + 2019-11-04 Jan Hubicka + + * ipa-inline-transform.c: Include ipa-utils.h + (inline_call): Set thunk_expansion flag. + * ipa-utils.h (thunk_expansion): Declare. + * ipa-devirt.c (thunk_expansion): New global var. + (devirt_node_removal_hook): Do not invalidate cache while + doing thunk expansion. + + 2019-11-04 Tamar Christina + + * tree-vect-slp.c (vectorize_slp_instance_root_stmt): Initialize rstmt. + + 2019-11-04 Martin Sebor + + PR tree-optimization/92349 + * tree-vrp.c (vrp_prop::check_array_ref): Avoid assuming struct + memebers have constant sizes. + + 2019-11-04 Andre Vieira + + * tree-vect-loop.c (vect_analyze_loop): Remove orig_loop_vinfo + parameter. + * tree-vectorizer.h (vect_analyze_loop): Update declaration. + * tree-vectorizer.c (try_vectorize_loop_1): Update calls to + vect_analyze_loop. + + 2019-11-04 Joel Hutton + + * expr.c (store_constructor): Modify to handle single element vectors. + * tree-vect-slp.c (vect_analyze_slp_instance): Add case for vector + constructors. + (vect_slp_check_for_constructors): New function. + (vect_slp_analyze_bb_1): Call new function to check for vector + constructors. + (vectorize_slp_instance_root_stmt): New function. + (vect_schedule_slp): Call new function to vectorize root stmt of vector + constructors. + * tree-vectorizer.h (SLP_INSTANCE_ROOT_STMT): New field. + + 2019-11-04 Richard Biener + + PR tree-optimization/92345 + * tree-vect-loop.c (vect_is_simple_reduction): Return whether + we produced a reduction chain. + (vect_analyze_scalar_cycles_1): Do not add reduction chains to + LOOP_VINFO_REDUCTIONS. + + 2019-11-04 Jan Hubicka + + * cgraphclones.c (cgraph_node::create_version_clone): Do not + duplicate summaries. + * ipa-fnsummary.c (ipa_fn_summary_alloc): Allocate size summary + first. + (ipa_fn_summary_t::duplicate): Use get instead of get_create to + access call summaries. + (dump_ipa_call_summary): Be ready for missing edge summaries. + (analyze_function_body): Use get instead of get_create to access + edge summary. + (estimate_calls_size_and_time): Do not access summaries of + inlined edges; sanity check they are missing. + (ipa_call_context::estimate_size_and_time): Use get instead + of get_create to access node summary. + (inline_update_callee_summaries): Do not update depth of + inlined edge. + (ipa_merge_fn_summary_after_inlining): Remove inline edge from + growth caches. + (ipa_merge_fn_summary_after_inlining): Use get instead + of get_create. + * ipa-fnsummary.h (ipa_remove_from_growth_caches): Declare. + * ipa-inline-analyssi.c (edge_growth_cache): Turn to + fast summary. + (initialize_growth_caches): Update. + (do_estimate_edge_time): Remove redundant copy of context. + (ipa_remove_from_growth_caches): New function. + * ipa-inline.c (flatten_function): Update overall summary + only when optimizing. + (inline_to_all_callers): Update overall summary of function + inlined to. + * ipa-inline.h (edge_growth_cache): Turn to fast summary. + * symbol-summary.h (call_summary_base): Set m_initialize_when_cloning + to false. + + 2019-11-04 Richard Biener + + * system.h: Include malloc.h if INCLUDE_MALLOC_H and HAVE_MALLINFO. + * ggc-common.c: Remove inclusion of malloc.h, define INCLUDE_MALLOC_H. + + 2019-11-04 David Edelsohn + + * ggc-common.c: Include system.h before malloc.h. + + 2019-11-04 Alexandre Oliva + + * configure.ac: Pass --enable-obsolete=* and + --enable-option-checking=* down to build configure, and fail + if it fails. AC_SUBST HAVE_AUTO_BUILD. + * configure: Rebuild. + * Makefile.in [HAVE_AUTO_BUILD] (auto-build.h): New rule. + [HAVE_AUTO_BUILD] (config.status): Depend on auto-build.h. + + 2019-11-04 Jozef Lawrynowicz + + * config.in: Regenerate. + * config/msp430/msp430.c (msp430_option_override): Emit an error if + -mtiny-printf is used without GCC being configured with + --enable-newlib-nano-formatted-io. + * config/msp430/msp430.h (LINK_SPEC): Pass + "--wrap puts --wrap printf" when -mtiny-printf is used. + * config/msp430/msp430.opt: Document -mtiny-printf. + * configure: Regenerate. + * configure.ac: Enable --enable-newlib-nano-formatted-io flag. + Define HAVE_NEWLIB_NANO_FORMATTED_IO if + --enable-newlib-nano-formatted-io is passed. + * doc/invoke.texi: Document -mtiny-printf. + + 2019-11-04 Jozef Lawrynowicz + + * configure: Regenerate. + + 2019-11-04 Jozef Lawrynowicz + + * config/msp430/driver-msp430.c + (msp430_get_linker_devices_include_path): New spec function. + * config/msp430/msp430-devices.c (msp430_dirname): New function. + (extract_devices_dir_from_exec_prefix): New function. + (extract_devices_dir_from_collect_gcc): New function. + (msp430_check_env_var_for_devices): New function. + (msp430_check_path_for_devices): Use xstrdup instead of ASTRDUP. + (parse_devices_csv): Call msp430_check_env_var_for_devices if + devices.csv was not found using other methods. + * config/msp430/msp430-devices.h (msp430_check_env_var_for_devices): + New prototype. + (msp430_dirname): Likewise. + * config/msp430/msp430.c (msp430_register_pre_includes): New function. + * config/msp430/msp430.h (EXTRA_SPEC_FUNCTIONS): Add + msp430_get_linker_devices_include_path. + (TARGET_EXTRA_PRE_INCLUDES): Define. + * doc/invoke.texi: Document new ways of searching for support files. + + 2019-11-04 Richard Biener + + PR tree-optimization/92301 + * tree-vect-stmts.c (process_use): Force reduction PHI defs live + as required by epilogue generation + + 2019-11-04 Martin Liska + + PR ipa/92304 + * fold-const.c (operand_compare::hash_operand): Fix field + hashing of CONSTRUCTOR. + + 2019-11-04 Martin Liska + + * ggc.h (ggc_delete): New function. + * ipa-fnsummary.c (ipa_free_fn_summary): Use it. + * ipa-prop.c (ipa_free_all_edge_args): Likewise. + (ipa_free_all_node_params): Likewise. + * ipa-sra.c (ipa_sra_analysis): Likewise. + + 2019-11-02 Jan Hubicka + + * ipa-fnsummary.c (set_cond_stmt_execution_predicate, + set_switch_stmt_execution_predicate, compute_bb_predicates, + will_be_nonconstant_expr_predicate, + phi_result_unknown_predicate, + analyze_function_body): Pass arround params summary. + (ipa_call_context::duplicate_from): New comment; + only duplicate useful values. + (ipa_call_context::equal_to): Only compare useful values. + (remap_edge_summaries): Pass params_summary. + (remap_hint_predicate): Likewise. (ipa_merge_fn_summary_after_inlining): Likewise. - (ipa_update_overall_fn_summary): Likewise. - (read_ipa_call_summary): Likewise. - (inline_read_section): Likewise. - (write_ipa_call_summary): Likewise. - (ipa_fn_summary_write): Likewise. - (ipa_free_fn_summary): Likewise. - * ipa-hsa.c (process_hsa_functions): Likewise. - (ipa_hsa_write_summary): Likewise. - (ipa_hsa_read_section): Likewise. - * ipa-icf.c (sem_function::merge): Likewise. - * ipa-inline-analysis.c (simple_edge_hints): Likewise. - (do_estimate_edge_time): Likewise. - (estimate_size_after_inlining): Likewise. - (estimate_growth): Likewise. - (growth_likely_positive): Likewise. - * ipa-inline-transform.c (clone_inlined_nodes): Likewise. - (inline_call): Likewise. - * ipa-inline.c (caller_growth_limits): Likewise. - (can_inline_edge_p): Likewise. - (can_inline_edge_by_limits_p): Likewise. - (compute_uninlined_call_time): Likewise. - (compute_inlined_call_time): Likewise. - (want_inline_small_function_p): Likewise. - (edge_badness): Likewise. - (update_caller_keys): Likewise. - (update_callee_keys): Likewise. - (recursive_inlining): Likewise. - (inline_small_functions): Likewise. - (inline_to_all_callers_1): Likewise. - (dump_overall_stats): Likewise. - (early_inline_small_functions): Likewise. - (early_inliner): Likewise. - * ipa-inline.h (estimate_edge_growth): Likewise. - * ipa-profile.c (ipa_propagate_frequency_1): Likewise. - * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise. - * ipa-prop.h (IPA_NODE_REF): Likewise. - (IPA_EDGE_REF): Likewise. - * ipa-pure-const.c (malloc_candidate_p): Likewise. - (propagate_malloc): Likewise. - * ipa-split.c (execute_split_functions): Likewise. - * symbol-summary.h: Rename get to get_create. - (get): Likewise. - (get_create): Likewise. - * tree-sra.c (ipa_sra_preliminary_function_checks): Likewise. - - 2018-06-08 Martin Liska - - * symbol-summary.h (release): Move definition out of class - declaration. - (symtab_removal): Likewise. - (symtab_duplication): Likewise. - - 2018-06-08 Martin Liska - - * symbol-summary.h (function_summary): Move constructor - implementation out of class declaration. - (release): Likewise. - (symtab_insertion): Likewise. - (symtab_removal): Likewise. - (symtab_duplication): Likewise. - (get): Likewise. - - 2018-06-08 Martin Liska - - * Makefile.in: Remove support for MPX (macros, related functions, - fields in cgraph_node, ...). - * builtin-types.def (BT_BND): Likewise. - (BT_FN_BND_CONST_PTR): Likewise. - (BT_FN_CONST_PTR_BND): Likewise. - (BT_FN_VOID_PTR_BND): Likewise. - (BT_FN_BND_CONST_PTR_SIZE): Likewise. - (BT_FN_VOID_CONST_PTR_BND_CONST_PTR): Likewise. - * builtins.c (expand_builtin_memcpy_with_bounds): Likewise. - (expand_builtin_mempcpy_with_bounds): Likewise. - (expand_builtin_memset_with_bounds): Likewise. - (expand_builtin_memset_args): Likewise. - (std_expand_builtin_va_start): Likewise. - (expand_builtin): Likewise. - (expand_builtin_with_bounds): Likewise. - * builtins.def (DEF_BUILTIN_CHKP): Likewise. - (DEF_LIB_BUILTIN_CHKP): Likewise. - (DEF_EXT_LIB_BUILTIN_CHKP): Likewise. - (DEF_CHKP_BUILTIN): Likewise. - (BUILT_IN_MEMCPY): Likewise. - (BUILT_IN_MEMMOVE): Likewise. - (BUILT_IN_MEMPCPY): Likewise. - (BUILT_IN_MEMSET): Likewise. - (BUILT_IN_STPCPY): Likewise. - (BUILT_IN_STRCAT): Likewise. - (BUILT_IN_STRCHR): Likewise. - (BUILT_IN_STRCPY): Likewise. - (BUILT_IN_STRLEN): Likewise. - (BUILT_IN_MEMCPY_CHK): Likewise. - (BUILT_IN_MEMMOVE_CHK): Likewise. - (BUILT_IN_MEMPCPY_CHK): Likewise. - (BUILT_IN_MEMSET_CHK): Likewise. - (BUILT_IN_STPCPY_CHK): Likewise. - (BUILT_IN_STRCAT_CHK): Likewise. - (BUILT_IN_STRCPY_CHK): Likewise. - * calls.c (store_bounds): Likewise. - (emit_call_1): Likewise. - (special_function_p): Likewise. - (maybe_warn_nonstring_arg): Likewise. - (initialize_argument_information): Likewise. - (finalize_must_preallocate): Likewise. - (compute_argument_addresses): Likewise. - (expand_call): Likewise. - * cfgexpand.c (expand_call_stmt): Likewise. - (expand_return): Likewise. - (expand_gimple_stmt_1): Likewise. - (pass_expand::execute): Likewise. - * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Likewise. - (cgraph_node::remove): Likewise. - (cgraph_node::dump): Likewise. + (inline_read_section): Initialize params summary used flags. + * ipa-predicate.c (predicate::remap_after_inlining): Pass + around param_summary. + (add_condition): Initialized used params summary flags. + * ipa-predicate.h (inline_param_summary::equals_to): Make const. + (inline_param_summary::useless_p): New predicate. + (remap_after_inlining, add_condition): Update prototype + * ipa-prop.c (ipa_populate_param_decls): Watch overflow in + move_cost. + (ipa_note_param_call): Add parameter POLYMORPHIC; update params + summaries. + (ipa_analyze_indirect_call_uses): Update use of ipa_note_param_call. + (ipa_analyze_virtual_call_uses): Likewise. + (update_indirect_edges_after_inlining): Update param summaries. + (ipa_print_node_params): Print used flags. + (ipa_read_indirect_edge_info): Update param summareis. + * ipa-prop.h (ipa_param_descriptor): Add + used_by_ipa_predicates, used_by_indirect_call + and used_by_polymorphic_call. + (ipa_set_param_used_by_ipa_predicates, + ipa_set_param_used_by_indirect_call, + ipa_set_param_used_by_polymorphic_call, + ipa_is_param_used_by_ipa_predicates, + ipa_is_param_used_by_indirect_call, + ipa_is_param_used_by_polymorphic_call): New inline functions. + + 2019-11-02 Jan Hubicka + + * ipa-fnsummary.c (ipa_call_context::duplicate_from): New + member function. + (ipa_call_context::release): Add ALL parameter. + (ipa_call_context::equal_to): New member function. + * ipa-fnsummary.h (ipa_call_context): Add empty constructor; + duplicate_form, release, equal_to and exists_p member functoins. + * ipa-inline-analysis.c (node_context_cache_entry): New + class. + (node_context_summary): Likewise. + (node_context_cache, node_context_cache_hit, node_context_cache_miss, + node_context_clear): New static vars. + (initialize_growth_caches): New function. + (free_growth_caches): Also delete node_context_cache; output stats. + (do_estimate_edge_time): Cache contexts. + (reset_node_cache): New function. + * ipa-inline.c (reset_edge_caches): Reset also node cache. + (inline_small_functions): Initialize growth caches. + * ipa-inline.h (reset_node_cache, initialize_growth_caches): + Declare. + * ipa-predicate.h (inline_param_summary::equal_to): New. + * ipa-prop.c (ipa_agg_jf_item::equal_to): New. + * ipa-prop.h (ipa_agg_jf_item): Declare equal_to member function. + (ipa_agg_jump_function): Implement equal_to member function. + + 2019-11-02 Jan Hubicka + + * ipa-fnsummary.c (inline_read_section): Set vector size + ahead of time. + + 2019-11-02 Jan Hubicka + + * ipa-fnsummary.c (ipa_call_context): New constructor. + (estimate_node_size_and_time): Turn to ... + (ipa_call_context::estimate_size_and_time): ... this one. + (ipa_call_context::release): New. + * ipa-fnsummary.h (ipa_call_context): New class. + (estimate_node_size_and_time): Remove. + * ipa-inline-analysis.c (do_estimate_edge_time, do_estimate_edge_size, + do_estimate_edge_hints): Update. + + 2019-11-02 Jan Hubicka + + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Check for mallinfo. + * ggc-common.c: Include malloc.h if available; + include options.h + (report_heap_memory_use): New functoin. + * ggc-page.c (ggc_grow): Do not print "start". + * ggc.h (report_heap_memory_use): Declare. + * pases.c (execute_one_pass): Report memory after IPA passes. + (ipa_read_summaries_1): Likewise. + (ipa_read_optimization_summaries_1): Likewise. + + 2019-11-02 Jakub Jelinek + + * gimplify.h (omp_construct_selector_matches): Change return + type to int, add a new SCORES argument. + * gimplify.c (omp_construct_selector_matches): Likewise. If + SCORES is non-NULL, compute scores of each construct. + * omp-general.h (omp_get_context_selector): Declare. + * omp-general.c (omp_maybe_offloaded, omp_context_selector_matches): + Adjust omp_construct_selector_matches callers. + (omp_get_context_selector): New function, moved from c-family/c-omp.c. + (omp_context_compute_score): New function. + (omp_resolve_declare_variant): Compute scores and decide based on + that. + + PR bootstrap/92314 + * configure.ac: Don't look for omp-device-properties files from + installed offloading compilers. Instead add tmake_file snippets + for configured offloading targets and use files they generate. + * Makefile.in (install): Don't depend on + install-omp-device-properties. + (install-omp-device-properties): Remove goal. + * config/i386/t-omp-device: New file. + * config/i386/t-intelmic (omp-device-properties): Remove goal. + * config/nvptx/t-omp-device: New file. + * config/nvptx/t-nvptx (omp-device-properties): Remove goal. + * configure: Regenerated. + + * omp-general.h (omp_context_selector_set_compare): Declare. + * omp-general.c (omp_construct_simd_compare, + omp_context_selector_props_compare, omp_context_selector_set_compare, + omp_context_selector_compare): New functions. + (omp_resolve_declare_variant): Prune variants that are strict subset + of another variant. + + 2019-11-01 Martin Sebor + + PR middle-end/91679 + PR middle-end/91647 + PR middle-end/91463 + PR middle-end/92312 + * doc/invoke.texi (-Wzero-length-bounds): Document. + * gimple-match-head.c (try_conditional_simplification): Use memcpy + instead of a hand-rolled loop to avoid PR 92323. + * tree-vrp.c (vrp_prop::check_array_ref): Handle trailing arrays + with initializers. + (vrp_prop::check_mem_ref): Handle declared struct objects. + * tree.c (last_field): New function. + (array_at_struct_end_p): Handle MEM_REF. + (get_initializer_for): New helper. + (component_ref_size): Add argument. Rename locals. Call + get_initializer_for instead of fold_ctor_reference. Correct handling + of flexible array members. + * wide-int.h (generic_wide_int ::sign_mask): Assert invariant. + + 2019-11-01 Kewen Lin + + * config/rs6000/rs6000-modes.def (V2SF, V2SI): New modes. + * config/rs6000/vsx.md (UNSPEC_VSX_CVSPSXDS, + UNSPEC_VSX_CVSPUXDS): Remove. + (vsx_xvcvspdp): New define_expand, old define_insn split to... + (vsx_xvcvspdp_be): ... this. New. And... + (vsx_xvcvspdp_le): ... this. New. + (vsx_xvcvxwdp): New define_expand, old define_insn split to... + (vsx_xvcvxwdp_be): ... this. New. And... + (vsx_xvcvxwdp_le): ... this. New. + (vsx_xvcvspxds): New define_expand, old define_insn split to... + (vsx_xvcvspxds_be): ... this. New. And... + (vsx_xvcvspxds_le): ... this. New. + + 2019-11-01 Kewen Lin + + * config/rs6000/vsx.md (UNSPEC_VSX_CVSXWSP, UNSPEC_VSX_CVUXWSP, + UNSPEC_VSX_XVCVSXDDP, UNSPEC_VSX_XVCVUXDDP, + UNSPEC_VSX_XVCVDPSXDS, UNSPEC_VSX_XVCVDPUXDS, + UNSPEC_VSX_XVCVSPSXWS): Remove. + (vsx_xvcvxddp, vsx_xvcvdpxds, vsx_xvcvspxws, + vsx_xvcvxwsp): Update define_insn RTL patterns. + + 2019-11-01 Kewen Lin + + * config/rs6000/vsx.md (vsx_xvcdpsp): Remove define_insn. + (UNSPEC_VSX_XVCDPSP): Remove. + * config/rs6000/rs6000.c (rs6000_generate_float2_double_code): + Replace gen_vsx_xvcdpsp by gen_vsx_xvcvdpsp. + + 2019-11-01 Tobias Burnus + + * hooks.c (hook_tree_tree_bool_null): New. + * hooks.h (hook_tree_tree_bool_null): Declare. + * langhooks-def.h (LANG_HOOKS_OMP_ARRAY_DATA): Define. + (LANG_HOOKS_DECLS): Add it. + * langhooks.h (lang_hooks_for_decls): Add omp_array_data. + * omp-low.c (install_var_field): New mode for Fortran descriptor arrays. + (lower_omp_target): Handle Fortran array with descriptor in + OMP_CLAUSE_USE_DEVICE_ADDR/OMP_CLAUSE_USE_DEVICE_PTR. + + 2019-10-31 Richard Sandiford + + * config/aarch64/aarch64-sve-builtins.cc (register_builtin_types): + Assert that the type we store in abi_vector_types is its own + main variant. + (svbool_type_p): Don't apply TYPE_MAIN_VARIANT here. + + 2019-10-31 Richard Earnshaw + + * config/arm/arm.c (arm_legitimize_address): Don't form negative offsets + from a CONST_INT address when TARGET_THUMB2. + + 2019-10-31 Richard Earnshaw + + * config/arm/arm.md (add_not_cin): New insn. + (add_not_shift_cin): Likewise. + + 2019-10-31 Martin Liska + + * ipa-icf-gimple.c (func_checker::compare_tree_ssa_label): Remove. + * ipa-icf-gimple.h: Remove declaration from compare_tree_ssa_label + and compare_memory_operand. + + 2019-10-31 Jakub Jelinek + + * configure.ac: Compute and substitute omp_device_properties and + omp_device_property_deps. + * Makefile.in (generated_files): Add omp-device-properties.h. + (omp-general.o): Depend on omp-device-properties.h. + (omp_device_properties): New make variable. + (omp-device-properties.h, s-omp-device-properties-h, + install-omp-device-properties): New goals. + (install): Depend on install-omp-device-properties for accelerators. + * target.def (TARGET_OMP_DEVICE_KIND_ARCH_ISA): New target hook. + * target.h (enum omp_device_kind_arch_isa): New enum. + * doc/tm.texi.in: Add placeholder for TARGET_OMP_DEVICE_KIND_ARCH_ISA + documentation. + * omp-general.c: Include omp-device-properties.h. + (omp_max_simt_vf): Expect OFFLOAD_TARGET_NAMES to be separated by + colon instead of comma. + (omp_offload_device_kind_arch_isa, omp_maybe_offloaded): New + functions. + (omp_context_selector_matches): Implement device set arch/isa + selectors, improve device set kind selector handling. + * config/i386/i386-options.h (ix86_omp_device_kind_arch_isa): Declare. + * config/i386/i386.c (TARGET_SIMD_CLONE_ADJUST, + TARGET_SIMD_CLONE_USABLE): Formatting fix. + (TARGET_OMP_DEVICE_KIND_ARCH_ISA): Redefine to + ix86_omp_device_kind_arch_isa. + * config/i386/i386-options.c (struct ix86_target_opts): Move type + definition from ix86_target_string to file scope. + (isa2_opts, isa_opts): Moved arrays from ix86_target_string function + to file scope. + (ix86_omp_device_kind_arch_isa): New function. + (ix86_target_string): Moved struct ix86_target_opts, isa2_opts and + isa_opts definitions to file scope. + * config/i386/t-intelmic (omp-device-properties): New goal. + * config/nvptx/t-nvptx (omp-device-properties): Likewise. + * config/nvptx/nvptx.c (nvptx_omp_device_kind_arch_isa): New function. + (TARGET_OMP_DEVICE_KIND_ARCH_ISA): Redefine to + nvptx_omp_device_kind_arch_isa. + * configure: Regenerate. + * doc/tm.texi: Regenerate. + + PR middle-end/92231 + * tree.h (fndecl_built_in_p): Use fndecl_built_in_p instead of + DECL_BUILT_IN in comment. Remove redundant ()s around return + argument. + * tree.c (free_lang_data_in_decl): Check if var is FUNCTION_DECL + before calling fndecl_built_in_p. + * gimple-fold.c (gimple_fold_stmt_to_constant_1): Check if + TREE_OPERAND (fn, 0) is a FUNCTION_DECL before calling + fndecl_built_in_p on it. + + 2019-10-31 Andre Vieira + + * params.def (PARAM_VECT_EPILOGUES_NOMASK): Enable by default. + + 2019-10-31 Martin Liska + + * config/arm/arm.c (arm_get_pcs_model): Remove usage + of cgraph_local_info and use local_info_node instead. + * config/bfin/bfin.c (bfin_load_pic_reg): Likewise. + (bfin_function_ok_for_sibcall): Likewise. + * config/c6x/c6x.c (c6x_function_ok_for_sibcall): Likewise. + (must_reload_pic_reg_p): Likewise. + + 2019-10-31 Jakub Jelinek + + PR c++/90947 + * tree.h (type_initializer_zero_p): Remove. + * tree.c (type_initializer_zero_p): Remove. + + 2019-10-30 Bernd Edlinger + + * doc/invoke.texi (-Wshadow, -Wshadow=global + -Wshadow=local, -Wshadow=compatible-local): Update documentation. + + 2019-10-30 Tobias Burnus + + * gimplify.c (gimplify_scan_omp_clauses): Remove FE-generated + GOMP_MAP_TO_PSET and GOMP_MAP_POINTER mapping for 'target update' + and 'target exit data'. + + 2019-10-30 Martin Jambor + + ipa/92278 + * cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): Fix + availability comparison. + + 2019-10-30 Jozef Lawrynowicz + + * config/msp430/msp430.c (msp430_expand_helper): Support expansion of + calls to __mspabi_mpy* functions. + * config/msp430/msp430.md (mulhisi3): New define_expand. + (umulhisi3): New define_expand. + (*mulhisi3_inline): Use old mulhisi3 define_insn. + (*umulhisi3_inline): Use old umulhisi3 define_insn. + + 2019-10-30 Jozef Lawrynowicz + + * config/msp430/msp430.c (msp430_check_index_not_high_mem): New. + (msp430_check_plus_not_high_mem): New. + (msp430_op_not_in_high_mem): Use new functions to check if the operand + might be in low memory. + Indicate that a 16-bit absolute address is in lower memory. + + 2019-10-30 Martin Jambor + + * ipa-prop.c (ipa_compute_jump_functions_for_bb): Fix the call to + ultimate_alias_target. + + 2019-10-30 Richard Biener + + PR tree-optimization/92275 + * tree-vect-loop-manip.c (slpeel_update_phi_nodes_for_loops): + Copy all loop-closed PHIs. + + 2019-10-30 Martin Liska + + * ipa-icf-gimple.c (func_checker::compare_ssa_name): Use + const_tree as function argument. + (func_checker::compare_decl): Likewise. + (func_checker::operand_equal_p): Likewise. + (func_checker::compare_variable_decl): Likewise. + (func_checker::parse_labels): Likewise. + * ipa-icf-gimple.h: Likewise. + + 2019-10-30 Martin Liska + + * ipa-icf-gimple.c (func_checker::compatible_types_p): + Do not compare alias sets. It's handled by operand_equal_p. + + 2019-10-30 Martin Liska + + * ipa-icf-gimple.c (func_checker::func_checker): Do not + initialize m_compare_polymorphic. + (func_checker::compare_decl): Do not compare polymorphic types. + * ipa-icf-gimple.h (m_compare_polymorphic): Remove. + * ipa-icf.c (sem_function::equals_private): Do not call + compare_polymorphic_p. + + 2019-10-30 Martin Liska + + * ipa-icf-gimple.c (func_checker::compare_ssa_name): Call + compare_operand. + (func_checker::compare_memory_operand): Remove. + (func_checker::compare_cst_or_decl): Remove. + (func_checker::operand_equal_valueize): Do not handle + FIELD_DECL. + (func_checker::compare_gimple_call): Call compare_operand. + (func_checker::compare_gimple_assign): Likewise. + * ipa-icf-gimple.h: Remove compare_cst_or_decl. + * ipa-icf.c (sem_function::icf_handled_component_p): Remove. + * ipa-icf.h (icf_handled_component_p): Remove. + + 2019-10-30 Martin Liska + + * ipa-icf-gimple.c (func_checker::hash_operand): New. + (func_checker::compare_cst_or_decl): Remove handling + of FIELD_DECL. + (func_checker::compare_operand): Transform to ... + (func_checker::operand_equal_p): ... this. + * ipa-icf-gimple.h (class func_checker): Add + operand_equal_p and hash_operand. + * ipa-icf.c (sem_function::equals_private): Fix + pushing and popping of cfun. + + 2019-10-30 Martin Liska + + * fold-const.c (operand_equal_p): Move to ... + (operand_compare::operand_equal_p): ... here. + (operand_compare::verify_hash_value): New. + (add_expr): Move to ... + (operand_compare::hash_operand): ... here. + * fold-const.h (operand_equal_p): Move to the class. + (class operand_compare): New. + * tree.c (add_expr): Remove. + + 2019-10-30 Martin Liska + + * fold-const.c (operand_equal_p): Support OBJ_TYPE_REF. + * tree.c (add_expr): Hash parts of OBJ_TYPE_REF. + + 2019-10-30 Martin Liska + + PR lto/91393 + PR lto/88220 + * cgraph.c (cgraph_node::get_create): Overwrite node->order + from a first_clone in order to get proper LTO section + in LTO stream. + (cgraph_node::get_untransformed_body): + Use lto_get_section_data where symtab_node::order + must be provided. + * cgraphclones.c (cgraph_node::find_replacement): + Update also symbol order. + * ipa-fnsummary.c (ipa_fn_summary_read): + Use new function lto_get_summary_section_data. + * ipa-hsa.c (ipa_hsa_read_summary): Likewise. + * ipa-icf.c (sem_item_optimizer::read_summary): + Likewise. + * ipa-prop.c (ipa_prop_read_jump_functions): + Likewise. + (ipcp_read_transformation_summaries): Likewise. + * ipa-sra.c (ipa_sra_read_summary): Likewise. + * lto-cgraph.c (input_node): Add also order_base. + (input_varpool_node): Likewise. + (input_cgraph_1): Assign the order_base. + (input_cgraph_opt_summary): Use new lto_get_summary_section_data. + * lto-opts.c (lto_write_options): Pass new argument. + * lto-section-in.c (lto_get_section_data): Add new argumente order. + (lto_get_summary_section_data): New. + (lto_get_raw_section_data): Add order argument. + (lto_create_simple_input_block): Likewise. + * lto-section-out.c (lto_destroy_simple_output_block): + Likewise. + * lto-streamer-in.c (lto_input_toplevel_asms): + Use lto_get_summary_section_data. + (lto_input_mode_table): Likewise. + * lto-streamer-out.c (produce_asm): Pass symtab_node::order. + (lto_output_toplevel_asms): Pass new argument. + (copy_function_or_variable): Likewise. + (produce_lto_section):Likewise. + (produce_symtab): Likewise. + (lto_write_mode_table): Likewise. + (produce_asm_for_decls): Likewise. + * lto-streamer.c (lto_get_section_name): Concat symbol name + and symbol order. + * lto-streamer.h (lto_get_section_data): Add order argument. + (lto_get_summary_section_data): New. + (lto_get_raw_section_data): Add order argument. + (lto_get_section_name): Likewise. + * varpool.c (varpool_node::get_constructor): Pass order argument. + + 2019-10-30 Jakub Jelinek + + PR tree-optimization/92262 + * tree-ssa-loop-ivopts.c (get_debug_computation_at): Don't unshare + ubase or cbase here. + (remove_unused_ivs): Unshare comp before using it. + + 2019-10-30 Jan Hubicka + + * ipa-prop.c (update_jump_functions_after_inlining): + Watch for missing summaries. + + 2019-10-30 Richard Biener + + PR tree-optimization/65930 + * tree-vect-loop.c (vect_is_simple_reduction): For reduction + chains also allow a leading and trailing conversion. + * tree-vect-slp.c (vect_get_and_check_slp_defs): Handle + intermediate reduction chains. + (vect_analyze_slp_instance): Likewise. Build a SLP + node for a trailing conversion manually. + + 2019-10-30 Martin Liska + + * cgraph.c (cgraph_node::local_info): Transform to ... + (cgraph_node::local_info_node): ... this. + (cgraph_node::dump): Remove cgraph_local_info and + put its fields directly into cgraph_node. + (cgraph_node::get_availability): Likewise. + (cgraph_node::make_local): Likewise. (cgraph_node::verify_node): Likewise. - * cgraph.h (chkp_function_instrumented_p): Likewise. - (symtab_node::get_alias_target): Likewise. - (cgraph_node::can_remove_if_no_direct_calls_and_refs_p): Likewise. - (cgraph_local_p): Likewise. - * cgraphbuild.c (cgraph_edge::rebuild_edges): Likewise. - (cgraph_edge::rebuild_references): Likewise. - * cgraphunit.c (varpool_node::finalize_decl): Likewise. - (walk_polymorphic_call_targets): Likewise. - (cgraph_node::expand_thunk): Likewise. - (symbol_table::output_weakrefs): Likewise. - * common/config/i386/i386-common.c (OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET): Likewise. - (ix86_handle_option): Likewise. - * config/i386/constraints.md: Likewise. - * config/i386/i386-builtin-types.def (BND): Likewise. - (VOID): Likewise. - (PVOID): Likewise. - (ULONG): Likewise. - * config/i386/i386-builtin.def (BDESC_END): Likewise. - (BDESC_FIRST): Likewise. - (BDESC): Likewise. - * config/i386/i386-c.c (ix86_target_macros_internal): Likewise. - * config/i386/i386-protos.h (ix86_bnd_prefixed_insn_p): Likewise. - * config/i386/i386.c (enum reg_class): Likewise. - (ix86_target_string): Likewise. - (ix86_option_override_internal): Likewise. - (ix86_conditional_register_usage): Likewise. - (ix86_valid_target_attribute_inner_p): Likewise. - (ix86_set_indirect_branch_type): Likewise. - (ix86_set_current_function): Likewise. - (ix86_function_arg_regno_p): Likewise. + * cgraph.h (struct GTY): Likewise. + * cgraphclones.c (set_new_clone_decl_and_node_flags): Likewise. + (duplicate_thunk_for_node): Likewise. + (cgraph_node::create_clone): Likewise. + (cgraph_node::create_virtual_clone): Likewise. + (cgraph_node::create_version_clone): Likewise. + * cgraphunit.c (cgraph_node::reset): Likewise. + (cgraph_node::finalize_function): Likewise. + (cgraph_node::add_new_function): Likewise. + (analyze_functions): Likewise. + * combine.c (setup_incoming_promotions): Likewise. + * config/i386/i386.c (ix86_function_regparm): Likewise. + (ix86_function_sseregparm): Likewise. (init_cumulative_args): Likewise. - (ix86_function_arg_advance): Likewise. - (ix86_function_arg): Likewise. - (ix86_pass_by_reference): Likewise. - (ix86_function_value_regno_p): Likewise. - (ix86_function_value_1): Likewise. - (ix86_function_value_bounds): Likewise. - (ix86_return_in_memory): Likewise. - (ix86_setup_incoming_vararg_bounds): Likewise. - (ix86_va_start): Likewise. - (indirect_thunk_need_prefix): Likewise. - (print_reg): Likewise. - (ix86_print_operand): Likewise. - (ix86_expand_call): Likewise. - (ix86_output_function_return): Likewise. - (reg_encoded_number): Likewise. - (BDESC_VERIFYS): Likewise. - (ix86_init_mpx_builtins): Likewise. - (ix86_init_builtins): Likewise. - (ix86_emit_cmove): Likewise. - (ix86_emit_move_max): Likewise. - (ix86_expand_builtin): Likewise. - (ix86_builtin_mpx_function): Likewise. - (ix86_get_arg_address_for_bt): Likewise. - (ix86_load_bounds): Likewise. - (ix86_store_bounds): Likewise. - (ix86_load_returned_bounds): Likewise. - (ix86_store_returned_bounds): Likewise. - (ix86_class_likely_spilled_p): Likewise. - (ix86_hard_regno_mode_ok): Likewise. - (x86_order_regs_for_local_alloc): Likewise. - (ix86_mitigate_rop): Likewise. - (ix86_bnd_prefixed_insn_p): Likewise. - (ix86_mpx_bound_mode): Likewise. - (ix86_make_bounds_constant): Likewise. - (ix86_initialize_bounds): Likewise. - (TARGET_LOAD_BOUNDS_FOR_ARG): Likewise. - (TARGET_STORE_BOUNDS_FOR_ARG): Likewise. - (TARGET_LOAD_RETURNED_BOUNDS): Likewise. - (TARGET_STORE_RETURNED_BOUNDS): Likewise. - (TARGET_CHKP_BOUND_MODE): Likewise. - (TARGET_BUILTIN_CHKP_FUNCTION): Likewise. - (TARGET_CHKP_FUNCTION_VALUE_BOUNDS): Likewise. - (TARGET_CHKP_MAKE_BOUNDS_CONSTANT): Likewise. - (TARGET_CHKP_INITIALIZE_BOUNDS): Likewise. - * config/i386/i386.h (TARGET_MPX): Likewise. - (TARGET_MPX_P): Likewise. - (VALID_BND_REG_MODE): Likewise. - (FIRST_BND_REG): Likewise. - (LAST_BND_REG): Likewise. - (enum reg_class): Likewise. - (BND_REG_P): Likewise. - (BND_REGNO_P): Likewise. - (BNDmode): Likewise. - (ADJUST_INSN_LENGTH): Likewise. - * config/i386/i386.md: Likewise. - * config/i386/i386.opt: Likewise. - * config/i386/linux-common.h (LIBMPX_LIBS): Likewise. - (defined): Likewise. - (LINK_MPX): Likewise. - (MPX_SPEC): Likewise. - (LIBMPX_SPEC): Likewise. - (LIBMPXWRAPPERS_SPEC): Likewise. - (CHKP_SPEC): Likewise. - * config/i386/predicates.md: Likewise. - * dbxout.c (dbxout_type): Likewise. - * doc/extend.texi: Likewise. - * doc/invoke.texi: Likewise. - * doc/md.texi: Likewise. - * doc/tm.texi: Likewise. - * doc/tm.texi.in: Likewise. - * dwarf2out.c (is_base_type): Likewise. - (gen_formal_types_die): Likewise. - (gen_subprogram_die): Likewise. - (gen_type_die_with_usage): Likewise. - (gen_decl_die): Likewise. - (dwarf2out_late_global_decl): Likewise. - * expr.c (expand_assignment): Likewise. - (emit_storent_insn): Likewise. - (store_expr_with_bounds): Likewise. - (store_expr): Likewise. - (expand_expr_real_1): Likewise. - * expr.h (store_expr_with_bounds): Likewise. - * function.c (use_register_for_decl): Likewise. - (struct bounds_parm_data): Likewise. - (assign_parms_augmented_arg_list): Likewise. - (assign_parm_find_entry_rtl): Likewise. - (assign_parm_is_stack_parm): Likewise. - (assign_parm_load_bounds): Likewise. - (assign_bounds): Likewise. - (assign_parms): Likewise. - (expand_function_start): Likewise. - * gcc.c (CHKP_SPEC): Likewise. - * gimple-fold.c (gimple_fold_builtin_memory_op): Likewise. - * gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Likewise. - (wrestrict_dom_walker::check_call): Likewise. - * gimple.c (gimple_build_call_from_tree): Likewise. - * gimple.h (enum gf_mask): Likewise. - (gimple_call_with_bounds_p): Likewise. - (gimple_call_set_with_bounds): Likewise. - * gimplify.c (gimplify_init_constructor): Likewise. - * ipa-cp.c (initialize_node_lattices): Likewise. - (propagate_constants_across_call): Likewise. - (find_more_scalar_values_for_callers_subset): Likewise. - * ipa-hsa.c (process_hsa_functions): Likewise. - * ipa-icf-gimple.c (func_checker::compare_gimple_call): Likewise. - * ipa-icf.c (sem_function::merge): Likewise. - * ipa-inline.c (early_inliner): Likewise. - * ipa-pure-const.c (warn_function_noreturn): Likewise. - (warn_function_cold): Likewise. - (propagate_pure_const): Likewise. - * ipa-ref.h (enum GTY): Likewise. - * ipa-split.c (find_retbnd): Likewise. - (consider_split): Likewise. - (split_function): Likewise. - * ipa-visibility.c (cgraph_externally_visible_p): Likewise. - * ipa.c (walk_polymorphic_call_targets): Likewise. - (symbol_table::remove_unreachable_nodes): Likewise. - (process_references): Likewise. - (cgraph_build_static_cdtor_1): Likewise. + * ipa-cp.c (determine_versionability): Likewise. + (count_callers): Likewise. + (set_single_call_flag): Likewise. + (initialize_node_lattices): Likewise. + (estimate_local_effects): Likewise. + (create_specialized_node): Likewise. + (identify_dead_nodes): Likewise. + * ipa-fnsummary.c (compute_fn_summary): Likewise. + (ipa_fn_summary_generate): Likewise. + * ipa-hsa.c (check_warn_node_versionable): Likewise. + (process_hsa_functions): Likewise. + * ipa-icf.c (set_local): Likewise. + * ipa-inline-analysis.c (initialize_inline_failed): Likewise. + * ipa-inline.c (speculation_useful_p): Likewise. + * ipa-profile.c (ipa_propagate_frequency): Likewise. + (ipa_profile): Likewise. + * ipa-split.c (split_function): Likewise. + (execute_split_functions): Likewise. + * ipa-sra.c (ipa_sra_preliminary_function_checks): Likewise. + (ipa_sra_ipa_function_checks): Likewise. + * ipa-visibility.c (function_and_variable_visibility): Likewise. + * ipa.c (symbol_table::remove_unreachable_nodes): Likewise. * lto-cgraph.c (lto_output_node): Likewise. - (output_refs): Likewise. - (compute_ltrans_boundary): Likewise. (input_overwrite_node): Likewise. - (input_node): Likewise. - (input_cgraph_1): Likewise. - * params.def (PARAM_CHKP_MAX_CTOR_SIZE): Likewise. - * passes.c (pass_manager::execute_early_local_passes): Likewise. - (class pass_chkp_instrumentation_passes): Likewise. - (make_pass_chkp_instrumentation_passes): Likewise. - * passes.def: Likewise. - * rtl.h (struct GTY): Likewise. - (CALL_EXPR_WITH_BOUNDS_P): Likewise. - * stor-layout.c (layout_type): Likewise. - * symtab.c: Likewise. - * target.def: Likewise. - * targhooks.c (default_chkp_bound_type): Likewise. - (default_chkp_bound_mode): Likewise. - (default_builtin_chkp_function): Likewise. - (default_chkp_function_value_bounds): Likewise. - (default_chkp_make_bounds_constant): Likewise. - (default_chkp_initialize_bounds): Likewise. - * targhooks.h (default_chkp_bound_type): Likewise. - (default_chkp_bound_mode): Likewise. - (default_builtin_chkp_function): Likewise. - (default_chkp_function_value_bounds): Likewise. - (default_chkp_make_bounds_constant): Likewise. - (default_chkp_initialize_bounds): Likewise. - * toplev.c (compile_file): Likewise. - (process_options): Likewise. - * tree-core.h (DEF_BUILTIN): Likewise. - (DEF_BUILTIN_CHKP): Likewise. - * tree-inline.c (declare_return_variable): Likewise. - (remap_gimple_stmt): Likewise. - (copy_bb): Likewise. - (initialize_inlined_parameters): Likewise. - (expand_call_inline): Likewise. - * tree-pass.h (make_pass_ipa_chkp_versioning): Likewise. - (make_pass_ipa_chkp_early_produce_thunks): Likewise. - (make_pass_ipa_chkp_produce_thunks): Likewise. - (make_pass_chkp): Likewise. - (make_pass_chkp_opt): Likewise. - (make_pass_chkp_instrumentation_passes): Likewise. - * tree-pretty-print.c (dump_generic_node): Likewise. - * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Likewise. - * tree-ssa-dce.c (propagate_necessity): Likewise. - (eliminate_unnecessary_stmts): Likewise. - * tree-ssa-pre.c (create_expression_by_pieces): Likewise. - * tree-ssa-sccvn.c (copy_reference_ops_from_call): Likewise. - * tree-ssa-sccvn.h: Likewise. - * tree-ssa-strlen.c (get_string_length): Likewise. - (valid_builtin_call): Likewise. - (adjust_last_stmt): Likewise. - (handle_builtin_strchr): Likewise. - (handle_builtin_strcpy): Likewise. - (handle_builtin_stxncpy): Likewise. - (handle_builtin_memcpy): Likewise. - (handle_builtin_strcat): Likewise. - (strlen_check_and_optimize_stmt): Likewise. - * tree-stdarg.c (expand_ifn_va_arg_1): Likewise. - * tree-streamer-in.c: Likewise. - * tree-streamer.c (record_common_node): Likewise. - * tree.c (tree_code_size): Likewise. - (wide_int_to_tree_1): Likewise. - (type_contains_placeholder_1): Likewise. - (build_common_tree_nodes): Likewise. - * tree.def (POINTER_BOUNDS_TYPE): Likewise. - * tree.h (POINTER_BOUNDS_TYPE_P): Likewise. - (POINTER_BOUNDS_P): Likewise. - (BOUNDED_TYPE_P): Likewise. - (BOUNDED_P): Likewise. - (CALL_WITH_BOUNDS_P): Likewise. - (pointer_bounds_type_node): Likewise. - * value-prof.c (gimple_ic): Likewise. - * var-tracking.c (vt_add_function_parameters): Likewise. - * varasm.c (make_decl_rtl): Likewise. - (assemble_start_function): Likewise. - (output_constant): Likewise. - (maybe_assemble_visibility): Likewise. - * varpool.c (ctor_for_folding): Likewise. - * chkp-builtins.def: Remove. - * ipa-chkp.c: Remove. - * ipa-chkp.h: Remove. - * rtl-chkp.c: Remove. - * rtl-chkp.h: Remove. - * tree-chkp-opt.c: Remove. - * tree-chkp.c: Remove. - * tree-chkp.h: Remove. - - 2018-06-07 Carl Love - - * gcc/config/rs6000/vsx.md (vextract_fp_from_shorth, - vextract_fp_from_shortl): Add BE support. - - 2018-06-07 Paul Koning - - * compare-elim.c (try_merge_compare): Don't merge compare if - address contains a side effect. - (try_eliminate_compare): Likewise. - - 2018-06-07 Olga Makhotina - - * config.gcc: Support "tremont". - * config/i386/driver-i386.c (host_detect_local_cpu): Detect "tremont". - * config/i386/i386-c.c (ix86_target_macros_internal): Handle - PROCESSOR_TREMONT. - * config/i386/i386.c (m_TREMONT): Define. - (processor_target_table): Add "tremont". - (PTA_TREMONT): Define. - (ix86_lea_outperforms): Add TARGET_TREMONT. - (get_builtin_code_for_version): Handle PROCESSOR_TREMONT. - (fold_builtin_cpu): Add M_INTEL_TREMONT, replace M_INTEL_GOLDMONT - and M_INTEL_GOLDMONT_PLUS. - (fold_builtin_cpu): Add "tremont". - (ix86_add_stmt_cost): Add TARGET_TREMONT. - (ix86_option_override_internal): Add "tremont". - * config/i386/i386.h (processor_costs): Define TARGET_TREMONT. - (processor_type): Add PROCESSOR_TREMONT. - * config/i386/x86-tune.def: Add m_TREMONT. - * doc/invoke.texi: Add tremont as x86 -march=/-mtune= CPU type. - - 2018-06-07 Jozef Lawrynowicz - - * gcc/config/msp430/msp430.c (msp430_mcu_name): Set the "i" in the - symbol defined for msp430i* devices to be lower case. - - gcc/testsuite/gcc.target/msp430/ - * msp430i-device-symbol.c: New test. - * msp430f-device-symbol.c: New test. - * msp430.h: New test header file. - - 2018-06-07 Richard Biener - - * graphite-sese-to-poly.c (extract_affine): Avoid unneded - wrapping. Properly wrap the result of a BIT_NOT_EXPR. - Properly wrap signed arithmetic if overflow wraps. - - 2018-06-07 Jakub Jelinek - - PR tree-optimization/69615 - * tree-ssa-reassoc.c (optimize_range_tests_var_bound): If rhs2 is lhs - of a cast from a same precision integral SSA_NAME in a bb dominated - by first_bb, retry with rhs2 set to the rhs1 of the cast. Don't emit - cast to utype if rhs2 has already a compatible type. - - 2018-06-07 Richard Biener - - PR tree-optimization/85935 - * graphite-scop-detection.c (find_params_in_bb): Analyze - condition operands with respect to the correct loop. Assert - the analysis doesn't fail. - - 2018-06-04 Carl Love - - * gcc/config/rs6000/vsx.md (first_match_index_): Calculate index - using natural element order. Use gen_lshrsi3 instead of gen_ashrsi3 - as it is slightly cheaper. - (first_match_or_eos_index_): - Calculate index using natural element order. - (first_match_index_): - Calculate index using natural element order. - (first_match_or_eos_index_): - Calculate index using natural order. - (define_insn vclzlsbb): Change to define_insn vclzlsbb_. - for BE and LE modes. - * gcc/config/rs6000/rs6000-c.c: Rename P9V_BUILTIN_VCLZLSBB, - P9V_BUILTIN_VCLZLSBB_V16QI. - * gcc/config/rs6000/rs6000-builtin.def: Make VCLZLSBB mode - specific. - - 2018-06-06 Kelvin Nilsen - - * doc/extend.texi (PowerPC AltiVec Built-in Functions): Adjust - indentation and line wrap for many prototypes. Add missing - @smallexample directives around block of prototypes for vec_xl and - vec_xst. - - 2018-06-05 Michael Meissner - - * config/rs6000/rs6000.c (rs6000_passes_ieee128): New boolean to - track if we pass or return IEEE 128-bit floating point. - (ieee128_mangling_gcc_8_1): New boolean to say whether to generate - C++ mangling that is compatible with GCC 8.1. - (TARGET_ASM_GLOBALIZE_DECL_NAME): Override target hook. - (init_cumulative_args): Note if we pass or return IEEE 128-bit - floating point types. - (rs6000_function_arg_advance_1): Likewise. - (rs6000_mangle_type): Optionally generate mangled names that match - what GCC 8.1 generated for IEEE 128-bit floating point types. - (rs6000_globalize_decl_name): If we have an external function that - passes or returns IEEE 128-bit types, generate a weak reference - from the mangled name used in GCC 8.1 to the current mangled - name. - (rs6000_init_builtins): Make __ibm128 use the long double type if - long double is IBM extended double. Make __float128 use the long - double type if long double is IEEE 128-bit. - - PR target/85657 - * config/rs6000/rs6000-builtin.def (BU_IBM128_2): New helper - macro for __ibm128 built-in functions. - (PACK_IF): Add __ibm128 pack/unpack functions. - (UNPACK_IF): Likewise. - * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Do not - enable long double built-in functions if long double is IEEE - 128-bit floating point. - (rs6000_invalid_builtin): Update long double built-in function - error message. - (rs6000_expand_builtin): For PACK_IF and UNPACK_IF built-in - functions, adjust the built-in function to use the long double - built-in function if __ibm128 and long double are the same type. - * doc/extend.texi (PowerPC builtins): Update documention for - __builtin_{,un}pack_longdouble. Add documentation for - __builtin_{,un}pack_ibm128. - - 2018-06-06 Jim Wilson - - * config/riscv/riscv.c (enum riscv_privilege_levels): New. - (struct machine_function): New field interrupt_mode. - (riscv_handle_type_attribute): New function. Add forward declaration. - (riscv_attribute_table) : Use riscv_handle_type_attribute. - (riscv_expand_epilogue): Check interrupt_mode field. - (riscv_set_current_function): Check interrupt attribute args and - set interrupt_mode field. - * config/riscv/riscv.md (UNSPECV_SRET, UNSPECV_URET): New. - (riscv_sret, riscv_uret): New. - * doc/extend.texi (RISC-V Function Attributes) : Document - new arguments to interrupt attribute. - - 2018-06-06 Peter Bergner - - PR target/63177 - * /config/rs6000/rs6000.h (ASM_CPU_SPEC): Add support for -mpower9. - Don't handle -mcpu=power8 if -mpower9-vector is also used. - - 2018-06-06 Kelvin Nilsen - - * config/rs6000/rs6000-builtin.def (VSX_BUILTIN_VEC_LD, - VSX_BUILTIN_VEC_ST): Add comment to explain non-traditional uses. - * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Remove - several redundant entries. - - 2018-06-06 David Malcolm - - * config/i386/i386-protos.h (ix86_expand_call): Strengthen return - type from "rtx" to "rtx_insn *". - * config/i386/i386.c (ix86_expand_split_stack_prologue): Likewise - for local "call_insn", removing cast. - (ix86_expand_call): Likewise, introducing a "call_insn" local. - - 2018-06-06 Eric Botcazou - - PR tree-optimization/86066 - * gimple-ssa-store-merging.c (process_store): Do not bypass BIT_NOT_EXPR - for BIT_INSERT_EXPR stores. - - 2018-06-06 Richard Biener - - PR tree-optimization/86062 - * tree-ssa-sccvn.c (vn_reference_lookup_3): Handle arbitrary - component refs ontop - of to be offsetted base. - - 2018-06-06 Jozef Lawrynowicz - - * gcc/config/msp430/msp430.c (msp430_attr): Allow interrupt handlers - to be static and remove check on interrupt attribute name. - - gcc/testsuite/gcc.target/msp430/ - * function-attributes-4.c: New test. - * static-interrupts.c: New test. - - 2018-06-05 Kelvin Nilsen - - * doc/extend.texi (PowerPC AltiVec Built-in Functions): Remove - volatile qualifier from vec_lvsl and vec_lvsr argument prototypes. - - 2018-06-05 Steve Ellcey - - PR target/79924 - * config/aarch64/aarch64-protos.h (aarch64_err_no_fpadvsimd): Remove - second argument. - * config/aarch64/aarch64-protos..c (aarch64_err_no_fpadvsimd): - Remove second argument, change how error is called. - (aarch64_layout_arg): Remove second argument from - aarch64_err_no_fpadvsimd call. - (aarch64_init_cumulative_args): Ditto. - (aarch64_gimplify_va_arg_expr): Ditto. - * config/aarch64/aarch64.md (mov): Ditto. - - 2018-06-05 Uros Bizjak - - * config/i386/i386.md (simple_return_indirect_internal): New expander. - (*simple_return_indirect_internal): Rename from - simple_return_indirect_internal. Use W mode iterator. - (rstorssp): New expander. - (*rstorssp): Rename from rstorssp. Use P mode iterator. - (clrssbsy): New expander. - (*clrssbsy): Rename from clrssbsy. Use P mode iterator. - - 2018-06-05 Andre Vieira - - * config/arm/arm_cmse.h (cmse_nsfptr_create): Change typeof to - __typeof__. - (cmse_check_pointed_object): Likewise. - - 2018-06-05 Martin Liska - - PR gcov-profile/47618 - * doc/invoke.texi: Document how -fprofile-dir format - is extended. - - 2018-06-05 Richard Biener - - * tree-cfgcleanup.c (cleanup_control_flow_pre): For edge - removal pretend DOM info isn't available so we do not update - it and only remove edges, not dominated blocks. Actually free - DOM info in case we removed something. Remove unreachable blocks. - (mfb_keep_latches): Work with either DOM info or marked backedges. - (cleanup_tree_cfg_noloop): Do not remove unreachable blocks - first. Mark backedges if DOM info isn't available. - (Re-)compute DOM info after cleanup_control_flow_pre. - - 2018-06-05 Richard Biener - - * tree-cfg.c (struct locus_discrim_map): Store line, not location. - (locus_discrim_hasher::hash): Adjust. - (locus_discrim_hasher::equal): Likewise. - (next_discriminator_for_locus): Work on line directly. - (same_line_p): Pass in expanded locus1 as well. - (assign_discriminators): Avoid redundant location expansions. - - 2018-06-05 Richard Biener + * multiple_target.c (expand_target_clones): Likewise. + * omp-simd-clone.c (simd_clone_create): Likewise. + * trans-mem.c (expand_call_tm): Likewise. + (ipa_tm_mayenterirr_function): Likewise. + (ipa_tm_diagnose_tm_safe): Likewise. + (ipa_tm_diagnose_transaction): Likewise. + (ipa_tm_create_version): Likewise. + (ipa_tm_transform_calls_redirect): Likewise. + (ipa_tm_execute): Likewise. + * tree-inline.c (expand_call_inline): Likewise. + + 2019-10-29 Martin Liska + + * symbol-summary.h (function_summary): Pass memory location + to underlaying hash_map (or vec). + (V>::fast_function_summary): Likewise. + + 2019-10-29 Martin Liska + + * ggc.h (ggc_alloc_no_dtor): New function. + * ipa-fnsummary.c (ipa_free_fn_summary): Call + destructor and ggc_free. + (ipa_free_size_summary): Call delete instead + of release. + * ipa-fnsummary.h: Use new function ggc_alloc_no_dtor. + * ipa-prop.c (ipa_check_create_edge_args): Likewise. + (ipa_free_all_edge_args): Call destructor and ggc_free. + (ipa_free_all_node_params): Likewise. + (ipcp_free_transformation_sum): Likewise. + * ipa-prop.h (ipa_check_create_node_params): + Call new ggc_alloc_no_dtor. + * ipa-sra.c (ipa_sra_generate_summary): Likewise. + (ipa_sra_analysis): Call destructor and ggc_free. + Replace release with delete operator. + * symbol-summary.h (release): Remove .. + (V>::~fast_function_summary): and move logic here. + Likewise for other classes. + + 2019-10-29 Richard Biener + + PR tree-optimization/92260 + * tree-vect-slp.c (vect_get_constant_vectors): Special-case + lane-reducing ops. + + 2019-10-29 Andre Vieira + + PR tree-optimization/88915 + * tree-ssa-loop-niter.h (simplify_replace_tree): Change declaration. + * tree-ssa-loop-niter.c (simplify_replace_tree): Add context parameter + and make the valueize function pointer also take a void pointer. + * tree-ssa-sccvn.c (vn_valueize_wrapper): New function to wrap + around vn_valueize, to call it without a context. + (process_bb): Use vn_valueize_wrapper instead of vn_valueize. + * tree-vect-loop.c (_loop_vec_info): Initialize epilogue_vinfos. + (~_loop_vec_info): Release epilogue_vinfos. + (vect_analyze_loop_costing): Use knowledge of main VF to estimate + number of iterations of epilogue. + (vect_analyze_loop_2): Adapt to analyse main loop for all supported + vector sizes when vect-epilogues-nomask=1. Also keep track of lowest + versioning threshold needed for main loop. + (vect_analyze_loop): Likewise. + (find_in_mapping): New helper function. + (update_epilogue_loop_vinfo): New function. + (vect_transform_loop): When vectorizing epilogues re-use analysis done + on main loop and call update_epilogue_loop_vinfo to update it. + * tree-vect-loop-manip.c (vect_update_inits_of_drs): No longer insert + stmts on loop preheader edge. + (vect_do_peeling): Enable skip-vectors when doing loop versioning if + we decided to vectorize epilogues. Update epilogues NITERS and + construct ADVANCE to update epilogues data references where needed. + * tree-vectorizer.h (_loop_vec_info): Add epilogue_vinfos. + (vect_do_peeling, vect_update_inits_of_drs, + determine_peel_for_niter, vect_analyze_loop): Add or update + declarations. + * tree-vectorizer.c (try_vectorize_loop_1): Make sure to use already + created loop_vec_info's for epilogues when available. Otherwise analyse + epilogue separately. - PR tree-optimization/86046 - * tree-ssa.c (maybe_optimize_var): Clear DECL_GIMPLE_REG_P - if required after clearing TREE_ADDRESSABLE. - - 2018-06-05 Richard Biener - - PR tree-optimization/86047 - * tree-ssa-loop.c (for_each_index): Glob handling of all - decls and constants and really handle all of them. - - 2018-06-05 Kyrylo Tkachov - - PR target/81497 - * config/arm/arm-builtins.c (arm_type_qualifiers): Add - qualifier_void_pointer and qualifier_const_void_pointer. - (arm_ldc_qualifiers, arm_stc_qualifiers): Use the above. - (arm_init_builtins): Handle the above. - * config/arm/arm_acle.h (__arm_cdp, __arm_ldc, __arm_ldcl, __arm_stc, - __arm_stcl, __arm_mcr, __arm_cdp2, __arm_ldc2, __arm_ldcl2, __arm_stc2, - __arm_stcl2,__arm_mcr2, __arm_mcrr, __arm_mcrr2): Remove return for - void intrinsics. - - 2018-06-05 Martin Liska - - * auto-profile.c (read_autofdo_file): Do not use - gcov_ctr_summary struct. - (afdo_callsite_hot_enough_for_early_inline): Likewise. - * coverage.c (struct counts_entry): Likewise. - (read_counts_file): Read just single summary entry. - (get_coverage_counts): Use gcov_summary struct. - * coverage.h (get_coverage_counts): Likewise. - * gcov-dump.c (dump_working_sets): Likewise. - (tag_summary): Dump just single summary. - * gcov-io.c (gcov_write_summary): Write just histogram - summary. - (gcov_read_summary): Read just single summary. - (compute_working_sets): Use gcov_summary struct. - * gcov-io.h (GCOV_TAG_SUMMARY_LENGTH): Remove usage - of GCOV_COUNTERS_SUMMABLE. - (GCOV_COUNTERS_SUMMABLE): Remove. - (GCOV_FIRST_VALUE_COUNTER): Replace with - GCOV_COUNTER_V_INTERVAL. - (struct gcov_ctr_summary): Remove. - (struct gcov_summary): Directly use fields of former - gcov_ctr_summary. - (compute_working_sets): Use gcov_summary struct. - * gcov.c (read_count_file): Do not use ctrs fields. - * lto-cgraph.c (merge_profile_summaries): Use gcov_summary - struct. - * lto-streamer.h (struct GTY): Make profile_info gcov_summary - struct. - * profile.c: Likewise. - * profile.h: Likewise. + 2019-10-29 Richard Biener - 2018-06-05 Martin Liska + * doc/tree-ssa.texi (Immediate Uses): Fix FOR_EACH_IMM_USE_STMT + example. - PR gcov-profile/84846 - * gcov.c (output_lines): Print working directory only - in intermediate format. + 2019-10-29 Richard Sandiford + + * tree-vect-stmts.c (vectorizable_condition): Get the reduction + index for the COND_EXPR from stmt_info rather than reduc_info. + + 2019-10-29 Richard Biener + + PR tree-optimization/65930 + * tree-vect-loop.c (check_reduction_path): Relax single-use + check allowing out-of-loop uses. + (vect_is_simple_reduction): SLP reduction chains cannot have + intermediate stmts used outside of the loop. + (vect_create_epilog_for_reduction): The adjustment might need + to be converted. + (vectorizable_reduction): Annotate live stmts of the reduction + chain with STMT_VINFO_REDUC_DEF. + * tree-vect-stms.c (process_use): Remove no longer true asserts. + + 2019-10-29 Richard Sandiford + + * calls.c (pass_by_reference): Leave the target to decide whether + POLY_INT_CST-sized arguments should be passed by value or reference, + rather than forcing them to be passed by reference. + (must_pass_in_stack_var_size): Likewise. + * config/aarch64/aarch64.md (LAST_SAVED_REGNUM): Redefine from + V31_REGNUM to P15_REGNUM. + * config/aarch64/aarch64-protos.h (aarch64_init_cumulative_args): + Take an extra "silent_p" parameter, defaulting to false. + (aarch64_sve::svbool_type_p): Declare. + (aarch64_sve::nvectors_if_data_type): Likewise. + * config/aarch64/aarch64.h (NUM_PR_ARG_REGS): New macro. + (aarch64_frame::reg_offset): Turn into poly_int64s. + (aarch64_frame::save_regs_size): Likewise. + (aarch64_frame::below_hard_fp_saved_regs_size): New field. + (aarch64_frame::sve_callee_adjust): Likewise. + (aarch64_frame::spare_reg_reg): Likewise. + (ARM_PCS_SVE): New arm_pcs value. + (CUMULATIVE_ARGS::aapcs_nprn): New field. + (CUMULATIVE_ARGS::aapcs_nextnprn): Likewise. + (CUMULATIVE_ARGS::silent_p): Likewise. + (BITS_PER_SVE_PRED): New macro. + * config/aarch64/aarch64.c (handle_aarch64_vector_pcs_attribute): New + function. Reject aarch64_vector_pcs attributes on SVE functions. + (aarch64_attribute_table): Use the above handler. + (aarch64_sve_abi): New function. + (aarch64_sve_argument_p): Likewise. + (aarch64_returns_value_in_sve_regs_p): Likewise. + (aarch64_takes_arguments_in_sve_regs_p): Likewise. + (aarch64_fntype_abi): Check for SVE functions and return the SVE PCS + descriptor for them. + (aarch64_simd_decl_p): Delete. + (aarch64_emit_cfi_for_reg_p): New function. + (aarch64_reg_save_mode): Remove the fndecl argument and instead use + crtl->abi to choose the mode for FP registers. Handle the SVE PCS. + (aarch64_hard_regno_call_part_clobbered): Do not treat FP registers + as partly clobbered for the SVE PCS. + (aarch64_function_ok_for_sibcall): Check whether the two functions + use the same ABI, rather than checking specifically for whether + they're aarch64_vector_pcs functions. + (aarch64_pass_by_reference): Raise an error for attempts to pass + SVE arguments when SVE is disabled. Pass SVE arguments by reference + if there are not enough free registers left, or if the argument is + variadic. + (aarch64_function_value): Handle SVE predicates, vectors and tuples. + (aarch64_return_in_memory): Do not return SVE predicates, vectors and + tuples in memory. + (aarch64_layout_arg): Take a function_arg_info rather than + individual properties. Handle SVE predicates, vectors and tuples. + Raise an error if they are passed to unprototyped functions. + (aarch64_function_arg): If the silent_p flag is set, suppress the + usual error about using float registers without TARGET_FLOAT. + (aarch64_init_cumulative_args): Take a silent_p parameter and store + it in the cumulative_args structure. Initialize aapcs_nprn and + aapcs_nextnprn. If the silent_p flag is set, suppress the usual + error about using float registers without TARGET_FLOAT. + If the silent_p flag is not set, also raise an error about + using SVE functions when SVE is disabled. + (aarch64_function_arg_advance): Update the call to aarch64_layout_arg, + and call it for SVE functions too. Update aapcs_nprn similarly + to the other register counts. + (aarch64_layout_frame): If a big-endian function needs to save + and restore Z8-Z15, search for a spare predicate that it can use. + Store SVE predicates at the bottom of the register save area, + followed by SVE vectors, then followed by the normal slots. + Keep pointing the hard frame pointer at the base of the normal slots, + above the SVE vectors. Update the various frame creation and + tear-down strategies for the new layout, initializing the new + sve_callee_adjust field. Add an additional layout for frames + whose saved registers are all SVE registers. + (aarch64_register_saved_on_entry): Cope with poly_int64 reg_offsets. + (aarch64_return_address_signing_enabled): Likewise. + (aarch64_push_regs, aarch64_pop_regs): Update calls to + aarch64_reg_save_mode. + (aarch64_adjust_sve_callee_save_base): New function. + (aarch64_add_cfa_expression): Move earlier in file. Take the + saved register as an rtx rather than a register number and use + its mode for the MEM slot. + (aarch64_save_callee_saves): Remove the mode argument and instead + use aarch64_reg_save_mode to get the mode of each save slot. + Add a hard_fp_valid_p parameter. Cope with poly_int64 register + offsets. Allow GP offsets to be saved at a VL-based offset from + the stack, handling this case using the frame pointer if available + or a temporary register otherwise. Use ST1D to save Z8-Z15 for + big-endian SVE functions; use normal moves for other SVE saves. + Only mark the save as frame-related if aarch64_emit_cfi_for_reg_p + returns true. Add explicit CFA notes when not storing via the + stack pointer. Do not try to pair SVE saves. + (aarch64_restore_callee_saves): Cope with poly_int64 register + offsets. Use LD1D to restore Z8-Z15 for big-endian SVE functions; + use normal moves for other SVE restores. Only add CFA restore notes + if aarch64_emit_cfi_for_reg_p returns true. Do not try to pair + SVE restores. + (aarch64_get_separate_components): Always keep the first SVE save + in the prologue if we need to use it as a stack probe. Don't allow + Z8-Z15 saves and loads to be shrink-wrapped for big-endian targets. + Likewise the spare predicate register that they need. Update the + offset calculation to account for the SVE save area. Use the + appropriate range check for SVE LDR and STR instructions. + (aarch64_components_for_bb): Cope with poly_int64 reg_offsets. + (aarch64_process_components): Likewise. Update the offset + calculation to account for the SVE save area. Only mark the + save as frame-related if aarch64_emit_cfi_for_reg_p returns true. + Do not try to pair SVE saves. + (aarch64_allocate_and_probe_stack_space): Cope with poly_int64 + reg_offsets. When handling the final allocation, expect the + first SVE register save to be part of the initial allocation + and for it to act as a probe at SP. Account for the SVE callee + save area in the dump information. + (aarch64_expand_prologue): Update the frame diagram. Fold the + SVE callee allocation into the initial allocation if stack clash + protection is enabled. Use new variables to track the offset + of the frame chain (and hard frame pointer) from the current + stack pointer, and likewise the offset of the bottom of the + register save area. Update calls to aarch64_save_callee_saves + and aarch64_add_cfa_expression. Apply sve_callee_adjust before + saving the FP&SIMD registers. Save the predicate registers. + (aarch64_expand_epilogue): Take below_hard_fp_saved_regs_size + into account when setting the stack pointer from the frame pointer, + and when deciding whether we can inherit the initial adjustment + amount from the prologue. Restore the predicate registers after + the vector registers, then apply sve_callee_adjust, then restore + the general registers. + (aarch64_secondary_reload): Don't use secondary SVE reloads + for VNx16BImode. + (aapcs_vfp_sub_candidate): Assert that the type is not an SVE type. + (aarch64_short_vector_p): Return false for SVE types. + (aarch64_vfp_is_call_or_return_candidate): Initialize *is_ha + at the start of the function. Return false for SVE types. + (aarch64_asm_output_variant_pcs): Output .variant_pcs for SVE + functions too. + (TARGET_STRICT_ARGUMENT_NAMING): Redefine to request strict naming. + * config/aarch64/aarch64-sve.md (*aarch64_sve_mov_le): Extend + to big-endian targets for bytewise moves. + (*aarch64_sve_mov_be): Exclude the bytewise case. + + 2019-10-29 Richard Sandiford + Kugan Vivekanandarajah + Prathamesh Kulkarni - 2018-06-05 Andreas Krebbel + * config.gcc (aarch64*-*-*): Add arm_sve.h to extra_headers. + Add aarch64-sve-builtins.o, aarch64-sve-builtins-shapes.o and + aarch64-sve-builtins-base.o to extra_objs. Add + aarch64-sve-builtins.h and aarch64-sve-builtins.cc to target_gtfiles. + * config/aarch64/t-aarch64 (aarch64-sve-builtins.o): New rule. + (aarch64-sve-builtins-shapes.o): Likewise. + (aarch64-sve-builtins-base.o): New rules. + * config/aarch64/aarch64-c.c (aarch64_pragma_aarch64): New function. + (aarch64_resolve_overloaded_builtin): Likewise. + (aarch64_check_builtin_call): Likewise. + (aarch64_register_pragmas): Install aarch64_resolve_overloaded_builtin + and aarch64_check_builtin_call in targetm. Register the GCC aarch64 + pragma. + * config/aarch64/aarch64-protos.h (AARCH64_FOR_SVPRFOP): New macro. + (aarch64_svprfop): New enum. + (AARCH64_BUILTIN_SVE): New aarch64_builtin_class enum value. + (aarch64_sve_int_mode, aarch64_sve_data_mode): Declare. + (aarch64_fold_sve_cnt_pat, aarch64_output_sve_prefetch): Likewise. + (aarch64_output_sve_cnt_pat_immediate): Likewise. + (aarch64_output_sve_ptrues, aarch64_sve_ptrue_svpattern_p): Likewise. + (aarch64_sve_sqadd_sqsub_immediate_p, aarch64_sve_ldff1_operand_p) + (aarch64_sve_ldnf1_operand_p, aarch64_sve_prefetch_operand_p) + (aarch64_ptrue_all_mode, aarch64_convert_sve_data_to_pred): Likewise. + (aarch64_expand_sve_dupq, aarch64_replace_reg_mode): Likewise. + (aarch64_sve::init_builtins, aarch64_sve::handle_arm_sve_h): Likewise. + (aarch64_sve::builtin_decl, aarch64_sve::builtin_type_p): Likewise. + (aarch64_sve::mangle_builtin_type): Likewise. + (aarch64_sve::resolve_overloaded_builtin): Likewise. + (aarch64_sve::check_builtin_call, aarch64_sve::gimple_fold_builtin) + (aarch64_sve::expand_builtin): Likewise. + * config/aarch64/aarch64.c (aarch64_sve_data_mode): Make public. + (aarch64_sve_int_mode): Likewise. + (aarch64_ptrue_all_mode): New function. + (aarch64_convert_sve_data_to_pred): Make public. + (svprfop_token): New function. + (aarch64_output_sve_prefetch): Likewise. + (aarch64_fold_sve_cnt_pat): Likewise. + (aarch64_output_sve_cnt_pat_immediate): Likewise. + (aarch64_sve_move_pred_via_while): Use gen_while with UNSPEC_WHILE_LO + instead of gen_while_ult. + (aarch64_replace_reg_mode): Make public. + (aarch64_init_builtins): Call aarch64_sve::init_builtins. + (aarch64_fold_builtin): Handle AARCH64_BUILTIN_SVE. + (aarch64_gimple_fold_builtin, aarch64_expand_builtin): Likewise. + (aarch64_builtin_decl, aarch64_builtin_reciprocal): Likewise. + (aarch64_mangle_type): Call aarch64_sve::mangle_type. + (aarch64_sve_sqadd_sqsub_immediate_p): New function. + (aarch64_sve_ptrue_svpattern_p): Likewise. + (aarch64_sve_pred_valid_immediate): Check + aarch64_sve_ptrue_svpattern_p. + (aarch64_sve_ldff1_operand_p, aarch64_sve_ldnf1_operand_p) + (aarch64_sve_prefetch_operand_p, aarch64_output_sve_ptrues): New + functions. + * config/aarch64/aarch64.md (UNSPEC_LDNT1_SVE, UNSPEC_STNT1_SVE) + (UNSPEC_LDFF1_GATHER, UNSPEC_PTRUE, UNSPEC_WHILE_LE, UNSPEC_WHILE_LS) + (UNSPEC_WHILE_LT, UNSPEC_CLASTA, UNSPEC_UPDATE_FFR) + (UNSPEC_UPDATE_FFRT, UNSPEC_RDFFR, UNSPEC_WRFFR) + (UNSPEC_SVE_LANE_SELECT, UNSPEC_SVE_CNT_PAT, UNSPEC_SVE_PREFETCH) + (UNSPEC_SVE_PREFETCH_GATHER, UNSPEC_SVE_COMPACT, UNSPEC_SVE_SPLICE): + New unspecs. + * config/aarch64/iterators.md (SI_ONLY, DI_ONLY, VNx8HI_ONLY) + (VNx2DI_ONLY, SVE_PARTIAL, VNx8_NARROW, VNx8_WIDE, VNx4_NARROW) + (VNx4_WIDE, VNx2_NARROW, VNx2_WIDE, PRED_HSD): New mode iterators. + (UNSPEC_ADR, UNSPEC_BRKA, UNSPEC_BRKB, UNSPEC_BRKN, UNSPEC_BRKPA) + (UNSPEC_BRKPB, UNSPEC_PFIRST, UNSPEC_PNEXT, UNSPEC_CNTP, UNSPEC_SADDV) + (UNSPEC_UADDV, UNSPEC_FMLA, UNSPEC_FMLS, UNSPEC_FEXPA, UNSPEC_FTMAD) + (UNSPEC_FTSMUL, UNSPEC_FTSSEL, UNSPEC_COND_CMPEQ_WIDE): New unspecs. + (UNSPEC_COND_CMPGE_WIDE, UNSPEC_COND_CMPGT_WIDE): Likewise. + (UNSPEC_COND_CMPHI_WIDE, UNSPEC_COND_CMPHS_WIDE): Likewise. + (UNSPEC_COND_CMPLE_WIDE, UNSPEC_COND_CMPLO_WIDE): Likewise. + (UNSPEC_COND_CMPLS_WIDE, UNSPEC_COND_CMPLT_WIDE): Likewise. + (UNSPEC_COND_CMPNE_WIDE, UNSPEC_COND_FCADD90, UNSPEC_COND_FCADD270) + (UNSPEC_COND_FCMLA, UNSPEC_COND_FCMLA90, UNSPEC_COND_FCMLA180) + (UNSPEC_COND_FCMLA270, UNSPEC_COND_FMAX, UNSPEC_COND_FMIN): Likewise. + (UNSPEC_COND_FMULX, UNSPEC_COND_FRECPX, UNSPEC_COND_FSCALE): Likewise. + (UNSPEC_LASTA, UNSPEC_ASHIFT_WIDE, UNSPEC_ASHIFTRT_WIDE): Likewise. + (UNSPEC_LSHIFTRT_WIDE, UNSPEC_LDFF1, UNSPEC_LDNF1): Likewise. + (Vesize): Handle partial vector modes. + (self_mask, narrower_mask, sve_lane_con, sve_lane_pair_con): New + mode attributes. + (UBINQOPS, ANY_PLUS, SAT_PLUS, ANY_MINUS, SAT_MINUS): New code + iterators. + (s, paired_extend, inc_dec): New code attributes. + (SVE_INT_ADDV, CLAST, LAST): New int iterators. + (SVE_INT_UNARY): Add UNSPEC_RBIT. + (SVE_FP_UNARY, SVE_FP_UNARY_INT): New int iterators. + (SVE_FP_BINARY, SVE_FP_BINARY_INT): Likewise. + (SVE_COND_FP_UNARY): Add UNSPEC_COND_FRECPX. + (SVE_COND_FP_BINARY): Add UNSPEC_COND_FMAX, UNSPEC_COND_FMIN and + UNSPEC_COND_FMULX. + (SVE_COND_FP_BINARY_INT, SVE_COND_FP_ADD): New int iterators. + (SVE_COND_FP_SUB, SVE_COND_FP_MUL): Likewise. + (SVE_COND_FP_BINARY_I1): Add UNSPEC_COND_FMAX and UNSPEC_COND_FMIN. + (SVE_COND_FP_BINARY_REG): Add UNSPEC_COND_FMULX. + (SVE_COND_FCADD, SVE_COND_FP_MAXMIN, SVE_COND_FCMLA) + (SVE_COND_INT_CMP_WIDE, SVE_FP_TERNARY_LANE, SVE_CFP_TERNARY_LANE) + (SVE_WHILE, SVE_SHIFT_WIDE, SVE_LDFF1_LDNF1, SVE_BRK_UNARY) + (SVE_BRK_BINARY, SVE_PITER): New int iterators. + (optab): Handle UNSPEC_SADDV, UNSPEC_UADDV, UNSPEC_FRECPE, + UNSPEC_FRECPS, UNSPEC_RSQRTE, UNSPEC_RSQRTS, UNSPEC_RBIT, + UNSPEC_SMUL_HIGHPART, UNSPEC_UMUL_HIGHPART, UNSPEC_FMLA, UNSPEC_FMLS, + UNSPEC_FCMLA, UNSPEC_FCMLA90, UNSPEC_FCMLA180, UNSPEC_FCMLA270, + UNSPEC_FEXPA, UNSPEC_FTSMUL, UNSPEC_FTSSEL, UNSPEC_COND_FCADD90, + UNSPEC_COND_FCADD270, UNSPEC_COND_FCMLA, UNSPEC_COND_FCMLA90, + UNSPEC_COND_FCMLA180, UNSPEC_COND_FCMLA270, UNSPEC_COND_FMAX, + UNSPEC_COND_FMIN, UNSPEC_COND_FMULX, UNSPEC_COND_FRECPX and + UNSPEC_COND_FSCALE. + (maxmin_uns): Handle UNSPEC_COND_FMAX and UNSPEC_COND_FMIN. + (binqops_op, binqops_op_rev, last_op): New int attributes. + (su): Handle UNSPEC_SADDV and UNSPEC_UADDV. + (fn, ab): New int attributes. + (cmp_op): Handle UNSPEC_COND_CMP*_WIDE and UNSPEC_WHILE_*. + (while_optab_cmp, brk_op, sve_pred_op): New int attributes. + (sve_int_op): Handle UNSPEC_SMUL_HIGHPART, UNSPEC_UMUL_HIGHPART, + UNSPEC_ASHIFT_WIDE, UNSPEC_ASHIFTRT_WIDE, UNSPEC_LSHIFTRT_WIDE and + UNSPEC_RBIT. + (sve_fp_op): Handle UNSPEC_FRECPE, UNSPEC_FRECPS, UNSPEC_RSQRTE, + UNSPEC_RSQRTS, UNSPEC_FMLA, UNSPEC_FMLS, UNSPEC_FEXPA, UNSPEC_FTSMUL, + UNSPEC_FTSSEL, UNSPEC_COND_FMAX, UNSPEC_COND_FMIN, UNSPEC_COND_FMULX, + UNSPEC_COND_FRECPX and UNSPEC_COND_FSCALE. + (sve_fp_op_rev): Handle UNSPEC_COND_FMAX, UNSPEC_COND_FMIN and + UNSPEC_COND_FMULX. + (rot): Handle UNSPEC_COND_FCADD* and UNSPEC_COND_FCMLA*. + (brk_reg_con, brk_reg_opno): New int attributes. + (sve_pred_fp_rhs1_operand, sve_pred_fp_rhs2_operand): Handle + UNSPEC_COND_FMAX, UNSPEC_COND_FMIN and UNSPEC_COND_FMULX. + (sve_pred_fp_rhs2_immediate): Handle UNSPEC_COND_FMAX and + UNSPEC_COND_FMIN. + (max_elem_bits): New int attribute. + (min_elem_bits): Handle UNSPEC_RBIT. + * config/aarch64/predicates.md (subreg_lowpart_operator): Handle + TRUNCATE as well as SUBREG. + (ascending_int_parallel, aarch64_simd_reg_or_minus_one) + (aarch64_sve_ldff1_operand, aarch64_sve_ldnf1_operand) + (aarch64_sve_prefetch_operand, aarch64_sve_ptrue_svpattern_immediate) + (aarch64_sve_qadd_immediate, aarch64_sve_qsub_immediate) + (aarch64_sve_gather_immediate_b, aarch64_sve_gather_immediate_h) + (aarch64_sve_gather_immediate_w, aarch64_sve_gather_immediate_d) + (aarch64_sve_sqadd_operand, aarch64_sve_gather_offset_b) + (aarch64_sve_gather_offset_h, aarch64_sve_gather_offset_w) + (aarch64_sve_gather_offset_d, aarch64_gather_scale_operand_b) + (aarch64_gather_scale_operand_h): New predicates. + * config/aarch64/constraints.md (UPb, UPd, UPh, UPw, Utf, Utn, vgb) + (vgd, vgh, vgw, vsQ, vsS): New constraints. + * config/aarch64/aarch64-sve.md: Add a note on the FFR handling. + (*aarch64_sve_reinterpret): Allow any source register + instead of requiring an exact match. + (*aarch64_sve_ptruevnx16bi_cc, *aarch64_sve_ptrue_cc) + (*aarch64_sve_ptruevnx16bi_ptest, *aarch64_sve_ptrue_ptest) + (aarch64_wrffr, aarch64_update_ffr_for_load, aarch64_copy_ffr_to_ffrt) + (aarch64_rdffr, aarch64_rdffr_z, *aarch64_rdffr_z_ptest) + (*aarch64_rdffr_ptest, *aarch64_rdffr_z_cc, *aarch64_rdffr_cc) + (aarch64_update_ffrt): New patterns. + (@aarch64_load_) + (@aarch64_load_) + (@aarch64_load_) + (@aarch64_ldf1): New patterns. + (@aarch64_ldf1_) + (@aarch64_ldf1_) + (@aarch64_ldf1_) + (@aarch64_ldnt1): New patterns. + (gather_load): Use aarch64_sve_gather_offset_ for + the scalar part of the address. + (mask_gather_load): Use aarch64_sve_gather_offset_w for the + scalar part of the addresse and add an alternative for handling + nonzero offsets. + (mask_gather_load): Likewise aarch64_sve_gather_offset_d. + (*mask_gather_load_sxtw, *mask_gather_load_uxtw) + (@aarch64_gather_load_) + (@aarch64_gather_load_) + (*aarch64_gather_load__sxtw) + (*aarch64_gather_load__uxtw) + (@aarch64_ldff1_gather, @aarch64_ldff1_gather) + (*aarch64_ldff1_gather_sxtw, *aarch64_ldff1_gather_uxtw) + (@aarch64_ldff1_gather_) + (@aarch64_ldff1_gather_) + (*aarch64_ldff1_gather__sxtw) + (*aarch64_ldff1_gather__uxtw) + (@aarch64_sve_prefetch): New patterns. + (@aarch64_sve_gather_prefetch) + (@aarch64_sve_gather_prefetch) + (*aarch64_sve_gather_prefetch_sxtw) + (*aarch64_sve_gather_prefetch_uxtw) + (@aarch64_store_trunc) + (@aarch64_store_trunc) + (@aarch64_store_trunc) + (@aarch64_stnt1): New patterns. + (scatter_store): Use aarch64_sve_gather_offset_ for + the scalar part of the address. + (mask_scatter_store): Use aarch64_sve_gather_offset_w for + the scalar part of the addresse and add an alternative for handling + nonzero offsets. + (mask_scatter_store): Likewise aarch64_sve_gather_offset_d. + (*mask_scatter_store_sxtw, *mask_scatter_store_uxtw) + (@aarch64_scatter_store_trunc) + (@aarch64_scatter_store_trunc) + (*aarch64_scatter_store_trunc_sxtw) + (*aarch64_scatter_store_trunc_uxtw): + New patterns. + (vec_duplicate): Use QI as the mode of the input operand. + (extract_last_): Generalize to... + (@extract__): ...this. + (*2): Rename to... + (@aarch64_pred_): ...this. + (@cond_): New expander. + (@aarch64_pred_sxt): New pattern. + (@aarch64_cond_sxt): Likewise. + (@aarch64_pred_cnot, @cond_cnot): New expanders. + (@aarch64_sve_): New pattern. + (@aarch64_sve_): Likewise. + (*2): Rename to... + (@aarch64_pred_): ...this. + (@cond_): New expander. + (*3): Rename to... + (@aarch64_pred_): ...this. + (@aarch64_adr, *aarch64_adr_sxtw): New patterns. + (*aarch64_adr_uxtw_unspec): Likewise. + (*aarch64_adr_uxtw): Rename to... + (*aarch64_adr_uxtw_and): ...this. + (@aarch64_adr_shift): New expander. + (*aarch64_adr_shift_sxtw): New pattern. + (aarch64_abd_3): Rename to... + (@aarch64_pred_abd): ...this. + (abd_3): Update accordingly. + (@aarch64_cond_abd): New expander. + (@aarch64_): New pattern. + (@aarch64_): Likewise. + (*mul3_highpart): Rename to... + (@aarch64_pred_): ...this. + (@cond_): New expander. + (*cond__2): New pattern. + (*cond__z): Likewise. + (*3): Rename to... + (@aarch64_pred_): ...this. + (cond_): Add a "@" marker. + (@aarch64_bic, @cond_bic): New expanders. + (*v3): Rename to... + (@aarch64_pred_): ...this. + (@aarch64_sve_): New pattern. + (@cond_): New expander. + (*cond__m): New pattern. + (*cond__z): Likewise. + (@cond_asrd): New expander. + (*cond_asrd_2, *cond_asrd_z): New patterns. + (sdiv_pow23): Expand to *cond_asrd_2. + (*sdiv_pow23): Delete. + (@cond_): New expander. + (*cond__2): New pattern. + (*cond__any): Likewise. + (@aarch64_sve_): New pattern. + (@aarch64_sve_): Likewise. + (*3): Rename to... + (@aarch64_pred_): ...this. + (@aarch64_pred_): New pattern. + (cond_): Add a "@" marker. + (*add3): Rename to... + (@aarch64_pred_add): ...this and add alternatives + for SVE_STRICT_GP. + (@aarch64_pred_): New pattern. + (@cond_): New expander. + (*cond__2): New pattern. + (*cond__any): Likewise. + (*sub3): Rename to... + (@aarch64_pred_sub): ...this and add alternatives + for SVE_STRICT_GP. + (@aarch64_pred_abd): New expander. + (*fabd3): Rename to... + (*aarch64_pred_abd): ...this. + (@aarch64_cond_abd): New expander. + (*mul3): Rename to... + (@aarch64_pred_): ...this and add alternatives + for SVE_STRICT_GP. + (@aarch64_mul_lane_): New pattern. + (*3): Rename and generalize + to... + (@aarch64_pred_): ...this. + (*3_ptest): New pattern. + (*3): Rename to... + (aarch64_pred__z): ...this. + (*3_cc): New pattern. + (*3_ptest): Likewise. + (*3): Rename to... + (aarch64_pred__z): ...this. + (*3_cc): New pattern. + (*3_ptest): Likewise. + (*fma4): Rename to... + (@aarch64_pred_fma): ...this. + (*fnma4): Rename to... + (@aarch64_pred_fnma): ...this. + (@aarch64_dot_prod_lane): New pattern. + (*4): Rename to... + (@aarch64_pred_): ...this. + (cond_): Add a "@" marker. + (@aarch64__lane_): New pattern. + (@aarch64_pred_): Likewise. + (@cond_): New expander. + (*cond__4): New pattern. + (*cond__any): Likewise. + (@aarch64__lane_): Likewise. + (@aarch64_sve_tmad): Likewise. + (vcond_mask_): Add a "@" marker. + (*aarch64_sel_dup): Rename to... + (@aarch64_sel_dup): ...this. + (@aarch64_pred_cmp_wide): New pattern. + (*aarch64_pred_cmp_wide_cc): Likewise. + (*aarch64_pred_cmp_wide_ptest): Likewise. + (@while_ult): Generalize to... + (@while_): ...this. + (*while_ult_cc): Generalize to. + (*while__cc): ...this. + (*while__ptest): New pattern. + (*fcm): Rename to... + (@aarch64_pred_fcm): ...this. Make operand order + match @aarch64_pred_cmp. + (*fcmuo): Rename to... + (@aarch64_pred_fcmuo): ...this. Make operand order + match @aarch64_pred_cmp. + (@aarch64_pred_fac): New expander. + (@vcond_mask_): New pattern. + (fold_extract_last_): Generalize to... + (@fold_extract__): ...this. + (@aarch64_fold_extract_vector__): New pattern. + (*reduc_plus_scal_): Replace with... + (@aarch64_pred_reduc__): ...this pattern, making the + DImode result explicit. + (reduc_plus_scal_): Update accordingly. + (*reduc__scal_): Rename to... + (@aarch64_pred_reduc__): ...this. + (*reduc__scal_): Rename to... + (@aarch64_pred_reduc__): ...this. + (*aarch64_sve_tbl): Rename to... + (@aarch64_sve_tbl): ...this. + (@aarch64_sve_compact): New pattern. + (*aarch64_sve_dup_lane): Rename to... + (@aarch64_sve_dup_lane): ...this. + (@aarch64_sve_dupq_lane): New pattern. + (@aarch64_sve_splice): Likewise. + (aarch64_sve_): Rename to... + (@aarch64_sve_): ...this. + (*aarch64_sve_ext): Rename to... + (@aarch64_sve_ext): ...this. + (aarch64_sve_unpk_): Add a "@" marker. + (*aarch64_sve__nontrunc): Rename + to... + (@aarch64_sve__nontrunc): ...this. + (*aarch64_sve__trunc): + Rename to... + (@aarch64_sve__trunc): + ...this. + (@cond__nontrunc): New expander. + (@cond__trunc): Likewise. + (*cond__trunc): New pattern. + (*aarch64_sve__nonextend): Rename + to... + (@aarch64_sve__nonextend): ...this. + (aarch64_sve__extend): Add + a "@" marker. + (@cond__nonextend): New expander. + (@cond__extend): Likewise. + (*cond__extend): New + pattern. + (*aarch64_sve__trunc): Rename to... + (@aarch64_sve__trunc): ...this. + (@cond__trunc): New expander. + (*cond__trunc): New pattern. + (aarch64_sve__nontrunc): Add a + "@" marker. + (@cond__nontrunc): New expander. + (*cond__nontrunc): New pattern. + (aarch64_sve_punpk_): Add a "@" marker. + (@aarch64_brk): New pattern. + (*aarch64_brk_cc): Likewise. + (*aarch64_brk_ptest): Likewise. + (@aarch64_brk): Likewise. + (*aarch64_brk_cc): Likewise. + (*aarch64_brk_ptest): Likewise. + (@aarch64_sve_): Likewise. + (*aarch64_sve__cc): Likewise. + (*aarch64_sve__ptest): Likewise. + (aarch64_sve_cnt_pat): Likewise. + (@aarch64_sve__pat): Likewise. + (*aarch64_sve_incsi_pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): New expander. + (*aarch64_sve__pat): New pattern. + (@aarch64_sve__pat): Likewise. + (*aarch64_sve_decsi_pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): Likewise. + (@aarch64_sve__pat): New expander. + (*aarch64_sve__pat): New pattern. + (@aarch64_pred_cntp): Likewise. + (@aarch64_sve__cntp): + New expander. + (*aarch64_sve__cntp) + (*aarch64_incsi_cntp): New patterns. + (@aarch64_sve__cntp): + New expander. + (*aarch64_sve__cntp): + New pattern. + (@aarch64_sve__cntp): New expander. + (*aarch64_sve__cntp): New pattern. + (@aarch64_sve__cntp): New expander. + (*aarch64_sve__cntp): New pattern. + (@aarch64_sve__cntp): New expander. + (*aarch64_sve__cntp): New pattern. + (@aarch64_sve__cntp): + New expander. + (*aarch64_sve__cntp) + (*aarch64_incsi_cntp): New patterns. + (@aarch64_sve__cntp): + New expander. + (*aarch64_sve__cntp): + New pattern. + (@aarch64_sve__cntp): New + expander. + (*aarch64_sve__cntp): New pattern. + (@aarch64_sve__cntp): New + expander. + (*aarch64_sve__cntp): New pattern. + (@aarch64_sve__cntp): New + expander. + (*aarch64_sve__cntp): New pattern. + * config/aarch64/arm_sve.h: New file. + * config/aarch64/aarch64-sve-builtins.h: Likewise. + * config/aarch64/aarch64-sve-builtins.cc: Likewise. + * config/aarch64/aarch64-sve-builtins.def: Likewise. + * config/aarch64/aarch64-sve-builtins-base.h: Likewise. + * config/aarch64/aarch64-sve-builtins-base.cc: Likewise. + * config/aarch64/aarch64-sve-builtins-base.def: Likewise. + * config/aarch64/aarch64-sve-builtins-functions.h: Likewise. + * config/aarch64/aarch64-sve-builtins-shapes.h: Likewise. + * config/aarch64/aarch64-sve-builtins-shapes.cc: Likewise. + + 2019-10-29 Richard Sandiford + + * config/aarch64/aarch64-sve.md (@aarch64_sve_rev): + New pattern. + * config/aarch64/aarch64.c (aarch64_evpc_rev_global): Handle all + SVE modes. - * config/s390/s390-builtin-types.def: Add void function type. - * config/s390/s390-builtins.def: Use the function type for the - tbeginc builtin. + 2019-10-29 Richard Sandiford + + * config/aarch64/aarch64.md (FFR_REGNUM, FFRT_REGNUM): New constants. + * config/aarch64/aarch64.h (FIRST_PSEUDO_REGISTER): Bump to + FFRT_REGNUM + 1. + (FFR_REGS, PR_AND_FFR_REGS): New register classes. + (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add entries for them. + * config/aarch64/aarch64.c (pr_or_ffr_regnum_p): New function. + (aarch64_hard_regno_nregs): Handle the new register classes. + (aarch64_hard_regno_mode_ok): Likewise. + (aarch64_regno_regclass): Likewise. + (aarch64_class_max_nregs): Likewise. + (aarch64_register_move_cost): Likewise. + (aarch64_conditional_register_usage): Don't treat FFR and FFRT + as general register_operands. - 2018-06-04 Jim Wilson + 2019-10-29 Martin Liska - * config/riscv/riscv-protos.h (riscv_expand_epilogue): Change bool arg - to int. - * config/riscv/riscv.c (riscv_for_each_saved_reg): New args epilogue - and maybe_eh_return. Change regno to unsigned int. Use new args to - handle EH_RETURN_DATA_REGNO registers properly. - (riscv_expand_prologue): Pass new args to riscv_for_each_saved_reg. - (riscv_expand_epilogue): Update comment. Change argument name and - type. Update code to use new name and type. Pass new args to - riscv_for_each_saved_reg. Only use EH_RETURN_STACKADJ_RTX when - EXCEPTION_RETURN. - * config/riscv/riscv.md (NORMAL_RETURN): New. - (SIBCALL_RETURN, EXCEPTION_RETURN): New. - (epilogue, sibcall_epilogue): Update riscv_expand_epilogue arg. - (eh_return): Call gen_eh_return_internal and emit barrier. - (eh_return_internal): Call riscv_expand_epilogue. + * ggc-common.c: One can't subtract unsigned types + in compare function. - 2018-06-04 Eric Botcazou + 2019-10-29 Martin Liska - * gimple-ssa-store-merging.c (struct merged_store_group): Move up - bit_insertion field and declare can_be_merged_into method. - (merged_store_group::can_be_merged_into): New method. - (imm_store_chain_info::coalesce_immediate): Call it to decide whether - consecutive non-overlapping stores can be merged. Turn MEM_REF stores - into BIT_INSERT_EXPR stores if the group contains a non-MEM_REF store. + * cgraphunit.c (symbol_table::compile): Pass + title as dump_memory_report argument. + * toplev.c (dump_memory_report): New argument. + (finalize): Pass new argument. + * toplev.h (dump_memory_report): Add argument. - 2018-06-04 Richard Biener + 2019-10-29 Martin Liska - PR tree-optimization/85955 - * builtins.c (fold_builtin_sincos): Convert pointers to - destination to appropriate type before dereferencing. + * ggc-common.c: Move Leak to the first column. - 2018-06-04 Segher Boessenkool + 2019-10-29 Martin Liska - * config/rs6000/rs6000.md (abs2 for FLOAT128): Handle IFmode. + * cgraphunit.c (symbol_table::compile): Remove argument + for dump_memory_report. + * ggc-common.c (dump_ggc_loc_statistics): Likewise. + (compare_final): Remove in order to make report + better readable. + * ggc.h (dump_ggc_loc_statistics): Remove argument. + * mem-stats.h (mem_alloc_description::get_list): + Do not pass cmp. + (mem_alloc_description::dump): Likewise here. + * toplev.c (dump_memory_report): Remove final + argument. + (finalize): Likewise. + * toplev.h (dump_memory_report): Remove argument. - 2018-06-04 Richard Sandiford + 2019-10-29 Richard Sandiford - * expr.c (expand_expr_real_1): Force the operand into memory if - its TYPE_MODE is BLKmode and if there is no integer mode for - the number of bits being extracted. + * config/aarch64/aarch64.c (aarch64_sve_cmp_immediate_p) + (aarch64_simd_shift_imm_p): Accept scalars as well as vectors. + * config/aarch64/predicates.md (aarch64_sve_cmp_vsc_immediate) + (aarch64_sve_cmp_vsd_immediate): Accept "const_int", but don't + accept "const". - 2018-06-04 Jakub Jelinek + 2019-10-29 Richard Sandiford - PR target/85832 - PR target/86036 - * config/i386/sse.md (_eq3_1): - Use vptestnm rather than vptestm in (=Yc,v,C) variant. + * coretypes.h (string_int_pair): New typedef. + * langhooks-def.h (LANG_HOOKS_SIMULATE_ENUM_DECL): Define. + (LANG_HOOKS_FOR_TYPES_INITIALIZER): Include it. + * langhooks.h (lang_hooks_for_types::simulate_enum_decl): New hook. - 2018-06-04 Richard Biener + 2019-10-29 Richard Sandiford + + * langhooks.h (lang_hooks::simulate_builtin_function_decl): New hook. + (simulate_builtin_function_decl): Declare. + * langhooks-def.h (LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL): Define. + (LANG_HOOKS_INITIALIZER): Include it. + * langhooks.c (add_builtin_function_common): Rename to... + (build_builtin_function): ...this. Add a location parameter and use + it instead of BUILTINS_LOCATION. Remove the hook parameter and return + the decl instead. + (add_builtin_function): Update accordingly, passing the returned + decl to the lang hook. + (add_builtin_function_ext_scope): Likewise + (simulate_builtin_function_decl): New function. - * tree-cfgcleanup.c (cleanup_tree_cfg_1): Fold into... - (cleanup_tree_cfg_noloop): ... single caller. Do - start_recording_case_labels later. + 2019-10-29 Jakub Jelinek - 2018-06-04 Sebastian Peryt + * doc/install.texi (--enable-offload-targets): Fix up a typo in the + example, use actual names of supported offload targets. - * config/i386/cldemoteintrin.h: Change define from _X86INTRIN_H_INCLUDED - to _IMMINTRIN_H_INCLUDED. - * config/i386/pconfigintrin.h: Ditto. - * config/i386/waitpkgintrin.h: Ditto. - * config/i386/immintrin.h: Add includes for sgxintrin.h, - pconfigintrin.h, waitpkgintrin.h and cldemoteintrin.h. - * config/i386/x86intrin.h: Remove includes for mintrin.h, xmmintrin.h, - emmintrin.h, pmmintrin.h, tmmintrin.h, smmintrin.h, wmmintrin.h, - bmiintrin.h, bmi2intrin.h, lzcntintrin.h, sgxintrin.h, pconfigintrin.h, - waitpkgintrin.h and cldemoteintrin.h. + PR target/92258 + * config/i386/sse.md (iptr): Revert 2019-10-27 change. - 2018-06-04 Richard Biener + 2019-10-28 Martin Sebor - PR tree-optimization/86038 - * tracer.c (find_best_successor): Check probability for - being initialized, bail out if not. + * tree-ssa-strlen.c (get_addr_stridx): Add argument and use it. + (handle_store): Pass argument to get_addr_stridx. - 2018-06-04 Richard Earnshaw + 2019-10-28 Martin Sebor - PR target/86003 - * config/arm/arm-cpus.in (ALL_QUIRKS): Add xscale feature to the list - of bits to ignore when comparing architectures. + PR tree-optimization/92226 + * tree-ssa-strlen.c (compare_nonzero_chars): Return -1 also when + the offset is in the open range outlined by SI's length. + + 2019-10-28 Martin Sebor + + PR c/66970 + * doc/cpp.texi (__has_builtin): Document. + * doc/extend.texi (__builtin_frob_return_addr): Correct spelling. - 2018-06-04 Jakub Jelinek + 2019-10-28 Mihailo Stojanovic + + PR target/82981 + * config/mips/mips.md (mulditi3): Generate patterns for high + doubleword and low doubleword result of multiplication on + MIPS64R6. - PR tree-optimization/69615 - * fold-const.c (merge_ranges): If range1 is - [x, x] and x is the - maximum or minimum of the type, try to merge it also as if - range1 is + [-, x - 1] or + [x + 1, -]. + * config/mips/mips.c (DIRECT_BUILTIN_PURE): New macro. Add a + pure qualifier to the built-in. + (MSA_BUILTIN_PURE): New macro. Add a pure qualifier to the MSA + built-ins. + (struct mips_builtin_description): Add is_pure flag. + (mips_init_builtins): Mark built-in as pure if the flag in the + corresponding mips_builtin_description struct is set. + + * config/mips/mips-msa.md (msa_insert_): Add an + alternative which covers the floating-point input value. Also + forbid the split of insert.d pattern for floating-point values. + + 2019-10-28 Andrew Burgess - PR c++/86025 - * tree.c (inchash::add_expr): Handle IDENTIFIER_NODE. + * config.gcc: Add riscv-sr.o to extra_objs for riscv. + * config/riscv/riscv-sr.c: New file. + * config/riscv/riscv.c (riscv_reorg): New function. + (TARGET_MACHINE_DEPENDENT_REORG): Define. + * config/riscv/riscv.h (SIBCALL_REG_P): Define. + (riscv_remove_unneeded_save_restore_calls): Declare. + * config/riscv/t-riscv (riscv-sr.o): New build rule. - 2018-06-03 Eric Botcazou + 2019-10-28 Prathamesh Kulkarni - PR tree-optimization/86034 - * gimple-ssa-store-merging.c (output_merged_store): Convert the RHS to - the unsigned bitfield type in a bit insertion sequence if it does not - have a larger precision than the bitfield size. - (process_store): Also bypass widening conversions for BIT_INSERT_EXPR. + PR tree-optimization/92163 + * tree-ssa-dse.c (delete_dead_or_redundant_assignment): New param + need_eh_cleanup with default value NULL. Gate on need_eh_cleanup + before calling bitmap_set_bit. + (dse_optimize_redundant_stores): Pass global need_eh_cleanup to + delete_dead_or_redundant_assignment. + (dse_dom_walker::dse_optimize_stmt): Likewise. + * tree-ssa-dse.h (delete_dead_or_redundant_assignment): Adjust prototype. + + 2019-10-28 Prathamesh Kulkarni + + PR middle-end/91272 + * tree-vect-stmts.c (vectorizable_condition): Support + EXTRACT_LAST_REDUCTION with fully-masked loops. + + 2019-10-28 Richard Biener + + PR tree-optimization/92252 + * tree-vect-slp.c (vect_get_and_check_slp_defs): Adjust + STMT_VINFO_REDUC_IDX when swapping operands. + + 2019-10-28 Richard Biener + + PR tree-optimization/92241 + * tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): When + we failed to update the reduction index do not use the pattern + stmts for the reduction chain. + (vectorizable_reduction): When the reduction chain is corrupt, + fail. + * tree-vect-patterns.c (vect_mark_pattern_stmts): Stop when we + fail to update the reduction chain. + + 2019-10-28 Richard Biener + + * tree-vect-loop.c (vect_create_epilog_for_reduction): Use + STMT_VINFO_REDUC_IDX from the actual stmt. + (vect_transform_reduction): Likewise. + (vectorizable_reduction): Compute the reduction chain length, + do not recompute the reduction operand index. Remove no longer + necessary restriction for condition reduction chains. + + 2019-10-28 Uroš Bizjak + + PR target/92225 + * config/i386/sse.md (REDUC_SSE_SMINMAX_MODE): Use TARGET_SSE4_2 + condition for V2DImode. + + 2019-10-28 Uroš Bizjak + + * config/i386/sse.md (sse_cvtss2si_2): + Remove %k operand modifier. + (*vec_extractv2df_1_sse): Remove %q operand modifier. + + 2019-10-28 Ilya Leoshkevich + + PR rtl-optimization/92007 + * cfgcleanup.c (thread_jump): Add an assertion that we don't + call it after reload if hot/cold partitioning has been done. + (class pass_postreload_jump): Rename to + pass_jump_after_combine. + (make_pass_postreload_jump): Rename to + make_pass_jump_after_combine. + * passes.def(pass_postreload_jump): Move before reload, rename + to pass_jump_after_combine. + * tree-pass.h (make_pass_postreload_jump): Rename to + make_pass_jump_after_combine. + + 2019-10-25 Jan Hubicka + + PR ipa/92242 + * ipa-fnsummary.c (ipa_merge_fn_summary_after_inlining): Check + for missing EDGE_REF + * ipa-prop.c (update_jump_functions_after_inlining): Likewise. + + 2019-10-25 Jiufu Guo + + PR tree-optimization/88760 + * config/rs6000/rs6000-common.c (rs6000_option_optimization_table): + Enable -funroll-loops for -O2 and above. + * config/rs6000/rs6000.c (rs6000_option_override_internal): Set + PARAM_MAX_UNROLL_TIMES to 2 and PARAM_MAX_UNROLLED_INSNS to 20, and + do not turn on web and rngreg implicitly, if the unroller is not + explicitly enabled. + + 2019-10-27 Jan Hubicka + + * ipa-prop.c (ipa_propagate_indirect_call_infos): Do not remove + jump functions. + + 2019-10-27 Eric Botcazou + + * cgraph.c (cgraph_node::rtl_info): Fix cut&pasto in comment. + * cgraph.h (cgraph_node::rtl_info): Likewise. + + 2019-10-27 Jan Hubicka + + * ipa-cp.c (propagate_constants_across_call): If args are not available + just drop everything to varying. + (find_aggregate_values_for_callers_subset): Watch for missing + edge summary. + (find_more_scalar_values_for_callers_subs): Likewise. + * ipa-prop.c (ipa_compute_jump_functions_for_edge, + update_jump_functions_after_inlining, propagate_controlled_uses): + Watch for missing summaries. + (ipa_propagate_indirect_call_infos): Remove summary after propagation + is finished. + (ipa_write_node_info): Watch for missing summaries. + (ipa_read_edge_info): Create new ref. + (ipa_edge_args_sum_t): Add remove. + (IPA_EDGE_REF_GET_CREATE): New macro. + * ipa-fnsummary.c (evaluate_properties_for_edge): Watch for missing + edge summary. + (remap_edge_change_prob): Likewise. - 2018-06-03 Kito Cheng + 2019-10-27 Jan Hubicka - * config/nds32/nds32-peephole2.md: Add new patterns for code size. + * ipa-inline-transform.c (inline_call): update function summaries + after expanidng thunk. - 2018-06-03 Chung-Ju Wu + 2019-10-27 Jan Hubicka - * config/nds32/nds32-opts.h (nds32_arch_type): Add ARCH_V3J. - * config/nds32/nds32.c (nds32_option_override): Consider ARCH_V3J. - * config/nds32/nds32.h (TARGET_ISA_V3): Add ARCH_V3J checking. - * config/nds32/nds32.opt (march): Add enum value Value(ARCH_V3J). + * ipa-icf.c (sem_function::merge): Update function summaries. + * ipa-prop.h (ipa_get_param): Do not sanity check for WPA. - 2018-06-03 Chung-Ju Wu + 2019-10-27 Hongtao Liu - * common/config/nds32/nds32-common.c (nds32_option_optimization_table): - Disable -fdelete-null-pointer-checks for ELF toolchain. + * config/i386/sse.md (*_vm3, + _vm3): Remove since + operand already has scalar mode. + (iptr): Remove SF/DF. - 2018-06-02 Chung-Ju Wu - Kito Cheng + 2019-10-26 Segher Boessenkool - * config.gcc (nds32*): Use nds32-linux.opt and nds32-elf.opt. - (nds32le-*-*, nds32be-*-*): Integrate checking process. - (nds32*-*-*): Add glibc and uclibc conditions. - * common/config/nds32/nds32-common.c (nds32_except_unwind_info): New. - (TARGET_EXCEPT_UNWIND_INFO): Define. - * config/nds32/elf.h: New file. - * config/nds32/linux.h: New file. - * config/nds32/nds32-elf.opt: New file. - * config/nds32/nds32-linux.opt: New file. - * config/nds32/nds32-fp-as-gp.c - (pass_nds32_fp_as_gp::gate): Consider TARGET_LINUX_ABI. - * config/nds32/nds32.c (nds32_conditional_register_usage): Consider - TARGET_LINUX_ABI. - (nds32_asm_file_end): Ditto. - (nds32_print_operand): Ditto. - (nds32_insert_attributes): Ditto. - (nds32_init_libfuncs): New function. - (TARGET_HAVE_TLS): Define. - (TARGET_INIT_LIBFUNCS): Define. - * config/nds32/nds32.h (TARGET_DEFAULT_RELAX): Apply different relax - spec content. - (TARGET_ELF): Apply different mcmodel setting. - (LINK_SPEC, LIB_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): The content has - been migrated into elf.h and linux.h files. - * config/nds32/nds32.md (add_pc): Consider TARGET_LINUX_ABI. - * config/nds32/nds32.opt (mvh): Consider TARGET_LINUX_ABI. - (mcmodel): The content has been migrated into nds32-elf.opt and - nds32-linux.opt files. - * config/nds32/t-elf: New file. - * config/nds32/t-linux: New file. - - 2018-06-02 Chung-Ju Wu - Shiva Chen + PR target/91289 + * config/rs6000/rs6000-logue.c (rs6000_emit_allocate_stack): Don't add + an immediate to r0; use r11 instead. Save and restore r11 to r0 around + this. - * config/nds32/constants.md (unspec_volatile_element): Add - UNSPEC_VOLATILE_OMIT_FP_BEGIN and UNSPEC_VOLATILE_OMIT_FP_END. - * config/nds32/nds32-fp-as-gp.c: New implementation of fp_as_gp - optimization. - * config/nds32/nds32-protos.h (nds32_naked_function_p): Declare. - (make_pass_nds32_fp_as_gp): Declare. - * config/nds32/nds32.c (nds32_register_passes): Add fp_as_gp as one - optmization pass. - (nds32_asm_function_end_prologue): Remove unused asm output. - (nds32_asm_function_begin_epilogue): Remove unused asm output. - (nds32_asm_file_start): Output necessary fp_as_gp information. - (nds32_option_override): Adjust register usage. - (nds32_expand_prologue): Consider fp_as_gp situation. - (nds32_expand_prologue_v3push): Consider fp_as_gp situation. - * config/nds32/nds32.md (prologue): Check fp_as_gp_p and naked_p. - (epilogue): Ditto. - (return): Ditto. - (simple_return): Ditto. - (omit_fp_begin): Output special directive for fp_as_gp. - (omit_fp_end): Output special directive for fp_as_gp. - * config/nds32/nds32.opt (mfp-as-gp, mno-fp-as-gp, mforce-fp-as-gp, - mforbid-fp-as-gp): New options. - - 2018-06-01 Mark Wielaard - - * dwarf2out.c (dwarf2out_finish): Remove generation of - DW_AT_loclists_base. - - 2018-06-01 Eric Botcazou - - * gimple-ssa-store-merging.c: Include gimple-fold.h. - (struct store_immediate_info): Document BIT_INSERT_EXPR stores. - (struct merged_store_group): Add bit_insertion field. - (dump_char_array): Use standard hexadecimal format. - (merged_store_group::merged_store_group): Set bit_insertion to false. - (merged_store_group::apply_stores): Use optimal buffer size. Deal - with BIT_INSERT_EXPR stores. Move up code updating the mask and - also print the mask in the dump file. - (pass_store_merging::gate): Minor tweak. - (imm_store_chain_info::coalesce_immediate): Fix wrong association - of stores with groups in dump. Allow coalescing of BIT_INSERT_EXPR - stores with INTEGER_CST stores. - (count_multiple_uses) : New case. - (imm_store_chain_info::output_merged_store): Add try_bitpos variable - and use it throughout. Generate bit insertion sequences if need be. - (pass_store_merging::process_store): Remove redundant condition. - Record stores from a SSA name to a bit-field with BIT_INSERT_EXPR. - - 2018-06-01 Segher Boessenkool - - * config/rs6000/rs6000.c (rs6000_mangle_type): Change the mangling of - the 128-bit floating point types. Fix function comment. - - 2018-06-01 Kyrylo Tkachov + 2019-10-26 Hongtao Liu - * config/aarch64/aarch64-simd.md - (aarch64_simd_vec_unpack_lo_): Use UXTL and SXTL assembler - mnemonics. - (aarch64_simd_vec_unpack_hi_): Use UXTL2 and SXTL2 assembler - mnemonics. + * config/i386/sse.md + (_vm3, + _vm3, + _vmsqrt2, + _vm3, + _vmmaskcmp3): + Change predicates from vector_operand to nonimmediate_operand, + constraints xBm to xm, since scalar operations don't need + memory address alignment. + (avx512f_vmcmp3, + avx512f_vmcmp3_mask): Replace + round_saeonly_nimm_predicate with + round_saeonly_nimm_scalar_predicate. + (fmai_vmfmadd_, fmai_vmfmsub_, + fmai_vmfnmadd_,fmai_vmfnmsub_, + *fmai_fmadd_, *fmai_fmsub_, + *fmai_fnmadd_, *fmai_fnmsub_, + avx512f_vmfmadd__mask3, + avx512f_vmfmadd__maskz_1, + *avx512f_vmfmsub__mask, + avx512f_vmfmsub__mask3, + *avx512f_vmfmsub__maskz_1, + *avx512f_vmfnmadd__mask, + *avx512f_vmfnmadd__mask3, + *avx512f_vmfnmadd__maskz_1, + *avx512f_vmfnmsub__mask, + *avx512f_vmfnmsub__mask3, + *avx512f_vmfnmsub__maskz_1, + cvtusi232, + cvtusi264, ): Replace + round_nimm_predicate with round_nimm_scalr_predicate. + (avx512f_sfixupimm, + avx512f_sfixupimm_mask, + avx512er_vmrcp28, + avx512er_vmrsqrt28, + ): Replace round_saeonly_nimm_predicate with + round_saeonly_nimm_scalar_predicate. + (avx512dq_vmfpclass): Replace + vector_operand with nonimmediate_operand. + * config/i386/subst.md (round_scalar_nimm_predicate, + round_saeonly_scalar_nimm_predicate): Replace + vector_operand with nonimmediate_operand. + + 2019-10-26 Hongtao Liu + + PR target/89071 + * config/i386/i386.md (*rcpsf2_sse): Add + avx_partial_xmm_update, prefer m constraint for TARGET_AVX. + (*rsqrtsf2_sse): Ditto. + (*sqrt2_sse): Ditto. + (sse4_1_round2): separate constraint vm, add + avx_partail_xmm_update, prefer m constraint for TARGET_AVX. + * config/i386/sse.md (*sse_vmrcpv4sf2"): New define_insn used + by pass rpad. + (*_vmsqrt2*): + Ditto. + (*sse_vmrsqrtv4sf2): Ditto. + (*avx512f_rndscale): Ditto. + (*sse4_1_round): Ditto. + (sse4_1_round): Add m constraint and + pointer size modifier since vround support memory operand. + + 2019-10-18 Georg-Johann Lay + + PR target/85969 + * config/avr/gen-avr-mmcu-specs.c (str_prefix_p): Remove unused + static function. + + 2019-10-25 Cesar Philippidis + Tobias Burnus + + * gimplify.c (oacc_default_clause): Privatize fortran common blocks. + (omp_notice_variable): Defer the expansion of DECL_VALUE_EXPR for + common block decls. + + 2019-10-25 Richard Biener + + PR tree-optimization/92222 + * tree-vect-slp.c (_slp_oprnd_info::first_pattern): Remove. + (_slp_oprnd_info::second_pattern): Likewise. + (_slp_oprnd_info::any_pattern): New. + (vect_create_oprnd_info): Adjust. + (vect_get_and_check_slp_defs): Compute whether any stmt is + in a pattern. + (vect_build_slp_tree_2): Avoid building up a node from scalars + if any of the operand defs, not just the first, is in a pattern. + + 2019-10-25 Richard Biener + + * tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail + swapping if we actually have to modify the IL on a shared stmt. + (vect_build_slp_tree_2): Never fail swapping on shared stmts + because we no longer modify the IL. + + 2019-10-25 Martin Liska + + * tree.c (dump_tree_statistics): Use sorted index 'j' and not 'i'. + + 2019-10-25 Richard Sandiford + + * tree-vect-loop.c (vectorizable_reduction): Restrict the + LOOP_VINFO_CAN_FULLY_MASK_P handling to cases that will be + handled by vect_transform_reduction. Allow fully-masked loops + to be used with reduction chains. + * tree-vect-stmts.c (vectorizable_operation): Handle reduction + operations in fully-masked loops. + (vectorizable_condition): Reject EXTRACT_LAST_REDUCTION + operations in fully-masked loops. + + 2019-10-25 Richard Biener + + * tree-vect-loop.c (vectorizable_reduction): Verify + STMT_VINFO_REDUC_IDX on the to be vectorized stmts is set up + correctly. + * tree-vect-patterns.c (vect_mark_pattern_stmts): Transfer + STMT_VINFO_REDUC_IDX from the original stmts to the pattern + stmts. + + 2019-10-24 Jakub Jelinek + + * gimplify.h (omp_construct_selector_matches): Declare. + * gimplify.c (struct gimplify_omp_ctx): Add code member. + (gimplify_call_expr): Call omp_resolve_declare_variant and remap + called function if needed for flag_openmp. + (gimplify_scan_omp_clauses): Set ctx->code. + (omp_construct_selector_matches): New function. + * omp-general.h (omp_constructor_traits_to_codes, + omp_context_selector_matches, omp_resolve_declare_variant): Declare. + * omp-general.c (omp_constructor_traits_to_codes, + omp_context_selector_matches, omp_resolve_declare_variant): New + functions. - 2018-06-01 Richard Sandiford + * config/arc/arc.c (hwloop_optimize): Add missing space in string + literal. + * config/rx/rx.c (rx_print_operand): Likewise. + * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise. + * tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Likewise. + * ipa-sra.c (create_parameter_descriptors, process_scan_results): + Likewise. + * genemit.c (emit_c_code): Likewise. + * plugin.c (try_init_one_plugin): Likewise. Formatting fix. + + 2019-10-24 Jan Hubicka + + * symbols-summary.h (fast_function_summary::release, + fast_call_summary::release): Free m_vector. + + 2019-10-24 Jan Hubicka + + * cgraphunit.c (symbol_table::process_new_functions): Call + ipa_free_size_summary. + * ipa-cp.c (ipcp_cloning_candidate_p): Update. + (devirtualization_time_bonus): Update. + (ipcp_propagate_stage): Update. + * ipa-fnsummary.c (ipa_size_summaries): New. + (ipa_fn_summary_alloc): Alloc size summary. + (dump_ipa_call_summary): Update. + (ipa_dump_fn_summary): Update. + (analyze_function_body): Update. + (compute_fn_summary): Likewise. + (ipa_get_stack_frame_offset): New function. + (inline_update_callee_summaries): Do not update frame offsets. + (ipa_merge_fn_summary_after_inlining): Update frame offsets here; + remove call and function summary. + (ipa_update_overall_fn_summary): Update. + (inline_read_section): Update. + (ipa_fn_summary_write): Update. + (ipa_free_fn_summary): Do not remove summaries. + (ipa_free_size_summary): New. + (release summary pass): Also run at WPA. + * ipa-fnsummary.h (ipa_size_summary): Declare. + (ipa_fn_summary): Remove size, self_size, stack_frame_offset, + estimated_self_stack_size. + (ipa_size_summary_t): New type. + (ipa_size_summaries): Declare. + (ipa_free_size_summary): Declare. + (ipa_get_stack_frame_offset): Declare. + * ipa-icf.c (sem_function::merge): Update. + * ipa-inline-analysis.c (estimate_size_after_inlining): Update. + (estimate_growth): Update. + (growth_likely_positive): Update. + (clone_inlined_nodes): Update. + (inline_call): Update. + * ipa-inline.c (caller_growth_limits): Update. + (edge_badness): Update. + (recursive_inlining): Update. + (inline_small_functions): Update. + (inline_to_all_callers_1): Update. + * ipa-prop.h (ipa_edge_args_sum_t): Update comment. + + 2019-10-24 Segher Boessenkool + + * config/rs6000/altivec.md (altivec_vavgu): Rename to... + (uavg3_ceil): ... This. + (altivec_vavgs): Rename to... + (avg3_ceil): ... This. + * config/rs6000/rs6000-builtin.def (VAVGUB, VAVGSB, VAVGUH, VAVGSH, + VAVGUW, VAVGSW): Adjust. + + 2019-10-24 Nathan Sidwell + + * dumpfile.c (dump_begin): Reorder decls to use RAII. + + 2019-10-24 Martin Liska + + * symbol-summary.h (gt_pch_nx): Mark all functions + with gcc_unreachable as we do not expect to be called. + + 2019-10-24 Richard Biener + + * tree-vect-slp.c (vect_get_and_check_slp_defs): For reduction + chains try harder with operand swapping and instead of + putting a shifted chain into the reduction operands put + a repetition of the final reduction op there as if we'd + reassociate the expression. + + 2019-10-24 Jan Hubicka + + * ipa-reference.c (ipa_reference_optimization_summary_d): Rename + statics_not_read and statics_not_written to statics_read and + statics_written respectively. + (no_module_statics): New static var. + (ipa_reference_get_not_read_global): Rename to ... + (ipa_reference_get_read_global): ... this. + (ipa_reference_get_not_written_global): Rename to ... + (ipa_reference_get_written_global): ... this. + (dump_static_vars_set_to_file): Dump no_module_statics. + (copy_static_var_set): Add for propagation parameter. + (ipa_init): Initialize no_module_statics. + (ipa_ref_opt_summary_t::duplicate): Update. + (ipa_ref_opt_summary_t::remove): Update. + (propagate): Update. + (write_node_summary_p): Look correctly for bitmap differences. + (ipa_reference_write_optimization_summary): Update. + (ipa_reference_read_optimization_summary): Update. + * ipa-reference.h + (ipa_reference_get_not_read_global): Rename to ... + (ipa_reference_get_read_global): ... this. + (ipa_reference_get_not_written_global): Rename to ... + (ipa_reference_get_written_global): ... this. + * tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Update. + (call_may_clobber_ref_p_1): Update. + + 2019-10-24 Jozef Lawrynowicz + + * config/msp430/msp430.c (msp430_hard_regno_nregs_has_padding): Remove + and add comment. + (msp430_hard_regno_nregs_with_padding): Remove. + + 2019-10-24 Jozef Lawrynowicz + + * config/msp430/constraints.md: Allow post_inc for "Ya" constraint. + * config/msp430/msp430.md (430x_shift_left): Use RLAM when the constant + shift amount is between 1 and 4. + (430x_arithmetic_shift_right): Use RRAM when the constant shift amount + is between 1 and 4. + + 2019-10-24 Richard Biener + + PR tree-optimization/92205 + * tree-vect-loop.c (vectorizable_reduction): Restrict + search for alternate vectype_in to lane-reducing patterns + we support. + + 2019-10-24 Richard Biener + + PR tree-optimization/92203 + * treee-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt): + Skip eliminating conversion stmts inserted by insertion. + + 2019-10-24 Ilya Leoshkevich + + * config/s390/s390.c (s390_get_thread_pointer): Use + gen_get_thread_pointer. + (s390_expand_split_stack_prologue): Likewise. + * config/s390/s390.md (UNSPEC_GET_TP): New UNSPEC. + (*get_tp_31): New 31-bit splitter for UNSPEC_GET_TP. + (*get_tp_64): New 64-bit splitter for UNSPEC_GET_TP. + (get_thread_pointer): Use UNSPEC_GET_TP, use + parameterized name. + + 2019-10-24 Richard Biener + + * tree-vect-slp.c (vect_analyze_slp): When reduction group + SLP discovery fails try to handle the reduction as part + of SLP reduction discovery. + + 2019-10-23 Michael Meissner + + * config/rs6000/rs6000-protos.h (rs6000_adjust_insn_length): New + declaration. + * config/rs6000/rs6000.c (rs6000_insn_cost): Use num_insns insn + attribute if it exists, rather than the insn size. If we use the + insn size, adjust the size to remove the extra size that prefixed + instructions take. + (rs6000_adjust_insn_length): New function. + * config/rs6000/rs6000.h (ADJUST_INSN_LENGTH): New target hook to + update the instruction sized if prefixed instructions are used. + * config/rs6000/rs6000.md (prefixed_length attribute): Delete. + (non_prefixed_length attribute): Delete. + (num_insns attribute): New insn attribute to return the number of + instructions. + (max_prefixed_insns attribute): New insn attribute to return the + maximum number of prefixed instructions in an insn. + (length attribute): Do not adjust for prefix instructions here, + punt to ADJUST_INSN_LENGTH. + (mov_64bit): Set max_prefixed_insns and num_insns. + (movtd_64bit_nodm): Set max_prefixed_insns and num_insns. + (mov_ppc64): Set max_prefixed_insns and num_insns. + * config/rs6000/vsx.md: (vsx_mov_64bit): Set + max_prefixed_insns and num_insns. + + * config/rs6000/rs6000.md (mov_64bit_dm): Reformat. + (movtd_64bit_nodm): Reformat. + (mov_32bit): Reformat. + (mov_softfloat): Reformat. + (FMOVE128_GPR splitter): Reformat. + (DIFD splitter): Reformat. + (TI2 splitter): Reformat. + * config/rs6000/predicates.md (lwa_operand): If the bottom two + bits of the offset for the memory address are non-zero, use PLWA + if prefixed instructions are available. + + 2019-10-23 Jan Hubicka + + * lto-streamer-out.c (cmp_symbol_files): Watch for overflow. + + 2019-10-23 Jan Hubicka + + * ipa-reference.c (varpool_removal_hook, ipa_reference_c_finalize): Fix + previous patch. + + 2019-10-23 Jan Hubicka + + * lto-streamer-out.c (output_constructor): Push CTORS_OUT timevar. + (cmp_symbol_files): New. + (lto_output): Copy sections in file order. + * lto-streamer.h (lto_file_decl_data): Add field order. + + 2019-10-23 Jan Hubicka + + * ipa-reference.h (ipa_reference_var_uid): Move offline. + * ipa-reference.c (reference_vars_map_t): new type. + (ipa_reference_vars_map, ipa_reference_vars_uids): New static vars. + (ipa_reference_var_uid): Implement. + (varpool_node_hooks): New static var. + (varpool_removal_hook): New function. + (is_improper): Do not check bitmap for id==-1 + (get_static_name): Update. + (ipa_init): Initialize new datastructures. + (analyze_function): Do not recompute ids. + (propagate): Free reference_vars_to_consider. + (stream_out_bitmap): Update. + (ipa_reference_read_optimization_summary): Update. + + 2019-10-23 qing zhao + + PR gcov-profile/91971 + * coverage.c (coverage_init): Mangle the full path of filename when + filename is a absolute path. + + 2019-10-23 Jozef Lawrynowicz + + * config/msp430/msp430-protos.h (msp430_has_hwmult): New. + * config/msp430/msp430.c (msp430_no_hwmult): Remove. + (msp430_has_hwmult): New. + (msp430_output_labelref): + s/msp430_hwmult_type != MSP430_HWMULT_NONE/msp430_has_hwmult ()/ + * config/msp430/msp430.md (mulhisi3): Likewise. + (umulhisi3): Likewise. + (mulsidi3): Likewise. + (umulsidi3): Likewise. - PR tree-optimization/85989 - * gimple-ssa-backprop.c (backprop::m_visited_phis): New member - variable. - (backprop::intersect_uses): Check it when deciding whether this - is a backedge reference. - (backprop::process_block): Add each phi to m_visited_phis - after visiting it, then clear it at the end. + 2019-10-23 Jan Hubicka - 2018-06-01 Richard Biener + PR ipa/92074 + * params.def (inline-heuristics-hint-percent): Set to 600. - * tree-vectorizer.h (vect_dr_stmt): New function. - (vect_get_load_cost): Adjust. - (vect_get_store_cost): Likewise. - * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): - Use vect_dr_stmt instead of DR_SMTT. - (vect_record_base_alignments): Likewise. - (vect_calculate_target_alignment): Likewise. - (vect_compute_data_ref_alignment): Likewise and make static. - (vect_update_misalignment_for_peel): Likewise. - (vect_verify_datarefs_alignment): Likewise. - (vector_alignment_reachable_p): Likewise. - (vect_get_data_access_cost): Likewise. Pass down - vinfo to vect_get_load_cost/vect_get_store_cost instead of DR. - (vect_get_peeling_costs_all_drs): Likewise. - (vect_peeling_hash_get_lowest_cost): Likewise. - (vect_enhance_data_refs_alignment): Likewise. - (vect_find_same_alignment_drs): Likewise. - (vect_analyze_data_refs_alignment): Likewise. - (vect_analyze_group_access_1): Likewise. - (vect_analyze_group_access): Likewise. - (vect_analyze_data_ref_access): Likewise. - (vect_analyze_data_ref_accesses): Likewise. - (vect_vfa_segment_size): Likewise. - (vect_small_gap_p): Likewise. - (vectorizable_with_step_bound_p): Likewise. - (vect_prune_runtime_alias_test_list): Likewise. - (vect_analyze_data_refs): Likewise. - (vect_supportable_dr_alignment): Likewise. - * tree-vect-loop-manip.c (get_misalign_in_elems): Likewise. - (vect_gen_prolog_loop_niters): Likewise. - * tree-vect-loop.c (vect_analyze_loop_2): Likewise. - * tree-vect-patterns.c (vect_recog_bool_pattern): Do not - modify DR_STMT. + 2019-10-23 Richard Biener + + PR tree-optimization/65930 + * tree-vect-loop.c (check_reduction_path): Allow conversions + that only change the sign. + (vectorizable_reduction): Relax latch def stmts we handle further. + + 2019-10-23 Jakub Jelinek + + PR debug/90231 + * tree-ssa-loop-ivopts.c (get_debug_computation_at): New function. + (remove_unused_ivs): Use it instead of get_computation_at. When + choosing best candidate, only consider candidates where + get_debug_computation_at actually returns non-NULL. + + 2019-10-23 Eric Botcazou + + PR tree-optimization/92131 + * tree-vrp.c (extract_range_from_plus_minus_expr): If the resulting + range would be symbolic, drop to varying for any explicit overflow + in the constant part or if neither range is a singleton. + + 2019-10-23 Martin Liska + + PR middle-end/81669 + * fibonacci_heap.h (fibonacci_node::fibonacci_node): + Initialize m_data. + + 2019-10-23 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Use + int_mode_for_mode rather than mode_for_int_vector for scalars. + + 2019-10-23 Richard Biener + + PR tree-optimization/92179 + * tree-vect-stmts.c (vectorizable_shift): For shift args + that are all the same remove type restriction in the SLP case. + Adjust SLP code to handle converting of the shift arg to + only apply in case the modes are different. + + 2019-10-23 Martin Liska + + PR ipa/91969 + * ipa-inline.c (recursive_inlining): Do not print + when curr->count is not initialized. + + 2019-10-23 Richard Biener + + * tree-vect-slp.c (vect_build_slp_tree_2): Do not build + op from scalars in case there's a constant operand in its + definition. + + 2019-10-23 Iain Sandoe + + * config/rs6000/darwin.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Guard + against out of range max skip or log values. + + 2019-10-22 Giuliano Belinassi + + * cgraph.c (dump_graphviz): Change name to dump_name + + 2019-10-22 Richard Earnshaw + + * config/arm/arm.md (rsbsi_carryin_reg): New pattern. + * config/arm/arm.c (arm_rtx_costs_internal, case MINUS): Handle + subtraction from a carry operation. + + 2019-10-22 Richard Earnshaw + + * config/arm/predicates.md (arm_borrow_operation): Handle CC_ADCmode. + + 2019-10-22 Richard Biener + + PR tree-optimization/92173 + * tree-vect-loop.c (vectorizable_reduction): If + vect_transform_reduction cannot handle code-generation try without + the single-def-use-cycle optimization. Pass optab_vector to + optab_for_tree_code to get vector shifts as that's what we'd + generate. + + 2019-10-22 Michael Matz + + PR middle-end/90796 + * gimple-loop-jam.c (any_access_function_variant_p): New function. + (adjust_unroll_factor): Use it to constrain safety, new parameter. + (tree_loop_unroll_and_jam): Adjust call and profitable unroll factor. + + 2019-10-22 Richard Biener + + PR tree-optimization/92173 + * tree-vect-loop.c (vectorizable_reduction): If + vect_transform_reduction cannot handle code-generation try without + the single-def-use-cycle optimization. Pass optab_vector to + optab_for_tree_code to get vector shifts as that's what we'd + generate. + + 2019-10-22 Martin Liska + + * diagnostic-format-json.cc (json_from_expanded_location): + Use json::integer_number. + * gcov.c (output_intermediate_json_line): Use new + json::integer_number. + (output_json_intermediate_file): Likewise. + * json.cc (number::print): Move to ... + (float_number::print): ... this. + (integer_number::print): New. + (test_writing_numbers): Move to ... + (test_writing_float_numbers): ... this. + (test_writing_integer_numbers): New. + (json_cc_tests): Register test_writing_integer_numbers. + * json.h (class value): Add forward declaration + for float_number and integer_number. + (enum kind): Add JSON_INTEGER and JSON_FLOAT. + (class number): Move to ... + (class float_number): ... this. + (class integer_number): New. + * optinfo-emit-json.cc (optrecord_json_writer::impl_location_to_json): + Use json::integer_number. + (optrecord_json_writer::location_to_json): Likewise. + (optrecord_json_writer::profile_count_to_json): Likewise. + (optrecord_json_writer::pass_to_json): Likewise. + + 2019-10-22 Richard Sandiford + + * tree-vect-slp.c (vect_slp_bb_region): Check whether + autodetected_vector_size rather than vector_size is zero. + * tree-vect-loop.c (vect_analyze_loop): Likewise. + Set autodetected_vector_size immediately after calling + vect_analyze_loop_2. Check for a fatal error before advancing + next_size. + + 2019-10-21 Jason Merrill + + * lock-and-run.sh: Check for process existence rather than timeout. + + 2019-10-21 Jozef Lawrynowicz + + * expr.c (expand_expr_real_2): Don't widen constant op1 when expanding + widening multiplication. + + 2019-10-21 Richard Earnshaw + + * config/arm/iterators.md (t2_binop0): Fix typo in comment. + * config/arm/arm.md (addsi3_carryin_shift): Simplify selection of the + type attribute. + (subsi3_carryin_shift): Separate into register and constant controlled + alternatives. Use shift_amount_operand for operand 4. Set shift + attribute and simplify type attribute. + (subsi3_carryin_shift_alt): Likewise. + (rsbsi3_carryin_shift): Likewise. + (rsbsi3_carryin_shift_alt): Likewise. + (andsi_not_shiftsi_si): Enable for TARGET_32BIT. Separate constant + and register controlled shifts into distinct alternatives. + (andsi_not_shiftsi_si_scc_no_reuse): Likewise. + (andsi_not_shiftsi_si_scc): Likewise. + (arm_cmpsi_negshiftsi_si): Likewise. + (not_shiftsi): Remove redundant M constraint from alternative 1. + (not_shiftsi_compare0): Likewise. + (arm_cmpsi_insn): Remove redundant alternative 2. + (cmpsi_shift_swp): Likewise. + (sub_shiftsi): Likewise. + (sub_shiftsi_compare0_scratch): Likewise. + * config/arm/thumb2.md (thumb_andsi_not_shiftsi_si): Delete pattern. + (thumb2_cmpsi_neg_shiftsi): Likewise. + + 2019-10-21 Richard Biener + + PR tree-optimization/92162 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Lookup + STMT_VINFO_REDUC_IDX in reduc_info. + * tree-vect-stmts.c (vectorizable_condition): Likewise. + + 2019-10-21 Richard Biener + + * tree-vectorizer.h (_slp_tree::ops): New member. + (SLP_TREE_SCALAR_OPS): New. + (vect_get_slp_defs): Adjust prototype. + * tree-vect-slp.c (vect_free_slp_tree): Release + SLP_TREE_SCALAR_OPS. + (vect_create_new_slp_node): Initialize it. New overload for + initializing by an operands array. + (_slp_oprnd_info::ops): New member. + (vect_create_oprnd_info): Initialize it. + (vect_free_oprnd_info): Release it. + (vect_get_and_check_slp_defs): Populate the operands array. + Do not swap operands in the IL when not necessary. + (vect_build_slp_tree_2): Build SLP nodes for invariant operands. + Record SLP_TREE_SCALAR_OPS for all invariant nodes. Also + swap operands in the operands array. Do not swap operands in + the IL. + (vect_slp_rearrange_stmts): Re-arrange SLP_TREE_SCALAR_OPS as well. + (vect_gather_slp_loads): Fix. + (vect_detect_hybrid_slp_stmts): Likewise. + (vect_slp_analyze_node_operations_1): Search for a internal + def child for computing reduction SLP_TREE_NUMBER_OF_VEC_STMTS. + (vect_slp_analyze_node_operations): Skip ops-only stmts for + the def-type push/pop dance. + (vect_get_constant_vectors): Compute number_of_vectors here. + Use SLP_TREE_SCALAR_OPS and simplify greatly. + (vect_get_slp_vect_defs): Use gimple_get_lhs also for PHIs. + (vect_get_slp_defs): Simplify greatly. + * tree-vect-loop.c (vectorize_fold_left_reduction): Simplify. + (vect_transform_reduction): Likewise. + * tree-vect-stmts.c (vect_get_vec_defs): Simplify. + (vectorizable_call): Likewise. + (vectorizable_operation): Likewise. + (vectorizable_load): Likewise. + (vectorizable_condition): Likewise. + (vectorizable_comparison): Likewise. + + 2019-10-21 Richard Biener + + PR tree-optimization/92161 + * tree-vect-loop.c (vect_analyze_loop_2): Reset stmts def-type + for reductions. + + 2019-10-21 Kyrylo Tkachov + + * config/aarch64/aarch64.md (UNSPEC_RNDR, UNSPEC_RNDRRS): Define. + (aarch64_rndr): New define_insn. + (aarch64_rndrrs): Likewise. + * config/aarch64/aarch64.h (AARCH64_ISA_RNG): Define. + (TARGET_RNG): Likewise. + * config/aarch64/aarch64.c (aarch64_expand_builtin): Use IGNORE + argument. + * config/aarch64/aarch64-protos.h (aarch64_general_expand_builtin): + Add fourth argument in prototype. + * config/aarch64/aarch64-builtins.c (enum aarch64_builtins): + Add AARCH64_BUILTIN_RNG_RNDR, AARCH64_BUILTIN_RNG_RNDRRS. + (aarch64_init_rng_builtins): Define. + (aarch64_general_init_builtins): Call aarch64_init_rng_builtins. + (aarch64_expand_rng_builtin): Define. + (aarch64_general_expand_builtin): Use IGNORE argument, handle + RNG builtins. + * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define + __ARM_FEATURE_RNG when TARGET_RNG. + * config/aarch64/arm_acle.h (__rndr, __rndrrs): Define. + + 2019-10-21 Andre Vieira + + * tree-vect-stmts (ensure_base_align): Only change alignment if new + alignment is more restrictive. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (vec_info::vector_size): New member variable. + (vect_update_max_nunits): Update comment. + (current_vector_size): Delete. + * tree-vect-stmts.c (current_vector_size): Likewise. + (get_vectype_for_scalar_type): Use vec_info::vector_size instead + of current_vector_size. + (get_mask_type_for_scalar_type): Likewise. + * tree-vectorizer.c (try_vectorize_loop_1): Likewise. + * tree-vect-loop.c (vect_update_vf_for_slp): Likewise. + (vect_analyze_loop, vect_halve_mask_nunits): Likewise. + (vect_double_mask_nunits, vect_transform_loop): Likewise. + * tree-vect-slp.c (can_duplicate_and_interleave_p): Likewise. + (vect_make_slp_decision, vect_slp_bb_region): Likewise. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (vect_double_mask_nunits): Take a vec_info. + * tree-vect-loop.c (vect_double_mask_nunits): Likewise. + * tree-vect-stmts.c (supportable_narrowing_operation): Update call + accordingly. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (vect_halve_mask_nunits): Take a vec_info. + * tree-vect-loop.c (vect_halve_mask_nunits): Likewise. + * tree-vect-loop-manip.c (vect_maybe_permute_loop_masks): Update + call accordingly. + * tree-vect-stmts.c (supportable_widening_operation): Likewise. + + 2019-10-21 Richard Sandiford + + * tree-vect-loop-manip.c (vect_maybe_permute_loop_masks): Take + a loop_vec_info. + (vect_set_loop_condition_masked): Update call accordingly. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (supportable_narrowing_operation): Take a vec_info. + * tree-vect-stmts.c (supportable_narrowing_operation): Likewise. + (simple_integer_narrowing): Update call accordingly. + (vectorizable_conversion): Likewise. + + 2019-10-21 Richard Sandiford + + * tree-vect-stmts.c (simple_integer_narrowing): Take a vec_info. + (vectorizable_call): Update call accordingly. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (can_duplicate_and_interleave_p): Take a vec_info. + * tree-vect-slp.c (can_duplicate_and_interleave_p): Likewise. + (duplicate_and_interleave): Update call accordingly. + * tree-vect-loop.c (vectorizable_reduction): Likewise. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (duplicate_and_interleave): Take a vec_info. + * tree-vect-slp.c (duplicate_and_interleave): Likewise. + (vect_get_constant_vectors): Update call accordingly. + * tree-vect-loop.c (get_initial_defs_for_reduction): Likewise. + + 2019-10-21 Richard Sandiford + + * tree-vectorizer.h (get_vectype_for_scalar_type): Take a vec_info. + * tree-vect-stmts.c (get_vectype_for_scalar_type): Likewise. + (vect_prologue_cost_for_slp_op): Update call accordingly. + (vect_get_vec_def_for_operand, vect_get_gather_scatter_ops) + (vect_get_strided_load_store_ops, vectorizable_simd_clone_call) + (vect_supportable_shift, vect_is_simple_cond, vectorizable_comparison) + (get_mask_type_for_scalar_type): Likewise. + (vect_get_vector_types_for_stmt): Likewise. + * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise. + * tree-vect-loop.c (vect_determine_vectorization_factor): Likewise. + (get_initial_def_for_reduction, build_vect_cond_expr): Likewise. + * tree-vect-patterns.c (vect_supportable_direct_optab_p): Likewise. + (vect_split_statement, vect_convert_input): Likewise. + (vect_recog_widen_op_pattern, vect_recog_pow_pattern): Likewise. + (vect_recog_over_widening_pattern, vect_recog_mulhs_pattern): Likewise. + (vect_recog_average_pattern, vect_recog_cast_forwprop_pattern) + (vect_recog_rotate_pattern, vect_recog_vector_vector_shift_pattern) + (vect_synth_mult_by_constant, vect_recog_mult_pattern): Likewise. + (vect_recog_divmod_pattern, vect_recog_mixed_size_cond_pattern) + (check_bool_pattern, adjust_bool_pattern_cast, adjust_bool_pattern) + (search_type_for_mask_1, vect_recog_bool_pattern): Likewise. (vect_recog_mask_conversion_pattern): Likewise. - (vect_try_gather_scatter_pattern): Likewise. - * tree-vect-stmts.c (vect_model_store_cost): Pass stmt_info - to vect_get_store_cost. - (vect_get_store_cost): Get stmt_info instead of DR. - (vect_model_load_cost): Pass stmt_info to vect_get_load_cost. - (vect_get_load_cost): Get stmt_info instead of DR. - - 2018-06-01 Richard Biener - - PR middle-end/86017 - * gimple-fold.c (var_decl_component_p): Also allow offsetted - vars wrapped in MEM_REFs. - - 2018-06-01 Richard Sandiford - - * config/aarch64/aarch64.c (aarch64_ira_change_pseudo_allocno_class): - Fix subreg tests so that we only return a choice between - GENERAL_REGS and FP_REGS if the original classes included both. - - 2018-06-01 Richard Biener - - PR ipa/85960 - * tree-ssa-structalias.c (get_function_part_constraint): - Handle NULL fi->decl. - (find_func_aliases_for_call): Properly handle indirect - fi from direct call. - (find_func_clobbers): Likewise. - (ipa_pta_execute): Likewise. - (create_variable_info_for): For functions that are ifunc_resolver - resolve to a varinfo that contains the result of the resolver call. - (associate_varinfo_to_alias): Do not treat ifunc resolvers as - aliases. - - 2018-05-31 Michael Collison - - * config/aarch64/aarch64.md: - (*fix_to_zero_extenddfdi2): New pattern. - * gcc.target/aarch64/fix_extend1.c: New testcase. - - 2018-05-31 Qing Zhao - - PR middle-end/78809 - PR middle-end/83026 - * builtins.c (expand_builtin): Add the handling of BUILT_IN_STRCMP_EQ - and BUILT_IN_STRNCMP_EQ. - * builtins.def: Add new builtins BUILT_IN_STRCMP_EQ and - BUILT_IN_STRNCMP_EQ. - * gimple-fold.c (gimple_fold_builtin_string_compare): Add the - handling of BUILTIN_IN_STRCMP_EQ and BUILT_IN_STRNCMP_EQ. - (gimple_fold_builtin): Likewise. - * tree-ssa-strlen.c (compute_string_length): New function. - (determine_min_obsize): New function. - (handle_builtin_string_cmp): New function to handle calls to - string compare functions. - (strlen_optimize_stmt): Add handling to builtin string compare - calls. - * tree-ssa-structalias.c (find_func_aliases_for_builtin_call): - Add the handling of BUILT_IN_STRCMP_EQ and BUILT_IN_STRNCMP_EQ. - * tree.c (build_common_builtin_nodes): Add new defines of - BUILT_IN_STRNCMP_EQ and BUILT_IN_STRCMP_EQ. + (vect_add_conversion_to_pattern): Likewise. + (vect_recog_gather_scatter_pattern): Likewise. + * tree-vect-slp.c (vect_build_slp_tree_2): Likewise. + (vect_analyze_slp_instance, vect_get_constant_vectors): Likewise. - 2018-05-31 Jakub Jelinek + 2019-10-21 Richard Sandiford - PR target/85984 - * bb-reorder.c (pass_partition_blocks::gate): Return false for - functions with naked attribute. + * tree-vectorizer.h (get_mask_type_for_scalar_type): Take a vec_info. + * tree-vect-stmts.c (get_mask_type_for_scalar_type): Likewise. + (vect_check_load_store_mask): Update call accordingly. + (vect_get_mask_type_for_stmt): Likewise. + * tree-vect-patterns.c (check_bool_pattern): Likewise. + (search_type_for_mask_1, vect_recog_mask_conversion_pattern): Likewise. + (vect_convert_mask_for_vectype): Likewise. - 2018-05-31 Uros Bizjak + 2019-10-21 Richard Sandiford - * config/i386/sse.md (avx_vec_concat): - Substitute concat_tg_mode mode attribute with xtg_mode. - (avx512dq_broadcast_1): Ditto. - (concat_tg_mode): Remove mode attribute. + * tree-vect-patterns.c (vect_supportable_direct_optab_p): Take + a vec_info. + (vect_recog_dot_prod_pattern): Update call accordingly. + (vect_recog_sad_pattern, vect_recog_pow_pattern): Likewise. + (vect_recog_widen_sum_pattern): Likewise. - 2018-05-31 Martin Sebor + 2019-10-21 Richard Sandiford - PR c/82063 - * calls.c (alloc_max_size): Correct a logic error/typo. - Treat excessive arguments as infinite. Warn for invalid arguments. - * doc/invoke.texi (-Walloc-size-larger-than): Update. + * tree-vectorizer.h (vect_supportable_shift): Take a vec_info. + * tree-vect-stmts.c (vect_supportable_shift): Likewise. + * tree-vect-patterns.c (vect_synth_mult_by_constant): Update call + accordingly. - 2018-05-31 H.J. Lu + 2019-10-21 Richard Sandiford + + * tree-vectorizer.c (get_vec_alignment_for_array_type): Use + get_vectype_for_scalar_type_and_size instead of + get_vectype_for_scalar_type. + + 2019-10-20 Bernd Edlinger + + * common.opt (-fcommon): Fix description. + + 2019-10-20 Jakub Jelinek + + * config/i386/i386-protos.h (ix86_pre_reload_split): Declare. + * config/i386/i386.c (ix86_pre_reload_split): New function. + * config/i386/i386.md (*fix_trunc_i387_1, *add3_eq, + *add3_ne, *add3_eq_0, *add3_ne_0, *add3_eq, + *add3_ne, *add3_eq_1, *add3_eq_0, *add3_ne_0, + *anddi3_doubleword, *andndi3_doubleword, *di3_doubleword, + *one_cmpldi2_doubleword, *ashl3_doubleword_mask, + *ashl3_doubleword_mask_1, *ashl3_mask, *ashl3_mask_1, + *3_mask, *3_mask_1, + *3_doubleword_mask, + *3_doubleword_mask_1, *3_mask, + *3_mask_1, *_mask, *_mask_1, + *btr_mask, *btr_mask_1, *jcc_bt, *jcc_bt_1, + *jcc_bt_mask, *popcounthi2_1, frndintxf2_, + *fist2__1, *3_1, *di3_doubleword): + Use ix86_pre_reload_split instead of can_create_pseudo_p in condition. + * config/i386/sse.md (*sse4_1_v8qiv8hi2_2, + *avx2_v8qiv8si2_2, + *sse4_1_v4qiv4si2_2, + *sse4_1_v4hiv4si2_2, + *avx512f_v8qiv8di2_2, + *avx2_v4qiv4di2_2, *avx2_v4hiv4di2_2, + *sse4_1_v2hiv2di2_2, + *sse4_1_v2siv2di2_2, sse4_2_pcmpestr, + sse4_2_pcmpistr): Likewise. + + 2019-10-20 Gerald Pfeifer + + * doc/install.texi (Configuration, --enable-objc-gc): hboehm.info + now defaults to https. + + 2019-10-20 Jan Hubicka + + * tree-ssa-alias.c (nonoverlapping_refs_since_match_p): Do not + skip non-zero array accesses. + + 2019-10-20 Richard Sandiford + + * tree-vect-slp.c (vect_slp_analyze_bb_1): Take a bb_vec_info + and return a boolean success value. Move the allocation and + initialization of the bb_vec_info to... + (vect_slp_bb_region): ...here. Update call accordingly. + (vect_slp_bb): Apply PARAM_SLP_MAX_INSNS_IN_BB here rather + than in vect_slp_analyze_bb_1. + + 2019-10-20 Richard Sandiford + + * tree-vect-slp.c (vect_slp_analyze_bb_1): Call save_datarefs + when processing the given datarefs for the first time and + check_datarefs subsequently. + (vect_slp_bb_region): New function, split out of... + (vect_slp_bb): ...here. Don't recompute the region bounds and + dataref sets when retrying with a different vector size. + + 2019-10-19 Jakub Jelinek + Uroš Bizjak + + PR target/92140 + * config/i386/predicates.md (int_nonimmediate_operand): New special + predicate. + * config/i386/i386.md (*add3_eq, *add3_ne, + *add3_eq_0, *add3_ne_0, *sub3_eq, *sub3_ne, + *sub3_eq_1, *sub3_eq_0, *sub3_ne_0): New + define_insn_and_split patterns. - PR target/85829 - * config/i386/x86-tune.def: Re-enable partial_reg_dependency - and movx for Haswell. + 2019-10-19 Iain Sandoe - 2018-05-31 Chung-Lin Tang - Cesar Philippidis + * config/rs6000/rs6000.md: Delete out--of-date comment about + special-casing integer loads. - PR middle-end/85879 - * gimplify.c (gimplify_adjust_omp_clauses): Add 'remove = true' - when emitting error on private/firstprivate reductions. - * omp-low.c (lower_omp_target): Avoid reference-type processing - on pointers for firstprivate clause. + 2019-10-19 JeanHeyd Meneide - 2018-05-31 Sameera Deshpande + * escaped_string.h (escaped_string): New header. + * tree.c (escaped_string): Remove escaped_string class. - * config/aarch64/aarch64-simd-builtins.def (ld1x3): New. - (st1x2): Likewise. - (st1x3): Likewise. - * config/aarch64/aarch64-simd.md - (aarch64_ld1x3): New pattern. - (aarch64_ld1_x3_): Likewise - (aarch64_st1x2): Likewise - (aarch64_st1_x2_): Likewise - (aarch64_st1x3): Likewise - (aarch64_st1_x3_): Likewise - * config/aarch64/arm_neon.h (vld1_u8_x3): New function. - (vld1_s8_x3): Likewise. - (vld1_u16_x3): Likewise. - (vld1_s16_x3): Likewise. - (vld1_u32_x3): Likewise. - (vld1_s32_x3): Likewise. - (vld1_u64_x3): Likewise. - (vld1_s64_x3): Likewise. - (vld1_f16_x3): Likewise. - (vld1_f32_x3): Likewise. - (vld1_f64_x3): Likewise. - (vld1_p8_x3): Likewise. - (vld1_p16_x3): Likewise. - (vld1_p64_x3): Likewise. - (vld1q_u8_x3): Likewise. - (vld1q_s8_x3): Likewise. - (vld1q_u16_x3): Likewise. - (vld1q_s16_x3): Likewise. - (vld1q_u32_x3): Likewise. - (vld1q_s32_x3): Likewise. - (vld1q_u64_x3): Likewise. - (vld1q_s64_x3): Likewise. - (vld1q_f16_x3): Likewise. - (vld1q_f32_x3): Likewise. - (vld1q_f64_x3): Likewise. - (vld1q_p8_x3): Likewise. - (vld1q_p16_x3): Likewise. - (vld1q_p64_x3): Likewise. - (vst1_s64_x2): Likewise. - (vst1_u64_x2): Likewise. - (vst1_f64_x2): Likewise. - (vst1_s8_x2): Likewise. - (vst1_p8_x2): Likewise. - (vst1_s16_x2): Likewise. - (vst1_p16_x2): Likewise. + 2019-10-18 Martin Sebor + + PR tree-optimization/92157 + * tree-ssa-strlen.c (handle_builtin_string_cmp): Be prepared for + compute_string_length to return a negative result. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (negv3): New expansion rule. + (negvsi3, negvdi3): Delete. + (negdi2_compare): Delete. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (subvdi4): Decompose calculation into 32-bit + operations. + (subdi3_compare1): Delete pattern. + (subvsi3_borrow): New insn pattern. + (subvsi3_borrow_imm): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (subv4): Delete. + (subvdi4): New expander pattern. + (subvsi4): Likewise. Handle some immediate values. + (subvsi3_intmin): New insn pattern. + (subvsi3): Likewise. + (subvsi3_imm1): Likewise. + * config/arm/arm.c (select_cc_mode): Also allow minus for CC_V + idioms. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (usubvdi4): Allow registers or integers for + incoming operands. Early split the calculation into SImode + operations. + (usubvsi3_borrow): New insn pattern. + (usubvsi3_borrow_imm): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (usubv4): Delete expansion. + (usubvsi4): New pattern. Allow some immediate values for inputs. + (usubvdi4): New pattern. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (arm_select_cc_mode): Allow either the first + or second operand of the PLUS inside a DImode equality test to be + sign-extend when selecting CC_Vmode. + * config/arm/arm.md (addvdi4): Early-split the operation into SImode + instructions. + (addsi3_cin_vout_reg, addsi3_cin_vout_imm, addsi3_cin_vout_0): New + expand patterns. + (addsi3_cin_vout_reg_insn, addsi3_cin_vout_imm_insn): New patterns. + (addsi3_cin_vout_0): Likewise. + (adddi3_compareV): Delete. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (addsi3_compareV_reg_nosum): New insn. + (addsi3_compareV_imm_nosum): New insn. Also add peephole2 patterns + to transform this back into the summation version when that leads + to smaller code. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (addv4): Delete. + (addvsi4): New pattern. Handle immediate values that the architecture + supports. + (addvdi4): New pattern. + (addsi3_compareV): Rename to ... + (addsi3_compareV_reg): ... this. Add constraints for thumb2 variants + and use COMPARE rather than NE. + (addsi3_compareV_imm): New pattern. + * config/arm/arm.c (arm_select_cc_mode): Return CC_Vmode for + a signed-overflow check. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm-modes.def (CC_ADC): New CC mode. + * config/arm/arm.c (arm_select_cc_mode): Detect selection of + CC_ADCmode. + (maybe_get_arm_condition_code): Handle CC_ADCmode. + * config/arm/arm.md (uaddvdi4): Early expansion of unsigned addition + with overflow. + (addsi3_cin_cout_reg, addsi3_cin_cout_imm, addsi3_cin_cout_0): New + expand patterns. + (addsi3_cin_cout_reg_insn, addsi3_cin_cout_0_insn): New insn patterns + (addsi3_cin_cout_imm_insn): Likewise. + (adddi3_compareC): Delete insn. + * config/arm/predicates.md (arm_carry_operation): Handle CC_ADCmode. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (adddi3): Call gen_addsi3_compare_op1. + * (uaddv4): Delete expansion pattern. + (uaddvsi4): New pattern. + (uaddvdi4): Likewise. + (addsi3_compareC): Delete pattern, change callers to use + addsi3_compare_op1. + (addsi3_compare_op1): No-longer anonymous. Clean up constraints to + reduce the number of alternatives and re-work type attribute handling. + (addsi3_compare_op2): Clean up constraints to reduce the number of + alternatives and re-work type attribute handling. + (compare_addsi2_op0): Likewise. + (compare_addsi2_op1): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm-modes.def (CC_NCV, CC_CZ): Delete CC modes. + * config/arm/arm.c (arm_select_cc_mode): Remove old selection code + for DImode operands. + (arm_gen_dicompare_reg): Remove unreachable expansion code. + (maybe_get_arm_condition_code): Remove support for CC_CZmode and + CC_NCVmode. + * config/arm/arm.md (arm_cmpdi_insn): Delete. + (arm_cmpdi_unsigned): Delete. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (arm_const_double_prefer_rsbs_rsc): New function. + (arm_canonicalize_comparison): For GT/LE/GTU/GEU, use the constant + unchanged only if that will be cheaper. + (arm_select_cc_mode): Recognize a swapped comparison that will + be regenerated using RSBS or RSCS. Relax restriction on selecting + CC_RSBmode. + (arm_gen_dicompare_reg): Handle LE/GT/LEU/GEU comparisons against + a constant. + (arm_gen_compare_reg): Handle compare (CONST, X) when the mode + is CC_RSBmode. + (maybe_get_arm_condition_code): CC_RSBmode now returns the same codes + as CCmode. + * config/arm/arm.md (rsb_imm_compare_scratch): New pattern. + (rscsi3_out_scratch): New pattern. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm-modes.def (CC_NV, CC_B): New CC modes. + * config/arm/arm.c (arm_select_cc_mode): Recognize constructs that + need these modes. + (arm_gen_dicompare_reg): New code to early expand the sub-operations + of EQ, NE, LT, GE, LTU and GEU. + * config/arm/iterators.md (CC_EXTEND): New code attribute. + * config/arm/predicates.md (arm_adcimm_operand): New predicate.. + * config/arm/arm.md (cmpsi3_carryin_out): New pattern. + (cmpsi3_imm_carryin_out): Likewise. + (cmpsi3_0_carryin_out): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (cbranchdi4): Accept reg_or_int_operand for + operand 2. + (cstoredi4): Similarly, but for operand 3. + * config/arm/arm.c (arm_canoncialize_comparison): Allow + canonicalization of unsigned compares with a constant on Arm. + Prefer using const+1 and adjusting the comparison over swapping the + operands whenever the original constant was not valid. + (arm_gen_dicompare_reg): If Y is not a valid operand, force it to a + register here. + (arm_validize_comparison): Do not force invalid DImode operands to + registers here. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (arm_select_cc_mode): For DImode equality tests + return CC_Zmode if comparing against a constant where one word is + zero. + (arm_gen_compare_reg): Split DImode handling to ... + (arm_gen_dicompare_reg): ... here. Handle equality comparisons + against simple constants. + * config/arm/arm.md (arm_cmpdi_zero): Delete pattern. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (subsi3_carryin_shift_alt): New pattern. + (rsbsi3_carryin_shift_alt): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (negscc_borrow): New pattern. + (mov_negscc): Don't split if the insn would match negscc_borrow. + * config/arm/thumb2.md (thumb2_mov_negscc): Likewise. + (thumb2_mov_negscc_strict_it): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (arm_insn_cost): New function. + (TARGET_INSN_COST): Override default definition. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (arm_rtx_costs_internal, case MINUS): Handle + borrow operations. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.c (strip_carry_operation): New function. + (arm_rtx_costs_internal, case PLUS): Handle addtion with carry-in + for SImode. + + 2019-10-18 Richard Earnshaw + + * config/arm/predicates.md (arm_carry_operation): New special + predicate. + * config/arm/iterators.md (LTUGEU): Delete iterator. + (cnb): Delete code attribute. + (optab): Delete ltu and geu elements. + * config/arm/arm.md (addsi3_carryin): Renamed from + addsi3_carryin_. Remove iterator and use arm_carry_operand. + (add0si3_carryin): Similarly, but from add0si3_carryin_. + (addsi3_carryin_alt2): Similarly, but from addsi3_carryin_alt2_. + (addsi3_carryin_clobercc): Similarly. + (addsi3_carryin_shift): Similarly. Do not allow register shifts in + Thumb2 state. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (arm_subdi3): Delete insn. + (zextendsidi_negsi, negdi_extendsidi): Delete insn_and_split. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm-modes.def (CC_RSB): New CC mode. + * config/arm/predicates.md (arm_borrow_operation): Handle CC_RSBmode. + * config/arm/arm.c (arm_select_cc_mode): Detect when we should + return CC_RSBmode. + (maybe_get_arm_condition_code): Handle CC_RSBmode. + * config/arm/arm.md (subsi3_carryin): Make this pattern available to + expand. + (subdi3): Rewrite to early-expand the sub-operations. + (rsb_im_compare): New pattern. + (negdi2): Delete. + (negdi2_insn): Delete. + (arm_negsi2): Correct type attribute to alu_imm. + (negsi2_0compare): New insn pattern. + (negsi2_carryin): New insn pattern. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (addsi3_carryin_alt2): Use arm_not_operand for + operand 2. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (addsi3_carryin_shift_): Reorder operands + to match canonical form. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm.md (zero_extenddi2): Convert to define_expand. + (extenddi2): Likewise. + + 2019-10-18 Richard Earnshaw + + * config/arm/arm-protos.h (arm_decompose_di_binop): New prototype. + * config/arm/arm.c (arm_decompose_di_binop): New function. + * config/arm/arm.md (adddi3): Also accept any const_int for op2. + If not generating Thumb-1 code, decompose the operation into 32-bit + pieces. + * add0si_carryin_: New pattern. + + 2019-10-18 Richard Earnshaw + + * arm.md (adddi3): Only accept register operands. + (arm_adddi3): Convert to simple insn with no split. Do not accept + constants. + (adddi_sesidi_di): Delete patern. + (adddi_zesidi_di): Likewise. + (uaddv4): Use LTU as condition for branch. + (adddi3_compareV): Convert to simple insn with no split. + (addsi3_compareV_upper): Delete pattern. + (adddi3_compareC): Convert to simple insn with no split. Correct + flags setting expression. + (addsi3_compareC_upper): Delete pattern. + (addsi3_compareC): Correct flags setting expression. + (subdi3_compare1): Convert to simple insn with no split. + (subsi3_carryin_compare): Delete pattern. + (arm_subdi3): Convert to simple insn with no split. + (subdi_zesidi): Delete pattern. + (subdi_di_sesidi): Delete pattern. + (subdi_zesidi_di): Delete pattern. + (subdi_sesidi_di): Delete pattern. + (subdi_zesidi_zesidi): Delete pattern. + (negvdi3): Use s_register_operand. + (negdi2_compare): Convert to simple insn with no split. + (negdi2_insn): Likewise. + (negsi2_carryin_compare): Delete pattern. + (negdi_zero_extendsidi): Delete pattern. + (arm_cmpdi_insn): Convert to simple insn with no split. + (negdi2): Don't call gen_negdi2_neon. + * config/arm/neon.md (adddi3_neon): Delete pattern. + (subdi3_neon): Delete pattern. + (negdi2_neon): Delete pattern. + (splits for negdi2_neon): Delete splits. + + 2019-10-18 Jakub Jelinek + + PR middle-end/92153 + * ggc-page.c (release_pages): Read g->alloc_size before free rather + than after it. + + 2019-10-18 Andre Vieira + + * config/arm/t-multilib: Add rule to regenerate mutlilib header file + with any change to t-multilib, t-aprofile and t-rmprofile. Also add + new multilib variants and new mappings. + + 2019-10-18 Georg-Johann Lay + + PR target/86040 + * config/avr/avr.c (avr_out_lpm): Do not shortcut-return. + + 2019-10-18 Prathamesh Kulkarni + Richard Sandiford + + PR target/86753 + * tree-vectorizer.h (scalar_cond_masked_key): New struct, + and define hashmap traits for it. + (loop_vec_info::scalar_cond_masked_set): New member. + (vect_record_loop_mask): Adjust prototype. + * tree-vectorizer.c (scalar_cond_masked_key::get_cond_ops_from_tree): + Implement method. + * tree-vect-loop.c (vectorizable_reduction): Pass NULL as last arg to + vect_record_loop_mask. + (vectorizable_live_operation): Likewise. + (vect_record_loop_mask): New param scalar_mask. Add entry + cond, loop_mask to scalar_cond_masked_set if scalar_mask is non NULL. + * tree-vect-stmts.c (check_load_store_masking): New param scalar_mask. + Pass it as last arg to vect_record_loop_mask. + (vectorizable_call): Pass scalar_mask as last arg to + vect_record_loop_mask. + (vectorizable_store): Likewise. + (vectorizable_load): Likewise. + (vectorizable_condition): Check if another part of vectorized code + applies loop_mask to condition or to it's inverse, and if yes, + apply loop_mask to result of vector comparison. + + 2019-10-17 John David Anglin + + * config/pa/pa.c (pa_output_indirect_call): Fix typos in last change. + + 2019-10-18 Jakub Jelinek + + PR tree-optimization/92056 + * tree-ssa-strlen.c (determine_min_objsize): Call init_object_sizes + before calling compute_builtin_object_size. + + 2019-10-17 Iain Sandoe + + PR target/65342 + * config/rs6000/darwin.md (movdi_low, movsi_low_st): Delete. + (movdi_low_st): Delete. + * config/rs6000/rs6000.c + (darwin_rs6000_legitimate_lo_sum_const_p): New. + (mem_operand_gpr): Validate Mach-O LO_SUM cases separately. + * config/rs6000/rs6000.md (movsi_low): Delete. + + 2019-10-17 Jason Merrill + + * gimplify.h (get_initialized_tmp_var): Add default argument to + post_p. + * gimplify.c (gimplify_self_mod_expr, gimplify_omp_atomic): Remove + NULL post_p argument. + * targhooks (std_gimplify_va_arg_expr): Likewise. + + 2019-10-17 Richard Biener + + * tree-vectorizer.h (_stmt_vec_info::cond_reduc_code): Remove. + (STMT_VINFO_VEC_COND_REDUC_CODE): Likewise. + * tree-vectorizer.c (vec_info::new_stmt_vec_info): Do not + initialize STMT_VINFO_VEC_COND_REDUC_CODE. + * tree-vect-loop.c (vect_is_simple_reduction): Set + STMT_VINFO_REDUC_CODE. + (vectorizable_reduction): Remove dead and redundant code, use + STMT_VINFO_REDUC_CODE instead of STMT_VINFO_VEC_COND_REDUC_CODE. + + 2019-10-17 Georg-Johann Lay + + Fix breakage introduced by r276985. + + * config/avr/avr.c (avr_option_override): Remove set of + PARAM_ALLOW_STORE_DATA_RACES. + * common/config/avr/avr-common.c (avr_option_optimization_table) + [OPT_LEVELS_ALL]: Turn on -fallow-store-data-races. + + 2019-10-17 H.J. Lu + + * config/i386/i386.h (processor_costs): Add clear_ratio. + (CLEAR_RATIO): Remove MIN and use ix86_cost->clear_ratio. + * config/i386/x86-tune-costs.h: Set clear_ratio to the minimum + of 6 and move_ratio in all cost models. + + 2019-10-17 Richard Biener + + * tree-vect-loop.c (check_reduction_path): Compute reduction + operation here. + (vect_is_simple_reduction): Remove special-case of single-stmt + reduction path detection. + + 2019-10-17 Richard Earnshaw + + * config/arm/arm-cpus.in (marvel-pj4): Add +fp to the architecture. + + 2019-10-17 Yuliang Wang + + * config/aarch64/aarch64-sve2.md (aarch64_sve2_eor3) + (aarch64_sve2_nor, aarch64_sve2_nand) + (aarch64_sve2_bsl, aarch64_sve2_nbsl) + (aarch64_sve2_bsl1n, aarch64_sve2_bsl2n): + New combine patterns. + * config/aarch64/iterators.md (BSL_DUP): New int iterator for the + above. + (bsl_1st, bsl_2nd, bsl_dup, bsl_mov): Attributes for the above. + + 2019-10-17 Aldy Hernandez + + * tree-vrp.c (value_range_base::dump): Display +INF for both + pointers and integers when appropriate. + + 2019-10-17 Andre Vieira + + * tree-vect-loop.c (vect_analyze_loop_2): Use same condition to decide + when to use versioning threshold. + + 2019-10-17 Andre Vieira + + * tree-vect-loop.c (determine_peel_for_niter): New function contained + outlined code from ... + (vect_analyze_loop_2): ... here. + + 2019-10-17 Andre Vieira + + * tree-vect-loop.c (vect_transform_loop): Move code from here... + * tree-vect-loop-manip.c (vect_loop_versioning): ... to here. + * tree-vectorizer.h (vect_loop_versioning): Remove unused parameters. + + 2019-10-17 Richard Biener + + * tree-vect-loop.c (needs_fold_left_reduction_p): Export. + (vect_is_simple_reduction): Move all validity checks ... + (vectorizable_reduction): ... here. Compute whether we + need a fold-left reduction here. + * tree-vect-patterns.c (vect_reassociating_reduction_p): Merge + both overloads, check needs_fold_left_reduction_p directly. + * tree-vectorizer.h (needs_fold_left_reduction_p): Declare. + + 2019-10-17 Richard Biener + + * tree-ssa-pre.c (create_component_ref_by_pieces_1): Fix + TARGET_MEM_REF creation. + + 2019-10-17 Richard Biener + + PR tree-optimization/92129 + * tree-vect-loop.c (vectorizable_reduction): Also fail + on GIMPLE_SINGLE_RHS. + + 2019-10-17 Jakub Jelinek + + PR tree-optimization/92056 + * tree-object-size.c (cond_expr_object_size): Return early if then_ + processing resulted in unknown size. + + PR tree-optimization/92115 + * tree-ssa-ifcombine.c (ifcombine_ifandif): Force condition into + temporary if it could trap. + + 2019-10-17 Richard Biener + + PR debug/91887 + * dwarf2out.c (gen_formal_parameter_die): Also try to match + context_die against a DW_TAG_GNU_formal_parameter_pack parent. + + 2019-10-16 Jakub Jelinek + + * tree-ssa-strlen.c (maybe_invalidate): Use + HOST_WIDE_INT_PRINT_UNSIGNED instead of "%zu". + + 2019-10-16 Andrew Burgess + Jim Wilson + + * config/riscv/riscv.h (REG_CLASS_CONTENTS): Add argument passing + regs to SIBCALL_REGS. + * config/riscv/riscv.c (riscv_regno_to_class): Change argument + passing regs to SIBCALL_REGS. + + 2019-10-16 Martin Sebor + + PR tree-optimization/83821 + * tree-ssa-strlen.c (maybe_invalidate): Add argument. Consider + the length of a string when available. + (handle_builtin_memset) Add argument. + (handle_store, strlen_check_and_optimize_call): Same. + (check_and_optimize_stmt): Same. Pass it to callees. + + 2019-10-16 Martin Sebor + + PR tree-optimization/91996 + * tree-ssa-strlen.c (maybe_warn_pointless_strcmp): Improve location + information. + (compare_nonzero_chars): Add an overload. + (count_nonzero_bytes): Add an argument. Call overload above. + Handle non-constant lengths in some range. + (handle_store): Add an argument. + (check_and_optimize_stmt): Pass an argument to handle_store. + + 2019-10-16 Richard Earnshaw + + * config/arm/arm.c (neon_valid_immediate): Clear bytes before use. + + 2019-10-16 Mihailo Stojanovic + + * config/mips/mips.c (mips_expand_builtin_insn): Force the + operands which correspond to the same input-output register to + have the same pseudo assigned to them. + + 2019-10-16 Ilya Leoshkevich + + * cfgrtl.c (find_partition_fixes): Remove bbs_in_cold_partition. + + 2019-10-16 Wilco Dijkstra + + * config/aarch64/aarch64.c (aarch64_classify_symbol): + Apply reasonable limit to symbol offsets. + + 2019-10-16 Richard Biener + + * tree-vect-loop.c (vect_valid_reduction_input_p): Remove. + (vect_is_simple_reduction): Delay checking to + vectorizable_reduction and relax the checking. + (vectorizable_reduction): Check we have a simple use. Check + for bogus condition reductions. + * tree-vect-stmts.c (vect_transform_stmt): Make sure we + are looking at the last stmt in a pattern sequence when + filling in backedge PHI values. + + 2019-10-16 Peter Bergner + Jiufu Guo + + PR target/70010 + * config/rs6000/rs6000.c (rs6000_can_inline_p): Prohibit inlining if + the callee explicitly disables some isa_flags the caller is using. + + 2019-10-16 Richard Sandiford + + * function-abi.cc (expr_callee_abi): Assert for POINTER_TYPE_P. + + 2019-10-16 Richard Sandiford + + * genmodes.c (mode_data::order): New field. + (blank_mode): Update accordingly. + (VECTOR_MODES_WITH_PREFIX): Add an order parameter. + (make_vector_modes): Likewise. + (VECTOR_MODES): Update use accordingly. + (cmp_modes): Sort by the new order field ahead of sorting by size. + * config/aarch64/aarch64-modes.def (VNx2QI, VN2xHI, VNx2SI) + (VNx4QI, VNx4HI, VNx8QI): New partial vector modes. + * config/aarch64/aarch64.c (VEC_PARTIAL): New flag value. + (aarch64_classify_vector_mode): Handle the new partial modes. + (aarch64_vl_bytes): New function. + (aarch64_hard_regno_nregs): Use it instead of BYTES_PER_SVE_VECTOR + when counting the number of registers in an SVE mode. + (aarch64_class_max_nregs): Likewise. + (aarch64_hard_regno_mode_ok): Don't allow partial vectors + in registers yet. + (aarch64_classify_address): Treat partial vectors analogously + to full vectors. + (aarch64_print_address_internal): Consolidate the printing of + MUL VL addresses, using aarch64_vl_bytes as the number of + bytes represented by "VL". + (aarch64_vector_mode_supported_p): Reject partial vector modes. + + 2019-10-16 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_layout_frame): Use is_constant + rather than known_lt when choosing frame layouts. + + 2019-10-16 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_layout_frame): Assert + that all the adjustments add up to the full frame size. + Use crtl->outgoing_args_size directly as the final adjustment + where appropriate. + + 2019-10-16 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_layout_frame): Use a local + "frame" reference instead of always referring directly to + "cfun->machine->frame". + + 2019-10-16 Richard Biener + + PR tree-optimization/92119 + * tree-vect-patterns.c (vect_recog_rotate_pattern): Guard + against missing bswap lhs. + + 2019-10-16 Richard Sandiford + + PR middle-end/92033 + * poly-int.h (constant_lower_bound_with_limit): New function. + (constant_upper_bound_with_limit): Likewise. + * doc/poly-int.texi: Document them. + * tree-vrp.c (value_range_base::set): Convert POLY_INT_CST bounds + into the worst-case INTEGER_CST bounds. + + 2019-10-16 Feng Xue + + PR ipa/91088 + * doc/invoke.texi (ipa-max-param-expr-ops): Document new option. + * params.def (PARAM_IPA_MAX_PARAM_EXPR_OPS): New. + * ipa-predicat.h (struct expr_eval_op): New struct. + (expr_eval_ops): New typedef. + (struct condition): Add type and param_ops fields, remove size field. + (add_condition): Replace size parameter with type parameter, add + param_ops parameter. + * ipa-predicat.c (expr_eval_ops_equal_p): New function. + (predicate::add_clause): Add comparisons on type and param_ops. + (dump_condition): Add debug dump for param_ops. + (remap_after_inlining): Adjust call arguments to add_condition. + (add_condition): Replace size parameter with type parameter, add + param_ops parameter. Unshare constant value used in conditions. + * ipa-fnsummary.c (evaluate_conditions_for_known_args): Fold + parameter expressions using param_ops. + (decompose_param_expr): New function. + (set_cond_stmt_execution_predicate): Use call to decompose_param_expr + to replace call to unmodified_parm_or_parm_agg_item. + (set_switch_stmt_execution_predicate): Likewise. + (will_be_nonconstant_expr_predicate): Likewise. Replace usage of size + with type. + (inline_read_section): Read param_ops from summary stream. + (ipa_fn_summary_write): Write param_ops to summary stream. + + 2019-10-15 Segher Boessenkool + + PR rtl-optimization/92107 + * genattrtab.c (write_attr_value) : Parenthesize the + expression written. + + 2019-10-15 Iain Sandoe + + * config/darwin.c: Update description of fix and continue. + + 2019-10-15 Iain Sandoe + + * config/darwin.c (darwin_binds_local_p): Update to call + default_binds_local_p_3 () directly. amend comments. + + 2019-10-15 Richard Biener + + * lto-streamer-out.c (lto_variably_modified_type_p): New. + (tree_is_indexable): Use it. + * tree-streamer-out.c (pack_ts_type_common_value_fields): + Stream variably_modified_type_p as TYPE_LANG_FLAG_0. + * tree-streamer-in.c (unpack_ts_type_common_value_fields): Likewise. + + 2019-10-15 Jozef Lawrynowicz + + * config/msp430/msp430.md (zero_extendqipsi2): New. + (zero_extendqisi2): Optimize case where src register and base dst + register are the same. + (zero_extendhipsi2): Don't use 430X insn for rYs->r case. + (zero_extendpsisi2): Optimize r->m case. + Add unnamed insn patterns to catch insns combine searches for when + optimizing pointer manipulation. + + 2019-10-15 Jozef Lawrynowicz + + * config/msp430/msp430.md: Group zero_extend* insns together. + + 2019-10-15 Jozef Lawrynowicz + + * config/msp430/constraints.md: Allow post_inc operand for "Ya" + constraint. + * config/msp430/msp430.c (msp430_legitimate_address_p): Handle + POST_INC. + (msp430_subreg): Likewise. + (msp430_split_addsi): Likewise. + (msp430_print_operand_addr): Likewise. + * config/msp430/msp430.h (HAVE_POST_INCREMENT): Define. + (USE_STORE_POST_INCREMENT): Define. + * config/msp430/msp430.md: Use the msp430_general_dst_operand or + msp430_general_dst_nonv_operand predicates for the lvalues of insns. + * config/msp430/predicates.md (msp430_nonpostinc_operand): New. + (msp430_general_dst_operand): New. + (msp430_general_dst_nonv_operand): New. + (msp430_nonsubreg_operand): Remove. + (msp430_nonsubreg_dst_operand): New. + (msp430_nonsubreg_or_imm_operand): Allow reg or mem operands in place + of defunct msp430_nonsubreg_operand. + (msp430_nonsubregnonpostinc_or_imm_operand): New. + + 2019-10-15 Richard Biener + + PR tree-optimization/91929 + * tree-ssa-pre.c (pre_expr_d::loc): New member. + (get_or_alloc_expr_for_name): Initialize it. + (get_or_alloc_expr_for_constant): Likewise. + (phi_translate_1): Copy it. + (create_expression_by_pieces): Use the original location + of the expression for the inserted stmt. + (compute_avail): Record the location of the stmt for the + expressions created. + + 2019-10-15 Richard Sandiford + + * tree-ssa-strlen.c (count_nonzero_bytes): Check tree_fits_uhwi_p + before using tree_to_uhwi. + + 2019-10-15 Ilya Leoshkevich + + * config/s390/s390.md: Run %a0:DI splitters only after reload. + + 2019-10-15 Richard Biener + + PR tree-optimization/92094 + * tree-vect-loop.c (vectorizable_reduction): For nested cycles + do not adjust the reduction definition def type. + * tree-vect-stmts.c (vect_transform_stmt): Verify the scalar stmt + defines the latch argument of the PHI. + + 2019-10-15 Hongyu Wang + + PR target/92035 + * config/i386/avx512fintrin.h (_mm_mask_roundscale_ss, + _mm_maskz_roundscale_ss, _mm_maskz_roundscale_round_ss, + _mm_maskz_roundscale_round_ss, _mm_mask_roundscale_sd, + _mm_maskz_roundscale_sd, _mm_mask_roundscale_round_sd, + _mm_maskz_roundscale_round_sd): New intrinsics. + (_mm_roundscale_ss, _mm_roundscale_round_ss): Use + __builtin_ia32_rndscales?_mask_round builtins instead of + __builtin_ia32_rndscales?_round. + * config/i386/i386-builtin.def (__builtin_ia32_rndscaless_round, + __builtin_ia32_rndscalesd_round): Remove. + (__builtin_ia32_rndscaless_mask_round, + __builtin_ia32_rndscalesd_mask_round): New intrinsics. + * config/i386/sse.md + (avx512f_rndscale): Renamed to ... + (avx512f_rndscale): + ... this, adjust and add subst atrributes to make it maskable. + + 2019-10-15 Richard Biener + + PR middle-end/92046 + * common.opt (fallow-store-data-races): New. + * params.def (PARAM_ALLOW_STORE_DATA_RACES): Remove. + * params.h (ALLOW_STORE_DATA_RACES): Likewise. + * doc/invoke.texi (fallow-store-data-races): Document. + (--param allow-store-data-races): Remove docs. + * opts.c (default_options_table): Enable -fallow-store-data-races + at -Ofast. + (default_options_optimization): Do not enable --param + allow-store-data-races at -Ofast. + * tree-if-conv.c (ifcvt_memrefs_wont_trap): Use flag_store_data_races + instead of PARAM_ALLOW_STORE_DATA_RACES. + * tree-ssa-loop-im.c (execute_sm): Likewise. + + 2019-10-15 Prathamesh Kulkarni + + PR tree-optimization/92085 + * tree-if-conv.c (ifcvt_local_dce): Call gsi_next in else clause, + instead of calling it unconditionally after + delete_dead_or_redundant_assignment and fix indentation. + + 2019-10-15 Kugan Vivekanandarajah + + * config/arm/vfp.md (fma4): Enable DF only when + TARGET_VFP_DOUBLE. + (*fmsub4): Likewise. + *fnmsub4): Likewise. + (*fnmadd4): Likewise. + + 2019-10-14 Joel Hutton + + * doc/tree-ssa.texi: Update renamed macro name. + + 2019-10-14 Mihailo Stojanovic + + * config/mips/mips.c (mips_cannot_force_const_mem): Reject + vector constants. + + 2019-10-14 Iain Sandoe + + * config/darwin.c: Use unsigned ints for the picbase label + counters, initialise the vars explicitly. + (update_pic_label_number_if_needed): Move a variable declaration + to where it's needed. + (machopic_output_function_base_name): Use a more strict checking + assert, and and unsigned int for the picbase label counter. + (machopic_get_function_picbase): Likewise. + + 2019-10-14 Richard Biener + + PR middle-end/92046 + * dse.c (scan_insn): Use param max_active_local_stores. + (dse_step1): Get PARAM_MAX_DSE_ACTIVE_LOCAL_STORES and adjust + based on optimization level. + * loop-invariant.c (move_loop_invariants): Adjust + LOOP_INVARIANT_MAX_BBS_IN_LOOP based on optimization level. + * opts.c (default_options_optimization): Do not adjust + PARAM_MAX_DSE_ACTIVE_LOCAL_STORES and + LOOP_INVARIANT_MAX_BBS_IN_LOOP here. + + 2019-10-14 Wilco Dijkstra + + * config/arm/arm.c (arm_legitimize_address): Remove Thumb-2 bailout. + + 2019-10-14 Wilco Dijkstra + + * config/arm/arm.c (arm_option_override): Don't override sched + pressure algorithm. + + 2019-10-14 Richard Biener + + PR tree-optimization/92069 + * tree-vect-loop.c (vect_analyze_scalar_cycles_1): For nested + cycles do not set vect_nested_cycle on the latch definition. + + 2019-10-14 Richard Sandiford + + * function-abi.h (expr_callee_abi): Declare. + * function-abi.cc (expr_callee_abi): New function. + + 2019-10-14 Aldy Hernandez + + * tree-vrp.c (value_range_base::set): Normalize unsigned ~[0,0] + into [1,MAX]. + * tree-vrp.h (value_range_base::nonzero_p): Adjust for unsigned + non-zero being represented as [1,MAX]. + + 2019-10-14 Xiong Hu Luo + + * tree-sra.c (dump_access): Add missing braces. + + 2019-10-13 Iain Sandoe + + * config/darwin.c (machopic_indirection_name): Rework the + function to emit linker-visible symbols only for indirections + in the data section. Clean up the code and update comments. + + 2019-10-13 Iain Sandoe + + * config/darwin.c (machopic_indirect_data_reference): Remove + redundant code. + + 2019-10-13 Nathan Sidwell + + * gengtype-lex.l (CXX_KEYWORD): Add 'mutable'. + + 2019-10-13 Rainer Orth + + * doc/sourcebuild.texi (Test Directives, Add Options): Remove + c99_runtime. + + 2019-10-12 Jan Hubicka + + * lto-streamer-out.c (collect_block_tree_leafs): Renumber statements + so non-virutal are before virutals. + (output_function): Avoid body modifications. + + 2019-10-12 John David Anglin + + * config/pa/pa.c (pa_output_call): Load descriptor address to register + %r22. Load function address before global pointer. + (pa_attr_length_indirect_call): Adjust length of inline versions of + $$dyncall. + (pa_output_indirect_call): Remove fast inline version of $$dyncall + before normal cases. Update inline $$dyncall sequences to preserve + function descriptor address in register %r22. + (TRAMPOLINE_CODE_SIZE): Adjust. + (pa_asm_trampoline_template): Revise 32-bit trampoline. Don't assume + register %r22 contains trampoline address. + (pa_trampoline_init): Adjust offsets. + (pa_trampoline_adjust_address): Likewise. + * config/pa/pa.h (TRAMPOLINE_SIZE): Adjust 32-bit size. + + 2019-10-12 Iain Sandoe + + PR target/67183 + * config/darwin.c (machopic_indirection): New field to flag + non-lazy-symbol-pointers in the data section. + (machopic_indirection_name): Compute if an indirection should + appear in the data section. + (machopic_output_data_section_indirection): New callback split + from machopic_output_indirection. + (machopic_output_stub_indirection): Likewise. + (machopic_output_indirection): Retain the code for non-lazy + symbol pointers in their regular section. + (machopic_finish): Use the new callbacks to order the indirection + output. + + 2019-10-12 Iain Sandoe + + * config/darwin-protos.h (machopic_finish): Delete. + * config/darwin.c (machopic_finish): Make static. + + 2019-10-12 Iain Sandoe + + * config/darwin.c (darwin_file_end): Only emit empty CTOR/DTOR + sections when building kernel extension code. + + 2019-10-12 Palmer Dabbelt + + * doc/extend.texi (Alternate Keywords): Change "-std=c11" to "a + later standard." + + 2019-10-12 John David Anglin + + * config/pa/pa.c (pa_option_override): Remove trailing comma + from warning. + + 2019-10-12 Jakub Jelinek + + PR middle-end/92063 + * tree-eh.c (operation_could_trap_helper_p) + : Return false with *handled = false. + (tree_could_trap_p): For {,VEC_}COND_EXPR return false instead of + recursing on the first operand. + * fold-const.c (simple_operand_p_2): Use generic_expr_could_trap_p + instead of tree_could_trap_p. + * tree-ssa-sccvn.c (vn_nary_may_trap): Formatting fixes. + + 2019-10-11 Jim Wilson + + PR rtl-optimization/91860 + * combine.c (subst): If new_rtx is a constant, also check for + SIGN_EXTEND when deciding whether to call simplify_unary_operation. + + 2019-10-11 Richard Sandiford + + * expr.c (store_expr): Use rtx_to_poly_int64 rather than + INTVAL when calling store_bit_field. + + 2019-10-11 Wilco Dijkstra + + * config/arm/arm.h (HONOR_REG_ALLOC_ORDER): Set when optimizing for + size. + + 2019-10-11 Bernd Edlinger + + * tree-vect-loop.c (vect_analyze_loop_operations): Adjust call to + vectorizable_live_operation. + (vectorizable_live_operation): Adjust parameters. + * tree-vect-stmts.c (vect_init_vector, + vect_gen_widened_results_half): Fix typo in function comment. + (can_vectorize_live_stmts): Adjust function comment. + Adjust parameters. Adjust call to vectorizable_live_operation. + (vect_analyze_stmt): Adjust call to can_vectorize_live_stmts. + (vect_transform_stmt): Adjust function comment. Adjust call to + can_vectorize_live_stmts. + * tree-vectorizer.h (vectorizable_live_operation): Adjust parameters. + + 2019-10-11 Richard Biener + + PR tree-optimization/90883 + PR tree-optimization/91091 + * tree-ssa-sccvn.c (vn_reference_lookup_3): Use correct + alias-sets both for recording VN table entries and continuing + walking after translating through copies. Handle same-sized + reads from SSA names by returning the plain SSA name. + (eliminate_dom_walker::eliminate_stmt): Properly handle + non-size precision stores in redundant store elimination. + + 2019-10-11 Jan Hubicka + + * ggc-page.c (release_pages): Output statistics when !quiet_flag. + (ggc_collect): Dump later to not interfere with release_page dump. + (ggc_trim): New function. + * ggc-none.c (ggc_trim): New. + * ggc.h (ggc_trim): Declare. + + 2019-10-11 Richard Biener + + PR tree-optimization/92066 + PR tree-optimization/92046 + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): + Fix bogus cost model check. + + 2019-10-11 Tobias Burnus + + * langhooks-def.h (LANG_HOOKS_OMP_IS_ALLOCATABLE_OR_PTR): Define. + (LANG_HOOKS_DECLS): Add it. + * langhooks.h (lang_hooks_for_decls): Add omp_is_allocatable_or_ptr; + update comment for omp_is_optional_argument. + * omp-general.c (omp_is_allocatable_or_ptr): New. + * omp-general.h (omp_is_allocatable_or_ptr): Declare. + * omp-low.c (scan_sharing_clauses, lower_omp_target): Handle + Fortran's optional arguments and allocatable/pointer scalars + with use_device_addr. + + 2019-10-11 Ilya Leoshkevich + + PR target/77918 + * config/s390/2827.md: Add new opcodes. + * config/s390/2964.md: Likewise. + * config/s390/3906.md: Likewise. + * config/s390/8561.md: Likewise. + * config/s390/s390-builtins.def (s390_vfchesb): Use + the new vec_cmpgev4sf_quiet_nocc. + (s390_vfchedb): Use the new vec_cmpgev2df_quiet_nocc. + (s390_vfchsb): Use the new vec_cmpgtv4sf_quiet_nocc. + (s390_vfchdb): Use the new vec_cmpgtv2df_quiet_nocc. + (vec_cmplev4sf): Use the new vec_cmplev4sf_quiet_nocc. + (vec_cmplev2df): Use the new vec_cmplev2df_quiet_nocc. + (vec_cmpltv4sf): Use the new vec_cmpltv4sf_quiet_nocc. + (vec_cmpltv2df): Use the new vec_cmpltv2df_quiet_nocc. + * config/s390/s390-modes.def (CCSFPS): New mode. + * config/s390/s390.c (s390_match_ccmode_set): Support CCSFPS. + (s390_select_ccmode): Return CCSFPS for LT, LE, GT, GE and LTGT. + (s390_branch_condition_mask): Reuse CCS for CCSFPS. + (s390_expand_vec_compare): Use non-signaling patterns where + necessary. + (s390_reverse_condition): Support CCSFPS. + * config/s390/s390.md (*cmp_ccsfps): New pattern. + * config/s390/vector.md: (VFCMP_HW_OP): Remove. + (asm_fcmp_op): Likewise. + (*smaxv2df3_vx): Use pattern for quiet comparison. + (*sminv2df3_vx): Likewise. + (*vec_cmp_nocc): Remove. + (*vec_cmpeq_quiet_nocc): New pattern. + (vec_cmpgt_quiet_nocc): Likewise. + (vec_cmplt_quiet_nocc): New expander. + (vec_cmpge_quiet_nocc): New pattern. + (vec_cmple_quiet_nocc): New expander. + (*vec_cmpeq_signaling_nocc): New pattern. + (*vec_cmpgt_signaling_nocc): Likewise. + (*vec_cmpgt_signaling_finite_nocc): Likewise. + (*vec_cmpge_signaling_nocc): Likewise. + (*vec_cmpge_signaling_finite_nocc): Likewise. + (vec_cmpungt): New expander. + (vec_cmpunge): Likewise. + (vec_cmpuneq): Use quiet patterns. + (vec_cmpltgt): Allow only on z14+. + (vec_cmpordered): Use quiet patterns. + (vec_cmpunordered): Likewise. + (VEC_CMP_EXPAND): Add ungt and unge. + + 2019-10-11 Jan Hubicka + + * gimple-streamer-out.c (output_gimple_stmt): Add explicit function + parameter. + * lto-streamer-out.c: Include tree-dfa.h. + (output_cfg): Do not use cfun. + (lto_prepare_function_for_streaming): New. + (output_function): Do not push cfun; do not initialize loop optimizer. + * lto-streamer.h (lto_prepare_function_for_streaming): Declare. + * passes.c (ipa_write_summaries): Use it. + (ipa_write_optimization_summaries): Do not modify bodies. + * tree-dfa.c (renumber_gimple_stmt_uids): Add function parameter. + * tree.dfa.h (renumber_gimple_stmt_uids): Update prototype. + * tree-ssa-dse.c (pass_dse::execute): Update use of + renumber_gimple_stmt_uids. + * tree-ssa-math-opts.c (pass_optimize_widening_mul::execute): Likewise. + + 2019-10-11 Kewen Lin + + * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Lower + vec_promote_demote cost to 1 for non-Power7 VSX architectures. + + 2019-10-10 Joseph Myers + + * ginclude/float.h [!__DEC32_MANT_DIG__]: Do not define DFP + macros. + [__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L]: + Also define DFP macros for these conditions. + [!__STDC_WANT_DEC_FP__] (DEC32_SUBNORMAL_MIN, DEC64_SUBNORMAL_MIN, + DEC128_SUBNORMAL_MIN): Do not define. + [__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L] + (DEC32_TRUE_MIN, DEC64_TRUE_MIN, DEC128_TRUE_MIN): New macros. + + 2019-10-10 Xiong Hu Luo + Sandra Loosemore + + PR middle-end/26241 + * doc/lto.texi (IPA): Reference to the IPA passes. + * doc/passes.texi (Pass manager): Add node IPA passes and + description for each IPA pass. + + 2019-10-10 Jan Hubicka + + * ipa-reference.c: Do not include splay-tree.h + (reference_vars_to_consider): Turn to hash map. + (get_static_name, ipa_init, analyze_function, propagate, + stream_out_bitmap, ipa_reference_write_optimization_summary, + ipa_reference_write_optimization_summary): Update. + + 2019-10-10 Jan Hubicka + + * ipa-reference.c (propagate): Fix releasing of IPA summaries. + + 2019-10-10 Iain Sandoe + + * config/darwin.c: Lookup Objective C metadata and force indirection + for IVAR refs. + + 2019-10-10 Michael Meissner + + * config/rs6000/rs6000.c (quad_address_p): Add check for prefixed + addresses. + (mem_operand_gpr): Add check for prefixed addresses. + (mem_operand_ds_form): Add check for prefixed addresses. + (rs6000_legitimate_offset_address_p): If we support prefixed + addresses, check for a 34-bit offset instead of 16-bit. + (rs6000_legitimate_address_p): Add check for prefixed addresses. + Do not allow load/store with update if the address is prefixed. + (rs6000_mode_dependent_address): If we support prefixed + addresses, check for a 34-bit offset instead of 16-bit. + + 2019-10-10 Ilya Leoshkevich + + PR target/77918 + * config/s390/vector.md (vcond_comparison_operator): New + predicate. + (vcond): Use vcond_comparison_operator. + + 2019-10-10 David Malcolm + + PR 87488 + * Makefile.in (CFLAGS-opts.o): Pass in DOCUMENTATION_ROOT_URL via + -D. + * configure.ac (--with-documentation-root-url): New option. + * configure: Regenerate. + * diagnostic-format-json.cc (json_end_diagnostic): If there is an + option URL, add it as a new string field of the diagnostic option. + * diagnostic.c (diagnostic_initialize): Initialize get_option_url. + (print_option_information): If get_option_url is non-NULL, call + it, and if the result is non-NULL, potentially emit an escape + sequence to markup the option text with the resulting URL. + * diagnostic.h (diagnostic_context::get_option_url): New callback. + * doc/invoke.texi (-fdiagnostics-format=): Add "option_url" to + example of JSON output. + * opts-diagnostic.h (get_option_url): New decl. + * opts.c (get_option_url): New function. + * toplev.c (general_init): Initialize the get_option_url callback. + + 2019-10-10 David Malcolm + + PR 87488 + * common.opt (fdiagnostics-urls=): New option. + (diagnostic-url.h): Add SourceInclude. + (diagnostic_url_rule): New enum. + * diagnostic-color.c: Include "diagnostic-url.h". + (diagnostic_urls_enabled_p): New function. + * diagnostic-url.h: New file. + * diagnostic.c: Include "diagnostic-url.h". + (diagnostic_urls_init): New function. + * diagnostic.h (diagnostic_urls_init): New decl. + * doc/invoke.texi (Diagnostic Message Formatting Options): Add + -fdiagnostics-urls to the list. + (-fdiagnostics-urls): New option. + * gcc.c (driver_handle_option): Handle OPT_fdiagnostics_urls_. + (driver::global_initializations): Call diagnostic_urls_init. + * opts-global.c (init_options_once): Likewise. + * opts.c (common_handle_option): Handle OPT_fdiagnostics_urls_. + * pretty-print.c (pretty_printer::pretty_printer): Initialize + show_urls. + (pp_begin_url): New function. + (pp_end_url): New function. + (selftest::test_urls): New selftest. + (selftest::pretty_print_c_tests): Call it. + * pretty-print.h (pretty_printer::show_urls): New field. + (pp_begin_url): New decl. + (pp_end_url): New decl. + + 2019-10-10 Uroš Bizjak + + PR target/92022 + * config/alpha/alpha.c (alpha_handle_trap_shadows): Skip DEBUG_INSN. + + 2019-10-10 Oleg Endo + + PR target/88630 + * config/sh/sh.h (TARGET_FPU_SH4_300): New macro. + * config/sh/sh.c (sh_option_override): Enable fsca and fsrra insns + also for TARGET_FPU_SH4_300. + (sh_emit_mode_set): Check for TARGET_FPU_SH4_300 instead of + TARGET_SH4_300. + * config/sh/sh.md (toggle_pr): Add TARGET_FPU_SH4_300 condition. + (negsf2): Expand to either negsf2_fpscr or negsf2_no_fpscr. + (*negsf2_i): Split into ... + (negsf2_fpscr, negsf2_no_fpscr): ... these new patterns. + (abssf2): Expand to either abssf2_fpsc or abssf2_no_fpsc. + (**abssf2_i): Split into ... + (abssf2_fpscr, abssf2_no_fpscr): ... these new patterns. + (negdf2): Expand to either negdf2_fpscr or negdf2_no_fpscr. + (*negdf2_i): Split into ... + (negdf2_fpscr, negdf2_no_fpscr): ... these new patterns. + (absdf2): Expand to either absdf2_fpscr or absdf2_no_fpsc. + (**abssf2_i): Split into ... + (absdf2_fpscr, absdf2_no_fpscr): ... these new patterns. + + 2019-10-10 Richard Biener + + PR middle-end/92046 + * opts.c (finish_options): Do not influence global --params + from options that are adjustable per function. + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): + Apply --param adjustment based on active cost-model. + * tree-ssa-phiopt.c (cond_if_else_store_replacement): Disable + further store-sinking when vectorization or if-conversion + are not enabled. + + 2019-10-10 Jan Hubicka + + PR middle-end/92037 + * cgraph.c (symbol_table_test::symbol_table_test): Use ggc_alloc + rather than ggc_alloc_cleared to alloc symbol table. + * toplev.c (general_init): Likewise. + * cgraph.h (symbol_table): Explicitly construct every field. + + 2019-10-10 Andreas Krebbel + + * common/config/s390/s390-common.c (PF_ARCH13): Rename to... + (PF_Z15): ... this. + * config.gcc: Add z15 as option for --with-arch and --with-tune + configure switches. + * config/s390/s390-c.c (s390_resolve_overloaded_builtin): Add + error reporting for unsupported builtins. + * config/s390/s390-opts.h (enum processor_type): Rename + PROCESSOR_8561_ARCH13 to PROCESSOR_8561_Z15. + * config/s390/8561.md: Rename arch13 to z15 throughout the file. + * config/s390/driver-native.c (s390_host_detect_local_cpu): + Likewise. + * config/s390/s390-builtins.def: Likewise. + * config/s390/s390.c (processor_table): Add z15 as option and keep arch13 as alternative. + (s390_expand_builtin): Add missing check for unsupported builtins. + (s390_canonicalize_comparison): Rename TARGET_ARCH13 to TARGET_Z15. + (s390_rtx_costs): Likewise. + (s390_get_sched_attrmask): Rename arch13 to z15. + (s390_get_unit_mask): Likewise. + (s390_is_fpd): Likewise. + (s390_is_fxd): Likewise. + * config/s390/s390.h (enum processor_flags): Likewise. + * config/s390/s390.md: Likewise. + * config/s390/vector.md: Likewise. + * config/s390/vx-builtins.md: Likewise. + * config/s390/s390.opt: Add z15 to processor_type value. + + 2019-10-10 Andreas Krebbel + + PR target/91035 + * config/s390/s390-protos.h (s390_output_split_stack_data): Add + prototype. + * config/s390/s390.md (UNSPECV_SPLIT_STACK_DATA): Remove. + ("split_stack_data", "split_stack_call") + ("split_stack_call_", "split_stack_cond_call") + ("split_stack_cond_call_"): Remove. + ("@split_stack_call", "@split_stack_cond_call"): New + insn definition. + * config/s390/s390.c (s390_output_split_stack_data): New function. + (s390_expand_split_stack_prologue): Use the merged expander. + + 2019-10-09 Martin Sebor + + PR tree-optimization/90879 + * builtins.c (check_access): Avoid using maxbound when null. + * calls.c (maybe_warn_nonstring_arg): Adjust to get_range_strlen change. + * doc/invoke.texi (-Wstring-compare): Document new warning option. + * gimple-fold.c (get_range_strlen_tree): Make setting maxbound + conditional. + (get_range_strlen): Overwrite initial maxbound when non-null. + * gimple-ssa-sprintf.c (get_string_length): Adjust to get_range_strlen + changes. + * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Same. + (used_only_for_zero_equality): New function. + (handle_builtin_memcmp): Call it. + (determine_min_objsize): Return an integer instead of tree. + (get_len_or_size, strxcmp_eqz_result): New functions. + (maybe_warn_pointless_strcmp): New function. + (handle_builtin_string_cmp): Call it. Fold zero-equality of strcmp + between a longer string and a smaller array. + (get_range_strlen_dynamic): Overwrite initial maxbound when non-null. + + 2019-10-09 Iain Sandoe + + * config/darwin.c (darwin_override_options): Make the check for + Objective-C ABI version more specific for 64bit code. + + 2019-10-09 Iain Sandoe + + * config/darwin.c (machopic_indirect_data_reference): Set flag to + indicate that the new symbol is an indirection. + (machopic_indirect_call_target): Likewise. + * config/darwin.h (MACHO_SYMBOL_FLAG_INDIRECTION): New. + (MACHO_SYMBOL_INDIRECTION_P): New. + (MACHO_SYMBOL_FLAG_STATIC): Adjust bit number. + + 2019-10-08 Jason Merrill + + * doc/invoke.texi: Document -fconcepts-ts. + + 2019-10-09 Richard Biener + + * tree-vect-loop.c (vect_is_simple_reduction): Simplify and + allow stmts other than GIMPLE_ASSIGN in nested cycles. + + 2019-10-08 Richard Biener + + * tree-vectorizer.h (_stmt_vec_info::reduc_vectype_in): New. + (_stmt_vec_info::force_single_cycle): Likewise. + (STMT_VINFO_FORCE_SINGLE_CYCLE): New. + (STMT_VINFO_REDUC_VECTYPE_IN): Likewise. + * tree-vect-loop.c (vectorizable_reduction): Set + STMT_VINFO_REDUC_VECTYPE_IN and STMT_VINFO_FORCE_SINGLE_CYCLE. + (vect_transform_reduction): Use them to remove redundant code. + (vect_transform_cycle_phi): Likewise. + + 2019-10-08 Dmitrij Pochepko + + PR tree-optimization/90836 + * match.pd (popcount): New pattern. + + 2019-10-08 Martin Sebor + + PR middle-end/92026 + PR middle-end/92014 + * tree-ssa-strlen.c (count_nonzero_bytes): Avoid recursing for MEM_REF + again once nbytes has been set. Set the access size when not yet set. + + 2019-10-08 Iain Sandoe + + * config/darwin.c (machopic_select_section): Remove dead code for + old Objective-C section selection method, replace with unreachable. + + 2019-10-08 Iain Sandoe + + * config/darwin.c (machopic_indirect_data_reference): Check for + required indirections before making direct access to defined + values. + (machopic_output_indirection): Place the indirected pointes for + required indirections into the non-lazy symbol pointers section. + (darwin_encode_section_info): + * config/darwin.h (MACHO_SYMBOL_FLAG_MUST_INDIRECT): New. + (MACHO_SYMBOL_MUST_INDIRECT_P): New. + + 2019-10-08 Uroš Bizjak + + PR target/91994 + * config/i386/i386.c (x86_avx_u128_mode_needed): Use SSE_REG + instead of ALL_SSE_REG to check if function call preserves some + 256-bit SSE registers. + + 2019-10-08 Tulio Magno Quites Machado Filho + + * config.gcc: Move -L usage from LINK_OS_EXTRA_SPEC32 and + LINK_OS_EXTRA_SPEC64 to MD_STARTFILE_PREFIX and + MD_STARTFILE_PREFIX_1 when using --with-advance-toolchain. + + 2019-10-08 Richard Biener + + * tree-vectorizer.h (_stmt_vec_info::v_reduc_type): Remove. + (_stmt_vec_info::is_reduc_info): Add. + (STMT_VINFO_VEC_REDUCTION_TYPE): Remove. + (vectorizable_condition): Remove. + (vectorizable_shift): Likewise. + (vectorizable_reduction): Adjust. + (info_for_reduction): New. + * tree-vect-loop.c (vect_force_simple_reduction): Fold into... + (vect_analyze_scalar_cycles_1): ... here. + (vect_analyze_loop_operations): Adjust. + (needs_fold_left_reduction_p): Simplify for single caller. + (vect_is_simple_reduction): Likewise. Remove stmt restriction + for nested cycles not part of double reductions. + (vect_model_reduction_cost): Pass in the reduction type. + (info_for_reduction): New function. + (vect_create_epilog_for_reduction): Use it, access reduction + meta off the stmt info it returns. Use STMT_VINFO_REDUC_TYPE + instead of STMT_VINFO_VEC_REDUCTION_TYPE. + (vectorize_fold_left_reduction): Remove pointless assert. + (vectorizable_reduction): Analyze the full reduction when + visiting the outermost PHI. Simplify. Use STMT_VINFO_REDUC_TYPE + instead of STMT_VINFO_VEC_REDUCTION_TYPE. Direct reduction + stmt code-generation to vectorizable_* in most cases. Verify + code-generation only for cases handled by + vect_transform_reductuon. + (vect_transform_reduction): Use info_for_reduction to get at + reduction meta. Simplify. + (vect_transform_cycle_phi): Likewise. + (vectorizable_live_operation): Likewise. + * tree-vect-patterns.c (vect_reassociating_reduction_p): Look + at the PHI node for STMT_VINFO_REDUC_TYPE. + * tree-vect-slp.c (vect_schedule_slp_instance): Remove no + longer necessary code. + * tree-vect-stmts.c (vectorizable_shift): Make static again. + (vectorizable_condition): Likewise. Get at reduction related + info via info_for_reduction. + (vect_analyze_stmt): Adjust. + (vect_transform_stmt): Likewise. + * tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize + STMT_VINFO_REDUC_TYPE instead of STMT_VINFO_VEC_REDUCTION_TYPE. + + 2019-10-08 Joseph Myers + + * doc/invoke.texi (-ffp-int-builtin-inexact): Document + -fno-fp-int-builtin-inexact default for C2X. + + 2019-10-07 Prathamesh Kulkarni + Richard Biener + + PR tree-optimization/91532 + * tree-if-conv.c: Include tree-ssa-dse.h. + (ifcvt_local_dce): Change param from bb to loop, + and call dse_classify_store. + (tree_if_conversion): Pass loop instead of loop->header as arg + to ifcvt_local_dce. + * tree-ssa-dse.c: Include tree-ssa-dse.h. + (delete_dead_or_redundant_assignment): Remove static qualifier from + declaration, and add prototype in tree-ssa-dse.h. + (dse_store_status): Move to tree-ssa-dse.h. + (dse_classify_store): Remove static qualifier and add new tree param + stop_at_vuse, and add prototype in tree-ssa-dse.h. + * tree-ssa-dse.h: New header. + + 2019-10-07 Iain Sandoe + + * config/darwin.c (machopic_output_indirection): Don't put + hidden symbol indirections into the .data section, use the + non-lazy symbol pointers section as normal. + (darwin_encode_section_info): Record if a symbol is hidden. + * config/darwin.h (MACHO_SYMBOL_FLAG_HIDDEN_VIS): New. + (MACHO_SYMBOL_HIDDEN_VIS_P): New. + + 2019-10-07 Iain Sandoe + + * config/darwin.c (machopic_symbol_defined_p): Use symbol flag + predicates instead of accessing bits directly. + (machopic_indirect_call_target): Likewise. + (machopic_output_indirection): Likewise. + (darwin_encode_section_info): Improve description. Use renamed + symbol flags. Use predicate macros for variables and functions. + * config/darwin.h: + Rename MACHO_SYMBOL_VARIABLE to MACHO_SYMBOL_FLAG_VARIABLE. + Rename MACHO_SYMBOL_DEFINED to MACHO_SYMBOL_FLAG_DEFINED. + Rename MACHO_SYMBOL_STATIC to MACHO_SYMBOL_FLAG_STATIC. + (MACHO_SYMBOL_VARIABLE_P): New. + (MACHO_SYMBOL_DEFINED_P):New. + (MACHO_SYMBOL_STATIC_P): New. + * config/i386/darwin.h (MACHO_SYMBOL_FLAG_VARIABLE): Delete. + (SYMBOL_FLAG_SUBT_DEP): New. + * config/rs6000/darwin.h (SYMBOL_FLAG_SUBT_DEP): New. + + 2019-10-07 Jozef Lawrynowicz + + * config/msp430/msp430.c (msp430_file_end): s/msp_/msp430_/ + (msp430_expand_epilogue): Likewise. + * config/msp430/predicates.md: Likewise. + * config/msp430/msp430.md: Likewise. + Replace blocks of 8 spaces with tabs. + + 2019-10-07 Jozef Lawrynowicz + + * config/msp430/msp430-protos.h (msp430_split_addsi): New prototype. + * config/msp430/msp430.c (msp430_split_addsi): New. + * config/msp430/msp430.md: Call msp430_split_addsi () instead of using + a block of C code for splitting addsi. + + 2019-10-07 Uroš Bizjak + + * config/i386/i386-expand.c (ix86_expand_floorceildf_32, + ix86_expand_rounddf_32): Reorder functions. + * config/i386/i386-protos.h: Update. + + 2019-10-07 Jozef Lawrynowicz + + * config.in: Regenerate. + * config/msp430/constraints.md: Fix docstring for "Ys" constraint. + Add new "Yx" constraint. + * config/msp430/driver-msp430.c (msp430_propagate_region_opt): New spec + function. + * config/msp430/msp430-protos.h (msp430_op_not_in_high_mem): New + prototype. + * config/msp430/msp430.c (msp430_option_override): Allow the lower + code/data region to be selected in the small memory model. + (msp430_section_attr): Don't warn if the "section" and "lower" + attributes are used together. + (msp430_handle_generic_attribute): Likewise. + (msp430_var_in_low_mem): New function. + (TARGET_ENCODE_SECTION_INFO): Define. + (msp430_encode_section_info): New function. + (gen_prefix): Return early in the small memory model. + Require TARGET_USE_LOWER_REGION_PREFIX to be set before adding the + ".lower" prefix if -m{code,data}-region=lower have been passed. + (msp430_output_aligned_decl_common): Emit common symbols when + -mdata-region=lower is passed unless TARGET_USE_LOWER_REGION_PREFIX is + set. + (TARGET_ASM_FILE_END): Define. + (msp430_file_end): New function. + (msp430_do_not_relax_short_jumps): Allow relaxation when + function will be in the lower region. + (msp430_op_not_in_high_mem): New function. + (msp430_print_operand): Check "msp430_op_not_in_high_mem" for + the 'X' operand selector. + Clarify comment for 'x' operand selector. + * config/msp430/msp430.h (LINK_SPEC): Propagate + -m{code,data}-region to the linker via spec function + msp430_propagate_region_opt. + (msp430_propagate_region_opt): New prototype. + (EXTRA_SPEC_FUNCTIONS): Add msp430_propagate_region_opt. + (SYMBOL_FLAG_LOW_MEM): Define. + * config/msp430/msp430.md (addsipsi3): Add missing "%X" operand + selector. + (zero_extendqihi2): Fix operand number used by "%X" selector. + (zero_extendqisi2): Likewise. + (zero_extendhisi2): Likewise. + (movqi): Use "Yx" constraint in place of "%X" operand selector. + (movhi): Likewise. + (addqi3): Likewise. + (addhi3): Likewise. + (addsi3): Likewise. + (addhi3_cy): Likewise. + (addchi4_cy): Likewise. + (subqi3): Likewise. + (subhi3): Likewise. + (subsi3): Likewise. + (bic3): Likewise. + (and3): Likewise. + (ior3): Likewise. + (xor3): Likewise. + (slli_1): Add missing "%X" operand selector. + (slll_1): Likewise. + (slll_2): Likewise. + (srai_1): Likewise. + (sral_1): Likewise. + (sral_2): Likewise. + (srli_1): Likewise. + (srll_1): Likewise. + (cbranchqi4_real): Use "Yx" constraint in place of "%X" operand + selector. + (cbranchhi4_real): Likewise. + (cbranchqi4_reversed): Likewise. + (cbranchhi4_reversed): Likewise. + (*bitbranch4): Likewise. + (*bitbranch4_z): Remove unnecessary "%x" operand selector. + * config/msp430/msp430.opt (mcode-region=): Set default to + MSP430_REGION_LOWER. Improve docstring. + (mdata-region=): Likewise. + (muse-lower-region-prefix): New option. + * config/msp430/t-msp430 (MULTILIB_OPTIONS): Add + mdata-region=none multilib. + (MULTILIB_MATCHES): Set mdata-region={upper,either} to match + mdata-region=none multilib. + MULTILIB_EXCEPTIONS: Remove. + MULTILIB_REQUIRED: Define. + * configure: Regenerate. + * configure.ac: Define HAVE_AS_GNU_ATTRIBUTE and + HAVE_AS_MSPABI_ATTRIBUTE if GAS version >= 2.33.50. + * doc/extend.texi: Clarify comment for {upper,lower,either} + function attributes. + Add separate description for "lower" variable attribute. + + 2019-10-07 Ilya Leoshkevich + + PR target/77918 + * optabs-tree.c (vcond_icode_p): New function. + (vcond_eq_icode_p): Likewise. + (expand_vec_cond_expr_p): Use vcond_icode_p and + vcond_eq_icode_p. + * optabs.c (can_vcond_compare_p): New function. + * optabs.h (can_vcond_compare_p): Likewise. + + 2019-10-07 Ilya Leoshkevich + + PR target/77918 + * gimple-expr.c (gimple_cond_get_ops_from_tree): Assert that the + caller passes a non-trapping condition. + (is_gimple_condexpr): Allow trapping conditions. + (is_gimple_condexpr_1): New helper function. + (is_gimple_condexpr_for_cond): New function, acts like old + is_gimple_condexpr. + * gimple-expr.h (is_gimple_condexpr_for_cond): New function. + * gimple.c (gimple_could_trap_p_1): Handle COND_EXPR and + VEC_COND_EXPR. Fix an issue with statements like i = (fp < 1.). + * gimplify.c (gimplify_cond_expr): Use + is_gimple_condexpr_for_cond. + (gimplify_expr): Allow is_gimple_condexpr_for_cond. + * tree-eh.c (operation_could_trap_p): Assert on COND_EXPR and + VEC_COND_EXPR. + (tree_could_trap_p): Handle COND_EXPR and VEC_COND_EXPR. + * tree-ssa-forwprop.c (forward_propagate_into_gimple_cond): Use + is_gimple_condexpr_for_cond, remove pointless tmp check + (forward_propagate_into_cond): Remove pointless tmp check. + + 2019-10-07 Vladislav Ivanishin + + * gimple-iterator.h (gsi_next_nonvirtual_phi): Change the semantics to + match that of other gsi_next_* functions. Adjust the comment. + (gsi_start_nonvirtual_phis): New function. + * ipa-icf.c (sem_function::compare_phi_node): Update uses of + gsi_next_nonvirtual_phi accordingly. (No functional change.) + + 2019-10-07 Vladislav Ivanishin + + * doc/invoke.texi (-Wuninitialized): Don't mention the clobbered by + setjmp situation here. Fix a verb's ending: "the exact variables or + elements for which there are warnings depends" -> "... depend". + + 2019-10-07 Aldy Hernandez + + * ipa-prop.c (ipa_vr::nonzero_p): Add TYPE_UNSIGNED check. + + 2019-10-07 Aldy Hernandez + + * ipa-prop.c (ipa_vr::nonzero_p): New. + (ipcp_update_vr): Use nonzero_p instead of open-coding check for + non-zero range. + * ipa-prop.h (class ipa_vr): Add nonzero_p. + * tree-vrp.c (range_has_numeric_bounds_p): New. + (range_int_cst_p): Use range_has_numeric_bounds_p. + (get_range_op_handler): New. + (supported_types_p): New. + (defined_ranges_p): New. + (drop_undefines_to_varying): New. + (range_fold_binary_symbolics_p): New. + (range_fold_unary_symbolics_p): New. + (range_fold_unary_expr): Extract out into above functions. + (range_fold_binary_expr): Same. + (value_range_base::normalize_addresses): New. + (value_range_base::normalize_symbolics): Normalize addresses. + * tree-vrp.h (class value_range_base): Add normalize_addresses. + + 2019-10-07 Aldy Hernandez + + * tree-vrp.c (value_range_base::singleton_p): Use + value_range_base::num_pairs instead of vrp_val_is* to check + if a range has one sub-range. + + 2019-10-07 Richard Sandiford + + * ira-lives.c (check_and_make_def_conflict): Handle cases in which + DEF is not a true earlyclobber but is tied to a specific input + operand, and so is effectively earlyclobber wrt inputs that have + different values. + (make_early_clobber_and_input_conflicts): Pass this case to the above. + + 2019-10-07 Richard Sandiford + + * machmode.h (opt_mode): Mark constructors with CONSTEXPR. + (pod_mode): Mark operators likewise. + (scalar_int_mode): Mark non-default constructors and + operators with CONSTEXPR. + (scalar_float_mode, scalar_mode, complex_mode): Likewise. + (fixed_size_mode): Likewise. + + 2019-10-07 Richard Sandiford + + PR target/91994 + * config/i386/sse.md (avx_vzeroupper): Turn into a define_expand + and wrap the unspec_volatile in a parallel. + (*avx_vzeroupper): New define_insn. Use a match_parallel around + the unspec_volatile. + * config/i386/predicates.md (vzeroupper_pattern): Expect the + unspec_volatile to be wrapped in a parallel. + * config/i386/i386-features.c (ix86_add_reg_usage_to_vzeroupper) + (ix86_add_reg_usage_to_vzerouppers): New functions. + (rest_of_handle_insert_vzeroupper): Use them to add register + usage information to the vzeroupper instructions. + + 2019-10-07 Richard Biener + + PR tree-optimization/91975 + * tree-ssa-loop-ivcanon.c (constant_after_peeling): Consistently + handle invariants. + + 2019-10-06 Richard Sandiford + + * var-tracking.c (dataflow_set_clear_at_call): Hoist temporary + function result outside of EXECUTE_IF_SET_IN_HARD_REG_SET. + + 2019-10-06 Iain Sandoe + + * config/darwin.c (darwin_override_options): Adjust objective-c + ABI version error messages to avoid punctuation and contracted + negations. + + 2019-10-05 Jan Hubicka + + * ipa-inline.c: Fix type; compute size rather than self_size + for size of caller function. + + 2019-10-05 Iain Sandoe + + PR target/59888 + * config/darwin.c (darwin_rodata_section): Add relocation flag, + choose const_data section for constants with relocations. + (machopic_select_section): Pass relocation flag to + darwin_rodata_section (). + + 2019-10-05 Jakub Jelinek + + PR tree-optimization/91734 + * generic-match-head.c: Include fold-const-call.h. + * match.pd (sqrt(x) cmp c): Check the boundary value and + in case inexact computation of c*c affects comparison of the boundary, + turn LT_EXPR into LE_EXPR, GE_EXPR into GT_EXPR, LE_EXPR into LT_EXPR + or GT_EXPR into GE_EXPR. Punt for sqrt comparisons against NaN and + for -frounding-math. For c2, try the next smaller or larger floating + point constant depending on comparison code and if it has the same + sqrt as c2, use it instead of c2. + + 2019-10-04 Martin Sebor + + PR middle-end/91977 + * tree-ssa-strlen.c (count_nonzero_bytes): Handle assignments with + MEM_REF right operand. Avoid failing for MEM_REF assignments from + uninitialized objects. + + 2019-10-04 Martin Sebor + + * builtins.c (compute_objsize): Add an argument. + * tree-object-size.c (addr_object_size): Same. + (compute_builtin_object_size): Same. + * tree-object-size.h (compute_builtin_object): Same. + + 2019-10-04 Jan Hubicka + + * ipa-inline.c (inline_insns_single, inline_insns_auto): Fix typo. + + 2019-10-04 Rafael Tsuha + + * match.pd (sinh (x) / cosh (x)): New simplification rule. + + 2019-10-04 Martin Jambor + + * tree-ssa-forwprop.c (simplify_builtin_call): Set gimple call + fntype when switching to calling memcpy instead of memset. + + 2019-10-04 Bernd Edlinger + + * hash-table.h (hash_table::empty_slow): Don't assign + size_t values to int variables. + + 2019-10-04 Bernd Edlinger + + * expr.c (convert_mode_scalar): Remove shadowing local var. + (emit_block_move): Rename local vars. + (block_move_libcall_safe_for_call_parm): Remove shadowing local var. + (emit_push_insn): Rename local vars. + (expand_assignment): Fix wrong mode in assign_stack_temp. Remove + shadowing local vars. + (store_constructor): Remove shadowing local vars. Rename local var. + (store_field, expand_cond_expr_using_cmove, + expand_expr_real_2): Remove shadowing local vars. + (expand_expr_real_1, + do_store_flag): Remove shadowing local vars. Rename local vars. + + 2019-10-04 Bernd Edlinger + + * cgraph.h (FOR_EACH_ALIAS): Avoid shadowing the loop variable. + + 2019-10-04 Bernd Edlinger + + * genmatch.c (commutate): Rename local var. + (lower_cond): Reuse local var. + (dt_node::gen, dt_node::gen_kids, dt_node::gen_kids_1, + dt_operand::gen, dt_operand::gen_gimple_expr, + dt_simplify::gen): Add a param. Rename generated vars. + (decision_tree::insert_operand, + (capture_info::walk_match, capture_info::walk_result, + capture_info::walk_c_expr): Rename local vars. + (expr::gen_transform): Rename generated vars. + Use snprintf. Rename local vars. + (capture::gen_transform, dt_operand::get_name, + dt_operand::gen_opname): Rename generated vars. + (write_predicate): Adjust call to gen_kids. + (parser::get_internal_capture_id): Rename generated vars. + (parser::parse_expr): Rename local vars. + (parser::parse_if): Remove local var. + (parser::parse_pattern, add_operator): Rename local vars. + + 2019-10-04 Joseph Myers + + * builtins.def (DEF_C2X_BUILTIN): New macro. + (exp10, exp10f, exp10l, fabsd32, fabsd64, fabsd128, nand32) + (nand64, nand128, roundeven, roundevenf, roundevenl, strdup) + (strndup): Use DEF_C2X_BUILTIN. + * coretypes.h (enum function_class): Add function_c2x_misc. + + 2019-10-04 Maya Rashish + + * ira-color.c (update_costs_from_allocno): Call + ira_init_register_move_cost_if_necessary. + + 2019-10-04 Jeff Law + + * config/h8300/h8300.md (cpymemsi): Disable. + (movmd, movmd_internal_, movstr, movsd): + (movstr, movsd, stpcpy_internal_: Likewise. + (movmd splitter, movsd splitter): Likewise. + + * range-op.cc (range_tests): Avoid two tests when ints and + shorts are the same size. + + 2019-10-04 Richard Biener + + PR lto/91968 + * tree.c (find_decls_types_r): Do not remove LABEL_DECLs from + BLOCK_VARS. + + 2019-10-04 Richard Biener + + PR tree-optimization/91982 + * tree-vect-loop.c (vectorizable_live_operation): Also guard + against EXTRACT_LAST_REDUCTION. + * tree-vect-stmts.c (vect_transform_stmt): Likewise. + + 2019-10-04 Aldy Hernandez + + * range-op.o (value_range_from_overflowed_bounds): Rename from + adjust_overflow_bound. + (value_range_with_overflow): Rename from + create_range_with_overflow. + (create_possibly_reversed_range): Adjusted for above renames. + (operator_*::wi_fold): Same. + (cross_product_operator::wi_cross_productor): Same. + + 2019-10-04 Bernd Edlinger + + * doc/invoke.texi (-Wshadow=global, -Wshadow=local, + -Wshadow=compatible-local): Fix description. + Add an example where -Wshadow=compatible-local does not + warn. + + 2019-10-03 John David Anglin + + * config/pa/pa.h (MAX_PCREL17F_OFFSET): Adjust. + + * config/pa/pa.c (pa_output_call): Remove 64-bit sibcall sequence. + (pa_attr_length_call): Adjust length for 64-bit plabel sequence. + + 2019-10-03 Aaron Sawdey + + * expr.c (emit_block_move_hints): Slightly cleaner fix to + can_move_by_pieces issue. + + 2019-10-03 Iain Sandoe + + PR target/87243 + * config/darwin-driver.c (maybe_get_sysroot_from_sdkroot): New. + (darwin_driver_init): Use the sysroot provided by SDKROOT when that + is available and the user has not set one on the command line. + + 2019-10-03 Dragan Mladjenovic + + PR target/91769 + * config/mips/mips.c (mips_split_move): Use reg_overlap_mentioned_p + instead of REGNO equality check on addr.reg. + + 2019-10-03 Jan Hubicka + + * params.def (PARAM_INLINE_HEURISTICS_HINT_PERCENT, + PARAM_INLINE_HEURISTICS_HINT_PERCENT_O2): New. + * doc/invoke.texi (inline-heuristics-hint-percent, + inline-heuristics-hint-percent-O2): Document. + * tree-inline.c (inline_insns_single, inline_insns_auto): Add new + hint attribute. + (can_inline_edge_by_limits_p): Use it. + + 2019-10-03 Richard Sandiford + + * config/arm/arm.c (arm_print_value): Use real_to_decimal + to print CONST_DOUBLEs. + + 2019-10-03 Andrea Corallo + + * ipa-cp.c (ipa_cp_c_finalize): Release ipcp_transformation_sum. + * ipa-prop.c (ipcp_free_transformation_sum): New function. + * ipa-prop.h (ipcp_free_transformation_sum): Add declaration. + + 2019-10-03 Aldy Hernandez + + * Makefile.in (OBJS): Add range.o and range-op.o. + Remove wide-int-range.o. + * function-tests.c (test_ranges): New. + (function_tests_c_tests): Call test_ranges. + * ipa-cp.c (ipa_vr_operation_and_type_effects): Call + range_fold_unary_expr instead of extract_range_from_unary_expr. + * ipa-prop.c (ipa_compute_jump_functions_for_edge): Same. + * range-op.cc: New file. + * range-op.h: New file. + * range.cc: New file. + * range.h: New file. + * selftest.h (range_tests): New prototype. + * ssa.h: Include range.h. + * tree-vrp.c (value_range_base::value_range_base): New + constructors. + (value_range_base::singleton_p): Do not call + ranges_from_anti_range until sure we will need to. + (value_range_base::type): Rename gcc_assert to + gcc_checking_assert. + (vrp_val_is_max): New argument. + (vrp_val_is_min): Same. + (wide_int_range_set_zero_nonzero_bits): Move from + wide-int-range.cc. + (extract_range_into_wide_ints): Remove. + (extract_range_from_multiplicative_op): Remove. + (extract_range_from_pointer_plus_expr): Abstract POINTER_PLUS code + from extract_range_from_binary_expr. + (extract_range_from_plus_minus_expr): Abstract PLUS/MINUS code + from extract_range_from_binary_expr. + (extract_range_from_binary_expr): Remove. + (normalize_for_range_ops): New. + (range_fold_binary_expr): New. + (range_fold_unary_expr): New. + (value_range_base::num_pairs): New. + (value_range_base::lower_bound): New. + (value_range_base::upper_bound): New. + (value_range_base::upper_bound): New. + (value_range_base::contains_p): New. + (value_range_base::invert): New. + (value_range_base::union_): New. + (value_range_base::intersect): New. + (range_compatible_p): New. + (value_range_base::operator==): New. + (determine_value_range_1): Call range_fold_*expr instead of + extract_range_from_*expr. + * tree-vrp.h (class value_range_base): Add new constructors. + Add methods for union_, intersect, operator==, contains_p, + num_pairs, lower_bound, upper_bound, invert. + (vrp_val_is_min): Add handle_pointers argument. + (vrp_val_is_max): Same. + (extract_range_from_unary_expr): Remove. + (extract_range_from_binary_expr): Remove. + (range_fold_unary_expr): New. + (range_fold_binary_expr): New. + * vr-values.c (vr_values::extract_range_from_binary_expr): Call + range_fold_binary_expr instead of extract_range_from_binary_expr. + (vr_values::extract_range_basic): Same. + (vr_values::extract_range_from_unary_expr): Call + range_fold_unary_expr instead of extract_range_from_unary_expr. + * wide-int-range.cc: Remove. + * wide-int-range.h: Remove. + + 2019-10-02 Michael Meissner + + * config/rs6000/rs6000.c (mem_operand_gpr): Use + SIGNED_16BIT_OFFSET_EXTRA_P macro. + (mem_operand_ds_form): Use SIGNED_16BIT_OFFSET_EXTRA_P macro. + (rs6000_mode_dependent_address): Use SIGNED_16BIT_OFFSET_EXTRA_P + macro. + + 2019-10-02 Joseph Myers + + * ginclude/stdint-gcc.h [__STDC_WANT_IEC_60559_BFP_EXT__]: Change + condition on WIDTH macros to [__STDC_WANT_IEC_60559_BFP_EXT__ || + (__STDC_VERSION__ && __STDC_VERSION__ > 201710L)]. + * glimits.h: Likewise. + + 2019-10-03 Jakub Jelinek + + PR rtl-optimization/91976 + * expr.c (emit_block_move_hints): Don't call can_move_by_pieces if + size is not CONST_INT_P, set pieces_ok to false in that case. Simplify + CONST_INT_P (size) && pieces_ok to pieces_ok. Formatting fix. + + 2019-10-02 Martin Sebor + + PR tree-optimization/80936 + * builtins.def (bcmp, bcopy, bzero): Declare nonnull. + + 2019-10-02 Richard Sandiford + + * cgraph.c (cgraph_node::rtl_info): Use SET_HARD_REG_SET + instead of reg_class_contents[ALL_REGS]. + + 2019-09-30 Jason Merrill + + Add some hash_map_safe_* functions like vec_safe_*. + * hash-map.h (default_hash_map_size): New variable. + (create_ggc): Use it as default argument. + (hash_map_maybe_create, hash_map_safe_get) + (hash_map_safe_get_or_insert, hash_map_safe_put): New fns. + + 2019-10-02 Jan Hubicka + + * cif-code.def (MAX_INLINE_INSNS_SINGLE_O2_LIMIT, + MAX_INLINE_INSNS_AUTO_O2_LIMIT): New. + * ipa-inline.c (inline_insns_single, inline_insns_auto): New functions. + (can_inline_edge_by_limits_p): Use it. + (big_speedup_p): Use PARAM_INLINE_MIN_SPEEDUP_O2. + (want_inline_small_function_p): Use O2 bounds. + (edge_badness): LIkewise. + * opts.c (default_options): Add OPT_finline_functions. + * params.def (PARAM_INLINE_MIN_SPEEDUP_O2, + PARAM_MAX_INLINE_INSNS_SINGLE_O2, PARAM_MAX_INLINE_INSNS_AUTO_O2): + New parameters. + * doc/invoke.texi (-finline-functions): Update documentation. + (max-inline-insns-single-O2, max-inline-insns-auto-O2, + inline-min-speedup-O2): Document. + (early-inlining-insns-O2): Simplify docs. + + 2019-10-02 Alexander Monakov + + PR rtl-optimization/87047 + * ifcvt.c (average_cost): New static function. Use it... + (noce_process_if_block): ... here. + + 2019-10-02 Aaron Sawdey + + * config/rs6000/rs6000-protos.h (expand_block_move): Change prototype. + * config/rs6000/rs6000-string.c (expand_block_move): Add + might_overlap parm. + * config/rs6000/rs6000.md (movmemsi): Add new pattern. + (cpymemsi): Add might_overlap parm to expand_block_move() call. + + 2019-10-02 Aaron Sawdey + + * builtins.c (expand_builtin_memory_copy_args): Add might_overlap parm. + (expand_builtin_memcpy): Use might_overlap parm. + (expand_builtin_mempcpy_args): Use might_overlap parm. + (expand_builtin_memmove): Call expand_builtin_memory_copy_args. + (expand_builtin_memory_copy_args): Add might_overlap parm. + * expr.c (emit_block_move_via_cpymem): Rename to + emit_block_move_via_pattern, add might_overlap parm, use cpymem + or movmem optab as appropriate. + (emit_block_move_hints): Add might_overlap parm, do the right + thing for might_overlap==true. + * expr.h (emit_block_move_hints): Update prototype. + + 2019-10-02 Eric Botcazou + + * tree-eh.h (unsplit_eh_edges): Declare. + * tree-eh.c (maybe_remove_unreachable_handlers): Detect more cases. + (unsplit_eh_edges): New function wrapping unsplit_all_eh. + * gimple-ssa-store-merging.c: Include cfganal.h cfgcleanup.h except.h. + (struct store_immediate_info): Add lp_nr field. + (store_immediate_info::store_immediate_info): Add NR2 parameter and + initialize lp_nr with it. + (struct merged_store_group): Add lp_nr and only_constants fields. + (merged_store_group::merged_store_group): Initialize them. + (merged_store_group::can_be_merged_into): Deal with them. + (pass_store_merging): Rename terminate_and_release_chain into + terminate_and_process_chain. + (pass_store_merging::terminate_and_process_all_chains): Adjust to above + renaming and remove useless assertions. + (pass_store_merging::terminate_all_aliasing_chains): Small tweak. + (stmts_may_clobber_ref_p): Be prepared for different basic blocks. + (imm_store_chain_info::coalesce_immediate_stores): Use only_constants + instead of always recomputing it and compare lp_nr. + (imm_store_chain_info::output_merged_store): If the group is in an + active EH region, register new stores if they can throw. Moreover, + if the insertion has created new basic blocks, adjust the PHI nodes + of the post landing pad. + (imm_store_chain_info::output_merged_stores): If the original stores + are in an active EH region, deregister them. + (lhs_valid_for_store_merging_p): Prettify. + (adjust_bit_pos): New function extracted from... + (mem_valid_for_store_merging): ...here. Use it for the base address + and also for the offset if it is the addition of a constant. + (lp_nr_for_store): New function. + (pass_store_merging::process_store): Change return type to bool. + Call lp_nr_for_store to initialize the store info. Propagate the + return status of various called functions to the return value. + (store_valid_for_store_merging_p): New predicate. + (enum basic_block_status): New enumeration. + (get_status_for_store_merging): New function. + (pass_store_merging::execute): If the function can throw and catch + non-call exceptions, unsplit the EH edges on entry and clean up the + CFG on exit if something changed. Call get_status_for_store_merging + for every basic block and keep the chains open across basic blocks + when possible. Terminate and process open chains at the end, if any. + + 2019-10-02 Richard Sandiford + + * reginfo.c (globalize_reg): Fix shadowed variable in + function_abis walk. + + 2019-10-02 Martin Jambor + + * cgraph.c (symbol_table::create_edge): New parameter cloning_p, + do not compute some stuff when set. + (cgraph_node::create_edge): Likewise. + (cgraph_node::create_indirect_edge): Renamed last parameter to + coning_p and flipped its meaning, don't even calculate + inline_failed when set. + * cgraph.h (cgraph_node::create_edge): Add new parameter. + (symbol_table::::create_edge): Likewise. + (cgraph_node::create_indirect_edge): Rename last parameter, flip + the default value. + * cgraphclones.c (cgraph_edge::clone): Pass true cloning_p to all + call graph edge creating functions. + + 2019-10-01 Jan Hubicka + + PR c++/91222 + * ipa-devirt.c (warn_types_mismatch): Fix conditional on anonymous + namespace types. + + 2019-10-02 Shahab Vahedi + + * config/arc/arc.h (ASM_SPEC): Pass -mcode-density. + + 2019-10-02 Richard Biener + + * tree-vectorizer.h (vect_transform_reduction): Declare. + * tree-vect-stmts.c (vect_transform_stmt): Use it. + * tree-vect-loop.c (vectorizable_reduction): Split out reduction + stmt transform to ... + (vect_transform_reduction): ... this. + + 2019-10-02 Tobias Burnus + + * omp-low.c (lower_omp_target): Dereference optional argument + to work with the right pointer. + + 2019-10-02 Kwok Cheung Yeung + + * langhooks-def.h (LANG_HOOKS_OMP_IS_OPTIONAL_ARGUMENT): Default to + false. + (LANG_HOOKS_DECLS): Add LANG_HOOKS_OMP_IS_OPTIONAL_ARGUMENT. + * langhooks.h (omp_is_optional_argument): New hook. + * omp-general.c (omp_is_optional_argument): New. + * omp-general.h (omp_is_optional_argument): New declaration. + * omp-low.c (lower_omp_target): Create temporary for received value + and take the address for new_var if the original variable was a + DECL_BY_REFERENCE. Use size of referenced object when a + pass-by-reference optional argument used as argument to firstprivate. + + 2019-10-02 Jakub Jelinek + + PR tree-optimization/91940 + * tree-vect-patterns.c: Include tree-vector-builder.h and + vec-perm-indices.h. + (vect_recog_rotate_pattern): Also handle __builtin_bswap16, either by + unpromoting the argument back to uint16_t, or by converting into a + rotate, or into shifts plus ior. + + 2019-10-02 Richard Biener + + * tree-vectorizer.h (stmt_vec_info_type::cycle_phi_info_type): + New. + (vect_transform_cycle_phi): Declare. + * tree-vect-stmts.c (vect_transform_stmt): Call + vect_transform_cycle_phi. + * tree-vect-loop.c (vectorizable_reduction): Split out + PHI transformation stage to ... + (vect_transform_cycle_phi): ... here. + + 2019-10-02 Richard Sandiford + + PR middle-end/91957 + * lra-lives.c (make_hard_regno_dead): Don't record conflicts for + eliminable registers. + (make_hard_regno_live): Likewise, and don't make them live. + + 2019-10-01 David Malcolm + + * diagnostic-show-locus.c (layout::print_gap_in_line_numbering): + Call pp_emit_prefix. + (layout::print_source_line): Likewise. + (layout::start_annotation_line): Likewise. + (diagnostic_show_locus): Remove call to temporarily clear the + prefix. + (selftest::test_one_liner_fixit_remove): Add test coverage for the + interaction of pp_set_prefix with rulers and fix-it hints. + * diagnostic.c (default_diagnostic_finalizer): Temporarily clear + prefix when calling diagnostic_show_locus, rather than destroying + it afterwards. + (print_parseable_fixits): Temporarily clear prefix. + * pretty-print.c (pp_format): Save and restore line_length, rather + than assuming it is zero. + (pp_output_formatted_text): Remove assertion that line_length is + zero. + + 2019-10-01 Jan Hubicka + + * tree-ssa-alias.c (nonoverlapping_component_refs_since_match_p): + Rename to ... + (nonoverlapping_refs_since_match_p): ... this; handle also + ARRAY_REFs. + (alias_stats): Update stats. + (dump_alias_stats): Likewise. + (cheap_array_ref_low_bound): New function. + (aliasing_matching_component_refs_p): Add partial_overlap + argument; + pass it to nonoverlapping_refs_since_match_p. + (aliasing_component_refs_walk): Update call of + aliasing_matching_component_refs_p + (nonoverlapping_array_refs_p): New function. + (decl_refs_may_alias_p, indirect_ref_may_alias_decl_p, + indirect_refs_may_alias_p): Update calls of + nonoverlapping_refs_since_match_p. + + 2019-10-01 Maya Rashish + + PR target/85401 + * ira-color.c (allocno_copy_cost_saving): Call + ira_init_register_move_cost_if_necessary. + + 2019-10-01 Maciej W. Rozycki + + * Makefile.in (gnat_install_lib): New variable. + * configure.ac: Substitute it. + * configure: Regenerate. + + 2019-10-01 Jan Hubicka + + PR lto/91222 + * ipa-devirt.c (warn_types_mismatch): Do not ICE when anonymous type + is matched with non-C++ type + + 2019-10-01 Prathamesh Kulkarni + + * tree-if-conv.c (tree_if_conversion): Move call to ifcvt_local_dce + after local CSE. + + 2019-10-01 Jan Hubicka + + * doc/invoke.texi (early-inlining-insns-O2): Document. + (early-inlining-insns): Update. + * params.def (early-inlining-insns-O2): New bound. + (early-inlining-insns): Update docs. + * ipa-inline.c (want_early_inline_function_p): Use new bound. + + 2019-10-01 Oleg Endo + + PR target/88562 + * config/sh/sh.c (sh_extending_set_of_reg::use_as_extended_reg): Use + sh_check_add_incdec_notes to preserve REG_INC notes when replacing + a memory access insn. + + 2019-10-01 Bill Schmidt + + * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Don't swap + vpmsumd. + + 2019-10-01 Ilya Leoshkevich + + PR target/77918 + * config/s390/s390.c (s390_expand_vec_compare): Use + gen_vec_cmpordered and gen_vec_cmpunordered. + * config/s390/vector.md (vec_cmpuneq, vec_cmpltgt, vec_ordered, + vec_unordered): Delete. + (vec_ordered): Rename to vec_cmpordered. + (vec_unordered): Rename to vec_cmpunordered. + (VEC_CMP_EXPAND): New iterator for the generic dispatcher. + (vec_cmp): Generic dispatcher. + + 2019-10-01 Ilya Leoshkevich + + PR target/77918 + * config/s390/vector.md (V_HW): Add V1TI in order to make + vcond$a$b generate vcondv1tiv1tf. + + 2019-10-01 Richard Sandiford + + PR rtl-optimization/91948 + * ira-build.c (ira_create_allocno): Initialize + ALLOCNO_CROSSED_CALLS_ABIS. + * ira-color.c (allocno_reload_assign): Pass hard_regno rather + than regno to ira_need_caller_save_p. + + 2019-10-01 Alexandre Oliva + + * config/i386/i386-options.c + (ix86_recompute_optlev_based_flags): New, moved out of... + (ix86_option_override_internal): ... this. Call it. + (ix86_override_options_after_change): Call it here too. + + PR debug/91507 + * dwarf2out.c (override_type_for_decl_p): New. + (gen_variable_die): Use it. + + 2019-10-01 Richard Biener + + * tree-vect-loop.c (vectorizable_reduction): Move variables + to where they are used. + + 2019-10-01 Segher Boessenkool + + * regrename.c (hide_operands): Use pc_rtx instead of cc0_rtx. + (build_def_use): Use PC instead of CC0 in a comment. + + 2019-10-01 Richard Sandiford + + * rtl.def (CLOBBER_HIGH): Delete. + * doc/rtl.texi (clobber_high): Remove documentation. + * rtl.h (SET_DEST): Remove CLOBBER_HIGH from the list of codes. + (reg_is_clobbered_by_clobber_high): Delete. + (gen_hard_reg_clobber_high): Likewise. + * alias.c (record_set): Remove CLOBBER_HIGH handling. + * cfgexpand.c (expand_gimple_stmt): Likewise. + * combine-stack-adj.c (single_set_for_csa): Likewise. + * combine.c (find_single_use_1, set_nonzero_bits_and_sign_copies) + (can_combine_p, is_parallel_of_n_reg_sets, try_combine) + (record_dead_and_set_regs_1, reg_dead_at_p_1): Likewise. + * cse.c (invalidate_reg): Remove clobber_high parameter. + (invalidate): Update call accordingly. + (canonicalize_insn): Remove CLOBBER_HIGH handling. + (invalidate_from_clobbers, invalidate_from_sets_and_clobbers) + (count_reg_usage, insn_live_p): Likewise. + * cselib.h (cselib_invalidate_rtx): Remove sett argument. + * cselib.c (cselib_invalidate_regno, cselib_invalidate_rtx): Likewise. + (cselib_invalidate_rtx_note_stores): Update call accordingly. + (cselib_expand_value_rtx_1): Remove CLOBBER_HIGH handling. + (cselib_invalidate_regno, cselib_process_insn): Likewise. + * dce.c (deletable_insn_p, mark_nonreg_stores_1): Likewise. + (mark_nonreg_stores_2): Likewise. + * df-scan.c (df_find_hard_reg_defs, df_uses_record): Likewise. + (df_get_call_refs): Likewise. + * dwarf2out.c (mem_loc_descriptor): Likewise. + * emit-rtl.c (verify_rtx_sharing): Likewise. + (copy_insn_1, copy_rtx_if_shared_1): Likewise. + (hard_reg_clobbers_high, gen_hard_reg_clobber_high): Delete. + * genconfig.c (walk_insn_part): Remove CLOBBER_HIGH handling. + * genemit.c (gen_exp, gen_insn): Likewise. + * genrecog.c (validate_pattern, remove_clobbers): Likewise. + * haifa-sched.c (haifa_classify_rtx): Likewise. + * ira-build.c (create_insn_allocnos): Likewise. + * ira-costs.c (scan_one_insn): Likewise. + * ira.c (equiv_init_movable_p, memref_referenced_p): Likewise. + (rtx_moveable_p, interesting_dest_for_shprep): Likewise. + * jump.c (mark_jump_label_1): Likewise. + * lra-int.h (lra_insn_reg::clobber_high): Delete. + * lra-eliminations.c (lra_eliminate_regs_1): Remove CLOBBER_HIGH + handling. + (mark_not_eliminable): Likewise. + * lra-lives.c (process_bb_lives): Likewise. + * lra.c (new_insn_reg): Remove clobber_high parameter. + (collect_non_operand_hard_regs): Likewise. Update call to new + insn_reg. Remove CLOBBER_HIGH handling. + (lra_set_insn_recog_data): Remove CLOBBER_HIGH handling. Update call + to collect_non_operand_hard_regs. + (add_regs_to_insn_regno_info): Remove CLOBBER_HIGH handling. + Update call to new_insn_reg. + (lra_update_insn_regno_info): Remove CLOBBER_HIGH handling. + * postreload.c (reload_cse_simplify, reload_combine_note_use) + (move2add_note_store): Likewise. + * print-rtl.c (print_pattern): Likewise. + * recog.c (store_data_bypass_p_1, store_data_bypass_p): Likewise. + (if_test_bypass_p): Likewise. + * regcprop.c (kill_clobbered_value, kill_set_value): Likewise. + * reginfo.c (reg_scan_mark_refs): Likewise. + * reload1.c (maybe_fix_stack_asms, eliminate_regs_1): Likewise. + (elimination_effects, mark_not_eliminable, scan_paradoxical_subregs) + (forget_old_reloads_1): Likewise. + * reorg.c (find_end_label, try_merge_delay_insns, redundant_insn) + (own_thread_p, fill_simple_delay_slots, fill_slots_from_thread) + (dbr_schedule): Likewise. + * resource.c (update_live_status, mark_referenced_resources) + (mark_set_resources): Likewise. + * rtl.c (copy_rtx): Likewise. + * rtlanal.c (reg_referenced_p, set_of_1, single_set_2, noop_move_p) + (note_pattern_stores): Likewise. + (reg_is_clobbered_by_clobber_high): Delete. + * sched-deps.c (sched_analyze_reg, sched_analyze_insn): Remove + CLOBBER_HIGH handling. + + 2019-10-01 Richard Sandiford + + PR target/91452 + * config/aarch64/aarch64.h (ARM_PCS_TLSDESC): New arm_pcs. + * config/aarch64/aarch64-protos.h (aarch64_tlsdesc_abi_id): Declare. + * config/aarch64/aarch64.c (aarch64_hard_regno_call_part_clobbered): + Handle ARM_PCS_TLSDESC. + (aarch64_tlsdesc_abi_id): New function. + * config/aarch64/aarch64.md (tlsdesc_small_sve_): Use a call + rtx instead of a list of clobbers and clobber_highs. + (tlsdesc_small_): Update accordingly. + + 2019-10-01 Richard Sandiford + + * config/aarch64/aarch64-protos.h (aarch64_expand_call): Take an + extra callee_abi argument. + * config/aarch64/aarch64.c (aarch64_expand_call): Likewise. + Insert a CALLEE_ABI unspec into the call pattern as the second + element in the PARALLEL. + (aarch64_simd_call_p): Delete. + (aarch64_insn_callee_abi): Get the arm_pcs of the callee from + the new CALLEE_ABI element of the PARALLEL. + (aarch64_init_cumulative_args): Get the arm_pcs of the callee + from the function type, if given. + (aarch64_function_arg_advance): Handle ARM_PCS_SIMD. + (aarch64_function_arg): Likewise. Return the arm_pcs of the callee + when passed the function_arg_info end marker. + (aarch64_output_mi_thunk): Pass the arm_pcs of the callee as the + final argument of gen_sibcall. + * config/aarch64/aarch64.md (UNSPEC_CALLEE_ABI): New unspec. + (call): Make operand 2 a const_int_operand and pass it to expand_call. + Wrap it in an UNSPEC_CALLEE_ABI unspec for the dummy define_expand + pattern. + (call_value): Likewise operand 3. + (sibcall): Likewise operand 2. Place the unspec before rather than + after the return. + (sibcall_value): Likewise operand 3. + (*call_insn, *call_value_insn): Include an UNSPEC_CALLEE_ABI. + (tlsgd_small_, *tlsgd_small_): Likewise. + (*sibcall_insn, *sibcall_value_insn): Likewise. Remove empty + constraint strings. + (untyped_call): Pass const0_rtx as the callee ABI to gen_call. + + 2019-10-01 Richard Sandiford + + * regs.h (HARD_REGNO_CALLER_SAVE_MODE): Update call to + choose_hard_reg_mode. + * config/sparc/sparc.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + + 2019-10-01 Segher Boessenkool + + * doc/md.texi (vec_pack_trunc_@var{m}): Fix typo. + (vec_pack_sfix_trunc_@var{m}, vec_pack_ufix_trunc_@var{m}): Ditto. + (vec_packs_float_@var{m}, vec_packu_float_@var{m}): Ditto. + + 2019-09-30 David Malcolm + + * diagnostic-show-locus.c (line_label::line_label): Initialize + m_has_vbar. + (line_label::comparator): Reverse the sort order by m_state_idx, + so that when the list is walked backwards the labels appear in + order of insertion into the rich_location. + (line_label::m_has_vbar): New field. + (layout::print_any_labels): When dealing with multiple labels at + the same line and column, only print vertical bars for the one + with the highest label_line. + (selftest::test_one_liner_labels): Update test for multiple labels + to expect the labels to be in the order of insertion into the + rich_location. Add a test for many such labels, where the column + numbers are out-of-order relative to the insertion order. + + 2019-09-30 Richard Sandiford + + * config/i386/i386.h (ix86_frame::expensive_p): New field. + (ix86_frame::expensive_count): Likewise. + * config/i386/i386.c (ix86_compute_frame_layout): Make the choice + of use_fast_prologue_epilogue robust against incidental changes + in function size. + + 2019-09-30 Ilya Leoshkevich + + PR target/77918 + * config/s390/vector.md (vec_unordered): Call + gen_vec_ordered. + + 2019-09-30 Yuliang Wang + + * config/aarch64/aarch64-sve.md (sdiv_pow23): + New pattern for ASRD. + * config/aarch64/iterators.md (UNSPEC_ASRD): New unspec. + * internal-fn.def (IFN_DIV_POW2): New internal function. + * optabs.def (sdiv_pow2_optab): New optab. + * tree-vect-patterns.c (vect_recog_divmod_pattern): + Modify pattern to support new operation. + * doc/md.texi (sdiv_pow2$var{m3}): Documentation for the above. + * doc/sourcebuild.texi (vect_sdiv_pow2_si): + Document new target selector. + + 2019-09-30 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_layout_frame): Use crtl->abi + to test whether we're compiling a vector PCS function and to test + whether the function needs to save a particular register. + Remove the vector PCS handling of df_set_regs_ever_live. + (aarch64_components_for_bb): Use crtl->abi to test whether + the function needs to save a particular register. + (aarch64_process_components): Use crtl->abi to test whether + we're compiling a vector PCS function. + (aarch64_expand_prologue, aarch64_expand_epilogue): Likewise. + (aarch64_epilogue_uses): Remove handling of vector PCS functions. + + 2019-09-30 Richard Sandiford + + * config/aarch64/aarch64-protos.h (aarch64_use_simple_return_insn_p): + Delete. + * config/aarch64/aarch64.c (aarch64_components_for_bb): Check + whether the block calls a function that clobbers more registers + than the current function is allowed to. + (aarch64_use_simple_return_insn_p): Delete. + * config/aarch64/aarch64.md (simple_return): Remove condition. + + 2019-09-30 Richard Sandiford + + * function-abi.h (function_abi_aggregator): New class. + * function-abi.cc (function_abi_aggregator::caller_save_regs): New + function. + * ira.c (update_equiv_regs_prescan): New function. Call + set_paradoxical_subreg here rather than... + (update_equiv_regs): ...here. + (ira): Call update_equiv_regs_prescan. + + 2019-09-30 Richard Sandiford + + * hard-reg-set.h (regs_invalidated_by_call): Only define if + IN_TARGET_CODE. + (call_used_or_fixed_regs): Likewise. + (call_used_or_fixed_reg_p): Likewise. + * reginfo.c (regs_invalidated_by_call): New macro. + + 2019-09-30 Richard Sandiford + + * shrink-wrap.c: Include function-abi.h. + (requires_stack_frame_p): Use crtl->abi to test whether the + current function can use a register without saving it first. + + 2019-09-30 Richard Sandiford + + * sel-sched-ir.h (_def::crosses_call): Replace with... + (_def::crossed_call_abis): ..this new field. + (def_list_add): Take a mask of ABIs instead of a crosses_call + boolean. + * sel-sched-ir.c (def_list_add): Likewise. Update initialization + of _def accordingly. + * sel-sched.c: Include function-abi.h. + (hard_regs_data::regs_for_call_clobbered): Delete. + (reg_rename::crosses_call): Replace with... + (reg_rename::crossed_call_abis): ...this new field. + (fur_static_params::crosses_call): Replace with... + (fur_static_params::crossed_call_abis): ...this new field. + (init_regs_for_mode): Don't initialize sel_hrd.regs_for_call_clobbered. + (init_hard_regs_data): Use crtl->abi to test which registers the + current function would need to save before it uses them. + (mark_unavailable_hard_regs): Update handling of call-clobbered + registers, using call_clobbers_in_region to find out which registers + might be call-clobbered (but without taking -fipa-ra into account + for now). Remove separate handling of partially call-clobbered + registers. + (verify_target_availability): Use crossed_call_abis instead of + crosses_call. + (get_spec_check_type_for_insn, find_used_regs): Likewise. + (fur_orig_expr_found, fur_on_enter, fur_orig_expr_not_found): Likewise. + + 2019-09-30 Richard Sandiford + + * sched-deps.c (deps_analyze_insn): Use the ABI of the target + function to test whether a register is fully or partly clobbered. + + 2019-09-30 Richard Sandiford + + * rtlanal.c: Include function-abi.h. + (reg_set_p): Use insn_callee_abi to get the ABI of the called + function and clobbers_reg_p to test whether the register + is call-clobbered. + (find_all_hard_reg_sets): When implicit is true, use insn_callee_abi + to get the ABI of the called function and full_reg_clobbers to + get the set of fully call-clobbered registers. Warn about the + pitfalls of using this mode. + + 2019-09-30 Richard Sandiford + + * reload.c: Include function-abi.h. + (find_equiv_reg): Use clobbers_reg_p to test whether either + of the equivalent registers is clobbered by a call. + * reload1.c: Include function-abi.h. + (reg_reloaded_call_part_clobbered): Delete. + (reload): Use crtl->abi to test which registers would need + saving in the prologue before use. + (find_reg): Likewise. + (emit_reload_insns): Remove code for reg_reloaded_call_part_clobbered. + (reload_as_needed): Likewise. Use full_and_partial_reg_clobbers + instead of call_used_or_fixed_regs | reg_reloaded_call_part_clobbered. + + 2019-09-30 Richard Sandiford + + * regrename.h (du_head::call_clobber_mask): New field. + (du_head::need_caller_save_reg): Replace with... + (du_head::call_abis): ...this new field. + * regrename.c: Include function-abi.h. + (call_clobbered_in_chain_p): New function. + (check_new_reg_p): Use crtl->abi when deciding whether a register + is free for use after RA. Use call_clobbered_in_chain_p to test + whether a candidate register would be clobbered by a call. + (find_rename_reg): Don't add call-clobber conflicts here. + (rename_chains): Check call_abis instead of need_caller_save_reg. + (merge_chains): Update for changes to du_head. + (build_def_use): Use insn_callee_abi to get the ABI of the call insn + target. Record the ABI identifier in call_abis and the set of + fully or partially clobbered registers in call_clobber_mask. + Add fully-clobbered registers to hard_conflicts here rather + than in find_rename_reg. + * config/aarch64/cortex-a57-fma-steering.c: Include function-abi.h. + (rename_single_chain): Check call_abis instead of need_caller_save_reg. + * config/aarch64/falkor-tag-collision-avoidance.c: Include + function-abi.h. + * config/c6x/c6x.c: Likewise. + + 2019-09-30 Richard Sandiford + + * regcprop.c (copyprop_hardreg_forward_1): Use the recorded + mode of the register when deciding whether it is no longer + available after a call. + + 2019-09-30 Richard Sandiford + + * recog.c: Include function-abi.h. + (peep2_find_free_register): Use crtl->abi when deciding whether + a register is free for use after RA. + + 2019-09-30 Richard Sandiford + + * postreload-gcse.c: Include regs.h and function-abi.h. + (record_opr_changes): Use insn_callee_abi to get the ABI of the + call insn target. Conservatively assume that partially-clobbered + registers are altered. + + 2019-09-30 Richard Sandiford + + * postreload.c (reload_combine_recognize_pattern): Use crtl->abi + when deciding whether a register is free for use after RA. + (reload_combine): Remove unnecessary use of fixed_reg_set. + (reload_cse_move2add): Use insn_callee_abi to get the ABI of the + call insn target. Use reg_mode when testing whether a register + is no longer available. + + 2019-09-30 Richard Sandiford + + * target.def (return_call_with_max_clobbers): Delete. + * doc/tm.texi.in (TARGET_RETURN_CALL_WITH_MAX_CLOBBERS): Delete. + * doc/tm.texi: Regenerate. + * config/aarch64/aarch64.c (aarch64_return_call_with_max_clobbers) + (TARGET_RETURN_CALL_WITH_MAX_CLOBBERS): Delete. + * lra-int.h (lra_reg::actual_call_used_reg_set): Delete. + (lra_reg::call_insn): Delete. + * lra.c: Include function-abi.h. + (initialize_lra_reg_info_element): Don't initialize the fields above. + (lra): Use crtl->abi to test whether the current function needs to + save a register in the prologue. Remove special pre-inheritance + lra_create_live_ranges pass for flag_ipa_ra. + * lra-assigns.c: Include function-abi.h + (find_hard_regno_for_1): Use crtl->abi to test whether the current + function needs to save a register in the prologue. + (lra_assign): Assert that registers aren't allocated to a + conflicting register, rather than checking only for overlaps + with call_used_or_fixed_regs. Do this even for flag_ipa_ra, + and for registers that are not live across a call. + * lra-constraints.c (last_call_for_abi): New variable. + (full_and_partial_call_clobbers): Likewise. + (setup_next_usage_insn): Remove the register from + full_and_partial_call_clobbers. + (need_for_call_save_p): Use call_clobbered_in_region_p to test + whether the register needs a caller save. + (need_for_split_p): Use full_and_partial_reg_clobbers instead + of call_used_or_fixed_regs. + (inherit_in_ebb): Initialize and maintain last_call_for_abi and + full_and_partial_call_clobbers. + * lra-lives.c (check_pseudos_live_through_calls): Replace + last_call_used_reg_set and call_insn arguments with an abi argument. + Remove handling of lra_reg::call_insn. Use function_abi::mode_clobbers + as the set of conflicting registers. + (calls_have_same_clobbers_p): Delete. + (process_bb_lives): Track the ABI of the last call instead of an + insn/HARD_REG_SET pair. Update calls to + check_pseudos_live_through_calls. Use eh_edge_abi to calculate + the set of registers that could be clobbered by an EH edge. + Include partially-clobbered as well as fully-clobbered registers. + (lra_create_live_ranges_1): Don't initialize lra_reg::call_insn. + * lra-remat.c: Include function-abi.h. + (call_used_regs_arr_len, call_used_regs_arr): Delete. + (set_bb_regs): Use insn_callee_abi to get the set of call-clobbered + registers and bitmap_view to combine them into dead_regs. + (call_used_input_regno_present_p): Take a function_abi argument + and use it to test whether a register is call-clobbered. + (calculate_gen_cands): Use insn_callee_abi to get the ABI of the + call insn target. Update tje call to call_used_input_regno_present_p. + (do_remat): Likewise. + (lra_remat): Remove the initialization of call_used_regs_arr_len + and call_used_regs_arr. + + 2019-09-30 Richard Sandiford + + * loop-iv.c: Include regs.h and function-abi.h. + (simplify_using_initial_values): Use insn_callee_abi to get the + ABI of the call insn target. Conservatively assume that + partially-clobbered registers are altered. + + 2019-09-30 Richard Sandiford + + * function-abi.h (call_clobbers_in_region): Declare. + (call_clobbered_in_region_p): New function. + * function-abi.cc (call_clobbers_in_region): Likewise. + * ira-int.h: Include function-abi.h. + (ira_allocno::crossed_calls_abis): New field. + (ALLOCNO_CROSSED_CALLS_ABIS): New macro. + (ira_need_caller_save_regs): New function. + (ira_need_caller_save_p): Likewise. + * ira.c (setup_reg_renumber): Use ira_need_caller_save_p instead + of call_used_or_fixed_regs. + (do_reload): Use crtl->abi to test whether the current function + needs to save a register in the prologue. Count registers that + need to be saved rather than registers that don't. + * ira-build.c (create_cap_allocno): Copy ALLOCNO_CROSSED_CALLS_ABIS. + Remove unnecessary | from ALLOCNO_CROSSED_CALLS_CLOBBERED_REGS. + (propagate_allocno_info): Merge ALLOCNO_CROSSED_CALLS_ABIS too. + (propagate_some_info_from_allocno): Likewise. + (copy_info_to_removed_store_destinations): Likewise. + (ira_flattening): Say that ALLOCNO_CROSSED_CALLS_ABIS and + ALLOCNO_CROSSED_CALLS_CLOBBERED_REGS are handled conservatively. + (ira_build): Use ira_need_caller_save_regs instead of + call_used_or_fixed_regs. + * ira-color.c (calculate_saved_nregs): Use crtl->abi to test + whether the current function would need to save a register + before using it. + (calculate_spill_cost): Likewise. + (allocno_reload_assign): Use ira_need_caller_save_regs and + ira_need_caller_save_p instead of call_used_or_fixed_regs. + * ira-conflicts.c (ira_build_conflicts): Use + ira_need_caller_save_regs rather than call_used_or_fixed_regs + as the set of call-clobbered registers. Remove the + call_used_or_fixed_regs mask from the calculation of + temp_hard_reg_set and mask its use instead. Remove special + handling of partially-clobbered registers. + * ira-costs.c (ira_tune_allocno_costs): Use ira_need_caller_save_p. + * ira-lives.c (process_bb_node_lives): Use mode_clobbers to + calculate the set of conflicting registers for calls that + can throw. Record the ABIs of calls in ALLOCNO_CROSSED_CALLS_ABIS. + Use full_and_partial_reg_clobbers rather than full_reg_clobbers + for the calculation of ALLOCNO_CROSSED_CALLS_CLOBBERED_REGS. + Use eh_edge_abi to calculate the set of registers that could + be clobbered by an EH edge. Include partially-clobbered as + well as fully-clobbered registers. + + 2019-09-30 Richard Sandiford + + * haifa-sched.c: Include function-abi.h. + (alloc_global_sched_pressure_data): Use crtl->abi to check whether + the function would need to save a register before using it. + + 2019-09-30 Richard Sandiford + + * gcse.c: Include function-abi.h. + (compute_hash_table_work): Use insn_callee_abi to get the ABI of + the call insn target. Invalidate partially call-clobbered + registers as well as fully call-clobbered ones. + + 2019-09-30 Richard Sandiford + + * function.c (aggregate_value_p): Work out which ABI the + function is using before testing which registers are at least + partly preserved by a call. + + 2019-09-30 Richard Sandiford + + * early-remat.c: Include regs.h and function-abi.h. + (early_remat::maybe_add_candidate): Don't check for call-clobbered + registers here. + (early_remat::restrict_remat_for_unavail_regs): New function. + (early_remat::restrict_remat_for_call): Likewise. + (early_remat::process_block): Before calling emit_remat_insns + for a previous call in the block, invalidate any candidates + that would clobber call-preserved registers. + (early_remat::emit_remat_insns_for_block): Likewise for the + final call in a block. Do the same thing for live-in registers + when calling emit_remat_insns at the head of a block. + + 2019-09-30 Richard Sandiford + + * df-scan.c (df_get_entry_block_def_set): Use crtl->abi to test + whether the current function needs to save at least part of a + register before using it. + (df_get_exit_block_use_set): Likewise for epilogue restores. + + 2019-09-30 Richard Sandiford + + * df-problems.c: Include regs.h and function-abi.h. + (df_rd_problem_data): Rename sparse_invalidated_by_call to + sparse_invalidated_by_eh and dense_invalidated_by_call to + dense_invalidated_by_eh. + (df_print_bb_index): Update accordingly. + (df_rd_alloc, df_rd_start_dump, df_rd_confluence_n): Likewise. + (df_lr_confluence_n): Use eh_edge_abi to get the set of registers + that are clobbered by an EH edge. Clobber partially-clobbered + registers as well as fully-clobbered ones. + (df_md_confluence_n): Likewise. + (df_rd_local_compute): Likewise. Update for changes to + df_rd_problem_data. + * df-scan.c (df_scan_start_dump): Use eh_edge_abi to get the set + of registers that are clobbered by an EH edge. Includde partially- + clobbered registers as well as fully-clobbered ones. + + 2019-09-30 Richard Sandiford + + * cselib.c (cselib_process_insn): If we know what mode a + register was set in, check whether it is clobbered in that + mode by a call. Only fall back to reg_raw_mode if that fails. + + 2019-09-30 Richard Sandiford + + * cse.c: Include regs.h and function-abi.h. + (invalidate_for_call): Take the call insn as an argument. + Use insn_callee_abi to get the ABI of the call and invalidate + partially clobbered registers as well as fully clobbered ones. + (cse_insn): Update call accordingly. + + 2019-09-30 Richard Sandiford + + * combine.c: Include function-abi.h. + (record_dead_and_set_regs): Use insn_callee_abi to get the ABI + of the target of call insns. Invalidate partially-clobbered + registers as well as fully-clobbered ones. + + 2019-09-30 Richard Sandiford + + * cfgloopanal.c: Include regs.h and function-abi.h. + (init_set_costs): Use default_function_abi to test whether + a general register is call-clobbered. + + 2019-09-30 Richard Sandiford + + * cfgcleanup.c (old_insns_match_p): Compare the ABIs of calls + instead of the call-clobbered sets. + + 2019-09-30 Richard Sandiford + + * caller-save.c (setup_save_areas): Remove redundant |s of + fixed_reg_set. + (save_call_clobbered_regs): Likewise. Use the call ABI rather + than call_used_or_fixed_regs to decide whether a REG_RETURNED + value is useful. + + 2019-09-30 Richard Sandiford + + * rtl.h (predefined_function_abi): Declare. + (choose_hard_reg_mode): Take a pointer to a predefined_function_abi + instead of a boolean call_save flag. + * config/gcn/gcn.c (gcn_hard_regno_caller_save_mode): Update call + accordingly. + * config/i386/i386.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + * config/ia64/ia64.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + * config/mips/mips.c (mips_hard_regno_caller_save_mode): Likewise. + * config/msp430/msp430.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + * config/rs6000/rs6000.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + * config/sh/sh.c (sh_hard_regno_caller_save_mode): Likewise. + * reginfo.c (init_reg_modes_target): Likewise. + (choose_hard_reg_mode): Take a pointer to a predefined_function_abi + instead of a boolean call_save flag. + * targhooks.c: Include function-abi.h. + (default_dwarf_frame_reg_mode): Update call to choose_hard_reg_mode, + using eh_edge_abi to choose the mode. + + 2019-09-30 Richard Sandiford + + * target.def (hard_regno_call_part_clobbered): Take an ABI + identifier instead of an rtx_insn. + * doc/tm.texi: Regenerate. + * hooks.h (hook_bool_insn_uint_mode_false): Delete. + (hook_bool_uint_uint_mode_false): New function. + * hooks.c (hook_bool_insn_uint_mode_false): Delete. + (hook_bool_uint_uint_mode_false): New function. + * config/aarch64/aarch64.c (aarch64_hard_regno_call_part_clobbered): + Take an ABI identifier instead of an rtx_insn. + * config/avr/avr.c (avr_hard_regno_call_part_clobbered): Likewise. + * config/i386/i386.c (ix86_hard_regno_call_part_clobbered): Likewise. + * config/mips/mips.c (mips_hard_regno_call_part_clobbered): Likewise. + * config/pru/pru.c (pru_hard_regno_call_part_clobbered): Likewise. + * config/rs6000/rs6000.c (rs6000_hard_regno_call_part_clobbered): + Likewise. + * config/s390/s390.c (s390_hard_regno_call_part_clobbered): Likewise. + * cselib.c: Include function-abi.h. + (cselib_process_insn): Update call to + targetm.hard_regno_call_part_clobbered, using insn_callee_abi + to get the appropriate ABI identifier. + * function-abi.cc (predefined_function_abi::initialize): Update call + to targetm.hard_regno_call_part_clobbered. + * ira-conflicts.c (ira_build_conflicts): Likewise. + * ira-costs.c (ira_tune_allocno_costs): Likewise. + * lra-constraints.c: Include function-abi.h. + (need_for_call_save_p): Update call to + targetm.hard_regno_call_part_clobbered, using insn_callee_abi + to get the appropriate ABI identifier. + * lra-lives.c (check_pseudos_live_through_calls): Likewise. + * regcprop.c (copyprop_hardreg_forward_1): Update call + to targetm.hard_regno_call_part_clobbered. + * reginfo.c (choose_hard_reg_mode): Likewise. + * regrename.c (check_new_reg_p): Likewise. + * reload.c (find_equiv_reg): Likewise. + * reload1.c (emit_reload_insns): Likewise. + * sched-deps.c: Include function-abi.h. + (deps_analyze_insn): Update call to + targetm.hard_regno_call_part_clobbered, using insn_callee_abi + to get the appropriate ABI identifier. + * sel-sched.c (init_regs_for_mode, mark_unavailable_hard_regs): Update + call to targetm.hard_regno_call_part_clobbered. + * targhooks.c (default_dwarf_frame_reg_mode): Likewise. + + 2019-09-30 Richard Sandiford + + * config/i386/i386.c: Include function-abi.h. + (ix86_avx_u128_mode_needed): Treat function calls as AVX_U128_ANY + if they preserve some 256-bit or 512-bit SSE registers. + + 2019-09-30 Richard Sandiford + + * target.def (insn_callee_abi): New hook. + (remove_extra_call_preserved_regs): Delete. + * doc/tm.texi.in (TARGET_INSN_CALLEE_ABI): New macro. + (TARGET_REMOVE_EXTRA_CALL_PRESERVED_REGS): Delete. + * doc/tm.texi: Regenerate. + * targhooks.h (default_remove_extra_call_preserved_regs): Delete. + * targhooks.c (default_remove_extra_call_preserved_regs): Delete. + * config/aarch64/aarch64.c (aarch64_simd_call_p): Constify the + insn argument. + (aarch64_remove_extra_call_preserved_regs): Delete. + (aarch64_insn_callee_abi): New function. + (TARGET_REMOVE_EXTRA_CALL_PRESERVED_REGS): Delete. + (TARGET_INSN_CALLEE_ABI): New macro. + * rtl.h (get_call_fndecl): Declare. + (cgraph_rtl_info): Fix formatting. Tweak comment for + function_used_regs. Remove function_used_regs_valid. + * rtlanal.c (get_call_fndecl): Moved from final.c + * function-abi.h (insn_callee_abi): Declare. + (target_function_abi_info): Mention insn_callee_abi. + * function-abi.cc (fndecl_abi): Handle flag_ipa_ra in a similar + way to get_call_reg_set_usage did. + (insn_callee_abi): New function. + * regs.h (get_call_reg_set_usage): Delete. + * final.c: Include function-abi.h. + (collect_fn_hard_reg_usage): Add fixed and stack registers to + function_used_regs before the main loop rather than afterwards. + Use insn_callee_abi instead of get_call_reg_set_usage. Exit early + if function_used_regs ends up not being useful. + (get_call_fndecl): Move to rtlanal.c + (get_call_cgraph_rtl_info, get_call_reg_set_usage): Delete. + * caller-save.c: Include function-abi.h. + (setup_save_areas, save_call_clobbered_regs): Use insn_callee_abi + instead of get_call_reg_set_usage. + * cfgcleanup.c: Include function-abi.h. + (old_insns_match_p): Use insn_callee_abi instead of + get_call_reg_set_usage. + * cgraph.h (cgraph_node::rtl_info): Take a const_tree instead of + a tree. + * cgraph.c (cgraph_node::rtl_info): Likewise. Initialize + function_used_regs. + * df-scan.c: Include function-abi.h. + (df_get_call_refs): Use insn_callee_abi instead of + get_call_reg_set_usage. + * ira-lives.c: Include function-abi.h. + (process_bb_node_lives): Use insn_callee_abi instead of + get_call_reg_set_usage. + * lra-lives.c: Include function-abi.h. + (process_bb_lives): Use insn_callee_abi instead of + get_call_reg_set_usage. + * postreload.c: Include function-abi.h. + (reload_combine): Use insn_callee_abi instead of + get_call_reg_set_usage. + * regcprop.c: Include function-abi.h. + (copyprop_hardreg_forward_1): Use insn_callee_abi instead of + get_call_reg_set_usage. + * resource.c: Include function-abi.h. + (mark_set_resources, mark_target_live_regs): Use insn_callee_abi + instead of get_call_reg_set_usage. + * var-tracking.c: Include function-abi.h. + (dataflow_set_clear_at_call): Use insn_callee_abi instead of + get_call_reg_set_usage. + + 2019-09-30 Richard Sandiford + + * target.def (fntype_abi): New target hook. + * doc/tm.texi.in (TARGET_FNTYPE_ABI): Likewise. + * doc/tm.texi: Regenerate. + * target.h (predefined_function_abi): Declare. + * function-abi.cc (fntype_abi): Call targetm.calls.fntype_abi, + if defined. + * config/aarch64/aarch64.h (ARM_PCS_SIMD): New arm_pcs value. + * config/aarch64/aarch64.c: Include function-abi.h. + (aarch64_simd_abi, aarch64_fntype_abi): New functions. + (TARGET_FNTYPE_ABI): Define. + + 2019-09-30 Richard Sandiford + + * Makefile.in (OBJS): Add function-abi.o. + (GTFILES): Add function-abi.h. + * function-abi.cc: New file. + * function-abi.h: Likewise. + * emit-rtl.h (rtl_data::abi): New field. + * function.c: Include function-abi.h. + (prepare_function_start): Initialize crtl->abi. + * read-rtl-function.c: Include regs.h and function-abi.h. + (read_rtl_function_body): Initialize crtl->abi. + (read_rtl_function_body_from_file_range): Likewise. + * reginfo.c: Include function-abi.h. + (init_reg_sets_1): Initialize default_function_abi. + (globalize_reg): Call add_full_reg_clobber for each predefined ABI + when making a register global. + * target-globals.h (this_target_function_abi_info): Declare. + (target_globals::function_abi_info): New field. + (restore_target_globals): Copy it. + * target-globals.c: Include function-abi.h. + (default_target_globals): Initialize the function_abi_info field. + (target_globals): Allocate it. + (save_target_globals): Free it. + + 2019-09-30 Nick Clifton + + PR target/85978 + * config/frv/frv.c (frv_register_move_cost): Add break statements + to avoid falling through to the wrong cases. Tidy code. + + 2019-09-30 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_hard_regno_call_part_clobbered): + For multi-registers modes, test how big each register part is. + + 2019-09-30 Nick Clifton + + PR target/59205 + * config/iq2000/iq2000.c (iq2000_select_section): Delete. + (TARGET_ASM_SELECT_SECTION): Remove definition. + (TARGET_HAVE_SWITCHABLE_BSS_SECTIONS): Allow definition. + + 2019-09-30 Ilya Leoshkevich + + * emit-rtl.c (init_raw_REG): New function. + (gen_raw_REG): Use init_raw_REG. + * gengenrtl.c (gendef): Emit init_* functions and alloca_* + macros. + * rtl.c (rtx_alloc_stat_v): Use rtx_init. + * rtl.h (rtx_init): New function. + (rtx_alloca): New function. + (init_raw_REG): New function. + (alloca_raw_REG): New macro. + + 2019-09-30 Michael Meissner + + * config/rs6000/predicates.md (pcrel_address): Delete predicate. + (pcrel_local_address): Replace pcrel_address predicate, use the + new function address_to_insn_form. + (pcrel_external_address): Replace with new implementation using + address_to_insn_form.. + (prefixed_mem_operand): Delete predicate which is now unused. + (pcrel_external_mem_operand): Delete predicate which is now + unused. + * config/rs6000/rs6000-protos.h (enum insn_form): New + enumeration. + (enum non_prefixed_form): New enumeration. + (address_to_insn_form): New declaration. + (prefixed_load_p): New declaration. + (prefixed_store_p): New declaration. + (prefixed_paddi_p): New declaration. + (rs6000_asm_output_opcode): New declaration. + (rs6000_final_prescan_insn): Move declaration and update calling + signature. + (address_is_prefixed): New helper inline function. + * config/rs6000/rs6000.c(print_operand_address): Check for either + PC-relative local symbols or PC-relative external symbols. + (rs6000_emit_move): Support loading PC-relative addresses. + (mode_supports_prefixed_address_p): Delete, no longer used. + (rs6000_prefixed_address_mode_p): Delete, no longer used. + (address_to_insn_form): New function to decode an address format. + (reg_to_non_prefixed): New function to identify what the + non-prefixed memory instruction format is for a register. + (prefixed_load_p): New function to identify prefixed loads. + (prefixed_store_p): New function to identify prefixed stores. + (prefixed_paddi_p): New function to identify prefixed load + immediates. + (next_insn_prefixed_p): New static state variable. + (rs6000_final_prescan_insn): New function to determine if an insn + uses a prefixed instruction. + (rs6000_asm_output_opcode): New function to emit 'p' in front of a + prefixed instruction. + * config/rs6000/rs6000.h (FINAL_PRESCAN_INSN): New target hook. + (ASM_OUTPUT_OPCODE): New target hook. + * config/rs6000/rs6000.md (prefixed): New insn attribute for + prefixed instructions. + (prefixed_length): New insn attribute for the size of prefixed + instructions. + (non_prefixed_length): New insn attribute for the size of + non-prefixed instructions. + (pcrel_local_addr): New insn to load up a local PC-relative + address. + (pcrel_extern_addr): New insn to load up an external PC-relative + address. + (mov_64bit_dm): Split the alternatives for loading 0.0 to a + GPR and loading a 128-bit floating point type to a GPR. + + 2019-09-30 Richard Biener + + * gimple.c (gimple_get_lhs): For PHIs return the result. + * tree-vectorizer.h (vectorizable_live_operation): Also get the + SLP instance as argument. + * tree-vect-loop.c (vect_analyze_loop_operations): Also handle + double-reduction PHIs with vectorizable_lc_phi. + (vect_analyze_loop_operations): Adjust. + (vect_create_epilog_for_reduction): Remove all code not dealing + with reduction LC PHI or epilogue generation. + (vectorizable_live_operation): Call vect_create_epilog_for_reduction + for live stmts of reductions. + * tree-vect-stmts.c (vectorizable_condition): When !for_reduction + do not handle defs that are not vect_internal_def. + (can_vectorize_live_stmts): Adjust. + (vect_analyze_stmt): When the vectorized stmt defined a value + used on backedges adjust the backedge uses of vectorized PHIs. + + 2019-09-30 Martin Jambor + + PR ipa/91853 + * tree-inline.c (force_value_to_type): New function. + (setup_one_parameter): Use force_value_to_type to convert type. + * tree-inline.c (force_value_to_type): Declare. + * ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Deal + with register type mismatches. + + 2019-09-30 Andreas Tobler + + * config.gcc: Use the secure-plt on FreeBSD 13 and upwards for + 32-bit PowerPC. + Define TARGET_FREEBSD32_SECURE_PLT for 64-bit PowerPC. + * config/rs6000/t-freebsd64: Make use of the above define and build + the 32-bit libraries with secure-plt. + + 2019-09-30 Jakub Jelinek + + PR target/91931 + * config/i386/i386-expand.c (ix86_expand_adjust_ufix_to_sfix_si): Use + gen_int_mode instead of GEN_INT. + + 2019-09-29 Iain Sandoe + + * config/darwin.c (gen_macho_low): Amend to include the mode + argument. + (machopic_indirect_data_reference): Amend gen_macho_low call + to include mode argument + * config/rs6000/rs6000.c (emit_move): Likewise. Amend a comment. + * config/rs6000/darwin.md (@macho_low_): New, replaces + the macho_high expander and two define_insn entries. + + 2019-09-29 Jakub Jelinek + + PR bootstrap/90543 + * optc-save-gen.awk: Fix up printing string option differences. + + 2019-09-29 Kewen Lin + + * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Lower + vec_perm cost to 1 for non-Power7 VSX architectures. + + 2019-09-29 Kewen Lin + + * config/rs6000/vsx.md (vec_pack[su]_float_v2di): New define_expand. + (vec_unpack_[su]fix_trunc_hi_v4sf): Likewise. + (vec_unpack_[su]fix_trunc_lo_v4sf): Likewise. + + 2019-09-28 Iain Sandoe + + * config/darwin.c (gen_macho_high): Amend to include the mode + argument. + (machopic_indirect_data_reference): Amend gen_macho_high call + to include mode argument. + (machopic_legitimize_pic_address): Likewise. + * config/rs6000/rs6000.c (rs6000_legitimize_address): + * config/rs6000/darwin.md (@macho_high_): New, replaces + the macho_high expander and two define_insn entries. + + 2019-09-28 Oleg Endo + + PR target/86805 + * config/sh/sh.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define. + + 2019-09-28 Oleg Endo + + PR target/80672 + * config/sh/sh.c (parse_validate_atomic_model_option): Use + std::string::compare instead of std::string::find. + + 2019-09-27 Maciej W. Rozycki + + * configure: Regenerate. + + 2019-09-27 Jakub Jelinek + + PR middle-end/91920 + * gimplify.c (omp_default_clause): Predetermine DECL_IN_CONSTANT_POOL + variables as shared. + + 2019-09-27 Iain Sandoe + + * config/rs6000/darwin.md (@macho_correct_pic_): New, + replaces the expander and two define_insn entries. + (@reload_macho_picbase_): Update gen_macho_correct_pic + call. + * config/rs6000/rs6000.md (builtin_setjmp_receiver): Likewise. + + 2019-09-27 David Malcolm + + * fibonacci_heap.h (fibonacci_heap::empty): Make const. + (fibonacci_heap::nodes): Likewise. + (fibonacci_heap::min_key): Likewise. + (fibonacci_heap::min): Likewise. + + 2019-09-27 David Malcolm + + * cgraph.c (cgraph_node::get_fun): Make const. + * cgraph.h (cgraph_node::get_fun): Likewise. + + 2019-09-27 Jakub Jelinek + + PR target/91919 + * config/arm/arm.md (mlal): Remove SE wrappers around operands + of SImode MULT. + + 2019-09-27 Richard Biener + + * tree-vectorizer.h (_stmt_vec_info::reduc_fn): New. + (STMT_VINFO_REDUC_FN): Likewise. + * tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize + STMT_VINFO_REDUC_FN. + * tree-vect-loop.c (vect_is_simple_reduction): Fix STMT_VINFO_REDUC_IDX + for condition reductions. + (vect_create_epilog_for_reduction): Compute all required state + from the stmt to be vectorized. + (vectorizable_reduction): Simplify vect_create_epilog_for_reduction + invocation and remove then dead code. For single def-use chains + record only a single vector stmt. + + 2019-09-27 Richard Sandiford + + * config/aarch64/aarch64-protos.h (aarch64_builtin_class): New enum. + (AARCH64_BUILTIN_SHIFT, AARCH64_BUILTIN_CLASS): New constants. + (aarch64_gimple_fold_builtin, aarch64_mangle_builtin_type) + (aarch64_fold_builtin, aarch64_init_builtins, aarch64_expand_builtin): + (aarch64_builtin_decl, aarch64_builtin_rsqrt): Delete. + (aarch64_general_mangle_builtin_type, aarch64_general_init_builtins): + (aarch64_general_fold_builtin, aarch64_general_gimple_fold_builtin): + (aarch64_general_expand_builtin, aarch64_general_builtin_decl): + (aarch64_general_builtin_rsqrt): Declare. + * config/aarch64/aarch64-builtins.c (aarch64_general_add_builtin): + New function. + (aarch64_mangle_builtin_type): Rename to... + (aarch64_general_mangle_builtin_type): ...this. + (aarch64_init_fcmla_laneq_builtins, aarch64_init_simd_builtins) + (aarch64_init_crc32_builtins, aarch64_init_builtin_rsqrt) + (aarch64_init_pauth_hint_builtins, aarch64_init_tme_builtins): Use + aarch64_general_add_builtin instead of add_builtin_function. + (aarch64_init_builtins): Rename to... + (aarch64_general_init_builtins): ...this. Use + aarch64_general_add_builtin instead of add_builtin_function. + (aarch64_builtin_decl): Rename to... + (aarch64_general_builtin_decl): ...this and remove the unused + arguments. + (aarch64_expand_builtin): Rename to... + (aarch64_general_expand_builtin): ...this and remove the unused + arguments. + (aarch64_builtin_rsqrt): Rename to... + (aarch64_general_builtin_rsqrt): ...this. + (aarch64_fold_builtin): Rename to... + (aarch64_general_fold_builtin): ...this. Take the function subcode + and return type as arguments. Remove the "ignored" argument. + (aarch64_gimple_fold_builtin): Rename to... + (aarch64_general_gimple_fold_builtin): ...this. Take the function + subcode and gcall as arguments, and return the new function call. + * config/aarch64/aarch64.c (aarch64_init_builtins) + (aarch64_fold_builtin, aarch64_gimple_fold_builtin) + (aarch64_expand_builtin, aarch64_builtin_decl): New functions. + (aarch64_builtin_reciprocal): Call aarch64_general_builtin_rsqrt + instead of aarch64_builtin_rsqrt. + (aarch64_mangle_type): Call aarch64_general_mangle_builtin_type + instead of aarch64_mangle_builtin_type. + + 2019-09-27 Richard Sandiford + + * target.def (check_builtin_call): New target hook. + * doc/tm.texi.in (TARGET_CHECK_BUILTIN_CALL): New @hook. + * doc/tm.texi: Regenerate. + + 2019-09-27 Richard Sandiford + + PR tree-optimization/91909 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Take a + reduc_index parameter. When handling COND_REDUCTION, make sure + that the reduction phi operand is in the correct arm of the + VEC_COND_EXPR. + (vectorizable_reduction): Pass reduc_index to the above. + + 2019-09-27 Yuliang Wang + + * config/aarch64/aarch64-sve2.md (aarch64_sve2_sra): + New combine pattern. + + 2019-09-26 Max Filippov + + * config/xtensa/xtensa.c (hwloop_optimize): Insert zero overhead + loop instruction into new basic block before the loop when basic + block that precedes the loop is empty. + + 2019-09-26 Jakub Jelinek + + * function.c (gimplify_parameters): Use build_clobber function. + * tree-ssa.c (execute_update_addresses_taken): Likewise. + * tree-inline.c (expand_call_inline): Likewise. + * tree-sra.c (clobber_subtree): Likewise. + * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Likewise. + * omp-low.c (lower_rec_simd_input_clauses, lower_rec_input_clauses, + lower_omp_single, lower_depend_clauses, lower_omp_taskreg, + lower_omp_target): Likewise. + * omp-expand.c (expand_omp_for_generic): Likewise. + * omp-offload.c (ompdevlow_adjust_simt_enter): Likewise. + + 2019-09-26 Will Schmidt + + * config/rs6000/rs6000-builtin.def: (LVSL, LVSR, LVEBX, LVEHX, + LVEWX, LVXL, LVXL_V2DF, LVXL_V2DI, LVXL_V4SF, LVXL_V4SI, LVXL_V8HI, + LVXL_V16QI, LVX, LVX_V1TI, LVX_V2DF, LVX_V2DI, LVX_V4SF, LVX_V4SI, + LVX_V8HI, LVX_V16QI, LVLX, LVLXL, LVRX, LVRXL, LXSDX, LXVD2X_V1TI, + LXVD2X_V2DF, LXVD2X_V2DI, LXVDSX, LXVW4X_V4SF, LXVW4X_V4SI, + LXVW4X_V8HI, LXVW4X_V16QI, LD_ELEMREV_V1TI, LD_ELEMREV_V2DF, + LD_ELEMREV_V2DI, LD_ELEMREV_V4SF, LD_ELEMREV_V4SI, LD_ELEMREV_V8HI, + LD_ELEMREV_V16QI): Use the PURE attribute. + + 2019-09-26 Iain Sandoe + + * config/rs6000/darwin.md: Replace the expanders for + load_macho_picbase and reload_macho_picbase with use of '@' + and in their respective define_insns. + (nonlocal_goto_receiver): Pass Pmode to gen_reload_macho_picbase. + * config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Pass + Pmode to gen_load_macho_picbase. + * config/rs6000/rs6000.md: Likewise. + + 2019-09-25 Richard Biener + + PR tree-optimization/91896 + * tree-vect-loop.c (vectorizable_reduction): The single + def-use cycle optimization cannot apply when there's more + than one pattern stmt involved. + + 2019-09-26 Richard Biener + + * tree-vect-loop.c (vect_analyze_loop_operations): Analyze + loop-closed PHIs that are vect_internal_def. + (vect_create_epilog_for_reduction): Exit early for nested cycles. + Simplify. + (vectorizable_lc_phi): New. + * tree-vect-stmts.c (vect_analyze_stmt): Call vectorize_lc_phi. + (vect_transform_stmt): Likewise. + * tree-vectorizer.h (stmt_vec_info_type): Add lc_phi_info_type. + (vectorizable_lc_phi): Declare. + + 2019-09-26 Richard Biener + + * tree-vect-loop.c (vect_analyze_loop_operations): Also call + vectorizable_reduction for vect_double_reduction_def. + (vect_transform_loop): Likewise. + (vect_create_epilog_for_reduction): Move double-reduction + PHI creation and preheader argument setting of PHIs ... + (vectorizable_reduction): ... here. Also process + vect_double_reduction_def PHIs, creating the vectorized + PHI nodes, remembering the scalar adjustment computed for + the epilogue in STMT_VINFO_REDUC_EPILOGUE_ADJUSTMENT. + Remember the original reduction code in STMT_VINFO_REDUC_CODE. + * tree-vectorizer.c (vec_info::new_stmt_vec_info): + Initialize STMT_VINFO_REDUC_CODE. + * tree-vectorizer.h (_stmt_vec_info::reduc_epilogue_adjustment): New. + (_stmt_vec_info::reduc_code): Likewise. + (STMT_VINFO_REDUC_EPILOGUE_ADJUSTMENT): Likewise. + (STMT_VINFO_REDUC_CODE): Likewise. + + 2019-09-26 Matt Turner + + PR driver/69471 + * config/aarch64/aarch64.opt (march=): Add Negative(march=). + (mtune=): Add Negative(mtune=). + (mcpu=): Add Negative(mcpu=). + * config/arm/arm.opt: Likewise. + + 2019-09-26 Kyrylo Tkachov + + * config/arm/arm.md (arm_): New define_insn. + * config/arm/arm_acle.h (__smlald, __smlaldx, __smlsld, __smlsldx): + Define. + * config/arm/arm_acle.h: Define builtins for the above. + * config/arm/iterators.md (SIMD32_DIMODE): New int_iterator. + (simd32_op): Handle the above. + * config/arm/unspecs.md: Define unspecs for the above. + + 2019-09-26 Kyrylo Tkachov + + * config/arm/arm.md (arm_): New define_insn. + (arm_xtb16): Likewise. + (arm_usada8): Likewise. + * config/arm/arm_acle.h (__qadd8, __qsub8, __shadd8, __shsub8, + __uhadd8, __uhsub8, __uqadd8, __uqsub8, __qadd16, __qasx, __qsax, + __qsub16, __shadd16, __shasx, __shsax, __shsub16, __uhadd16, __uhasx, + __uhsax, __uhsub16, __uqadd16, __uqasx, __uqsax, __uqsub16, __sxtab16, + __sxtb16, __uxtab16, __uxtb16): Define. + * config/arm/arm_acle_builtins.def: Define builtins for the above. + * config/arm/unspecs.md: Define unspecs for the above. + * config/arm/iterators.md (SIMD32_NOGE_BINOP): New int_iterator. + (USXTB16): Likewise. + (simd32_op): New int_attribute. + (sup): Handle UNSPEC_SXTB16, UNSPEC_UXTB16. + * doc/sourcebuild.exp (arm_simd32_ok): Document. + + 2019-09-26 Martin Jambor + + * ipa-sra.c (verify_splitting_accesses): Fix quoting in a call to + internal_error. + + 2019-09-26 Martin Jambor + + * ipa-sra.c (process_scan_results): Fix continue condition. + + 2019-09-26 Martin Liska + + PR tree-optimization/91885 + * tree-vectorizer.c (try_vectorize_loop_1): Add + TODO_update_ssa_only_virtuals similarly to what slp pass does. + + 2019-09-26 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_rtx_costs): Use + aarch64_plus_immediate rather than aarch64_uimm12_shift + to test for valid PLUS immediates. + + 2019-09-25 Martin Jambor + + * tree-sra.c (no_accesses_p): Remove. + (no_accesses_representant): Likewise. + + 2019-09-25 Kyrylo Tkachov + + * config/aarch64/arm_neon.h (vaba_s8): Use __ in identifiers + consistenly. + (vaba_s16): Likewise. + (vaba_s32): Likewise. + (vaba_u8): Likewise. + (vaba_u16): Likewise. + (vaba_u32): Likewise. + (vabal_high_s8): Likewise. + (vabal_high_s16): Likewise. + (vabal_high_s32): Likewise. + (vabal_high_u8): Likewise. + (vabal_high_u16): Likewise. + (vabal_high_u32): Likewise. + (vabal_s8): Likewise. + (vabal_s16): Likewise. + (vabal_s32): Likewise. + (vabal_u8): Likewise. + (vabal_u16): Likewise. + (vabal_u32): Likewise. + (vabaq_s8): Likewise. + (vabaq_s16): Likewise. + (vabaq_s32): Likewise. + (vabaq_u8): Likewise. + (vabaq_u16): Likewise. + (vabaq_u32): Likewise. + (vabd_s8): Likewise. + (vabd_s16): Likewise. + (vabd_s32): Likewise. + (vabd_u8): Likewise. + (vabd_u16): Likewise. + (vabd_u32): Likewise. + (vabdl_high_s8): Likewise. + (vabdl_high_s16): Likewise. + (vabdl_high_s32): Likewise. + (vabdl_high_u8): Likewise. + (vabdl_high_u16): Likewise. + (vabdl_high_u32): Likewise. + (vabdl_s8): Likewise. + (vabdl_s16): Likewise. + (vabdl_s32): Likewise. + (vabdl_u8): Likewise. + (vabdl_u16): Likewise. + (vabdl_u32): Likewise. + (vabdq_s8): Likewise. + (vabdq_s16): Likewise. + (vabdq_s32): Likewise. + (vabdq_u8): Likewise. + (vabdq_u16): Likewise. + (vabdq_u32): Likewise. + (vaddlv_s8): Likewise. + (vaddlv_s16): Likewise. + (vaddlv_u8): Likewise. + (vaddlv_u16): Likewise. + (vaddlvq_s8): Likewise. + (vaddlvq_s16): Likewise. + (vaddlvq_s32): Likewise. + (vaddlvq_u8): Likewise. + (vaddlvq_u16): Likewise. + (vaddlvq_u32): Likewise. + (vcvtx_f32_f64): Likewise. + (vcvtx_high_f32_f64): Likewise. + (vcvtxd_f32_f64): Likewise. + (vmla_n_f32): Likewise. + (vmla_n_s16): Likewise. + (vmla_n_s32): Likewise. + (vmla_n_u16): Likewise. + (vmla_n_u32): Likewise. + (vmla_s8): Likewise. + (vmla_s16): Likewise. + (vmla_s32): Likewise. + (vmla_u8): Likewise. + (vmla_u16): Likewise. + (vmla_u32): Likewise. + (vmlal_high_n_s16): Likewise. + (vmlal_high_n_s32): Likewise. + (vmlal_high_n_u16): Likewise. + (vmlal_high_n_u32): Likewise. + (vmlal_high_s8): Likewise. + (vmlal_high_s16): Likewise. + (vmlal_high_s32): Likewise. + (vmlal_high_u8): Likewise. + (vmlal_high_u16): Likewise. + (vmlal_high_u32): Likewise. + (vmlal_n_s16): Likewise. + (vmlal_n_s32): Likewise. + (vmlal_n_u16): Likewise. + (vmlal_n_u32): Likewise. + (vmlal_s8): Likewise. + (vmlal_s16): Likewise. + (vmlal_s32): Likewise. + (vmlal_u8): Likewise. + (vmlal_u16): Likewise. + (vmlal_u32): Likewise. + (vmlaq_n_f32): Likewise. + (vmlaq_n_s16): Likewise. + (vmlaq_n_s32): Likewise. + (vmlaq_n_u16): Likewise. + (vmlaq_n_u32): Likewise. + (vmlaq_s8): Likewise. + (vmlaq_s16): Likewise. + (vmlaq_s32): Likewise. + (vmlaq_u8): Likewise. + (vmlaq_u16): Likewise. + (vmlaq_u32): Likewise. + (vmls_n_f32): Likewise. + (vmls_n_s16): Likewise. + (vmls_n_s32): Likewise. + (vmls_n_u16): Likewise. + (vmls_n_u32): Likewise. + (vmls_s8): Likewise. + (vmls_s16): Likewise. + (vmls_s32): Likewise. + (vmls_u8): Likewise. + (vmls_u16): Likewise. + (vmls_u32): Likewise. + (vmlsl_high_n_s16): Likewise. + (vmlsl_high_n_s32): Likewise. + (vmlsl_high_n_u16): Likewise. + (vmlsl_high_n_u32): Likewise. + (vmlsl_high_s8): Likewise. + (vmlsl_high_s16): Likewise. + (vmlsl_high_s32): Likewise. + (vmlsl_high_u8): Likewise. + (vmlsl_high_u16): Likewise. + (vmlsl_high_u32): Likewise. + (vmlsl_n_s16): Likewise. + (vmlsl_n_s32): Likewise. + (vmlsl_n_u16): Likewise. + (vmlsl_n_u32): Likewise. + (vmlsl_s8): Likewise. + (vmlsl_s16): Likewise. + (vmlsl_s32): Likewise. + (vmlsl_u8): Likewise. + (vmlsl_u16): Likewise. + (vmlsl_u32): Likewise. + (vmlsq_n_f32): Likewise. + (vmlsq_n_s16): Likewise. + (vmlsq_n_s32): Likewise. + (vmlsq_n_u16): Likewise. + (vmlsq_n_u32): Likewise. + (vmlsq_s8): Likewise. + (vmlsq_s16): Likewise. + (vmlsq_s32): Likewise. + (vmlsq_u8): Likewise. + (vmlsq_u16): Likewise. + (vmlsq_u32): Likewise. + (vmovl_high_s8): Likewise. + (vmovl_high_s16): Likewise. + (vmovl_high_s32): Likewise. + (vmovl_high_u8): Likewise. + (vmovl_high_u16): Likewise. + (vmovl_high_u32): Likewise. + (vmovl_s8): Likewise. + (vmovl_s16): Likewise. + (vmovl_s32): Likewise. + (vmovl_u8): Likewise. + (vmovl_u16): Likewise. + (vmovl_u32): Likewise. + (vmovn_high_s16): Likewise. + (vmovn_high_s32): Likewise. + (vmovn_high_s64): Likewise. + (vmovn_high_u16): Likewise. + (vmovn_high_u32): Likewise. + (vmovn_high_u64): Likewise. + (vmovn_s16): Likewise. + (vmovn_s32): Likewise. + (vmovn_s64): Likewise. + (vmovn_u16): Likewise. + (vmovn_u32): Likewise. + (vmovn_u64): Likewise. + (vmull_high_n_s16): Likewise. + (vmull_high_n_s32): Likewise. + (vmull_high_n_u16): Likewise. + (vmull_high_n_u32): Likewise. + (vmull_high_p8): Likewise. + (vmull_high_s8): Likewise. + (vmull_high_s16): Likewise. + (vmull_high_s32): Likewise. + (vmull_high_u8): Likewise. + (vmull_high_u16): Likewise. + (vmull_high_u32): Likewise. + (vmull_n_s16): Likewise. + (vmull_n_s32): Likewise. + (vmull_n_u16): Likewise. + (vmull_n_u32): Likewise. + (vmull_p8): Likewise. + (vmull_s8): Likewise. + (vmull_s16): Likewise. + (vmull_s32): Likewise. + (vmull_u8): Likewise. + (vmull_u16): Likewise. + (vmull_u32): Likewise. + (vpadal_s8): Likewise. + (vpadal_s16): Likewise. + (vpadal_s32): Likewise. + (vpadal_u8): Likewise. + (vpadal_u16): Likewise. + (vpadal_u32): Likewise. + (vpadalq_s8): Likewise. + (vpadalq_s16): Likewise. + (vpadalq_s32): Likewise. + (vpadalq_u8): Likewise. + (vpadalq_u16): Likewise. + (vpadalq_u32): Likewise. + (vpaddl_s8): Likewise. + (vpaddl_s16): Likewise. + (vpaddl_s32): Likewise. + (vpaddl_u8): Likewise. + (vpaddl_u16): Likewise. + (vpaddl_u32): Likewise. + (vpaddlq_s8): Likewise. + (vpaddlq_s16): Likewise. + (vpaddlq_s32): Likewise. + (vpaddlq_u8): Likewise. + (vpaddlq_u16): Likewise. + (vpaddlq_u32): Likewise. + (vpaddq_s8): Likewise. + (vpaddq_s16): Likewise. + (vpaddq_s32): Likewise. + (vpaddq_s64): Likewise. + (vpaddq_u8): Likewise. + (vpaddq_u16): Likewise. + (vpaddq_u32): Likewise. + (vpaddq_u64): Likewise. + (vqdmulh_n_s16): Likewise. + (vqdmulh_n_s32): Likewise. + (vqdmulhq_n_s16): Likewise. + (vqdmulhq_n_s32): Likewise. + (vqmovn_high_s16): Likewise. + (vqmovn_high_s32): Likewise. + (vqmovn_high_s64): Likewise. + (vqmovn_high_u16): Likewise. + (vqmovn_high_u32): Likewise. + (vqmovn_high_u64): Likewise. + (vqmovun_high_s16): Likewise. + (vqmovun_high_s32): Likewise. + (vqmovun_high_s64): Likewise. + (vqrdmulh_n_s16): Likewise. + (vqrdmulh_n_s32): Likewise. + (vqrdmulhq_n_s16): Likewise. + (vqrdmulhq_n_s32): Likewise. + (vrsqrte_u32): Likewise. + (vrsqrteq_u32): Likewise. + (vtst_p8): Likewise. + (vtst_p16): Likewise. + (vtst_p64): Likewise. + (vtstq_p8): Likewise. + (vtstq_p16): Likewise. + (vtstq_p64): Likewise. + (vaddlv_s32): Likewise. + (vaddlv_u32): Likewise. + (vqtbl1_p8): Likewise. + (vqtbl1_s8): Likewise. + (vqtbl1_u8): Likewise. + (vqtbl1q_p8): Likewise. + (vqtbl1q_s8): Likewise. + (vqtbl1q_u8): Likewise. + (vqtbx1_s8): Likewise. + (vqtbx1_u8): Likewise. + (vqtbx1_p8): Likewise. + (vqtbx1q_s8): Likewise. + (vqtbx1q_u8): Likewise. + (vqtbx1q_p8): Likewise. + (vtbl1_s8): Likewise. + (vtbl1_u8): Likewise. + (vtbl1_p8): Likewise. + (vtbl2_s8): Likewise. + (vtbl2_u8): Likewise. + (vtbl2_p8): Likewise. + (vtbl3_s8): Likewise. + (vtbl3_u8): Likewise. + (vtbl3_p8): Likewise. + (vtbl4_s8): Likewise. + (vtbl4_u8): Likewise. + (vtbl4_p8): Likewise. + (vtbx2_s8): Likewise. + (vtbx2_u8): Likewise. + (vtbx2_p8): Likewise. + (vld1_f32): Likewise. + (vld1_f64): Likewise. + (vld1_p8): Likewise. + (vld1_p16): Likewise. + (vld1_p64): Likewise. + (vld1_s8): Likewise. + (vld1_s16): Likewise. + (vld1_s32): Likewise. + (vld1_s64): Likewise. + (vld1_u8): Likewise. + (vld1_u16): Likewise. + (vld1_u32): Likewise. + (vld1_u64): Likewise. + (vld1q_f32): Likewise. + (vld1q_f64): Likewise. + (vld1q_p8): Likewise. + (vld1q_p16): Likewise. + (vld1q_p64): Likewise. + (vld1q_s8): Likewise. + (vld1q_s16): Likewise. + (vld1q_s32): Likewise. + (vld1q_s64): Likewise. + (vld1q_u8): Likewise. + (vld1q_u16): Likewise. + (vld1q_u32): Likewise. + (vld1q_u64): Likewise. + (vpmax_s8): Likewise. + (vpmax_s16): Likewise. + (vpmax_s32): Likewise. + (vpmax_u8): Likewise. + (vpmax_u16): Likewise. + (vpmax_u32): Likewise. + (vpmaxq_s8): Likewise. + (vpmaxq_s16): Likewise. + (vpmaxq_s32): Likewise. + (vpmaxq_u8): Likewise. + (vpmaxq_u16): Likewise. + (vpmaxq_u32): Likewise. + (vpmax_f32): Likewise. + (vpmaxq_f32): Likewise. + (vpmaxq_f64): Likewise. + (vpmaxqd_f64): Likewise. + (vpmaxs_f32): Likewise. + (vpmaxnm_f32): Likewise. + (vpmaxnmq_f32): Likewise. + (vpmaxnmq_f64): Likewise. + (vpmaxnmqd_f64): Likewise. + (vpmaxnms_f32): Likewise. + (vpmin_s8): Likewise. + (vpmin_s16): Likewise. + (vpmin_s32): Likewise. + (vpmin_u8): Likewise. + (vpmin_u16): Likewise. + (vpmin_u32): Likewise. + (vpminq_s8): Likewise. + (vpminq_s16): Likewise. + (vpminq_s32): Likewise. + (vpminq_u8): Likewise. + (vpminq_u16): Likewise. + (vpminq_u32): Likewise. + (vpmin_f32): Likewise. + (vpminq_f32): Likewise. + (vpminq_f64): Likewise. + (vpminqd_f64): Likewise. + (vpmins_f32): Likewise. + (vpminnm_f32): Likewise. + (vpminnmq_f32): Likewise. + (vpminnmq_f64): Likewise. + (vpminnmqd_f64): Likewise. + (vpminnms_f32): Likewise. + (vmla_f32): Likewise. + (vmlaq_f32): Likewise. + (vmlaq_f64): Likewise. + (vmls_f32): Likewise. + (vmlsq_f32): Likewise. + (vmlsq_f64): Likewise. + (vqtbl2_s8): Likewise. + (vqtbl2_u8): Likewise. + (vqtbl2_p8): Likewise. + (vqtbl2q_s8): Likewise. + (vqtbl2q_u8): Likewise. + (vqtbl2q_p8): Likewise. + (vqtbl3_s8): Likewise. + (vqtbl3_u8): Likewise. + (vqtbl3_p8): Likewise. + (vqtbl3q_s8): Likewise. + (vqtbl3q_u8): Likewise. + (vqtbl3q_p8): Likewise. + (vqtbl4_s8): Likewise. + (vqtbl4_u8): Likewise. + (vqtbl4_p8): Likewise. + (vqtbl4q_s8): Likewise. + (vqtbl4q_u8): Likewise. + (vqtbl4q_p8): Likewise. + (vqtbx2_s8): Likewise. + (vqtbx2_u8): Likewise. + (vqtbx2_p8): Likewise. + (vqtbx2q_s8): Likewise. + (vqtbx2q_u8): Likewise. + (vqtbx2q_p8): Likewise. + (vqtbx3_s8): Likewise. + (vqtbx3_u8): Likewise. + (vqtbx3_p8): Likewise. + (vqtbx3q_s8): Likewise. + (vqtbx3q_u8): Likewise. + (vqtbx3q_p8): Likewise. + (vqtbx4_s8): Likewise. + (vqtbx4_u8): Likewise. + (vqtbx4_p8): Likewise. + (vqtbx4q_s8): Likewise. + (vqtbx4q_u8): Likewise. + (vqtbx4q_p8): Likewise. + (vrev16_p8): Likewise. + (vrev16_s8): Likewise. + (vrev16_u8): Likewise. + (vrev16q_p8): Likewise. + (vrev16q_s8): Likewise. + (vrev16q_u8): Likewise. + (vrev32_p8): Likewise. + (vrev32_p16): Likewise. + (vrev32_s8): Likewise. + (vrev32_s16): Likewise. + (vrev32_u8): Likewise. + (vrev32_u16): Likewise. + (vrev32q_p8): Likewise. + (vrev32q_p16): Likewise. + (vrev32q_s8): Likewise. + (vrev32q_s16): Likewise. + (vrev32q_u8): Likewise. + (vrev32q_u16): Likewise. + (vrev64_f32): Likewise. + (vrev64_p8): Likewise. + (vrev64_p16): Likewise. + (vrev64_s8): Likewise. + (vrev64_s16): Likewise. + (vrev64_s32): Likewise. + (vrev64_u8): Likewise. + (vrev64_u16): Likewise. + (vrev64_u32): Likewise. + (vrev64q_f32): Likewise. + (vrev64q_p8): Likewise. + (vrev64q_p16): Likewise. + (vrev64q_s8): Likewise. + (vrev64q_s16): Likewise. + (vrev64q_s32): Likewise. + (vrev64q_u8): Likewise. + (vrev64q_u16): Likewise. + (vrev64q_u32): Likewise. + (vsha1cq_u32): Likewise. + (vsha1mq_u32): Likewise. + (vsha1pq_u32): Likewise. + (vsha1h_u32): Likewise. + (vsha1su0q_u32): Likewise. + (vsha1su1q_u32): Likewise. + (vsha256hq_u32): Likewise. + (vsha256h2q_u32): Likewise. + (vsha256su0q_u32): Likewise. + (vsha256su1q_u32): Likewise. + (vmull_p64): Likewise. + (vmull_high_p64): Likewise. + (vsqrt_f32): Likewise. + (vsqrtq_f32): Likewise. + (vsqrt_f64): Likewise. + (vsqrtq_f64): Likewise. + (vst1_f32): Likewise. + (vst1_f64): Likewise. + (vst1_p8): Likewise. + (vst1_p16): Likewise. + (vst1_p64): Likewise. + (vst1_s8): Likewise. + (vst1_s16): Likewise. + (vst1_s32): Likewise. + (vst1_s64): Likewise. + (vst1_u8): Likewise. + (vst1_u16): Likewise. + (vst1_u32): Likewise. + (vst1_u64): Likewise. + (vst1q_f32): Likewise. + (vst1q_f64): Likewise. + (vst1q_p8): Likewise. + (vst1q_p16): Likewise. + (vst1q_p64): Likewise. + (vst1q_s8): Likewise. + (vst1q_s16): Likewise. + (vst1q_s32): Likewise. + (vst1q_s64): Likewise. + (vst1q_u8): Likewise. + (vst1q_u16): Likewise. + (vst1q_u32): Likewise. + (vst1q_u64): Likewise. + (vst1_s64_x2): Likewise. + (vst1_u64_x2): Likewise. + (vst1_f64_x2): Likewise. + (vst1_s8_x2): Likewise. + (vst1_p8_x2): Likewise. + (vst1_s16_x2): Likewise. + (vst1_p16_x2): Likewise. (vst1_s32_x2): Likewise. (vst1_u8_x2): Likewise. (vst1_u16_x2): Likewise. diff --cc gcc/ira-costs.c index bc010e223b14,baf7261ddfe6..5eeb7d74794b --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@@ -478,928 -473,6 +473,928 @@@ copy_cost (rtx x, machine_mode mode, re +/* Some insn operand info after choosing an insn alternative. */ +struct op_info +{ + /* Flags of that insn alternative permits the operand to be in + memory or an address. */ + bool allows_mem_p; + bool allows_addr_p; + /* Class of the operand permitted by the insn alternative. It is an + approximation. The accuracy can be improved if we have a set of + register classes. Does we need such accuracy? The question is + open. */ + enum reg_class op_class; +}; + +/* Container of the above info about the insn operands. */ +static vec op_infos; + +/* Info about selected alternative of the insns. We could use set of + alternatives here. Does it worth spent time for keeping and + processing more one alternative? The question is open. */ +struct insn_selection +{ + /* Number of the selcted alternative. */ + int alt; + /* Start index of the insn operands info in op_infos. */ + int op_info_start; +}; + +/* Container of the above info about the selected insns + alternative. */ +static vec insn_selections; + +/* True if X is a constant that can be forced into the constant pool. + MODE is the mode of the operand, or VOIDmode if not known. */ +#define CONST_POOL_OK_P(MODE, X) \ + ((MODE) != VOIDmode \ + && CONSTANT_P (X) \ + && GET_CODE (X) != HIGH \ + && !targetm.cannot_force_const_mem (MODE, X)) + +/* True if C is a non-empty register class that has too few registers + to be safely used as a reload target class. */ +#define SMALL_REGISTER_CLASS_P(C) \ + (reg_class_size [(C)] == 1 \ + || (reg_class_size [(C)] >= 1 && targetm.class_likely_spilled_p (C))) + +static inline bool +general_constant_p (rtx x) +{ + return CONSTANT_P (x) && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (x)); +} + +/* A container used for quick access to operand constraints for given + alternative. Use preferred pseudo reg classes from the previous + pass when it is possible. */ +static vec insn_constraints; + +/* Choose INSN alternative and setup corresponding elements of + INSN_SELECTIONS and OP_INFOS. */ +static void +setup_insn_alt (rtx_insn *insn) +{ + bool ok_p = false; + int nop, best_overall, overall, nalt, i, m, len, uid; + /* LOSERS counts the operands that don't fit this alternative and + would require loading. */ + int best_losers, losers; + /* REJECT is a count of how undesirable this alternative says it is + if any reloading is required. If the alternative matches exactly + then REJECT is ignored, but otherwise it gets this much counted + against it in addition to the reloading needed. */ + int reject; + enum reg_class curr_alt[MAX_RECOG_OPERANDS]; + enum reg_class goal_op_alt[MAX_RECOG_OPERANDS]; + bool curr_alt_win[MAX_RECOG_OPERANDS]; + bool curr_alt_offmemok[MAX_RECOG_OPERANDS]; + bool goal_alt_offmemok[MAX_RECOG_OPERANDS]; + bool curr_alt_addrok[MAX_RECOG_OPERANDS]; + bool goal_alt_addrok[MAX_RECOG_OPERANDS]; + int curr_alt_matches[MAX_RECOG_OPERANDS]; + rtx op; + /* The register when the operand is a subreg of register, otherwise the + operand itself. */ + rtx no_subreg_reg_operand[MAX_RECOG_OPERANDS]; + /* The register if the operand is a register or subreg of register, + otherwise NULL. */ + rtx operand_reg[MAX_RECOG_OPERANDS]; + enum op_type operand_type[MAX_RECOG_OPERANDS]; + int hard_regno[MAX_RECOG_OPERANDS]; + bool curr_swapped, goal_alt_swapped = false; + bool early_clobber_p[MAX_RECOG_OPERANDS]; + int best_reload_nregs = 0, reload_nregs; + bool costly_p, addrok; + enum reg_class cl; + enum constraint_num cn; + enum machine_mode curr_operand_mode[MAX_RECOG_OPERANDS]; + enum machine_mode mode; + int goal_alt_number = -1; + int commutative = -1; + bool no_input_reloads_p, no_output_reloads_p; + rtx set; + const char *p; + + uid = INSN_UID (insn); + len = insn_selections.length (); + if (len <= uid) + { + insn_selections.safe_grow (uid + 1); + for (i = len; i <= uid; i++) + insn_selections[i].alt = -1; + } + if (!NONDEBUG_INSN_P (insn)) + { + insn_selections[INSN_UID (insn)].alt = -1; + return; + } + if ((set = single_set (insn)) != NULL_RTX) + { + rtx dest = SET_DEST (set); + rtx src = SET_SRC (set); + + if (GET_CODE (dest) == SUBREG) + dest = SUBREG_REG (dest); + if (GET_CODE (src) == SUBREG) + src = SUBREG_REG (src); + if (((REG_P (dest) && REGNO (dest) >= FIRST_PSEUDO_REGISTER) - || MEM_P (dest)) ++ || 0&&MEM_P (dest)) + && ((REG_P (src) && REGNO (src) >= FIRST_PSEUDO_REGISTER) - || MEM_P (src))) ++ || 0&&MEM_P (src))) + { + if (ira_dump_file != NULL) + fprintf (ira_dump_file, "insn %d is move -- ignore\n", INSN_UID (insn)); + insn_selections[INSN_UID (insn)].alt = -1; + return; + } + } + no_input_reloads_p = no_output_reloads_p = false; + /* JUMP_INSNs and CALL_INSNs are not allowed to have any output + reloads; neither are insns that SET cc0. Insns that use CC0 are + not allowed to have any input reloads. */ + if (JUMP_P (insn) || CALL_P (insn)) + no_output_reloads_p = true; +#ifdef HAVE_cc0 + if (reg_referenced_p (cc0_rtx, PATTERN (insn))) + no_input_reloads_p = true; + if (reg_set_p (cc0_rtx, PATTERN (insn))) + no_output_reloads_p = true; +#endif + insn_constraints.truncate (0); + insn_constraints.safe_grow_cleared (recog_data.n_operands + * recog_data.n_alternatives + 1); + best_losers = best_overall = INT_MAX; + for (curr_swapped = false;;curr_swapped = true) + { + /* Calculate some data common for all alternatives to speed up the + function. */ + for (nop = 0; nop < recog_data.n_operands; nop++) + { + operand_type[nop] = OP_IN; + op = no_subreg_reg_operand[nop] = recog_data.operand[nop]; + operand_reg[nop] = op; + hard_regno[nop] = -1; + if (GET_CODE (operand_reg[nop]) == SUBREG) + operand_reg[nop] = SUBREG_REG (operand_reg[nop]); + if (REG_P (operand_reg[nop])) + { + no_subreg_reg_operand[nop] = operand_reg[nop]; + if (REGNO (operand_reg[nop]) < FIRST_PSEUDO_REGISTER) + hard_regno[nop] = REGNO (operand_reg[nop]); + } + else + operand_reg[nop] = NULL_RTX; + for (nalt = 0, p = recog_data.constraints[nop]; + nalt < recog_data.n_alternatives; + nalt++) + { + insn_constraints[nop * recog_data.n_alternatives + nalt] = p; + while (*p && *p != ',') + p++; + if (*p) + p++; + } + mode = GET_MODE (recog_data.operand[nop]); + curr_operand_mode[nop] = mode; + } + + alternative_mask enabled = get_enabled_alternatives (insn); + /* The constraints are made of several alternatives. Each operand's + constraint looks like foo,bar,... with commas separating the + alternatives. The first alternatives for all operands go + together, the second alternatives go together, etc. + + First loop over alternatives. */ + for (nalt = 0; nalt < recog_data.n_alternatives; nalt++) + { + /* Loop over operands for one constraint alternative. */ + if (!TEST_BIT (enabled, nalt)) + continue; + + overall = losers = reject = reload_nregs = 0; + + for (nop = 0; nop < recog_data.n_operands; nop++) + { + int len, c, this_alternative_matches; + bool win, did_match, offmemok; + /* false => this operand can be reloaded somehow for this + alternative. */ + bool badop; + /* true => this operand can be reloaded if the alternative + allows regs. */ + bool winreg; + /* True if a constant forced into memory would be OK for + this operand. */ + bool constmemok; + enum reg_class this_alternative, this_costly_alternative; + bool this_alternative_win; + bool this_alternative_offmemok; + bool scratch_p; + enum machine_mode mode; + + p = insn_constraints[nop * recog_data.n_alternatives + nalt]; + if (*p == 0 || *p == ',') + { + /* Fast track for no constraints at all. */ + curr_alt[nop] = NO_REGS; + curr_alt_win[nop] = true; + curr_alt_offmemok[nop] = false; + curr_alt_addrok[nop] = false; + curr_alt_matches[nop] = -1; + continue; + } + + op = no_subreg_reg_operand[nop]; + mode = curr_operand_mode[nop]; + + win = did_match = winreg = offmemok = constmemok = addrok = false; + badop = true; + + early_clobber_p[nop] = false; + + this_costly_alternative = this_alternative = NO_REGS; + this_alternative_win = false; + this_alternative_offmemok = false; + this_alternative_matches = -1; + scratch_p = GET_CODE (no_subreg_reg_operand[nop]) == SCRATCH; + + /* Scan this alternative's specs for this operand; set WIN + if the operand fits any letter in this alternative. + Otherwise, clear BADOP if this operand could fit some + letter after reloads, or set WINREG if this operand could + fit after reloads provided the constraint allows some + registers. */ + costly_p = false; + do + { + switch ((c = *p, len = CONSTRAINT_LEN (c, p)), c) + { + case '\0': + len = 0; + break; + case ',': + c = '\0'; + break; + case '=': + operand_type[nop] = OP_OUT; + break; + case '+': + operand_type[nop] = OP_INOUT; + break; + case ' ': case '\t': + break; + case '*': + /* Ignore the next letter for this pass. */ + c = *++p; + len = CONSTRAINT_LEN (c, p); + break; + case '^': + case '?': + reject += 6; + break; + case '!': + reject += 600; + break; + case '%': + /* We only support one commutative marker, the first + one. We already set commutative above. */ + if (commutative < 0) + commutative = nop; + break; + case '&': + early_clobber_p[nop] = true; + break; + + case '#': + /* Ignore rest of this alternative. */ + do + p++; + while (*p && *p != ','); + c = '\0'; + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + char *end; + bool match_p; + + m = strtoul (p, &end, 10); + p = end; + len = 0; + ira_assert (nop > m); + + this_alternative_matches = m; + /* We are supposed to match a previous + operand. If we do, we win if that one did. + If we do not, count both of the operands as + losers. (This is too conservative, since + most of the time only a single reload insn + will be needed to make the two operands + win. As a result, this alternative may be + rejected when it is actually + desirable.) */ + match_p = false; + if (rtx_equal_p (recog_data.operand[nop], + recog_data.operand[m])) + { + /* We should reject matching of an early + clobber operand if the matching operand is + not dying in the insn. */ + if (! early_clobber_p[m] + || operand_reg[nop] == NULL_RTX + || (find_regno_note (insn, REG_DEAD, + REGNO (op)) + || REGNO (op) == REGNO (operand_reg[m]))) + match_p = true; + } + if (match_p) + { + /* If we are matching a non-offsettable + address where an offsettable address + was expected, then we must reject this + combination, because we can't reload + it. */ + if (curr_alt_offmemok[m] + && MEM_P (recog_data.operand[m]) + && curr_alt[m] == NO_REGS && ! curr_alt_win[m]) + continue; + + } + else + { + /* Operands don't match. Both operands must + allow a reload register, otherwise we + cannot make them match. */ + if (curr_alt[m] == NO_REGS) + break; + /* Retroactively mark the operand we had to + match as a loser, if it wasn't already and + it wasn't matched to a register constraint + (e.g it might be matched by memory). */ + if (curr_alt_win[m] && operand_reg[m] == NULL_RTX) + { + losers++; + reload_nregs + += (ira_reg_class_max_nregs[curr_alt[m]] + [GET_MODE (recog_data.operand[m])]); + } + + /* We prefer no matching alternatives because + it gives more freedom in RA. */ + if (operand_reg[nop] == NULL_RTX + || (find_regno_note (insn, REG_DEAD, + REGNO (operand_reg[nop])) + == NULL_RTX)) + reject += 2; + } + /* If we have to reload this operand and some + previous operand also had to match the same + thing as this operand, we don't know how to do + that. */ + if (!match_p || !curr_alt_win[m]) + { + for (i = 0; i < nop; i++) + if (curr_alt_matches[i] == m) + break; + if (i < nop) + break; + } + else + did_match = true; + + /* This can be fixed with reloads if the operand + we are supposed to match can be fixed with + reloads. */ + badop = false; + this_alternative = curr_alt[m]; + winreg = this_alternative != NO_REGS; + break; + } + + case 'g': + if (MEM_P (op) || general_constant_p (op)) + win = true; + /* Drop through into 'r' case. */ + cl = GENERAL_REGS; + goto reg; + + default: + cn = lookup_constraint (p); + switch (get_constraint_type (cn)) + { + case CT_REGISTER: + cl = reg_class_for_constraint (cn); + if (cl != NO_REGS) + goto reg; + break; + + case CT_CONST_INT: + if (CONST_INT_P (op) + && insn_const_int_ok_for_constraint (INTVAL (op), cn)) + win = true; + break; + + case CT_MEMORY: + if (constraint_satisfied_p (op, cn)) + win = true; + + /* If we didn't already win, we can reload + constants via force_const_mem or put the + pseudo value into memory, or make other + memory by reloading the address like for + 'o'. */ + if (CONST_POOL_OK_P (mode, op) + || MEM_P (op) || REG_P (op)) + badop = false; + constmemok = true; + offmemok = true; + break; + + case CT_ADDRESS: + /* If we didn't already win, we can reload + the address into a base register. */ + if (constraint_satisfied_p (op, cn)) + win = true; + cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC, + ADDRESS, SCRATCH); + badop = false; + addrok = true; + goto reg; + + case CT_FIXED_FORM: + if (constraint_satisfied_p (op, cn)) + win = true; + break; + + case CT_SPECIAL_MEMORY: + if (constraint_satisfied_p (op, cn)) + win = true; + break; + } + break; + + reg: + this_alternative + = reg_class_subunion[this_alternative][cl]; + if (costly_p) + this_costly_alternative + = (reg_class_subunion + [this_costly_alternative][cl]); + if (mode == BLKmode) + break; + winreg = true; + if (hard_regno[nop] >= 0) + { + if (in_hard_reg_set_p (reg_class_contents[this_alternative], + mode, hard_regno[nop])) + win = true; + } + else if ((pref == NULL && REG_P (op)) || scratch_p) + win = true; + else if (pref != NULL && REG_P (op) + && REGNO (op) >= FIRST_PSEUDO_REGISTER + && pref[COST_INDEX (REGNO (op))] != NO_REGS + && (ira_class_subset_p + [pref[COST_INDEX (REGNO (op))]][this_alternative])) + win = true; + break; + } + if (c != ' ' && c != '\t') + costly_p = c == '*'; + } + while ((p += len), c); + + /* Record which operands fit this alternative. */ + if (win) + { + this_alternative_win = true; + if (operand_reg[nop] != NULL_RTX || scratch_p) + { + if (this_costly_alternative == this_alternative + || (hard_regno[nop] >= 0 + && in_hard_reg_set_p (reg_class_contents + [this_costly_alternative], + mode, hard_regno[nop])) + || (pref != NULL && REG_P (op) + && REGNO (op) >= FIRST_PSEUDO_REGISTER + && (ira_class_subset_p + [pref[COST_INDEX (REGNO (op))]] + [this_costly_alternative]))) + reject++; + } + } + else if (did_match) + ; + else + { + int const_to_mem = 0; + bool no_regs_p; + + /* If this alternative asks for a specific reg class, see if there + is at least one allocatable register in that class. */ + no_regs_p + = (this_alternative == NO_REGS + || (hard_reg_set_subset_p + (reg_class_contents[this_alternative], + ira_no_alloc_regs))); + + /* For asms, verify that the class for this alternative is possible + for the mode that is specified. */ + if (!no_regs_p && INSN_CODE (insn) < 0) + { + int i; + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + if (targetm.hard_regno_mode_ok (i, mode) + && in_hard_reg_set_p (reg_class_contents[this_alternative], + mode, i)) + break; + if (i == FIRST_PSEUDO_REGISTER) + winreg = false; + } + + /* If this operand accepts a register, and if the + register class has at least one allocatable register, + then this operand can be reloaded. */ + if (winreg && !no_regs_p) + badop = false; + + if (badop) + goto fail; + + this_alternative_offmemok = offmemok; + if (this_costly_alternative != NO_REGS) + reject++; + /* If the operand is dying, has a matching constraint, + and satisfies constraints of the matched operand + which failed to satisfy the own constraints, we do + not need to generate a reload insn for this + operand. */ + if (!(this_alternative_matches >= 0 + && !curr_alt_win[this_alternative_matches] + && REG_P (op) + && find_regno_note (insn, REG_DEAD, REGNO (op)) + && ((hard_regno[nop] >= 0 + && in_hard_reg_set_p (reg_class_contents + [curr_alt[this_alternative_matches]], + mode, hard_regno[nop])) + || pref == NULL + || (REGNO (op) >= FIRST_PSEUDO_REGISTER + && pref[COST_INDEX (REGNO (op))] != NO_REGS + && (ira_class_subset_p + [pref[COST_INDEX (REGNO (op))]] + [curr_alt[this_alternative_matches]]))))) + losers++; + /* If this is a constant that is reloaded into the + desired class by copying it to memory first, count + that as another reload. This is consistent with + other code and is required to avoid choosing another + alternative when the constant is moved into memory. + Note that the test here is precisely the same as in + the code below that calls force_const_mem. */ + if (CONST_POOL_OK_P (mode, op) + && ((targetm.preferred_reload_class + (op, this_alternative) == NO_REGS) + || no_input_reloads_p)) + { + const_to_mem = 1; + if (! no_regs_p) + losers++; + } + + /* Alternative loses if it requires a type of reload not + permitted for this insn. We can always reload + objects with a REG_UNUSED note. */ + if ((operand_type[nop] != OP_IN + && no_output_reloads_p + && ! find_reg_note (insn, REG_UNUSED, op)) + || (operand_type[nop] != OP_OUT + && no_input_reloads_p && ! const_to_mem)) + goto fail; + + /* Check strong discouragement of reload of non-constant + into class THIS_ALTERNATIVE. */ + if (! CONSTANT_P (op) && ! no_regs_p + && (targetm.preferred_reload_class + (op, this_alternative) == NO_REGS + || (operand_type[nop] == OP_OUT + && (targetm.preferred_output_reload_class + (op, this_alternative) == NO_REGS)))) + reject += 600; + + if (! (MEM_P (op) && offmemok) + && ! (const_to_mem && constmemok)) + { + /* We prefer to reload pseudos over reloading + other things, since such reloads may be able + to be eliminated later. So bump REJECT in + other cases. Don't do this in the case where + we are forcing a constant into memory and it + will then win since we don't want to have a + different alternative match then. */ + if (! (scratch_p + || (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER))) + reject += 2; + + if (! no_regs_p) + reload_nregs + += ira_reg_class_max_nregs[this_alternative][mode]; + + if (SMALL_REGISTER_CLASS_P (this_alternative)) + reject += 3; + } + + /* We are trying to spill pseudo into memory. It is + usually more costly than moving to a hard + register although it might takes the same number + of reloads. */ + if (no_regs_p && (REG_P (op) || scratch_p)) + reject += 3; + + /* Input reloads can be inherited more often than + output reloads can be removed, so penalize output + reloads. */ + if (! (REG_P (op) || scratch_p) || operand_type[nop] != OP_IN) + reject++; + } + + if (early_clobber_p[nop] && ! scratch_p) + reject++; + + /* ??? We check early clobbers after processing all + operands (see loop below) and there we update the + costs more. Should we update the cost (may be + approximately) here because of early clobber register + reloads or it is a rare or non-important thing to be + worth to do it. */ + overall = losers * 6 + reject; + if ((best_losers == 0 || losers != 0) && best_overall < overall) + goto fail; + + curr_alt[nop] = this_alternative; + curr_alt_win[nop] = this_alternative_win; + curr_alt_offmemok[nop] = this_alternative_offmemok; + curr_alt_addrok[nop] = addrok; + curr_alt_matches[nop] = this_alternative_matches; + + if (this_alternative_matches >= 0 + && !did_match && !this_alternative_win) + curr_alt_win[this_alternative_matches] = false; + } + ok_p = true; + /* If this alternative can be made to work by reloading, and + it needs less reloading than the others checked so far, + record it as the chosen goal for reloading. */ + if ((best_losers != 0 && losers == 0) + || (((best_losers == 0 && losers == 0) + || (best_losers != 0 && losers != 0)) + && (best_overall > overall + || (best_overall == overall + /* If the cost of the reloads is the same, + prefer alternative which requires minimal + number of reload regs. */ + && (reload_nregs < best_reload_nregs + || (reload_nregs == best_reload_nregs + && nalt < goal_alt_number)))))) + { + goal_alt_swapped = curr_swapped; + for (nop = 0; nop < recog_data.n_operands; nop++) + { + goal_op_alt[nop] = curr_alt[nop]; + goal_alt_offmemok[nop] = curr_alt_offmemok[nop]; + goal_alt_addrok[nop] = curr_alt_addrok[nop]; + if ((m = curr_alt_matches[nop]) >= 0) + { + goal_op_alt[nop] = reg_class_subunion[curr_alt[m]][curr_alt[nop]]; + if (curr_alt_offmemok[m]) + goal_alt_offmemok[nop] = true; + } + } + best_overall = overall; + best_losers = losers; + best_reload_nregs = reload_nregs; + goal_alt_number = nalt; + } + if (losers == 0) + /* Everything is satisfied. Do not process alternatives + anymore. */ + break; + fail: + ; + } + if (commutative < 0) + break; + if (curr_swapped) + break; + op = recog_data.operand[commutative]; + recog_data.operand[commutative] = recog_data.operand[commutative + 1]; + recog_data.operand[commutative + 1] = op; + } + if (curr_swapped) + { + op = recog_data.operand[commutative]; + recog_data.operand[commutative] = recog_data.operand[commutative + 1]; + recog_data.operand[commutative + 1] = op; + } + if (! ok_p) + goal_alt_number = 0; + if (ira_dump_file != NULL) + { + fprintf (ira_dump_file, "insn %u", uid); + if (INSN_CODE (insn) >= 0 + && (p = get_insn_name (INSN_CODE (insn))) != NULL) + fprintf (ira_dump_file, " {%s}", p); + fprintf (ira_dump_file, " will use alt %d%s:", goal_alt_number, + goal_alt_swapped ? " with swap" : "" ); + } + len = op_infos.length (); + if (insn_selections[uid].alt >= 0 && insn_selections[uid].alt != goal_alt_number) + fprintf (stderr, "change alt %d to %d in insn %d\n", + insn_selections[uid].alt, goal_alt_number, uid); + insn_selections[uid].alt = goal_alt_number; + insn_selections[uid].op_info_start = len; + op_infos.safe_grow (len + recog_data.n_operands); + for (nop = 0; nop < recog_data.n_operands; nop++) + { + op_infos[len + nop].op_class = goal_op_alt[nop]; + op_infos[len + nop].allows_mem_p = goal_alt_offmemok[nop]; + op_infos[len + nop].allows_addr_p = goal_alt_addrok[nop]; + if (ira_dump_file != NULL) + { + p = insn_constraints[nop * recog_data.n_alternatives + goal_alt_number]; + if (p == NULL || *p == '\0') + continue; + fprintf (ira_dump_file, " (%d) ", nop); + for (; *p != '\0' && *p != ',' && *p != '#'; p++) + fputc (*p, ira_dump_file); + } + } + if (ira_dump_file != NULL) + fprintf (ira_dump_file, "\n"); +} + +static void +record_address_regs (enum machine_mode mode, addr_space_t as, rtx x, + int context, enum rtx_code outer_code, + enum rtx_code index_code, int scale); + +/* Update reg classes and memory costs of pseudos after choosing + alternative ISEL of INSN. Don't update memory costs if + IGNORE_MEM_COST_P is TRUE. */ +static void +define_op_cost_from_alt (rtx_insn *insn, const struct insn_selection &isel, bool ignore_mem_cost_p) +{ + int nop, op_start, regno, other_regno; + rtx set; + + ira_assert (isel.alt >= 0); + op_start = isel.op_info_start; + for (nop = 0; nop < recog_data.n_operands; nop++) + { + rtx op = recog_data.operand[nop]; + int k, add_cost, regno; + bool in_p, out_p, allows_mem_p; + enum machine_mode mode; + struct costs *pp; + int *pp_costs; + cost_classes_t cost_classes_ptr; + enum reg_class *cost_classes; + enum reg_class op_class, cost_class; + move_table *move_in_cost, *move_out_cost; + + if (GET_CODE (op) == SUBREG) + op = SUBREG_REG (op); + op_class = op_infos[op_start + nop].op_class; + if (MEM_P (op)) + record_address_regs (GET_MODE (op), MEM_ADDR_SPACE (op), + XEXP (op, 0), 0, MEM, SCRATCH, frequency * 2); + else if (op_infos[op_start + nop].allows_addr_p) + record_address_regs (VOIDmode, ADDR_SPACE_GENERIC, + op, 0, ADDRESS, SCRATCH, frequency * 2); + + if (! REG_P (op) || (regno = REGNO (op)) < FIRST_PSEUDO_REGISTER) + continue; + + op_class = op_infos[op_start + nop].op_class; + mode = GET_MODE (op); /* ??? smallest mode for paradoxical subreg */ + pp = COSTS (costs, COST_INDEX (regno)); + cost_classes_ptr = regno_cost_classes[regno]; + cost_classes = cost_classes_ptr->classes; + pp_costs = pp->cost; + in_p = recog_data.operand_type[nop] != OP_OUT; + out_p = recog_data.operand_type[nop] != OP_IN; + ira_init_register_move_cost_if_necessary (mode); + if (! in_p) + { + ira_assert (out_p); + move_out_cost = ira_may_move_out_cost[mode]; + for (k = cost_classes_ptr->num - 1; k >= 0; k--) + { + cost_class = cost_classes[k]; + add_cost = move_out_cost[op_class][cost_class] * frequency; + if (INT_MAX - add_cost < pp_costs[k]) + pp_costs[k] = INT_MAX; + else + pp_costs[k] += add_cost; + } + } + else if (! out_p) + { + ira_assert (in_p); + move_in_cost = ira_may_move_in_cost[mode]; + for (k = cost_classes_ptr->num - 1; k >= 0; k--) + { + cost_class = cost_classes[k]; + add_cost = move_in_cost[cost_class][op_class] * frequency; + if (INT_MAX - add_cost < pp_costs[k]) + pp_costs[k] = INT_MAX; + else + pp_costs[k] += add_cost; + } + } + else + { + move_in_cost = ira_may_move_in_cost[mode]; + move_out_cost = ira_may_move_out_cost[mode]; + for (k = cost_classes_ptr->num - 1; k >= 0; k--) + { + cost_class = cost_classes[k]; + add_cost = (move_in_cost[cost_class][op_class] + + move_out_cost[op_class][cost_class]) * frequency; + if (INT_MAX - add_cost < pp_costs[k]) + pp_costs[k] = INT_MAX; + else + pp_costs[k] += add_cost; + } + } + + if (!ignore_mem_cost_p) + { + allows_mem_p = op_infos[op_start + nop].allows_mem_p; + /* If the alternative actually allows memory, make things a bit + cheaper since we won't need an extra insn to load it. */ + add_cost = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0) + + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0) + - allows_mem_p) * frequency; + if (INT_MAX - add_cost < pp->mem_cost) + pp->mem_cost = INT_MAX; + else + pp->mem_cost += add_cost; + } + } + if ((set = single_set (insn)) != NULL_RTX) + { + rtx dest = SET_DEST (set); + rtx src = SET_SRC (set); + + dest = SET_DEST (set); + src = SET_SRC (set); + if (REG_P (src) && REG_P (dest) + && find_regno_note (insn, REG_DEAD, REGNO (src)) + && (((regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER + && (other_regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER) + || ((regno = REGNO (dest)) >= FIRST_PSEUDO_REGISTER + && (other_regno = REGNO (src)) < FIRST_PSEUDO_REGISTER))) + { + struct costs *pp = COSTS (costs, COST_INDEX (regno)); + int *pp_costs = pp->cost; + enum machine_mode mode = GET_MODE (src); + cost_classes_t cost_classes_ptr = regno_cost_classes[regno]; + enum reg_class *cost_classes = cost_classes_ptr->classes; + reg_class_t rclass; + int k, nr; + + for (k = cost_classes_ptr->num - 1; k >= 0; k--) + { + rclass = cost_classes[k]; + if (TEST_HARD_REG_BIT (reg_class_contents[rclass], other_regno) + && (reg_class_size[(int) rclass] + == ira_reg_class_max_nregs [(int) rclass][(int) mode])) + { + if (reg_class_size[rclass] == 1) + pp_costs[k] -= frequency; + else + { + for (nr = 0; + nr < hard_regno_nregs (other_regno, mode); + nr++) + if (! TEST_HARD_REG_BIT (reg_class_contents[rclass], + other_regno + nr)) + break; + + if (nr == hard_regno_nregs (other_regno, mode)) + pp_costs[k] -= frequency; + } + } + } + } + } +} + + + + /* Record the cost of using memory or hard registers of various classes for the operands in INSN. @@@ -2415,44 -1522,44 +2448,49 @@@ scan_one_insn (rtx_insn *insn counted_mem = true; } - record_operand_costs (insn, pref); - - /* Now add the cost for each operand to the total costs for its - allocno. */ - for (i = 0; i < recog_data.n_operands; i++) + if (flag_ira_select && insn_selections [INSN_UID (insn)].alt >= 0) + define_op_cost_from_alt (insn, insn_selections [INSN_UID (insn)], counted_mem); + else { - rtx op = recog_data.operand[i]; + record_operand_costs (insn, pref); - if (GET_CODE (op) == SUBREG) - op = SUBREG_REG (op); - if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER) + /* Now add the cost for each operand to the total costs for its + allocno. */ + for (i = 0; i < recog_data.n_operands; i++) - if (REG_P (recog_data.operand[i]) - && REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER) - { - int regno = REGNO (recog_data.operand[i]); - struct costs *p = COSTS (costs, COST_INDEX (regno)); - struct costs *q = op_costs[i]; - int *p_costs = p->cost, *q_costs = q->cost; - cost_classes_t cost_classes_ptr = regno_cost_classes[regno]; - int add_cost; - - /* If the already accounted for the memory "cost" above, don't - do so again. */ - if (!counted_mem) - { - add_cost = q->mem_cost; - if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost) - p->mem_cost = INT_MAX; - else - p->mem_cost += add_cost; - } - for (k = cost_classes_ptr->num - 1; k >= 0; k--) - { - add_cost = q_costs[k]; - if (add_cost > 0 && INT_MAX - add_cost < p_costs[k]) - p_costs[k] = INT_MAX; - else - p_costs[k] += add_cost; - } - } + { - int regno = REGNO (op); - struct costs *p = COSTS (costs, COST_INDEX (regno)); - struct costs *q = op_costs[i]; - int *p_costs = p->cost, *q_costs = q->cost; - cost_classes_t cost_classes_ptr = regno_cost_classes[regno]; - int add_cost; ++ rtx op = recog_data.operand[i]; + - /* If the already accounted for the memory "cost" above, don't - do so again. */ - if (!counted_mem) - { - add_cost = q->mem_cost; - if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost) - p->mem_cost = INT_MAX; - else - p->mem_cost += add_cost; - } - for (k = cost_classes_ptr->num - 1; k >= 0; k--) ++ if (GET_CODE (op) == SUBREG) ++ op = SUBREG_REG (op); ++ if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER) + { - add_cost = q_costs[k]; - if (add_cost > 0 && INT_MAX - add_cost < p_costs[k]) - p_costs[k] = INT_MAX; - else - p_costs[k] += add_cost; ++ int regno = REGNO (op); ++ struct costs *p = COSTS (costs, COST_INDEX (regno)); ++ struct costs *q = op_costs[i]; ++ int *p_costs = p->cost, *q_costs = q->cost; ++ cost_classes_t cost_classes_ptr = regno_cost_classes[regno]; ++ int add_cost; ++ ++ /* If the already accounted for the memory "cost" above, don't ++ do so again. */ ++ if (!counted_mem) ++ { ++ add_cost = q->mem_cost; ++ if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost) ++ p->mem_cost = INT_MAX; ++ else ++ p->mem_cost += add_cost; ++ } ++ for (k = cost_classes_ptr->num - 1; k >= 0; k--) ++ { ++ add_cost = q_costs[k]; ++ if (add_cost > 0 && INT_MAX - add_cost < p_costs[k]) ++ p_costs[k] = INT_MAX; ++ else ++ p_costs[k] += add_cost; ++ } + } + } } return insn; } @@@ -2785,7 -1890,7 +2823,7 @@@ find_costs_and_classes (FILE *dump_file alt_class = reg_class_subunion[alt_class][rclass]; } alt_class = ira_allocno_class_translate[alt_class]; -- if (best_cost > i_mem_cost ++ if (best_cost > i_mem_cost && (1||cost_classes_ptr->num == 0||! flag_ira_select) && ! non_spilled_static_chain_regno_p (i)) regno_aclass[i] = NO_REGS; else if (!optimize && !targetm.class_likely_spilled_p (best)) @@@ -2830,7 -1935,7 +2868,7 @@@ } if (pass == flag_expensive_optimizations) { -- if (best_cost > i_mem_cost ++ if (best_cost > i_mem_cost && (1||cost_classes_ptr->num == 0||! flag_ira_select) /* Do not assign NO_REGS to static chain pointer pseudo when non-local goto is used. */ && ! non_spilled_static_chain_regno_p (i)) @@@ -2848,7 -1953,7 +2886,7 @@@ regno_best_class[i] = best; if (! allocno_p) { -- pref[i] = (best_cost > i_mem_cost ++ pref[i] = (best_cost > i_mem_cost && (1||cost_classes_ptr->num == 0||! flag_ira_select) && ! non_spilled_static_chain_regno_p (i) ? NO_REGS : best); continue;