re PR tree-optimization/71818 (ICE in as_a, at is-a.h:192 w/ -O2 -ftree-vectorize)
[gcc.git] / gcc / ChangeLog
index e00b2c4432f5b483976c1da83cac0ce172bc3111..e97f2ccc630c6913232ebfaa3128fbd44f001b10 100644 (file)
@@ -1,3 +1,315 @@
+2015-08-01  Alan Hayward <alan.hayward@arm.com>
+
+       PR tree-optimization/71818
+       * tree-vect-loop-manip.c (vect_can_advance_ivs_p): Don't advance IVs
+       with non invariant evolutions
+
+2016-08-01  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/72767
+       * config/avr/avr.md (length) [branch]: Correct insn length
+       attribute for forward branches.
+
+2016-08-01  Georg-Johann Lay  <avr@gjlay.de>
+
+       * doc/extend.texi (AVR Built-in Functions): Document
+       __builtin_avr_nops.
+       * config/avr/builtins.def (NOPS): New.
+       * config/avr/avr.c (avr_expand_nops): New static function.
+       (avr_expand_builtin): Use it to handle AVR_BUILTIN_NOPS.
+
+2016-08-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_classify_address): Use DImode when
+       performing aarch64_offset_7bit_signed_scaled_p check for TImode LDP/STP
+       addresses.
+
+2016-08-01  Virendra Pathak  <virendra.pathak@broadcom.com>
+
+       * config/aarch64/aarch64.c (vulcan_tunings): Update
+       vulcan L1 cache_line_size.
+
+2016-07-30  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000-protos.h (rs6000_adjust_vec_address): New
+       function that takes a vector memory address, a hard register, an
+       element number and a temporary base register, and recreates an
+       address that points to the appropriate element within the vector.
+       * config/rs6000/rs6000.c (rs6000_adjust_vec_address): Likewise.
+       (rs6000_split_vec_extract_var): Add support for the target of a
+       vec_extract with variable element number being a scalar memory
+       location.
+       (rtx_is_swappable_p): VLSO insns (UNSPEC_VSX_VSLOW) are not
+       swappable.
+       * config/rs6000/vsx.md (vsx_extract_<mode>_load): Replace
+       vsx_extract_<mode>_load insn with a new insn that optimizes
+       storing either element to a memory location, using scratch
+       registers to pick apart the vector and reconstruct the address.
+       (vsx_extract_<P:mode>_<VSX_D:mode>_load): Likewise.
+       (vsx_extract_<mode>_store): Rework alternatives to more correctly
+       support Altivec registers.  Add support for ISA 3.0 Altivec d-form
+       store instruction.
+       (vsx_extract_<mode>_var): Add support for extracting a variable
+       element number from memory.
+
+2016-07-29  Georg-Johann Lay  <avr@gjlay.de>
+
+       * config/avr/avr.c (avr_out_compare): Use const0_rtx instead of 0
+       when testing for compares against constants of the form 0xabab.
+
+2016-07-29  Bin Cheng  <bin.cheng@arm.com>
+
+       PR tree-optimization/57558
+       * tree-vect-loop-manip.c (vect_create_cond_for_niters_checks): New
+       function.
+       (vect_loop_versioning): Support versioning with niter assumptions.
+       * tree-vect-loop.c (tree-ssa-loop.h): Include header file.
+       (vect_get_loop_niters): New parameter.  Reimplement to support
+       assumptions in loop niter info.
+       (vect_analyze_loop_form_1, vect_analyze_loop_form): Ditto.
+       (new_loop_vec_info): Init LOOP_VINFO_NITERS_ASSUMPTIONS.
+       (vect_estimate_min_profitable_iters): Use LOOP_REQUIRES_VERSIONING.
+       Support loop versioning for niters.
+       * tree-vectorizer.c (tree-ssa-loop-niter.h): Include header file.
+       (vect_free_loop_info_assumptions): New function.
+       (vectorize_loops): Free loop niter info for loops with flag
+       LOOP_F_ASSUMPTIONS set if vectorization failed.
+       * tree-vectorizer.h (struct _loop_vec_info): New field
+       num_iters_assumptions.
+       (LOOP_VINFO_NITERS_ASSUMPTIONS): New macro.
+       (LOOP_REQUIRES_VERSIONING_FOR_NITERS): New macro.
+       (LOOP_REQUIRES_VERSIONING): New macro.
+       (vect_free_loop_info_assumptions): New decl.
+
+2016-07-29  Bin Cheng  <bin.cheng@arm.com>
+
+       * cfgloop.h (struct loop): New field constraints.
+       (LOOP_C_INFINITE, LOOP_C_FINITE): New macros.
+       (loop_constraint_set, loop_constraint_clr, loop_constraint_set_p): New
+       functions.
+       * cfgloop.c (alloc_loop): Initialize new field.
+       * cfgloopmanip.c (copy_loop_info): Copy constraints.
+       * tree-ssa-loop-niter.c (number_of_iterations_exit_assumptions):
+       Adjust niter analysis wrto loop constraints.
+       * doc/loop.texi (@node Number of iterations): Add description for loop
+       constraints.
+
+2016-07-29  Marek Polacek  <polacek@redhat.com>
+
+       PR c/7652
+       * config/i386/i386.c (ix86_expand_args_builtin): Add break.
+       (ix86_expand_round_builtin): Likewise.
+
+2016-07-29  Segher Boessenkool  <segher@kernel.crashing.org>
+           Georg-Johann Lay  <avr@gjlay.de>
+
+       PR rtl-optimization/71976
+       * combine.c (get_last_value): Return 0 if the argument for which
+       the function is called has a wider mode than the recorded value.
+
+2016-07-29  Marek Polacek  <polacek@redhat.com>
+
+       PR c/7652
+       * config/rs6000/rs6000.c (altivec_expand_ld_builtin): Add break.
+       (altivec_expand_st_builtin): Likewise.
+
+2016-07-29  Georg-Johann Lay  <avr@gjlay.de>
+
+       * config/avr/avr.md (addqi3) [cc]: Revert glitch in insn attribute
+       introduced in r238381.
+
+2016-07-29  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       PR middle-end/68217
+       * tree-vrp.c (extract_range_from_binary_expr_1): In case of signed
+       & sign-bit-CST, generate [-INF, 0] instead of [-INF, INF].
+
+2016-07-28  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000-protos.h (rs6000_split_vec_extract_var):
+       New declaration.
+       * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+       Add support for vec_extract of vector double or vector long having
+       a variable element number on 64-bit ISA 2.07 systems or newer.
+       * config/rs6000/rs6000.c (rs6000_expand_vector_extract):
+       Likewise.
+       (rs6000_split_vec_extract_var): New function to split a
+       vec_extract built-in function with variable element number.
+       (rtx_is_swappable_p): Variable vec_extracts and shifts are not
+       swappable.
+       * config/rs6000/vsx.md (UNSPEC_VSX_VSLO): New unspec.
+       (UNSPEC_VSX_EXTRACT): Likewise.
+       (vsx_extract_<mode>, VSX_D iterator): Fix constraints to allow
+       direct move instructions to be generated on 64-bit ISA 2.07
+       systems and newer, and to take advantage of the ISA 3.0 MFVSRLD
+       instruction.
+       (vsx_vslo_<mode>): New insn to do VSLO on V2DFmode and V2DImode
+       arguments for vec_extract variable element.
+       (vsx_extract_<mode>_var, VSX_D iterator): New insn to support
+       vec_extract with variable element on V2DFmode and V2DImode
+       vectors.
+       * config/rs6000/rs6000.h (TARGET_VEXTRACTUB): Remove
+       -mupper-regs-df requirement, since it isn't needed.
+       (TARGET_DIRECT_MOVE_64BIT): New macro to say whether we can
+       do direct moves on 64-bit systems, which allows optimization of
+       vec_extract on 64-bit ISA 2.07 systems and newer.
+
+2016-07-28  Kristina Martsenko  <kristina.martsenko@arm.com>
+2016-07-28  Wilco Dijkstra  <wdijkstr@arm.com>
+
+        * config/aarch64/aarch64.md
+       (zero_extend<SHORT:mode><GPI:mode>2_aarch64): Change output
+       statement and type.
+       (<optab>qihi2_aarch64): Likewise, and split into two.
+       (extendqihi2_aarch64): New.
+       (zero_extendqihi2_aarch64): New.
+       * config/aarch64/iterators.md (ldrxt): Remove.
+       * config/aarch64/aarch64.c (aarch64_rtx_costs): Change cost of
+       uxtb/uxth.
+
+2016-07-28  Kristina Martsenko  <kristina.martsenko@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_rtx_costs): Fix cost of zero extend.
+
+2016-07-28  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_pushwb_pair_reg): Rename.
+       (aarch64_push_reg): New function to push 1 or 2 registers.
+       (aarch64_pop_reg): New function to pop 1 or 2 registers.
+       (aarch64_expand_prologue): Use aarch64_push_regs.
+       (aarch64_expand_epilogue): Use aarch64_pop_regs.
+
+2016-07-28  Yuri Rumyantsev  <ysrumyan@gmail.com>
+
+       PR tree-optimization/71734
+       * tree-ssa-loop-im.c (ref_indep_loop_p_1): Pass value of safelen
+       attribute instead of REF_LOOP and use it.
+       (ref_indep_loop_p_2): Use SAFELEN argument instead of REF_LOOP and
+       set it for Loops having non-zero safelen attribute.
+       (ref_indep_loop_p): Pass zero as initial value for safelen.
+
+2016-07-28  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR middle-end/72657
+       PR target/72683
+       * tree-chkp.c (chkp_retbnd_call_by_val): Check for instrumentation
+       call using chkp_gimple_call_builtin_p.
+       (chkp_copy_bounds_for_assign): Likewise.
+
+2016-07-28  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * config/alpha/alpha.c (alpha_adjust_cost): Adjust.
+       * config/arm/arm-protos.h (struct tune_params): Likewise.
+       * config/arm/arm.c (xscale_sched_adjust_cost): Likewise.
+       (cortex_a9_sched_adjust_cost): Likewise.
+       (fa726te_sched_adjust_cost): Likewise.
+       (arm_adjust_cost): Likewise.
+       * config/bfin/bfin.c (bfin_adjust_cost): Likewise.
+       * config/c6x/c6x.c (c6x_adjust_cost): Likewise.
+       * config/epiphany/epiphany.c (epiphany_adjust_cost): Likewise.
+       * config/i386/i386.c (ix86_adjust_cost): Likewise.
+       * config/ia64/ia64.c: Likewise.
+       * config/m68k/m68k.c: Likewise.
+       * config/mep/mep.c (mep_adjust_cost): Likewise.
+       * config/microblaze/microblaze.c (microblaze_adjust_cost):
+       * Likewise.
+       * config/mips/mips.c (mips_adjust_cost): Likewise.
+       * config/mn10300/mn10300.c (mn10300_adjust_sched_cost):
+       * Likewise.
+       * config/pa/pa.c (pa_adjust_cost): Likewise.
+       * config/rs6000/rs6000.c (rs6000_adjust_cost): Likewise.
+       (rs6000_debug_adjust_cost): Likewise.
+       * config/sh/sh.c (sh_adjust_cost): Likewise.
+       * config/sparc/sparc.c (supersparc_adjust_cost): Likewise.
+       (hypersparc_adjust_cost): Likewise.
+       (sparc_adjust_cost): Likewise.
+       * config/spu/spu.c (spu_sched_adjust_cost): Likewise.
+       * config/tilegx/tilegx.c (tilegx_sched_adjust_cost): Likewise.
+       * config/tilepro/tilepro.c (tilepro_sched_adjust_cost):
+       * Likewise.
+       * config/visium/visium.c (visium_adjust_cost): Likewise.
+       * doc/tm.texi: Regenerate.
+       * haifa-sched.c (dep_cost_1): Adjust.
+       * target.def: Merge adjust_cost and adjust_cost_2.
+
+2016-07-28  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * haifa-sched.c (add_to_speculative_block): Make twins a vector.
+
+2016-07-28  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * store-motion.c (struct st_expr): Make pattern_regs a vector.
+       (extract_mentioned_regs): Append to a vector instead of
+       returning a rtx_expr_list.
+       (st_expr_entry): Adjust.
+       (free_st_expr_entry): Likewise.
+       (store_ops_ok): Likewise.
+       (store_killed_in_insn): Likewise.
+       (find_moveable_store): Likewise.
+
+2016-07-28  Martin Liska  <mliska@suse.cz>
+
+       PR gcov-profile/68025
+       * tree-profile.c (tree_profiling): Respect
+       no_profile_instrument_function attribute.
+       * doc/extend.texi: Document no_profile_instrument_function
+       attribute.
+
+2016-07-28  Martin Liska  <mliska@suse.cz>
+
+       PR rtl-optimization/70944
+       * combine.c (make_compound_operation):
+       Do not allow make_compound_operation for vector mode
+
+2016-07-28  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       PR middle-end/71994
+       * tree-ssa-reassoc.c (maybe_optimize_range_tests): Check tcc_comparison
+        before calling get_ops.
+
+2016-07-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * defaults.h (LOG2_BITS_PER_UNIT): Move from here...
+       * tree.h (LOG2_BITS_PER_UNIT): ...to here.
+       (BITS_PER_UNIT_LOG): Remove.
+       (int_bit_position): Use LOG2_BITS_PER_UNIT instead of BITS_PER_UNIT_LOG.
+       * expr.c (expand_assignment): Likewise.
+       * stor-layout.c (initialize_sizetypes): Likewise.
+
+2016-07-27  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/vector.md (vec_extract<mode>): Change the calling
+       signature of rs6000_expand_vector_extract so that the element
+       number is a RTX instead of a constant integer.
+       * config/rs6000/rs6000-protos.h (rs6000_expand_vector_extract):
+       Likewise.
+       * config/rs6000/rs6000.c (rs6000_expand_vector_extract): Likewise.
+       (altivec_expand_vec_ext_builtin): Likewise.
+       * config/rs6000/altivec.md (reduc_plus_scal_<mode>): Likewise.
+       * config/rs6000/vsx.md (vsx_extract_<mode>): Fix spelling of the
+       MFVSRLD instruction.
+
+2016-07-27  David Malcolm  <dmalcolm@redhat.com>
+
+       * input.c (get_pure_location): Move here from tree.c.
+       (make_location): Likewise.  Add header comment.
+       (selftest::test_accessing_ordinary_linemaps): Verify
+       pure_location_p, make_location, get_location_from_adhoc_loc and
+       get_range_from_loc.
+       * input.h (get_pure_location): Move declaration here from tree.h.
+       (get_finish): Likewise for inline function.
+       (make_location): Likewise for declaration.
+       * tree.c (get_pure_location): Move to input.c.
+       (make_location): Likewise.
+       * tree.h (get_pure_location): Move declaration to tree.h.
+       (get_finish): Likewise for inline function.
+       (make_location): Likewise for declaration.
+
+2016-07-27  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+
+       PR middle-end/71078
+       * match.pd (x / abs(x) -> copysign(1.0, x)): New pattern.
+
 2016-07-27  David Malcolm  <dmalcolm@redhat.com>
 
        * system.h (STATIC_ASSERT): Use static_assert if building
 
 2016-07-22  Segher Boessenkool  <segher@kernel.crashing.org>
 
+       PR target/71216
        * config/rs6000/rs6000.c (rs6000_file_start): Fix condition for
        when to emit a ".machine" pseudo-op.