X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gcc%2FChangeLog;h=7d62f29a525aa5e152e8f72313d2b9f5c34e84bf;hb=bd1f3566b12eb1e86d17b0c8c84c91ea5e9844b3;hp=c2bf139a6597c56b37949178fadd0bfae997dbcb;hpb=3d592d2d56ccd3298ea0121de16615d27b9fb659;p=gcc.git diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2bf139a659..7d2323983ec 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,1726 @@ +2018-08-04 Martin Sebor + + PR tree-optimization/86571 + * gimple-ssa-sprintf.c (format_floating): Extend upper bound of + NaN output to 4. + +2018-08-03 Sandra Loosemore + + * config/nios2/nios2.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define. + +2018-08-03 Jeff Law + + PR target/86795 + * config/mn10300/mn10300.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + +2018-08-03 David Malcolm + + * doc/gcov.texi (-x): Remove duplicate "to". + * doc/invoke.texi (-Wnoexcept-type): Remove duplicate "calls". + (-Wif-not-aligned): Remove duplicate "is". + (-flto): Remove duplicate "the". + (MicroBlaze Options): In examples of "-mcpu=cpu-type", remove + duplicate "v5.00.b". + (MSP430 Options): Remove duplicate "and" from the description + of "-mgprel-sec=regexp". + (x86 Options): Remove duplicate copies of "vmldLog102" and + vmlsLog104 from description of "-mveclibabi=type". + +2018-08-03 Richard Sandiford + + * internal-fn.h (first_commutative_argument): Declare. + * internal-fn.c (first_commutative_argument): New function. + * tree-vect-slp.c (vect_get_and_check_slp_defs): Remove extra + restrictions for pattern statements. Use first_commutative_argument + to look for commutative operands in calls to internal functions. + +2018-08-03 Aldy Hernandez + + * Makefile.in (wide-int-range.o): New. + * tree-vrp.c: Move all the wide_int_* functions to... + * wide-int-range.cc: ...here. + * tree-vrp.h: Move all the wide_int_* prototypes to... + * wide-int-range.h: ...here. + +2018-08-03 Tom de Vries + + * common/config/nvptx/nvptx-common.c (nvptx_except_unwind_info): Return + UI_NONE. + * config/nvptx/nvptx.c (TARGET_ASM_BYTE_OP): Remove define. + * except.c (output_function_exception_table): Do early exit if + targetm_common.except_unwind_info (&global_options) == UI_NONE. + +2018-08-03 Martin Liska + + * predict.c (dump_prediction): Change to 2 digits + in fraction part. + +2018-08-03 Siddhesh Poyarekar + + * config/aarch64/falkor.md (falkor_am_1_vxvy_vxvy): Move + neon_dup_q to... + (falkor_am_1_gtov_gtov): ... a new insn reservation. + +2018-07-19 Ilya Leoshkevich + + * config/nds32/nds32.c (nds32_hard_regno_mode_ok): Replace > with >=. + * df-problems.c (df_remove_dead_eq_notes): Replace > with >=. + * dwarf2out.c (mem_loc_descriptor): Replace > with >=. + * lra-constraints.c (spill_hard_reg_in_range): Replace <= with <. + * lra-remat.c (call_used_input_regno_present_p): Replace <= with <. + +2018-08-02 David Malcolm + + * diagnostic-show-locus.c (diagnostic_show_locus): Use + pp_take_prefix when saving the existing prefix. + * diagnostic.c (diagnostic_append_note): Likewise. + * langhooks.c (lhd_print_error_function): Likewise. + * pretty-print.c (pp_set_prefix): Drop the "const" from "prefix" + param's type. Free the existing prefix. + (pp_take_prefix): New function. + (pretty_printer::pretty_printer): Drop the prefix parameter. + Rename the length parameter to match the comment. + (pretty_printer::~pretty_printer): Free the prefix. + * pretty-print.h (pretty_printer::pretty_printer): Drop the prefix + parameter. + (struct pretty_printer): Drop the "const" from "prefix" field's + type and clarify memory management. + (pp_set_prefix): Drop the "const" from the 2nd param. + (pp_take_prefix): New decl. + +2018-08-02 Aaron Sawdey + + * config/rs6000/rs6000-string.c (select_block_compare_mode): Move test + for word_mode_ok here instead of passing as argument. + (expand_block_compare): Change select_block_compare_mode() call. + (expand_strncmp_gpr_sequence): New function. + (expand_strn_compare): Make use of expand_strncmp_gpr_sequence. + +2018-08-02 Jeff Law + + PR target/86790 + * config/m68k/m68k.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86784 + * config/h8300/h8300.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + +2018-08-02 Tom de Vries + + PR target/86660 + * common/config/nvptx/nvptx-common.c (nvptx_except_unwind_info): New + function. Return UI_TARGET unconditionally. + (TARGET_EXCEPT_UNWIND_INFO): Redefine to nvptx_except_unwind_info. + * config/nvptx/nvptx.c (TARGET_ASM_BYTE_OP): Emit commented out '.byte'. + +2018-08-02 Richard Sandiford + + * genemit.c (print_overload_test): Fix typo. + +2018-08-02 Richard Biener + + PR tree-optimization/86816 + * tree-ssa-tail-merge.c (tail_merge_valueize): New function + which checks for value availability before querying it. + (gvn_uses_equal): Use it. + (same_succ_hash): Likewise. + (gimple_equal_p): Likewise. + +2018-08-02 Nick Clifton + + PR target/86813 + * config/stormy16/stormy16.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86810 + * config/v850/v850.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86810 + * config/v850/v850.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86803 + * config/rx/rx.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86797 + * config/msp430/msp430.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86791 + * config/mcore/mcore.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86789 + * config/m32r/m32r.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86787 + * config/iq2000/iq2000.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): + Define to speculation_safe_value_not_needed. + + PR target/86782 + * config/frv/frv.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define to + speculation_safe_value_not_needed. + + PR target/86781 + * config/fr30/fr30.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define + to speculation_safe_value_not_needed. + +2018-08-02 Richard Sandiford + + * doc/md.texi: Expand the documentation of instruction names + to mention port-local uses. Document '@' in pattern names. + * read-md.h (overloaded_instance, overloaded_name): New structs. + (mapping): Declare. + (md_reader::handle_overloaded_name): New member function. + (md_reader::get_overloads): Likewise. + (md_reader::m_first_overload): New member variable. + (md_reader::m_next_overload_ptr): Likewise. + (md_reader::m_overloads_htab): Likewise. + * read-md.c (md_reader::md_reader): Initialize m_first_overload, + m_next_overload_ptr and m_overloads_htab. + * read-rtl.c (iterator_group): Add "type" and "get_c_token" fields. + (get_mode_token, get_code_token, get_int_token): New functions. + (map_attr_string): Add an optional argument that passes back + the associated iterator. + (overloaded_name_hash, overloaded_name_eq_p, named_rtx_p): + (md_reader::handle_overloaded_name, add_overload_instance): New + functions. + (apply_iterators): Handle '@' names. Report an error if '@' + is used without iterators. + (initialize_iterators): Initialize the new iterator_group fields. + * genopinit.c (handle_overloaded_code_for) + (handle_overloaded_gen): New functions. + (main): Use them to print declarations of maybe_code_for_* and + maybe_gen_* functions, and inline definitions of code_for_* and gen_*. + * genemit.c (print_overload_arguments, print_overload_test) + (handle_overloaded_code_for, handle_overloaded_gen): New functions. + (main): Use it to print definitions of maybe_code_for_* and + maybe_gen_* functions. + * config/aarch64/aarch64.c (aarch64_split_128bit_move): Use + gen_aarch64_mov{low,high}_di and gen_aarch64_movdi_{low,high} + instead of explicit mode checks. + (aarch64_split_simd_combine): Likewise gen_aarch64_simd_combine. + (aarch64_split_simd_move): Likewise gen_aarch64_split_simd_mov. + (aarch64_emit_load_exclusive): Likewise gen_aarch64_load_exclusive. + (aarch64_emit_store_exclusive): Likewise gen_aarch64_store_exclusive. + (aarch64_expand_compare_and_swap): Likewise + gen_aarch64_compare_and_swap and gen_aarch64_compare_and_swap_lse + (aarch64_gen_atomic_cas): Likewise gen_aarch64_atomic_cas. + (aarch64_emit_atomic_swap): Likewise gen_aarch64_atomic_swp. + (aarch64_constant_pool_reload_icode): Delete. + (aarch64_secondary_reload): Use code_for_aarch64_reload_movcp + instead of aarch64_constant_pool_reload_icode. Use + code_for_aarch64_reload_mov instead of explicit mode checks. + (rsqrte_type, get_rsqrte_type, rsqrts_type, get_rsqrts_type): Delete. + (aarch64_emit_approx_sqrt): Use gen_aarch64_rsqrte instead of + get_rsqrte_type and gen_aarch64_rsqrts instead of gen_rqrts_type. + (recpe_type, get_recpe_type, recps_type, get_recps_type): Delete. + (aarch64_emit_approx_div): Use gen_aarch64_frecpe instead of + get_recpe_type and gen_aarch64_frecps instead of get_recps_type. + (aarch64_atomic_load_op_code): Delete. + (aarch64_emit_atomic_load_op): Likewise. + (aarch64_gen_atomic_ldop): Use UNSPECV_ATOMIC_* instead of + aarch64_atomic_load_op_code. Use gen_aarch64_atomic_load + instead of aarch64_emit_atomic_load_op. + * config/aarch64/aarch64.md (aarch64_reload_movcp) + (aarch64_reload_movcp, aarch64_reload_mov) + (aarch64_movdi_low, aarch64_movdi_high) + (aarch64_movhigh_di, aarch64_movlow_di): Add a '@' + character before the pattern name. + * config/aarch64/aarch64-simd.md (aarch64_split_simd_mov) + (aarch64_rsqrte, aarch64_rsqrts) + (aarch64_simd_combine, aarch64_frecpe) + (aarch64_frecps): Likewise. + * config/aarch64/atomics.md (atomic_compare_and_swap) + (aarch64_compare_and_swap, aarch64_compare_and_swap_lse) + (aarch64_load_exclusive, aarch64_store_exclusive) + (aarch64_atomic_swp, aarch64_atomic_cas) + (aarch64_atomic_load): Likewise. + +2018-08-02 Richard Sandiford + + * config/aarch64/aarch64.c (aarch64_float_const_representable_p): + Allow HFmode constants if TARGET_FP_F16INST. + +2018-08-02 Jackson Woodruff + + PR target/86014 + * config/aarch64/aarch64.c (aarch64_operands_adjust_ok_for_ldpstp): + No longer check last store for clobber of address register. + +2018-08-02 Martin Liska + + PR gcov-profile/86817 + * gcov.c (process_all_functions): New function. + (main): Call it. + (process_file): Move functions processing to + process_all_functions. + +2018-08-02 David Malcolm + + * dumpfile.c (dump_user_location_t::dump_user_location_t): Add + "const" to the "gimple *" and "rtx_insn *" parameters. + * dumpfile.h (dump_user_location_t::dump_user_location_t): + Likewise. + (dump_location_t::dump_location_t): Likewise. + +2018-08-01 Martin Sebor + + PR tree-optimization/86650 + * gimple-pretty-print.c (percent_G_format): Accept a "gimple *" + rather than a "gcall *". Directly pass the data of interest + to percent_K_format, rather than building a temporary CALL_EXPR + to hold it. + * gimple-fold.c (gimple_fold_builtin_strncpy): Adjust. + (gimple_fold_builtin_strncat): Adjust. + * gimple-ssa-warn-restrict.h (check_bounds_or_overlap): Replace + gcall* argument with gimple*. + * gimple-ssa-warn-restrict.c (check_call): Same. + (wrestrict_dom_walker::before_dom_children): Same. + (builtin_access::builtin_access): Same. + (check_bounds_or_overlap): Same + (maybe_diag_overlap): Same. + (maybe_diag_offset_bounds): Same. + * tree-diagnostic.c (default_tree_printer): Move usage of + EXPR_LOCATION (t) and TREE_BLOCK (t) from within percent_K_format + to this callsite. + * tree-pretty-print.c (percent_K_format): Add argument. + * tree-pretty-print.h: Add argument. + * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Adjust. + * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Adjust. + (maybe_diag_stxncpy_trunc): Same. + (handle_builtin_stxncpy): Same. + (handle_builtin_strcat): Same. + +2018-08-01 Richard Sandiford + + * match.pd: Optimise pointer range checks. + +2018-08-01 Richard Sandiford + + PR tree-optimization/86758 + * tree-vect-stmts.c (vectorizable_simd_clone_call): Don't try + to remove pattern statements. + +2018-08-01 Richard Sandiford + + * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Use the + result of dfs_enumerate_from when constructing stmt_vec_infos, + instead of additionally calling get_loop_body. + +2018-08-01 Richard Sandiford + + * tree-vectorizer.h (vect_create_data_ref_ptr): Remove inv_p + parameter. + * tree-vect-data-refs.c (vect_create_data_ref_ptr): Likewise. + When creating an iv, assert that the step is not known to be zero. + (vect_setup_realignment): Update call accordingly. + * tree-vect-stmts.c (vectorizable_store): Likewise. + (vectorizable_load): Likewise. Handle VMAT_INVARIANT separately. + +2018-08-01 Richard Sandiford + + * tree-vectorizer.h (vect_stmt_to_vectorize): New function. + * tree-vect-loop.c (vect_update_vf_for_slp): Use it. + (vectorizable_reduction): Likewise. + * tree-vect-slp.c (vect_analyze_slp_instance): Likewise. + (vect_detect_hybrid_slp_stmts): Likewise. + * tree-vect-stmts.c (vect_is_simple_use): Likewise. + +2018-08-01 Aldy Hernandez + + * tree-vrp (zero_nonzero_bits_from_bounds): Rename to... + (wide_int_set_zero_nonzero_bits): ...this. + (zero_nonzero_bits_from_vr): Rename to... + (vrp_set_zero_nonzero_bits): ...this. + (extract_range_from_multiplicative_op_1): Abstract wide int + code... + (wide_int_range_multiplicative_op): ...here. + (extract_range_from_binary_expr_1): Extract wide int binary + operations into their own functions. + (wide_int_range_lshift): New. + (wide_int_range_can_optimize_bit_op): New. + (wide_int_range_shift_undefined_p): New. + (wide_int_range_bit_xor): New. + (wide_int_range_bit_ior): New. + (wide_int_range_bit_and): New. + (wide_int_range_trunc_mod): New. + (extract_range_into_wide_ints): New. + (vrp_shift_undefined_p): New. + (extract_range_from_multiplicative_op): New. + (vrp_can_optimize_bit_op): New. + * tree-vrp.h (value_range::dump): New. + (wide_int_range_multiplicative_op): New. + (wide_int_range_lshift):New. + (wide_int_range_shift_undefined_p): New. + (wide_int_range_bit_xor): New. + (wide_int_range_bit_ior): New. + (wide_int_range_bit_and): New. + (wide_int_range_trunc_mod): New. + (zero_nonzero_bits_from_bounds): Rename to... + (wide_int_set_zero_nonzero_bits): ...this. + (zero_nonzero_bits_from_vr): Rename to... + (vrp_set_zero_nonzero_bits): ...this. + (range_easy_mask_min_max): Rename to... + (wide_int_range_can_optimize_bit_op): this. + * vr-values.c (simplify_bit_ops_using_ranges): Rename + zero_nonzero_bits_from_vr into vrp_set_zero_nonzero_bits. + +2018-08-01 Richard Sandiford + + * tree-vectorizer.h (vect_orig_stmt): New function. + * tree-vect-data-refs.c (vect_preserves_scalar_order_p): Use it. + * tree-vect-loop.c (vect_model_reduction_cost): Likewise. + (vect_create_epilog_for_reduction): Likewise. + (vectorizable_live_operation): Likewise. + * tree-vect-slp.c (vect_find_last_scalar_stmt_in_slp): Likewise. + (vect_detect_hybrid_slp_stmts, vect_schedule_slp): Likewise. + * tree-vect-stmts.c (vectorizable_call): Likewise. + (vectorizable_simd_clone_call, vect_remove_stores): Likewise. + +2018-08-01 Richard Sandiford + + * tree-vectorizer.h (vect_transform_stmt): Remove grouped_store + argument. + * tree-vect-stmts.c (vect_transform_stmt): Likewise. + * tree-vect-loop.c (vect_transform_loop_stmt): Update call accordingly. + (vect_transform_loop): Likewise. + * tree-vect-slp.c (vect_schedule_slp_instance): Likewise. + +2018-08-01 Richard Sandiford + + * tree-vectorizer.h (vect_schedule_slp): Return void. + * tree-vect-slp.c (vect_schedule_slp_instance): Likewise. + (vect_schedule_slp): Likewise. + +2018-08-01 Richard Sandiford + + * tree-vect-loop.c (vect_transform_loop_stmt): Remove slp_scheduled + argument. + (vect_transform_loop): Update calls accordingly. Schedule SLP + instances before the main loop, if any exist. + +2018-08-01 Richard Sandiford + + PR tree-optimization/86749 + * tree-vect-patterns.c (vect_determine_min_output_precision_1): + If the lhs is used in a COND_EXPR, check that it is being used + as the "then" or "else" value. + +2018-08-01 Tom de Vries + + PR target/86800 + * config/nvptx/nvptx.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define to + speculation_safe_value_not_needed. + +2018-08-01 Richard Biener + + * tree-ssa-sccvn.c (visit_phi): Compare invariant addresses + as base and offset. + +2018-08-01 Martin Liska + + * value-prof.c (gimple_divmod_fixed_value_transform): Unify + format how successful transformation is dumped. + (gimple_mod_pow2_value_transform): Likewise. + (gimple_mod_subtract_transform): Likewise. + (gimple_stringops_transform): Likewise. + +2018-08-01 Martin Liska + + PR value-prof/35543 + * value-prof.c (interesting_stringop_to_profile_p): + Simplify the code and add BUILT_IN_MEMMOVE. + (gimple_stringops_transform): Likewise. + +2018-08-01 Sam Tebbs + + * config/aarch64/aarch64-simd.md + (*aarch64_get_lane_zero_extendsi): Rename to... + (*aarch64_get_lane_zero_extend): ... This and + use GPI iterator instead of SI mode. + +2018-08-01 Richard Earnshaw + + * config/rs6000/rs6000.md (speculation_barrier): Renamed from + rs6000_speculation_barrier. + * config/rs6000/rs6000.c (rs6000_expand_builtin): Adjust for + new barrier pattern name. + +2018-08-01 Richard Earnshaw + + * config/i386/i386.md (unspecv): Add UNSPECV_SPECULATION_BARRIER. + (speculation_barrier): New insn. + +2018-08-01 Richard Biener + + PR bootstrap/86724 + * graphite.h: Include isl/id.h and isl/space.h to allow build + with ISL 0.20. + +2018-08-01 Jan Willem Jagersma + + PR target/86651 + * dwarf2out.c (dwarf2out_early_finish): Do not generate assembly in LTO + mode for COFF targets. + * defaults.h (TARGET_COFF): Define. + * config/i386/djgpp.h (TARGET_ASM_LTO_START, TARGET_ASM_LTO_END, + TARGET_COFF): Define. + (i386_djgpp_asm_lto_start, i386_djgpp_asm_lto_end): Declare. + * config/i386/djgpp.c (saved_debug_info_level): New static variable. + (i386_djgpp_asm_lto_start, i386_djgpp_asm_lto_end): New functions. + +2018-07-31 Alexandre Oliva + + * gimple-streamer-in.c (input_bb): Restore BB discriminator. + * gimple-streamer-out.c (output_bb): Save it. + * lto-streamer-in.c (input_struct_function_base): Restore + instance discriminator if available. Create map on demand. + * lto-streamer-out.c (output_struct_function_base): Save it if + available. + * final.c (decl_to_instance_map): Document LTO strategy. + +2018-07-31 Alexandre Oliva + Olivier Hainque + + * debug.h (decl_to_instance_map_t): New type. + (decl_to_instance_map): Declare. + (maybe_create_decl_to_instance_map): New inline function. + * final.c (bb_discriminator, last_bb_discriminator): New statics, + to track basic block discriminators. + (final_start_function_1): Initialize them. + (final_scan_insn_1): On NOTE_INSN_BASIC_BLOCK, track + bb_discriminator. + (decl_to_instance_map): New variable. + (map_decl_to_instance, maybe_set_discriminator): New functions. + (notice_source_line): Set discriminator. + +2018-07-31 Ian Lance Taylor + + * targhooks.c (default_have_speculation_safe_value): Add + ATTRIBUTE_UNUSED. + +2018-07-31 David Malcolm + + * dump-context.h: Include "pretty-print.h". + (dump_context::refresh_dumps_are_enabled): New decl. + (dump_context::emit_item): New decl. + (class dump_context): Add fields "m_test_pp" and + "m_test_pp_flags". + (temp_dump_context::temp_dump_context): Add param "test_pp_flags". + (temp_dump_context::get_dumped_text): New decl. + (class temp_dump_context): Add field "m_pp". + * dumpfile.c (refresh_dumps_are_enabled): Convert to... + (dump_context::refresh_dumps_are_enabled): ...and add a test for + m_test_pp. + (set_dump_file): Update for above change. + (set_alt_dump_file): Likewise. + (dump_loc): New overload, taking a pretty_printer *. + (dump_context::dump_loc): Call end_any_optinfo. Dump the location + to any test pretty-printer. + (make_item_for_dump_gimple_stmt): New function, adapted from + optinfo::add_gimple_stmt. + (dump_context::dump_gimple_stmt): Call it, and use the result, + eliminating the direct usage of dump_file and alt_dump_file in + favor of indirectly using them via emit_item. + (make_item_for_dump_gimple_expr): New function, adapted from + optinfo::add_gimple_expr. + (dump_context::dump_gimple_expr): Call it, and use the result, + eliminating the direct usage of dump_file and alt_dump_file in + favor of indirectly using them via emit_item. + (make_item_for_dump_generic_expr): New function, adapted from + optinfo::add_tree. + (dump_context::dump_generic_expr): Call it, and use the result, + eliminating the direct usage of dump_file and alt_dump_file in + favor of indirectly using them via emit_item. + (make_item_for_dump_printf_va): New function, adapted from + optinfo::add_printf_va. + (make_item_for_dump_printf): New function. + (dump_context::dump_printf_va): Call make_item_for_dump_printf_va, + and use the result, eliminating the direct usage of dump_file and + alt_dump_file in favor of indirectly using them via emit_item. + (make_item_for_dump_dec): New function. + (dump_context::dump_dec): Call it, and use the result, + eliminating the direct usage of dump_file and alt_dump_file in + favor of indirectly using them via emit_item. + (make_item_for_dump_symtab_node): New function, adapted from + optinfo::add_symtab_node. + (dump_context::dump_symtab_node): Call it, and use the result, + eliminating the direct usage of dump_file and alt_dump_file in + favor of indirectly using them via emit_item. + (dump_context::begin_scope): Reimplement, avoiding direct usage + of dump_file and alt_dump_file in favor of indirectly using them + via emit_item. + (dump_context::emit_item): New member function. + (temp_dump_context::temp_dump_context): Add param "test_pp_flags". + Set up test pretty-printer on the underlying context. Call + refresh_dumps_are_enabled. + (temp_dump_context::~temp_dump_context): Call + refresh_dumps_are_enabled. + (temp_dump_context::get_dumped_text): New member function. + (selftest::verify_dumped_text): New function. + (ASSERT_DUMPED_TEXT_EQ): New macro. + (selftest::test_capture_of_dump_calls): Run all tests twice, with + and then without optinfo enabled. Add uses of + ASSERT_DUMPED_TEXT_EQ to all tests. Add test of nested scopes. + * dumpfile.h: Update comment for the dump_* API. + * optinfo-emit-json.cc + (selftest::test_building_json_from_dump_calls): Update for new + param for temp_dump_context ctor. + * optinfo.cc (optinfo_item::optinfo_item): Remove "owned" param + and "m_owned" field. + (optinfo_item::~optinfo_item): Likewise. + (optinfo::add_item): New member function. + (optinfo::emit): Update comment. + (optinfo::add_string): Delete. + (optinfo::add_printf): Delete. + (optinfo::add_printf_va): Delete. + (optinfo::add_gimple_stmt): Delete. + (optinfo::add_gimple_expr): Delete. + (optinfo::add_tree): Delete. + (optinfo::add_symtab_node): Delete. + (optinfo::add_dec): Delete. + * optinfo.h (class dump_context): New forward decl. + (optinfo::add_item): New decl. + (optinfo::add_string): Delete. + (optinfo::add_printf): Delete. + (optinfo::add_printf_va): Delete. + (optinfo::add_gimple_stmt): Delete. + (optinfo::add_gimple_expr): Delete. + (optinfo::add_tree): Delete. + (optinfo::add_symtab_node): Delete. + (optinfo::add_dec): Delete. + (optinfo::add_poly_int): Delete. + (optinfo_item::optinfo_item): Remove "owned" param. + (class optinfo_item): Remove field "m_owned". + +2018-07-31 Jozef Lawrynowicz + + PR middle-end/86705 + * gcc/cfgexpand.c (set_parm_rtl): Use the alignment of Pmode when + MAX_SUPPORTED_STACK_ALIGNMENT would otherwise be exceeded by the + requested variable alignment. + (expand_one_ssa_partition): Likewise. + (expand_one_var): Likewise. + +2018-07-31 Richard Earnshaw + + * config/pdp11/pdp11.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Redefine + to speculation_safe_value_not_needed. + +2018-07-31 Richard Earnshaw + + * targhooks.h (speculation_safe_value_not_needed): New prototype. + * targhooks.c (speculation_safe_value_not_needed): New function. + * target.def (have_speculation_safe_value): Update documentation. + * doc/tm.texi: Regenerated. + +2018-07-31 Richard Earnshaw + + * config/aarch64/iterators.md (ALLI_TI): New iterator. + * config/aarch64/aarch64.md (despeculate_copy): New + expand. + (despeculate_copy_insn): New insn. + (despeculate_copyti_insn): New insn. + (despeculate_simple): New insn + (despeculate_simpleti): New insn. + * config/aarch64/aarch64.c (aarch64_speculation_safe_value): New + function. + (TARGET_SPECULATION_SAFE_VALUE): Redefine to + aarch64_speculation_safe_value. + (aarch64_print_operand): Handle const0_rtx in modifier 'H'. + +2018-07-31 Richard Earnshaw + + * config/aarch64/aarch64-speculation.cc: New file. + * config/aarch64/aarch64-passes.def (pass_track_speculation): Add + before pass_reorder_blocks. + * config/aarch64/aarch64-protos.h (make_pass_track_speculation): Add + prototype. + * config/aarch64/aarch64.c (aarch64_conditional_register_usage): Fix + X14 and X15 when tracking speculation. + * config/aarch64/aarch64.md (register name constants): Add + SPECULATION_TRACKER_REGNUM and SPECULATION_SCRATCH_REGNUM. + (unspec): Add UNSPEC_SPECULATION_TRACKER. + (speculation_barrier): New insn attribute. + (cmp): Allow SP in comparisons. + (speculation_tracker): New insn. + (speculation_barrier): Add speculation_barrier attribute. + * config/aarch64/t-aarch64: Add make rule for aarch64-speculation.o. + * config.gcc (aarch64*-*-*): Add aarch64-speculation.o to extra_objs. + * doc/invoke.texi (AArch64 Options): Document -mtrack-speculation. + +2018-07-31 Richard Earnshaw + + * config/aarch64/aarch64.md (cb1): Disable when + aarch64_track_speculation is true. + (tb1): Likewise. + * config/aarch64/aarch64.c (aarch64_split_compare_regs): Do not + generate CB[N]Z when tracking speculation. + (aarch64_split_compare_and_swap): Likewise. + (aarch64_split_atomic_op): Likewise. + +2018-07-31 Richard Earnshaw + + * config/aarch64/aarch64.opt (mtrack-speculation): New target option. + +2018-07-31 Richard Earnshaw + + * config/aarch64.md (unspecv): Add UNSPECV_SPECULAION_BARRIER. + (speculation_barrier): New insn. + +2018-07-31 Richard Earnshaw + + * config/arm/unspecs.md (unspecv): Add VUNSPEC_SPECULATION_BARRIER. + * config/arm/arm.md (speculation_barrier): New expand. + (speculation_barrier_insn): New pattern. + +2018-07-31 Richard Earnshaw + + * builtin-types.def (BT_FN_PTR_PTR_VAR): New function type. + (BT_FN_I1_I1_VAR, BT_FN_I2_I2_VAR, BT_FN_I4_I4_VAR): Likewise. + (BT_FN_I8_I8_VAR, BT_FN_I16_I16_VAR): Likewise. + * builtin-attrs.def (ATTR_NOVOPS_NOTHROW_LEAF_LIST): New attribute + list. + * builtins.def (BUILT_IN_SPECULATION_SAFE_VALUE_N): New builtin. + (BUILT_IN_SPECULATION_SAFE_VALUE_PTR): New internal builtin. + (BUILT_IN_SPECULATION_SAFE_VALUE_1): Likewise. + (BUILT_IN_SPECULATION_SAFE_VALUE_2): Likewise. + (BUILT_IN_SPECULATION_SAFE_VALUE_4): Likewise. + (BUILT_IN_SPECULATION_SAFE_VALUE_8): Likewise. + (BUILT_IN_SPECULATION_SAFE_VALUE_16): Likewise. + * builtins.c (expand_speculation_safe_value): New function. + (expand_builtin): Call it. + * doc/cpp.texi: Document predefine __HAVE_SPECULATION_SAFE_VALUE. + * doc/extend.texi: Document __builtin_speculation_safe_value. + * doc/md.texi: Document "speculation_barrier" pattern. + * doc/tm.texi.in: Pull in TARGET_SPECULATION_SAFE_VALUE and + TARGET_HAVE_SPECULATION_SAFE_VALUE. + * doc/tm.texi: Regenerated. + * target.def (have_speculation_safe_value, speculation_safe_value): New + hooks. + * targhooks.c (default_have_speculation_safe_value): New function. + (default_speculation_safe_value): New function. + * targhooks.h (default_have_speculation_safe_value): Add prototype. + (default_speculation_safe_value): Add prototype. + +2018-07-31 David Malcolm + + * dump-context.h (dump_context::dump_loc): New decl. + * dumpfile.c (dump_context::dump_loc): New member function. + (dump_context::dump_gimple_stmt_loc): Reimplement using dump_loc + and dump_gimple_stmt. + (dump_context::dump_gimple_expr_loc): Likewise, using + dump_gimple_expr. + (dump_context::dump_generic_expr_loc): Likewise, using + dump_generic_expr. + (dump_context::dump_printf_loc_va): Likewise, using + dump_printf_va. + (dump_context::begin_scope): Explicitly using the global function + "dump_loc", rather than the member function. + +2018-07-31 Martin Sebor + + PR tree-optimization/86741 + * tree-vrp.c (vrp_prop::check_mem_ref): Avoid incomplete types. + +2018-07-31 Andreas Krebbel + + * config/s390/s390.c (s390_expand_setmem): Make the unrolling to + depend on whether prefetch instructions will be emitted or not. + Use TARGET_SETMEM_PFD for checking whether prefetch instructions + will be emitted or not. + * config/s390/s390.h (TARGET_SETMEM_PREFETCH_DISTANCE) + (TARGET_SETMEM_PFD): New macros. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (stmt_vec_info): Turn back into a typedef. + (NULL_STMT_VEC_INFO): Delete. + (stmt_vec_info::operator*): Likewise. + (stmt_vec_info::operator gimple *): Likewise. + * tree-vect-loop.c (vectorizable_reduction): Use NULL instead + of NULL_STMT_VEC_INFO. + * tree-vect-patterns.c (vect_init_pattern_stmt): Likewise. + (vect_reassociating_reduction_p): Likewise. + * tree-vect-stmts.c (vect_build_gather_load_calls): Likewise. + (vectorizable_store): Likewise. + * tree-vectorizer.c (vec_info::set_vinfo_for_stmt): Likewise. + (vec_info::free_stmt_vec_infos): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_stmt_in_region_p): Delete. + * tree-vectorizer.c (vect_stmt_in_region_p): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::new_vinfo_for_stmt) + (vec_info::set_vinfo_for_stmt, vec_info::free_stmt_vec_infos) + (vec_info::free_stmt_vec_info): New private member functions. + (set_stmt_vec_info_vec, free_stmt_vec_infos, vinfo_for_stmt) + (set_vinfo_for_stmt, new_stmt_vec_info, free_stmt_vec_info): Delete. + * tree-parloops.c (gather_scalar_reductions): Remove calls to + set_stmt_vec_info_vec and free_stmt_vec_infos. + * tree-vect-loop.c (_loop_vec_info): Remove call to + set_stmt_vec_info_vec. + * tree-vect-stmts.c (new_stmt_vec_info, set_stmt_vec_info_vec) + (free_stmt_vec_infos, free_stmt_vec_info): Delete in favor of... + * tree-vectorizer.c (vec_info::new_stmt_vec_info) + (vec_info::set_vinfo_for_stmt, vec_info::free_stmt_vec_infos) + (vec_info::free_stmt_vec_info): ...these new functions. Remove + assignments in {vec_info::,}new_stmt_vec_info that are redundant + with the clearing in the xcalloc. + (stmt_vec_info_vec): Delete. + (vec_info::vec_info): Don't call set_stmt_vec_info_vec. + (vectorize_loops): Likewise. + (vec_info::~vec_info): Remove argument from call to + free_stmt_vec_infos. + (vec_info::add_stmt): Remove vinfo argument from call to + new_stmt_vec_info. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (free_stmt_vec_info): Take a stmt_vec_info + rather than a gimple stmt. + * tree-vect-stmts.c (free_stmt_vec_info): Likewise. Don't free + information for pattern statements when passed the original + statement; instead wait to be passed the pattern statement itself. + Don't call set_vinfo_for_stmt here. + (free_stmt_vec_infos): Update call to free_stmt_vec_info. + * tree-vect-loop.c (_loop_vec_info::~loop_vec_info): Don't free + stmt_vec_infos here. + * tree-vect-slp.c (_bb_vec_info::~bb_vec_info): Likewise. + * tree-vectorizer.c (vec_info::remove_stmt): Nullify the statement's + stmt_vec_infos entry. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::replace_stmt): Declare. + * tree-vectorizer.c (vec_info::replace_stmt): New function. + * tree-vect-slp.c (vect_remove_slp_scalar_calls): Use it. + * tree-vect-stmts.c (vectorizable_call): Likewise. + (vectorizable_simd_clone_call): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::remove_stmt): Declare. + * tree-vectorizer.c (vec_info::remove_stmt): New function. + * tree-vect-loop-manip.c (vect_set_loop_condition): Use it. + * tree-vect-loop.c (vect_transform_loop): Likewise. + * tree-vect-slp.c (vect_schedule_slp): Likewise. + * tree-vect-stmts.c (vect_remove_stores): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::lookup_dr): New member function. + (vect_dr_stmt): Delete. + * tree-vectorizer.c (vec_info::lookup_dr): New function. + * tree-vect-loop-manip.c (vect_update_inits_of_drs): Use it instead + of DR_VECT_AUX. + * tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr) + (vect_analyze_data_ref_dependence, vect_record_base_alignments) + (vect_verify_datarefs_alignment, vect_peeling_supportable) + (vect_analyze_data_ref_accesses, vect_prune_runtime_alias_test_list) + (vect_analyze_data_refs): Likewise. + (vect_slp_analyze_data_ref_dependence): Likewise. Take a vec_info + argument. + (vect_find_same_alignment_drs): Likewise. + (vect_slp_analyze_node_dependences): Update calls accordingly. + (vect_analyze_data_refs_alignment): Likewise. Use vec_info::lookup_dr + instead of DR_VECT_AUX. + (vect_get_peeling_costs_all_drs): Take a loop_vec_info instead + of a vector data references. Use vec_info::lookup_dr instead of + DR_VECT_AUX. + (vect_peeling_hash_get_lowest_cost): Update calls accordingly. + (vect_enhance_data_refs_alignment): Likewise. Use vec_info::lookup_dr + instead of DR_VECT_AUX. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_loop_vec_info::unaligned_dr): Change to + dr_vec_info. + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Update + accordingly. + * tree-vect-loop.c (vect_analyze_loop_2): Likewise. + * tree-vect-loop-manip.c (get_misalign_in_elems): Likewise. + (vect_gen_prolog_loop_niters): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (set_dr_misalignment, dr_misalignment) + (DR_TARGET_ALIGNMENT, aligned_access_p, known_alignment_for_access_p) + (vect_known_alignment_in_bytes, vect_dr_behavior) + (vect_get_scalar_dr_size): Take references as dr_vec_infos + instead of data_references. Update calls to other routines for + which the same change has been made. + * tree-vect-data-refs.c (vect_preserves_scalar_order_p): Take + dr_vec_infos instead of stmt_vec_infos. + (vect_analyze_data_ref_dependence): Update call accordingly. + (vect_slp_analyze_data_ref_dependence) + (vect_record_base_alignments): Use DR_VECT_AUX. + (vect_calculate_target_alignment, vect_compute_data_ref_alignment) + (vect_update_misalignment_for_peel, verify_data_ref_alignment) + (vector_alignment_reachable_p, vect_get_data_access_cost) + (vect_peeling_supportable, vect_analyze_group_access_1) + (vect_analyze_group_access, vect_analyze_data_ref_access) + (vect_vfa_segment_size, vect_vfa_access_size, vect_vfa_align) + (vect_compile_time_alias, vect_small_gap_p) + (vectorizable_with_step_bound_p, vect_duplicate_ssa_name_ptr_info): + (vect_supportable_dr_alignment): Take references as dr_vec_infos + instead of data_references. Update calls to other routines for + which the same change has been made. + (vect_verify_datarefs_alignment, vect_get_peeling_costs_all_drs) + (vect_find_same_alignment_drs, vect_analyze_data_refs_alignment) + (vect_slp_analyze_and_verify_node_alignment) + (vect_analyze_data_ref_accesses, vect_prune_runtime_alias_test_list) + (vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr) + (vect_setup_realignment): Use dr_vec_infos. Update calls after + above changes. + (_vect_peel_info::dr): Replace with... + (_vect_peel_info::dr_info): ...this new field. + (vect_peeling_hash_get_most_frequent) + (vect_peeling_hash_choose_best_peeling): Update accordingly. + (vect_peeling_hash_get_lowest_cost): + (vect_enhance_data_refs_alignment): Likewise. Update calls to other + routines for which the same change has been made. + (vect_peeling_hash_insert): Likewise. Take a dr_vec_info instead of a + data_reference. + * tree-vect-loop-manip.c (get_misalign_in_elems) + (vect_gen_prolog_loop_niters): Use dr_vec_infos. Update calls after + above changes. + * tree-vect-loop.c (vect_analyze_loop_2): Likewise. + * tree-vect-stmts.c (vect_get_store_cost, vect_get_load_cost) + (vect_truncate_gather_scatter_offset, compare_step_with_zero) + (get_group_load_store_type, get_negative_load_store_type) + (vect_get_data_ptr_increment, vectorizable_store) + (vectorizable_load): Likewise. + (ensure_base_align): Take a dr_vec_info instead of a data_reference. + Update calls to other routines for which the same change has been made. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::move_dr): New member function. + (dataref_aux): Rename to... + (dr_vec_info): ...this and add "dr" and "stmt" fields. + (_stmt_vec_info::dr_aux): Update accordingly. + (_stmt_vec_info::data_ref_info): Delete. + (STMT_VINFO_GROUPED_ACCESS, DR_GROUP_FIRST_ELEMENT) + (DR_GROUP_NEXT_ELEMENT, DR_GROUP_SIZE, DR_GROUP_STORE_COUNT) + (DR_GROUP_GAP, DR_GROUP_SAME_DR_STMT, REDUC_GROUP_FIRST_ELEMENT): + (REDUC_GROUP_NEXT_ELEMENT, REDUC_GROUP_SIZE): Use dr_aux.dr instead + of data_ref. + (STMT_VINFO_DATA_REF): Likewise. Turn into an lvalue. + (STMT_VINFO_DR_INFO): New macro. + (DR_VECT_AUX): Use STMT_VINFO_DR_INKFO and vect_dr_stmt. + (set_dr_misalignment): Update after rename of dataref_aux. + (vect_dr_stmt): Move earlier in file. Return dr_aux.stmt. + * tree-vect-stmts.c (new_stmt_vec_info): Remove redundant + initialization of STMT_VINFO_DATA_REF. + * tree-vectorizer.c (vec_info::move_dr): New function. + * tree-vect-patterns.c (vect_recog_bool_pattern) + (vect_recog_mask_conversion_pattern) + (vect_recog_gather_scatter_pattern): Use it. + * tree-vect-data-refs.c (vect_analyze_data_refs): Initialize + the "dr" and "stmt" fields of dr_vec_info instead of + STMT_VINFO_DATA_REF. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::pattern_stmt_p): New field. + (is_pattern_stmt_p): Use it. + * tree-vect-patterns.c (vect_init_pattern_stmt): Set pattern_stmt_p + on pattern statements. + +2018-07-31 Richard Sandiford + + * tree-vect-patterns.c (vect_mark_pattern_stmts): Take the + original stmt as a stmt_vec_info rather than a gimple stmt. + (vect_pattern_recog_1): Take the statement directly as a + stmt_vec_info, rather than via a gimple_stmt_iterator. + Update call to vect_mark_pattern_stmts. + (vect_pattern_recog): Update calls accordingly. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_get_vec_defs_for_stmt_copy) + (vect_get_vec_def_for_stmt_copy): Take a vec_info rather than + a vect_def_type for the first argument. + * tree-vect-stmts.c (vect_get_vec_defs_for_stmt_copy): Likewise. + (vect_get_vec_def_for_stmt_copy): Likewise. Return the original + operand if it isn't defined by a vectorized statement. + (vect_build_gather_load_calls): Remove the mask_dt argument and + update calls to vect_get_vec_def_for_stmt_copy. + (vectorizable_bswap): Likewise the dt argument. + (vectorizable_call): Update calls to vectorizable_bswap and + vect_get_vec_def_for_stmt_copy. + (vectorizable_simd_clone_call, vectorizable_assignment) + (vectorizable_shift, vectorizable_operation, vectorizable_condition) + (vectorizable_comparison): Update calls to + vect_get_vec_def_for_stmt_copy. + (vectorizable_store): Likewise. Remove now-unnecessary calls to + vect_is_simple_use. + (vect_get_loop_based_defs): Remove dt argument and update call + to vect_get_vec_def_for_stmt_copy. + (vectorizable_conversion): Update calls to vect_get_loop_based_defs + and vect_get_vec_def_for_stmt_copy. + (vectorizable_load): Update calls to vect_build_gather_load_calls + and vect_get_vec_def_for_stmt_copy. + * tree-vect-loop.c (vect_create_epilog_for_reduction) + (vectorizable_reduction, vectorizable_live_operation): Update calls + to vect_get_vec_def_for_stmt_copy. + +2018-07-31 Richard Sandiford + + * tree-vect-data-refs.c (vect_record_base_alignment): Replace vec_info + and gimple stmt arguments with a stmt_vec_info. + (vect_record_base_alignments): Update calls accordingly. + * tree-vect-slp.c (vect_record_max_nunits): Replace vec_info + and gimple stmt arguments with a stmt_vec_info. + (vect_build_slp_tree_1): Remove vinfo argument and update call + to vect_record_max_nunits. + (vect_build_slp_tree_2): Update calls to vect_build_slp_tree_1 + and vect_record_max_nunits. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (nested_in_vect_loop_p): Move further down + file and take a stmt_vec_info instead of a gimple stmt. + (supportable_widening_operation, vect_finish_replace_stmt) + (vect_finish_stmt_generation, vect_get_store_rhs) + (vect_get_vec_def_for_operand_1, vect_get_vec_def_for_operand) + (vect_get_vec_defs, vect_init_vector, vect_transform_stmt) + (vect_remove_stores, vect_analyze_stmt, vectorizable_condition) + (vect_get_smallest_scalar_type, vect_check_gather_scatter) + (vect_create_data_ref_ptr, bump_vector_ptr) + (vect_permute_store_chain, vect_setup_realignment) + (vect_transform_grouped_load, vect_record_grouped_load_vectors) + (vect_create_addr_base_for_vector_ref, vectorizable_live_operation) + (vectorizable_reduction, vectorizable_induction) + (get_initial_def_for_reduction, is_simple_and_all_uses_invariant) + (vect_get_place_in_interleaving_chain): Take stmt_vec_infos rather + than gimple stmts as arguments. + * tree-vect-data-refs.c (vect_get_smallest_scalar_type) + (vect_preserves_scalar_order_p, vect_slp_analyze_node_dependences) + (can_group_stmts_p, vect_check_gather_scatter) + (vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr) + (bump_vector_ptr, vect_permute_store_chain, vect_setup_realignment) + (vect_permute_load_chain, vect_shift_permute_load_chain) + (vect_transform_grouped_load) + (vect_record_grouped_load_vectors): Likewise. + * tree-vect-loop.c (vect_fixup_reduc_chain) + (get_initial_def_for_reduction, vect_create_epilog_for_reduction) + (vectorize_fold_left_reduction, is_nonwrapping_integer_induction) + (vectorizable_reduction, vectorizable_induction) + (vectorizable_live_operation, vect_loop_kill_debug_uses): Likewise. + * tree-vect-patterns.c (type_conversion_p, adjust_bool_stmts) + (vect_get_load_store_mask): Likewise. + * tree-vect-slp.c (vect_get_place_in_interleaving_chain) + (vect_analyze_slp_instance, vect_mask_constant_operand_p): Likewise. + * tree-vect-stmts.c (vect_mark_relevant) + (is_simple_and_all_uses_invariant) + (exist_non_indexing_operands_for_use_p, process_use) + (vect_init_vector_1, vect_init_vector, vect_get_vec_def_for_operand_1) + (vect_get_vec_def_for_operand, vect_get_vec_defs) + (vect_finish_stmt_generation_1, vect_finish_replace_stmt) + (vect_finish_stmt_generation, vect_truncate_gather_scatter_offset) + (compare_step_with_zero, vect_get_store_rhs, get_group_load_store_type) + (get_negative_load_store_type, get_load_store_type) + (vect_check_load_store_mask, vect_check_store_rhs) + (vect_build_gather_load_calls, vect_get_strided_load_store_ops) + (vectorizable_bswap, vectorizable_call, vectorizable_simd_clone_call) + (vect_create_vectorized_demotion_stmts, vectorizable_conversion) + (vectorizable_assignment, vectorizable_shift, vectorizable_operation) + (get_group_alias_ptr_type, vectorizable_store, hoist_defs_of_uses) + (vectorizable_load, vectorizable_condition, vectorizable_comparison) + (vect_analyze_stmt, vect_transform_stmt, vect_remove_stores) + (supportable_widening_operation): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vect-data-refs.c (vect_describe_gather_scatter_call): Take + a stmt_vec_info instead of a gcall. + (vect_check_gather_scatter): Update call accordingly. + * tree-vect-loop-manip.c (iv_phi_p): Take a stmt_vec_info instead + of a gphi. + (vect_can_advance_ivs_p, vect_update_ivs_after_vectorizer) + (slpeel_update_phi_nodes_for_loops):): Update calls accordingly. + * tree-vect-loop.c (vect_transform_loop_stmt): Take a stmt_vec_info + instead of a gimple stmt. + (vect_transform_loop): Update calls accordingly. + * tree-vect-slp.c (vect_split_slp_store_group): Take and return + stmt_vec_infos instead of gimple stmts. + (vect_analyze_slp_instance): Update use accordingly. + * tree-vect-stmts.c (read_vector_array, write_vector_array) + (vect_clobber_variable, vect_stmt_relevant_p, permute_vec_elements) + (vect_use_strided_gather_scatters_p, vect_build_all_ones_mask) + (vect_build_zero_merge_argument, vect_get_gather_scatter_ops) + (vect_gen_widened_results_half, vect_get_loop_based_defs) + (vect_create_vectorized_promotion_stmts, can_vectorize_live_stmts): + Take a stmt_vec_info instead of a gimple stmt and pass stmt_vec_infos + down to subroutines. + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (vect_analyze_scalar_cycles_1): Change the type + of the worklist from a vector of gimple stmts to a vector of + stmt_vec_infos. + * tree-vect-stmts.c (vect_mark_relevant, process_use) + (vect_mark_stmts_to_be_vectorized): Likewise + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (vect_analyze_loop_operations): Look up the + statement before passing it to vect_analyze_stmt. + (vect_create_epilog_for_reduction): Use a stmt_vec_info to walk + the chain of phi vector definitions. Track the exit phi via its + stmt_vec_info. + (vectorizable_reduction): Set cond_stmt_vinfo directly from the + STMT_VINFO_REDUC_DEF. + * tree-vect-slp.c (vect_get_place_in_interleaving_chain): Use + stmt_vec_infos to handle the statement chains. + (vect_get_slp_defs): Record the first statement in the node + using a stmt_vec_info. + * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Look up + statements here and pass their stmt_vec_info down to subroutines. + (vect_init_vector_1): Hoist call to vinfo_for_stmt and pass it + down to vect_finish_stmt_generation. + (vect_init_vector, vect_get_vec_defs, vect_finish_replace_stmt) + (vect_finish_stmt_generation): Call vinfo_for_stmt and pass + stmt_vec_infos to subroutines. + (vect_remove_stores): Use stmt_vec_infos to handle the statement + chains. + +2018-07-31 Richard Sandiford + + * tree-vect-data-refs.c (vect_slp_analyze_node_dependences): + (vect_check_gather_scatter, vect_create_data_ref_ptr, bump_vector_ptr) + (vect_permute_store_chain, vect_setup_realignment) + (vect_permute_load_chain, vect_shift_permute_load_chain) + (vect_transform_grouped_load): Use stmt_vec_info rather than gimple + stmts internally, and when passing values to other vectorizer routines. + * tree-vect-loop-manip.c (vect_can_advance_ivs_p): Likewise. + * tree-vect-loop.c (vect_analyze_scalar_cycles_1) + (vect_analyze_loop_operations, get_initial_def_for_reduction) + (vect_create_epilog_for_reduction, vectorize_fold_left_reduction) + (vectorizable_reduction, vectorizable_induction) + (vectorizable_live_operation, vect_transform_loop_stmt) + (vect_transform_loop): Likewise. + * tree-vect-patterns.c (vect_reassociating_reduction_p) + (vect_recog_widen_op_pattern, vect_recog_mixed_size_cond_pattern) + (vect_recog_bool_pattern, vect_recog_gather_scatter_pattern): Likewise. + * tree-vect-slp.c (vect_analyze_slp_instance): Likewise. + (vect_slp_analyze_node_operations_1): Likewise. + * tree-vect-stmts.c (vect_mark_relevant, process_use) + (exist_non_indexing_operands_for_use_p, vect_init_vector_1) + (vect_mark_stmts_to_be_vectorized, vect_get_vec_def_for_operand) + (vect_finish_stmt_generation_1, get_group_load_store_type) + (get_load_store_type, vect_build_gather_load_calls) + (vectorizable_bswap, vectorizable_call, vectorizable_simd_clone_call) + (vect_create_vectorized_demotion_stmts, vectorizable_conversion) + (vectorizable_assignment, vectorizable_shift, vectorizable_operation) + (vectorizable_store, vectorizable_load, vectorizable_condition) + (vectorizable_comparison, vect_analyze_stmt, vect_transform_stmt) + (supportable_widening_operation): Likewise. + (vect_get_vector_types_for_stmt): Likewise. + * tree-vectorizer.h (vect_dr_behavior): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vect-data-refs.c (vect_analyze_data_ref_dependence) + (vect_slp_analyze_node_dependences, vect_analyze_data_ref_accesses) + (vect_permute_store_chain, vect_permute_load_chain) + (vect_shift_permute_load_chain, vect_transform_grouped_load): Avoid + repeated stmt_vec_info lookups. + * tree-vect-loop-manip.c (vect_can_advance_ivs_p): Likewise. + (vect_update_ivs_after_vectorizer): Likewise. + * tree-vect-loop.c (vect_is_simple_reduction): Likewise. + (vect_create_epilog_for_reduction, vectorizable_reduction): Likewise. + * tree-vect-patterns.c (adjust_bool_stmts): Likewise. + * tree-vect-slp.c (vect_analyze_slp_instance): Likewise. + (vect_bb_slp_scalar_cost): Likewise. + * tree-vect-stmts.c (get_group_alias_ptr_type): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vect-data-refs.c (vect_check_gather_scatter): Pass the + gcall rather than the generic gimple stmt to gimple_call_internal_fn. + (vect_get_smallest_scalar_type, can_group_stmts_p): Use dyn_cast + to get gassigns and gcalls, rather than operating on generc gimple + stmts. + * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p) + (vect_mark_stmts_to_be_vectorized, vectorizable_store) + (vectorizable_load, vect_analyze_stmt): Likewise. + * tree-vect-loop.c (vectorizable_reduction): Likewise gphi. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (get_earlier_stmt, get_later_stmt): Take and + return stmt_vec_infos rather than gimple stmts. Do not accept + null arguments. + (vect_find_last_scalar_stmt_in_slp): Return a stmt_vec_info instead + of a gimple stmt. + * tree-vect-slp.c (vect_find_last_scalar_stmt_in_slp): Likewise. + Update use of get_later_stmt. + (vect_get_constant_vectors): Update call accordingly. + (vect_schedule_slp_instance): Likewise + * tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Likewise. + (vect_slp_analyze_instance_dependence): Likewise. + (vect_preserves_scalar_order_p): Update use of get_earlier_stmt. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (stmt_info_for_cost::stmt): Replace with... + (stmt_info_for_cost::stmt_info): ...this new field. + (add_stmt_costs): Update accordingly. + * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost) + (vect_get_known_peeling_cost): Likewise. + (vect_estimate_min_profitable_iters): Likewise. + * tree-vect-stmts.c (record_stmt_cost): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change + from an auto_vec to an auto_vec. + * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Update + accordingly. + * tree-vect-loop-manip.c (vect_create_cond_for_align_checks): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::same_dr_stmt): Change from + a gimple stmt to a stmt_vec_info. + * tree-vect-stmts.c (vectorizable_load): Update accordingly. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::grouped_stores): Change from + an auto_vec to an auto_vec. + (_loop_vec_info::reduction_chains): Likewise. + * tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): Update + accordingly. + * tree-vect-slp.c (vect_analyze_slp): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::first_element): Change from + a gimple stmt to a stmt_vec_info. + (_stmt_vec_info::next_element): Likewise. + * tree-vect-data-refs.c (vect_update_misalignment_for_peel) + (vect_slp_analyze_and_verify_node_alignment) + (vect_analyze_group_access_1, vect_analyze_group_access) + (vect_small_gap_p, vect_prune_runtime_alias_test_list) + (vect_create_data_ref_ptr, vect_record_grouped_load_vectors) + (vect_supportable_dr_alignment): Update accordingly. + * tree-vect-loop.c (vect_fixup_reduc_chain): Likewise. + (vect_fixup_scalar_cycles_with_patterns, vect_is_slp_reduction) + (vect_is_simple_reduction, vectorizable_reduction): Likewise. + * tree-vect-patterns.c (vect_reassociating_reduction_p): Likewise. + * tree-vect-slp.c (vect_build_slp_tree_1) + (vect_attempt_slp_rearrange_stmts, vect_supported_load_permutation_p) + (vect_split_slp_store_group, vect_analyze_slp_instance) + (vect_analyze_slp, vect_transform_slp_perm_load): Likewise. + * tree-vect-stmts.c (vect_model_store_cost, vect_model_load_cost) + (get_group_load_store_type, get_load_store_type) + (get_group_alias_ptr_type, vectorizable_store, vectorizable_load) + (vect_transform_stmt, vect_remove_stores): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_dr_stmt): Return a stmt_vec_info rather + than a gimple stmt. + * tree-vect-data-refs.c (vect_analyze_data_ref_dependence) + (vect_slp_analyze_data_ref_dependence, vect_record_base_alignments) + (vect_calculate_target_alignmentm, vect_compute_data_ref_alignment) + (vect_update_misalignment_for_peel, vect_verify_datarefs_alignment) + (vector_alignment_reachable_p, vect_get_data_access_cost) + (vect_get_peeling_costs_all_drs, vect_peeling_hash_get_lowest_cost) + (vect_peeling_supportable, vect_enhance_data_refs_alignment) + (vect_find_same_alignment_drs, vect_analyze_data_refs_alignment) + (vect_analyze_group_access_1, vect_analyze_group_access) + (vect_analyze_data_ref_access, vect_analyze_data_ref_accesses) + (vect_vfa_access_size, vect_small_gap_p, vect_analyze_data_refs) + (vect_supportable_dr_alignment): Remove vinfo_for_stmt from the + result of vect_dr_stmt and use the stmt_vec_info instead of + the associated gimple stmt. + * 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. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_slp_tree::stmts): Change from a vec + to a vec. + * tree-vect-slp.c (vect_free_slp_tree): Update accordingly. + (vect_create_new_slp_node): Take a vec instead of a + vec. + (_slp_oprnd_info::def_stmts): Change from a vec + to a vec. + (bst_traits::value_type, bst_traits::value_type): Likewise. + (bst_traits::hash): Update accordingly. + (vect_get_and_check_slp_defs): Change the stmts parameter from + a vec to a vec. + (vect_two_operations_perm_ok_p, vect_build_slp_tree_1): Likewise. + (vect_build_slp_tree): Likewise. + (vect_build_slp_tree_2): Likewise. Update uses of + SLP_TREE_SCALAR_STMTS. + (vect_print_slp_tree): Update uses of SLP_TREE_SCALAR_STMTS. + (vect_mark_slp_stmts, vect_mark_slp_stmts_relevant) + (vect_slp_rearrange_stmts, vect_attempt_slp_rearrange_stmts) + (vect_supported_load_permutation_p, vect_find_last_scalar_stmt_in_slp) + (vect_detect_hybrid_slp_stmts, vect_slp_analyze_node_operations_1) + (vect_slp_analyze_node_operations, vect_slp_analyze_operations) + (vect_bb_slp_scalar_cost, vect_slp_analyze_bb_1) + (vect_get_constant_vectors, vect_get_slp_defs) + (vect_transform_slp_perm_load, vect_schedule_slp_instance) + (vect_remove_slp_scalar_calls, vect_schedule_slp): Likewise. + (vect_analyze_slp_instance): Build up a vec of stmt_vec_infos + instead of gimple stmts. + * tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Change + the stores parameter for a vec to a vec. + (vect_slp_analyze_instance_dependence): Update uses of + SLP_TREE_SCALAR_STMTS. + (vect_slp_analyze_and_verify_node_alignment): Likewise. + (vect_slp_analyze_and_verify_instance_alignment): Likewise. + * tree-vect-loop.c (neutral_op_for_slp_reduction): Likewise. + (get_initial_defs_for_reduction): Likewise. + (vect_create_epilog_for_reduction): Likewise. + (vectorize_fold_left_reduction): Likewise. + * tree-vect-stmts.c (vect_prologue_cost_for_slp_op): Likewise. + (vect_model_simple_cost, vectorizable_shift, vectorizable_load) + (can_vectorize_live_stmts): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_loop_vec_info::reductions): Change from an + auto_vec to an auto_vec. + (vect_force_simple_reduction): Take and return stmt_vec_infos rather + than gimple stmts. + * tree-parloops.c (valid_reduction_p): Take a stmt_vec_info instead + of a gimple stmt. + (gather_scalar_reductions): Update after above interface changes. + * tree-vect-loop.c (vect_analyze_scalar_cycles_1): Likewise. + (vect_is_simple_reduction): Take and return stmt_vec_infos rather + than gimple stmts. + (vect_force_simple_reduction): Likewise. + * tree-vect-patterns.c (vect_pattern_recog_1): Update use of + LOOP_VINFO_REDUCTIONS. + * tree-vect-slp.c (vect_analyze_slp_instance): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::reduc_def): Change from + a gimple stmt to a stmt_vec_info. + * tree-vect-loop.c (vect_active_double_reduction_p) + (vect_force_simple_reduction, vectorizable_reduction): Update + accordingly. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_slp_tree::vec_stmts): Change from a + vec to a vec. + * tree-vect-loop.c (vect_create_epilog_for_reduction): Change + the reduction_phis argument from a vec to a + vec. + (vectorizable_reduction): Likewise the phis local variable that + is passed to vect_create_epilog_for_reduction. Update for new type + of SLP_TREE_VEC_STMTS. + (vectorizable_induction): Update for new type of SLP_TREE_VEC_STMTS. + (vectorizable_live_operation): Likewise. + * tree-vect-slp.c (vect_get_slp_vect_defs): Likewise. + (vect_transform_slp_perm_load, vect_schedule_slp_instance): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::vectorized_stmt): Change from + a gimple stmt to a stmt_vec_info. + (vectorizable_condition, vectorizable_live_operation) + (vectorizable_reduction, vectorizable_induction): Pass back the + vectorized statement as a stmt_vec_info. + * tree-vect-data-refs.c (vect_record_grouped_load_vectors): Update + use of STMT_VINFO_VEC_STMT. + * tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise, + accumulating the inner phis that feed the STMT_VINFO_VEC_STMT + as stmt_vec_infos rather than gimple stmts. + (vectorize_fold_left_reduction): Change vec_stmt from a gimple stmt + to a stmt_vec_info. + (vectorizable_live_operation): Likewise. + (vectorizable_reduction, vectorizable_induction): Likewise, + updating use of STMT_VINFO_VEC_STMT. + * tree-vect-stmts.c (vect_get_vec_def_for_operand_1): Update use + of STMT_VINFO_VEC_STMT. + (vect_build_gather_load_calls, vectorizable_bswap, vectorizable_call) + (vectorizable_simd_clone_call, vectorizable_conversion) + (vectorizable_assignment, vectorizable_shift, vectorizable_operation) + (vectorizable_store, vectorizable_load, vectorizable_condition) + (vectorizable_comparison, can_vectorize_live_stmts): Change vec_stmt + from a gimple stmt to a stmt_vec_info. + (vect_transform_stmt): Update use of STMT_VINFO_VEC_STMT. Pass a + pointer to a stmt_vec_info to the vectorizable_* routines. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (_stmt_vec_info::related_stmt): Change from + a gimple stmt to a stmt_vec_info. + (is_pattern_stmt_p): Update accordingly. + * tree-vect-data-refs.c (vect_preserves_scalar_order_p): Likewise. + (vect_record_grouped_load_vectors): Likewise. + * tree-vect-loop.c (vect_determine_vf_for_stmt): Likewise. + (vect_fixup_reduc_chain, vect_update_vf_for_slp): Likewise. + (vect_model_reduction_cost): Likewise. + (vect_create_epilog_for_reduction): Likewise. + (vectorizable_reduction, vectorizable_induction): Likewise. + * tree-vect-patterns.c (vect_init_pattern_stmt): Likewise. + Return the stmt_vec_info for the pattern statement. + (vect_set_pattern_stmt): Update use of STMT_VINFO_RELATED_STMT. + (vect_split_statement, vect_mark_pattern_stmts): Likewise. + * tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Likewise. + (vect_detect_hybrid_slp, vect_get_slp_defs): Likewise. + * tree-vect-stmts.c (vect_mark_relevant): Likewise. + (vect_get_vec_def_for_operand_1, vectorizable_call): Likewise. + (vectorizable_simd_clone_call, vect_analyze_stmt, new_stmt_vec_info) + (free_stmt_vec_info, vect_is_simple_use): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_finish_replace_stmt): Return a stmt_vec_info + (vect_finish_stmt_generation): Likewise. + * tree-vect-stmts.c (vect_finish_stmt_generation_1): Likewise. + (vect_finish_replace_stmt, vect_finish_stmt_generation): Likewise. + (vect_build_gather_load_calls): Use the return value of the above + functions instead of a separate call to vinfo_for_stmt. Use narrow + scopes for the input gimple stmt and wider scopes for the associated + stmt_vec_info. Use vec_info::lookup_def when setting these + stmt_vec_infos from an SSA_NAME definition. + (vectorizable_bswap, vectorizable_call, vectorizable_simd_clone_call) + (vect_create_vectorized_demotion_stmts, vectorizable_conversion) + (vectorizable_assignment, vectorizable_shift, vectorizable_operation) + (vectorizable_store, vectorizable_load, vectorizable_condition) + (vectorizable_comparison): Likewise. + * tree-vect-loop.c (vectorize_fold_left_reduction): Likewise. + (vectorizable_reduction): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_is_simple_use): Add an optional + stmt_vec_info * parameter before the optional gimple **. + * tree-vect-stmts.c (vect_is_simple_use): Likewise. + (process_use, vect_get_vec_def_for_operand_1): Update callers. + (vect_get_vec_def_for_operand, vectorizable_shift): Likewise. + * tree-vect-loop.c (vectorizable_reduction): Likewise. + (vectorizable_live_operation): Likewise. + * tree-vect-patterns.c (type_conversion_p): Likewise. + (vect_look_through_possible_promotion): Likewise. + (vect_recog_rotate_pattern): Likewise. + * tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (stmt_vec_info): Temporarily change from + a typedef to a wrapper class. + (NULL_STMT_VEC_INFO): New macro. + (vec_info::stmt_infos): Change to vec. + (stmt_vec_info::operator*): New function. + (stmt_vec_info::operator gimple *): Likewise. + (set_vinfo_for_stmt): Use NULL_STMT_VEC_INFO. + (add_stmt_costs): Likewise. + * tree-vect-loop-manip.c (iv_phi_p): Likewise. + * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost) + (vect_get_known_peeling_cost): Likewise. + (vect_estimate_min_profitable_iters): Likewise. + * tree-vect-patterns.c (vect_init_pattern_stmt): Likewise. + * tree-vect-slp.c (vect_remove_slp_scalar_calls): Likewise. + * tree-vect-stmts.c (vect_build_gather_load_calls): Likewise. + (vectorizable_store, free_stmt_vec_infos): Likewise. + (new_stmt_vec_info): Change return type of xcalloc to + _stmt_vec_info *. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::lookup_single_use): Declare. + * tree-vectorizer.c (vec_info::lookup_single_use): New function. + * tree-vect-loop.c (vectorizable_reduction): Use it instead of + a single_imm_use-based sequence. + * tree-vect-stmts.c (supportable_widening_operation): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::lookup_def): Declare. + * tree-vectorizer.c (vec_info::lookup_def): New function. + * tree-vect-patterns.c (vect_get_internal_def): Use it. + (vect_widened_op_tree): Likewise. + * tree-vect-stmts.c (vect_is_simple_use): Likewise. + * tree-vect-loop.c (vect_analyze_loop_operations): Likewise. + (vectorizable_reduction): Likewise. + (vect_valid_reduction_input_p): Take a stmt_vec_info instead + of a gimple *. + (vect_is_slp_reduction): Update calls accordingly. Use + vec_info::lookup_def. + (vect_is_simple_reduction): Likewise + * tree-vect-slp.c (vect_detect_hybrid_slp_1): Use vec_info::lookup_def. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vec_info::lookup_stmt): Declare. + * tree-vectorizer.c (vec_info::lookup_stmt): New function. + * tree-vect-loop.c (vect_determine_vf_for_stmt): Use it instead + of vinfo_for_stmt. + (vect_determine_vectorization_factor, vect_analyze_scalar_cycles_1) + (vect_compute_single_scalar_iteration_cost, vect_analyze_loop_form) + (vect_update_vf_for_slp, vect_analyze_loop_operations) + (vect_is_slp_reduction, vectorizable_induction) + (vect_transform_loop_stmt, vect_transform_loop): Likewise. + * tree-vect-patterns.c (vect_init_pattern_stmt): + (vect_determine_min_output_precision_1, vect_determine_precisions) + (vect_pattern_recog): Likewise. + * tree-vect-stmts.c (vect_analyze_stmt, vect_transform_stmt): Likewise. + * config/powerpcspe/powerpcspe.c (rs6000_density_test): Likewise. + * config/rs6000/rs6000.c (rs6000_density_test): Likewise. + * tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Likewise. + (vect_detect_hybrid_slp_1, vect_detect_hybrid_slp_2) + (vect_detect_hybrid_slp): Likewise. Change the walk_stmt_info + info field from a loop to a loop_vec_info. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (stmt_vec_info): Move typedef earlier in file. + (vec_info::add_stmt): Declare. + * tree-vectorizer.c (vec_info::add_stmt): New function. + * tree-vect-data-refs.c (vect_create_data_ref_ptr): Use it. + * tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Likewise. + (vect_create_epilog_for_reduction, vectorizable_reduction): Likewise. + (vectorizable_induction): Likewise. + * tree-vect-slp.c (_bb_vec_info::_bb_vec_info): Likewise. + * tree-vect-stmts.c (vect_finish_stmt_generation_1): Likewise. + (vectorizable_simd_clone_call, vectorizable_store): Likewise. + (vectorizable_load): Likewise. + * tree-vect-patterns.c (vect_init_pattern_stmt): Likewise. + (vect_recog_bool_pattern, vect_recog_mask_conversion_pattern) + (vect_recog_gather_scatter_pattern): Likewise. + (append_pattern_def_seq): Likewise. Remove a check that is + performed by add_stmt itself. + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (vectorizable_reduction): Fix an instance in + which make_ssa_name was called with new_stmt before new_stmt + had been created. + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (vect_valid_reduction_input_p): New function, + split out from... + (vect_is_slp_reduction): ...here... + (vect_is_simple_reduction): ...and here. Remove repetition of tests + that are already known to be false. + +2018-07-31 Richard Sandiford + + * tree-vectorizer.h (vect_free_slp_instance): Add a final_p parameter. + * tree-vect-slp.c (vect_free_slp_tree): Likewise. Don't update + STMT_VINFO_NUM_SLP_USES when it's true. + (vect_free_slp_instance): Add a final_p parameter and pass it to + vect_free_slp_tree. + (vect_build_slp_tree_2): Update call to vect_free_slp_instance. + (vect_analyze_slp_instance): Likewise. + (vect_slp_analyze_operations): Likewise. + (vect_slp_analyze_bb_1): Likewise. + * tree-vectorizer.c (vec_info): Likewise. + * tree-vect-loop.c (vect_transform_loop): Likewise. + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (vectorizable_reduction): Assert that the + function is not called for second and subsequent members of + a reduction group. + +2018-07-31 Richard Sandiford + + * tree-vect-loop.c (get_initial_def_for_reduction): Move special + cases for nested loops from here to ... + (vect_create_epilog_for_reduction): ...here. Only call + vect_is_simple_use for inner-loop reductions. + +2018-07-31 Martin Liska + + PR gcov-profile/85338 + PR gcov-profile/85350 + PR gcov-profile/85372 + * profile.c (struct location_triplet): New. + (struct location_triplet_hash): Likewise. + (output_location): Do not output a BB that + is already recorded for a line. + (branch_prob): Use streamed_locations. + +2018-07-31 Martin Liska + + PR gcov-profile/85370 + * coverage.c (coverage_begin_function): Do not mark target + clones as artificial functions. + +2018-07-31 Martin Liska + + PR gcov-profile/83813 + PR gcov-profile/84758 + PR gcov-profile/85217 + PR gcov-profile/85332 + * profile.c (branch_prob): Do not record GOTO expressions + for GIMPLE statements which locations are already streamed. + +2018-07-31 Olivier Hainque + + * gcc.c (handle_spec_function): Accept a soft_matched_part + argument, as do_spec_1. Pass it down to ... + (eval_spec_function): Accept a soft_matched_part argument, + and pass it down to ... + (do_spec_2): Accept a soft_matched_part argument, and pass + it down to do_spec_1. + (do_spec_1): Pass soft_matched_part to handle_spec_function. + (handle_braces): Update call to handle_spec_function. + (driver::set_up_specs): Update calls to do_spec_2. + (compare_debug_dump_opt_spec_function): Likewise. + (compare_debug_self_opt_spec_function): Likewise. + +2018-07-31 Olivier Hainque + + * common.opt (nolibc): New option. + * doc/invoke.texi (Link Options): Document it. + * gcc.c (LINK_GCC_C_SEQUENCE_SPEC): Honor nolibc. + * config/alpha/linux.h: Likewise. + * config/arc/elf.h: Likewise. + * config/arm/uclinux-elf.h: Likewise. + * config/arm/unknown-elf.h: Likewise. + * config/avr/avrlibc.h: Likewise. + * config/bfin/bfin.h: Likewise. + * config/bfin/linux.h: Likewise. + * config/bfin/uclinux.h: Likewise. + * config/darwin.h: Likewise. + * config/darwin10.h: Likewise. + * config/darwin12.h: Likewise. + * config/gnu-user.h: Likewise. + * config/lm32/uclinux-elf.h: Likewise. + * config/pa/pa-hpux11.h: Likewise. + * config/pa/pa64-hpux.h: Likewise. + * config/sparc/sparc.h: Likewise. + +2018-07-31 Olivier Hainque + + * gcc.c (getenv_spec_function): Prepend '/' to value for allowed + undefined variables. + +2018-07-30 Segher Boessenkool + + PR target/86640 + * config/arm/arm.c (arm_block_set_aligned_vect): Use gen_int_mode + instead of GEN_INT. + +2018-07-30 Bernd Edlinger + + * tree-ssa-forwprop.c (simplify_builtin_call): Don't create a not NUL + terminated string literal. + +2018-07-30 Segher Boessenkool + + PR rtl-optimization/85160 + * combine.c (is_just_move): New function. + (try_combine): Allow combining two instructions into two if neither of + the original instructions was a move. + +2018-07-30 Alexander Monakov + + PR target/86673 + * doc/extend.texi (Global Register Variables): Discourage use of type + qualifiers. + (Local Register Variables): Likewise. + +2018-07-30 Richard Sandiford + + PR tree-optimization/86506 + * hwint.h (ceil_log2): Resync with hwint.c implementation. + +2018-07-30 Ilya Leoshkevich + + PR target/86547 + * lra-constraints.c (spill_hard_reg_in_range): When selecting the + hard_regno, make sure no insn between `from` and `to` clobbers it. + +2018-07-30 Cesar Philippidis + Tom de Vries + + * config/nvptx/nvptx.c (PTX_GANG_DEFAULT): Rename to ... + (PTX_DEFAULT_RUNTIME_DIM): ... this. + (nvptx_goacc_validate_dims): Set default worker and gang dims to + PTX_DEFAULT_RUNTIME_DIM. + (nvptx_dim_limit): Ignore GOMP_DIM_WORKER. + +2018-07-29 John David Anglin + + * config/pa/pa.c (pa_output_addr_vec): Align address table. + * config/pa/pa.h (JUMP_TABLES_IN_TEXT_SECTION): Revise comment. + * config/pa/pa32-linux.h (JUMP_TABLES_IN_TEXT_SECTION): Define. + +2018-07-27 Michael Meissner + + * config/rs6000/constraints.md (wG constraint): Delete, no longer + used. + * config/rs6000/predicates.md (p9_fusion_reg_operand): Rename + predicate to reflect toc fusion has been deleted. + (toc_fusion_mem_raw): Delete, no longer used. + (toc_fusion_mem_wrapped): Likewise. + * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Delete toc + fusion mask bit. + * config/rs6000/rs6000-protos.h (fusion_wrap_memory_address): + Delete, no longer used. + * config/rs6000/rs6000.c (struct rs6000_reg_addr): Delete fields + meant to be used for toc fusion. + (rs6000_debug_print_mode): Delete toc fusion debugging. + (rs6000_debug_reg_global): Likewise. + (rs6000_init_hard_regno_mode_ok): Delete setting up fields for toc + fusion and secondary reload support that were never used. + (rs6000_option_override_internal): Delete TOC fusion, that was only + partially defined, and it did not work unless you also used the + -mcmodel= switch. + (rs6000_legitimate_address_p): Delete TOC fusion support. + (rs6000_opt_masks): Likewise. + (fusion_wrap_memory_address): Delete function, no longer used. + (fusion_split_address); Delete TOC fusion support. + * config/rs6000/rs6000.h (TARGET_TOC_FUSION_INT): Delete, no + longer used with toc fusion being deleted. + (TARGET_TOC_FUSION_FP): Likewise. + * config/rs6000/rs6000.md (UNSPEC_FUSION_ADDIS): Delete TOC fusion + UNSPEC. + (toc fusion spliter): Delete TOC fusion support. + (toc_fusionload_): Likewise. + (toc_fusionload_di): Likewise. + (fusion_gpr_load_): Delete generator function, this insn no + longer needs to be named. Rename predicate to delete TOC fusion. + (fusion_gpr___load): Likewise. + (fusion_gpr___store): Likewise. + (fusion_vsx___load): Likewise. + (fusion_vsx___store): Likewise. + (p9 fusion peephole2s): Rename predicate to delete TOC fusion. + +2018-07-27 Kelvin Nilsen + + * doc/extend.texi (Basic PowerPC Built-in Functions Available on + ISA 2.05): Replace __uint128_t with __uint128 and __int128_t with + __int128 in built-in function prototypes. + (PowerPC AltiVec Built-in Functions on ISA 2.07): Likewise. + (PowerPC AltiVec Built-in Functions on ISA 3.0): Likewise. + +2018-07-27 Martin Sebor + + PR tree-optimization/86696 + * tree-ssa-strlen.c (get_min_string_length): Handle all integer + types, including enums. + (handle_char_store): Be prepared for the above function to fail. + 2018-07-26 Qing Zhao * builtins.c (inline_expand_builtin_string_cmp): Disable inlining