+2018-08-04 Martin Sebor <msebor@redhat.com>
+
+ PR tree-optimization/86571
+ * gimple-ssa-sprintf.c (format_floating): Extend upper bound of
+ NaN output to 4.
+
+2018-08-03 Sandra Loosemore <sandra@codesourcery.com>
+
+ * config/nios2/nios2.c (TARGET_HAVE_SPECULATION_SAFE_VALUE):
+ Define.
+
+2018-08-03 Jeff Law <law@redhat.com>
+
+ PR target/86795
+ * config/mn10300/mn10300.c (TARGET_HAVE_SPECULATION_SAFE_VALUE):
+ Define to speculation_safe_value_not_needed.
+
+2018-08-03 David Malcolm <dmalcolm@redhat.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <aldyh@redhat.com>
+
+ * 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 <tdevries@suse.de>
+
+ * 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 <mliska@suse.cz>
+
+ * predict.c (dump_prediction): Change to 2 digits
+ in fraction part.
+
+2018-08-03 Siddhesh Poyarekar <siddhesh@sourceware.org>
+
+ * 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 <iii@linux.ibm.com>
+
+ * 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 <dmalcolm@redhat.com>
+
+ * 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 <acsawdey@linux.ibm.com>
+
+ * 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 <law@redhat.com>
+
+ 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 <tdevries@suse.de>
+
+ 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 <richard.sandiford@arm.com>
+
+ * genemit.c (print_overload_test): Fix typo.
+
+2018-08-02 Richard Biener <rguenther@suse.de>
+
+ 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 <nickc@redhat.com>
+
+ 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 <richard.sandiford@arm.com>
+
+ * 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<GPF_TF:mode><P:mode>)
+ (aarch64_reload_movcp<VALL:mode><P:mode>, aarch64_reload_mov<mode>)
+ (aarch64_movdi_<mode>low, aarch64_movdi_<mode>high)
+ (aarch64_mov<mode>high_di, aarch64_mov<mode>low_di): Add a '@'
+ character before the pattern name.
+ * config/aarch64/aarch64-simd.md (aarch64_split_simd_mov<mode>)
+ (aarch64_rsqrte<mode>, aarch64_rsqrts<mode>)
+ (aarch64_simd_combine<mode>, aarch64_frecpe<mode>)
+ (aarch64_frecps<mode>): Likewise.
+ * config/aarch64/atomics.md (atomic_compare_and_swap<mode>)
+ (aarch64_compare_and_swap<mode>, aarch64_compare_and_swap<mode>_lse)
+ (aarch64_load_exclusive<mode>, aarch64_store_exclusive<mode>)
+ (aarch64_atomic_swp<mode>, aarch64_atomic_cas<mode>)
+ (aarch64_atomic_load<atomic_ldop><mode>): Likewise.
+
+2018-08-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_float_const_representable_p):
+ Allow HFmode constants if TARGET_FP_F16INST.
+
+2018-08-02 Jackson Woodruff <jackson.woodruff@arm.com>
+
+ 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 <mliska@suse.cz>
+
+ 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 <dmalcolm@redhat.com>
+
+ * 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 <msebor@redhat.com>
+
+ 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 <richard.sandiford@arm.com>
+
+ * match.pd: Optimise pointer range checks.
+
+2018-08-01 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/86758
+ * tree-vect-stmts.c (vectorizable_simd_clone_call): Don't try
+ to remove pattern statements.
+
+2018-08-01 Richard Sandiford <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <aldyh@redhat.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ 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 <tdevries@suse.de>
+
+ PR target/86800
+ * config/nvptx/nvptx.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define to
+ speculation_safe_value_not_needed.
+
+2018-08-01 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-sccvn.c (visit_phi): Compare invariant addresses
+ as base and offset.
+
+2018-08-01 Martin Liska <mliska@suse.cz>
+
+ * 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 <mliska@suse.cz>
+
+ 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 <sam.tebbs@arm.com>
+
+ * config/aarch64/aarch64-simd.md
+ (*aarch64_get_lane_zero_extendsi<mode>): Rename to...
+ (*aarch64_get_lane_zero_extend<GPI:mode><VDQQH:mode>): ... This and
+ use GPI iterator instead of SI mode.
+
+2018-08-01 Richard Earnshaw <rearnsha@arm.com>
+
+ * 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 <rearnsha@arm.com>
+
+ * config/i386/i386.md (unspecv): Add UNSPECV_SPECULATION_BARRIER.
+ (speculation_barrier): New insn.
+
+2018-08-01 Richard Biener <rguenther@suse.de>
+
+ 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 <jwjagersma@gmail.com>
+
+ 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 <oliva@adacore.com>
+
+ * 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 <oliva@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
+
+ * 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 <iant@golang.org>
+
+ * targhooks.c (default_have_speculation_safe_value): Add
+ ATTRIBUTE_UNUSED.
+
+2018-07-31 David Malcolm <dmalcolm@redhat.com>
+
+ * 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 <jozef.l@mittosystems.com>
+
+ 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 <rearnsha@arm.com>
+
+ * config/pdp11/pdp11.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Redefine
+ to speculation_safe_value_not_needed.
+
+2018-07-31 Richard Earnshaw <rearnsha@arm.com>
+
+ * 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 <rearnsha@arm.com>
+
+ * config/aarch64/iterators.md (ALLI_TI): New iterator.
+ * config/aarch64/aarch64.md (despeculate_copy<ALLI_TI:mode>): New
+ expand.
+ (despeculate_copy<ALLI:mode>_insn): New insn.
+ (despeculate_copyti_insn): New insn.
+ (despeculate_simple<ALLI:mode>): 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 <rearnsha@arm.com>
+
+ * 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<mode>): 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 <rearnsha@arm.com>
+
+ * config/aarch64/aarch64.md (cb<optab><mode>1): Disable when
+ aarch64_track_speculation is true.
+ (tb<optab><mode>1): 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 <rearnsha@arm.com>
+
+ * config/aarch64/aarch64.opt (mtrack-speculation): New target option.
+
+2018-07-31 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/aarch64.md (unspecv): Add UNSPECV_SPECULAION_BARRIER.
+ (speculation_barrier): New insn.
+
+2018-07-31 Richard Earnshaw <rearnsha@arm.com>
+
+ * 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 <rearnsha@arm.com>
+
+ * 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 <dmalcolm@redhat.com>
+
+ * 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 <msebor@redhat.com>
+
+ PR tree-optimization/86741
+ * tree-vrp.c (vrp_prop::check_mem_ref): Avoid incomplete types.
+
+2018-07-31 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * tree-vectorizer.h (vect_stmt_in_region_p): Delete.
+ * tree-vectorizer.c (vect_stmt_in_region_p): Likewise.
+
+2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change
+ from an auto_vec<gimple *> to an auto_vec<stmt_vec_info>.
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * tree-vectorizer.h (vec_info::grouped_stores): Change from
+ an auto_vec<gimple *> to an auto_vec<stmt_vec_info>.
+ (_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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * 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 <richard.sandiford@arm.com>
+
+ * tree-vectorizer.h (_slp_tree::stmts): Change from a vec<gimple *>
+ to a vec<stmt_vec_info>.
+ * tree-vect-slp.c (vect_free_slp_tree): Update accordingly.
+ (vect_create_new_slp_node): Take a vec<gimple *> instead of a
+ vec<stmt_vec_info>.
+ (_slp_oprnd_info::def_stmts): Change from a vec<gimple *>
+ to a vec<stmt_vec_info>.
+ (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<gimple *> to a vec<stmt_vec_info>.
+ (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<gimple *> to a vec<stmt_vec_info>.
+ (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 <richard.sandiford@arm.com>
* tree-vectorizer.h (_loop_vec_info::reductions): Change from an