1. 15 Sep, 2017 10 commits
    • [PR target/67591] ARM v8 Thumb IT blocks are deprecated · a75c63e0
      2017-09-15  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	PR target/67591
      	* config/arm/arm.md (*cmp_and): Add enabled_for_depr_it attribute.
      	(*cmp_ior): Likewise.
      	(*ior_scc_scc): Add alternative for enabled_for_depr_it attribute.
      	(*ior_scc_scc_cmp): Likewise.
      	(*and_scc_scc): Likewise.
      	(*and_scc_scc_cmp): Likewise.
      
      From-SVN: r252817
      Christophe Lyon committed
    • Turn CANNOT_CHANGE_MODE_CLASS into a hook · 0d803030
      This also seemed like a good opportunity to reverse the sense of the
      hook to "can", to avoid the awkward double negative in !CANNOT.
      
      2017-09-15  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayard  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.def (can_change_mode_class): New hook.
      	(mode_rep_extended): Refer to it instead of CANNOT_CHANGE_MODE_CLASS.
      	(hard_regno_nregs): Likewise.
      	* hooks.h (hook_bool_mode_mode_reg_class_t_true): Declare.
      	* hooks.c (hook_bool_mode_mode_reg_class_t_true): New function.
      	* doc/tm.texi.in (CANNOT_CHANGE_MODE_CLASS): Replace with...
      	(TARGET_CAN_CHANGE_MODE_CLASS): ...this.
      	(LOAD_EXTEND_OP): Update accordingly.
      	* doc/tm.texi: Regenerate.
      	* doc/rtl.texi: Refer to TARGET_CAN_CHANGE_MODE_CLASS instead of
      	CANNOT_CHANGE_MODE_CLASS.
      	* hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): Replace with...
      	(REG_CAN_CHANGE_MODE_P): ...this new macro.
      	* combine.c (simplify_set): Update accordingly.
      	* emit-rtl.c (validate_subreg): Likewise.
      	* recog.c (general_operand): Likewise.
      	* regcprop.c (mode_change_ok): Likewise.
      	* reload1.c (choose_reload_regs): Likewise.
      	(inherit_piecemeal_p): Likewise.
      	* rtlanal.c (simplify_subreg_regno): Likewise.
      	* postreload.c (reload_cse_simplify_set): Use REG_CAN_CHANGE_MODE_P
      	instead of CANNOT_CHANGE_MODE_CLASS.
      	(reload_cse_simplify_operands): Likewise.
      	* reload.c (push_reload): Use targetm.can_change_mode_class
      	instead of CANNOT_CHANGE_MODE_CLASS.
      	(push_reload): Likewise.  Also use REG_CAN_CHANGE_MODE_P instead of
      	REG_CANNOT_CHANGE_MODE_P.
      	* config/alpha/alpha.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/alpha/alpha.c (alpha_can_change_mode_class): New function.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/arm/arm.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(arm_can_change_mode_class): New function.
      	* config/arm/neon.md: Refer to TARGET_CAN_CHANGE_MODE_CLASS rather
      	than CANNOT_CHANGE_MODE_CLASS in comments.
      	* config/i386/i386.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/i386/i386-protos.h (ix86_cannot_change_mode_class): Delete.
      	* config/i386/i386.c (ix86_cannot_change_mode_class): Replace with...
      	(ix86_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/ia64/ia64.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/ia64/ia64.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(ia64_can_change_mode_class): New function.
      	* config/m32c/m32c.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/m32c/m32c-protos.h (m32c_cannot_change_mode_class): Delete.
      	* config/m32c/m32c.c (m32c_cannot_change_mode_class): Replace with...
      	(m32c_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/mips/mips.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/mips/mips-protos.h (mips_cannot_change_mode_class): Delete.
      	* config/mips/mips.c (mips_cannot_change_mode_class): Replace with...
      	(mips_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/msp430/msp430.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/msp430/msp430.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(msp430_can_change_mode_class): New function.
      	* config/nvptx/nvptx.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/nvptx/nvptx.c (nvptx_can_change_mode_class): New function.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/pa/pa32-regs.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/pa/pa64-regs.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/pa/pa-protos.h (pa_cannot_change_mode_class): Delete.
      	* config/pa/pa.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(pa_cannot_change_mode_class): Replace with...
      	(pa_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(pa_modes_tieable_p): Refer to TARGET_CAN_CHANGE_MODE_CLASS rather
      	than CANNOT_CHANGE_MODE_CLASS in comments.
      	* config/pdp11/pdp11.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/pdp11/pdp11-protos.h (pdp11_cannot_change_mode_class): Delete.
      	* config/pdp11/pdp11.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(pdp11_cannot_change_mode_class): Replace with...
      	(pdp11_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	* config/powerpcspe/powerpcspe.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/powerpcspe/powerpcspe-protos.h
      	(rs6000_cannot_change_mode_class_ptr): Delete.
      	* config/powerpcspe/powerpcspe.c
      	(rs6000_cannot_change_mode_class_ptr): Delete.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(rs6000_option_override_internal): Assign to
      	targetm.can_change_mode_class instead of
      	rs6000_cannot_change_mode_class_ptr.
      	(rs6000_cannot_change_mode_class): Replace with...
      	(rs6000_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(rs6000_debug_cannot_change_mode_class): Replace with...
      	(rs6000_debug_can_change_mode_class): ...this new function.
      	* config/riscv/riscv.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/riscv/riscv.c (riscv_can_change_mode_class): New function.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/rs6000/rs6000.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/rs6000/rs6000-protos.h (rs6000_cannot_change_mode_class_ptr):
      	Delete.
      	* config/rs6000/rs6000.c (rs6000_cannot_change_mode_class_ptr): Delete.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(rs6000_option_override_internal): Assign to
      	targetm.can_change_mode_class instead of
      	rs6000_cannot_change_mode_class_ptr.
      	(rs6000_cannot_change_mode_class): Replace with...
      	(rs6000_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(rs6000_debug_cannot_change_mode_class): Replace with...
      	(rs6000_debug_can_change_mode_class): ...this new function.
      	* config/s390/s390.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/s390/s390-protos.h (s390_cannot_change_mode_class): Delete.
      	* config/s390/s390.c (s390_cannot_change_mode_class): Replace with...
      	(s390_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/sh/sh.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/sh/sh-protos.h (sh_cannot_change_mode_class): Delete.
      	* config/sh/sh.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(sh_cannot_change_mode_class): Replace with...
      	(sh_can_change_mode_class): ...this new function, inverting the
      	sense of the return value.
      	* config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/sparc/sparc.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(sparc_can_change_mode_class): New function.
      	* config/spu/spu.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/spu/spu.c (spu_can_change_mode_class): New function.
      	(TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	* config/visium/visium.h (CANNOT_CHANGE_MODE_CLASS): Delete.
      	* config/visium/visium.c (TARGET_CAN_CHANGE_MODE_CLASS): Redefine.
      	(visium_can_change_mode_class): New function.
      	* system.h (CANNOT_CHANGE_MODE_CLASS): Poison.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252816
      Richard Sandiford committed
    • [demangler] Fix nested generic lambda · fa0cdfb6
      https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00994.html
      	PR demangler/82195
      	* cp-demangle.c (d_name): Add 'toplevel' parm.  Pass to	...
      	(d_local_name): ... here.  Parse trailing function args on nested
      	local_name.
      	(d_encoding, d_special_name, d_class_enum_type): Adjust d_name calls.
      	* testsuite/demangle-expected: Add tests.
      
      From-SVN: r252815
      Nathan Sidwell committed
    • re PR lto/81968 (early lto debug objects make Solaris ld SEGV) · dc4b8c68
      2017-09-15  Richard Biener  <rguenther@suse.de>
      
      	PR lto/81968
      	* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
      	Iterate marking dependent sections necessary.
      
      From-SVN: r252807
      Richard Biener committed
    • [Demangle PATCH] Some pre-fix cleanups · 9d89efeb
      https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00983.html
      
      	* cp-demangle.c (is_fnqual_component_type): Reimplement using
      	FNQUAL_COMPONENT_CASE.
      	(d_encoding): Hold bare_function_type in local var.
      	(d_local_name): Build name in both cases and build result once.
      	Collapse switch-if to single conditional.
      	* testsuite/demangle-expected: Realign blank lines with tests.
      
      From-SVN: r252802
      Nathan Sidwell committed
    • re PR tree-optimization/82217 (ICE on valid code at -O1 and above: in visit_phi,… · 897da303
      re PR tree-optimization/82217 (ICE on valid code at -O1 and above: in visit_phi, at tree-ssa-sccvn.c:3908)
      
      2017-09-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82217
      	* tree-ssa-sccvn.c (visit_phi): Properly handle all VN_TOP
      	but not undefined case.
      
      	* gcc.dg/torture/pr82217.c: New testcase.
      
      From-SVN: r252796
      Richard Biener committed
    • re PR middle-end/82145 (i386/pr38988.c, i386/pr46254.c, i386/pr55154.c, i386/pr81766.c fails) · 854dde43
      	PR target/82145
      	* postreload.c (reload_cse_simplify_operands): Skip
      	NOTE_INSN_DELETED_LABEL similarly to skipping CODE_LABEL.
      
      	* gcc.target/i386/pr82145.c: New test.
      
      From-SVN: r252791
      Jakub Jelinek committed
    • re PR fortran/82184 (187.facerec in SPEC CPU 2000 miscompares) · 22d07ec2
      2017-09-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82184
      	trans-decl.c (gfc_trans_deferred_vars): Do not null the 'span'
      	field if the symbol is either implicitly or explicitly saved.
      
      
      2017-09-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82184
      	* gfortran.dg/pointer_array_9.f90: New test.
      
      From-SVN: r252781
      Paul Thomas committed
    • re PR tree-optimization/68823 ([graphite] tramp3d-v4 compiled with -floop-nest-optimize crashes) · b6ab6ef8
      2017-09-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/68823
      	* graphite-scop-detection.c (build_alias_set): If we have a
      	possible dependence check whether we can handle them by just
      	looking at the DRs DR_ACCESS_FNs.
      	(build_scops): If build_alias_set fails, fail the SCOP.
      
      From-SVN: r252780
      Richard Biener committed
    • Daily bump. · 29d32642
      From-SVN: r252779
      GCC Administrator committed
  2. 14 Sep, 2017 27 commits
    • Introduce libgomp/testsuite/libgomp.c-c++-common · 82419efb
      2017-09-14  Tom de Vries  <tom@codesourcery.com>
      
      	* testsuite/libgomp.c++/cancel-taskgroup-1.C: Remove.
      	* testsuite/libgomp.c/cancel-taskgroup-1.c: Move to ...
      	* testsuite/libgomp.c-c++-common/cancel-taskgroup-1.c: ... here.
      	* testsuite/libgomp.c/c.exp: Include test-cases from
      	libgomp.c-c++-common.
      	* testsuite/libgomp.c++/c++.exp: Same.  Force c++-mode compilation of .c
      	files.
      
      From-SVN: r252775
      Tom de Vries committed
    • rs6000-builtin.def (BU_FLOAT128_1_HW): New macros to support float128 built-in… · 12fca96e
      rs6000-builtin.def (BU_FLOAT128_1_HW): New macros to support float128 built-in functions that require the ISA 3.0 hardware.
      
      [gcc]
      2017-09-14  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* config/rs6000/rs6000-builtin.def (BU_FLOAT128_1_HW): New macros
      	to support float128 built-in functions that require the ISA 3.0
      	hardware.
      	(BU_FLOAT128_3_HW): Likewise.
      	(SQRTF128): Add support for the IEEE 128-bit square root and fma
      	built-in functions.
      	(FMAF128): Likewise.
      	(FMAQ): Likewise.
      	* config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Add
      	support for built-in functions that need the ISA 3.0 IEEE 128-bit
      	floating point instructions.
      	(rs6000_invalid_builtin): Likewise.
      	(rs6000_builtin_mask_names): Likewise.
      	* config/rs6000/rs6000.h (MASK_FLOAT128_HW): Likewise.
      	(RS6000_BTM_FLOAT128_HW): Likewise.
      	(RS6000_BTM_COMMON): Likewise.
      	* config/rs6000/rs6000.md (fma<mode>4_hw): Add a generator
      	function.
      	* doc/extend.texi (RS/6000 built-in functions): Document the
      	IEEE 128-bit floating point square root and fused multiply-add
      	built-in functions.
      
      [gcc/testsuite]
      2017-09-14  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* gcc.target/powerpc/abs128-1.c: Use __builtin_fabsf128 instead of
      	__builtin_fabsq.
      	* gcc.target/powerpc/float128-5.c: Use __builtin_fabsf128 instead
      	of __builtin_fabsq.  Prevent the test from running on 32-bit.
      	* gcc.target/powerpc/float128-fma1.c: New test.
      	* gcc.target/powerpc/float128-fma2.c: Likewise.
      	* gcc.target/powerpc/float128-sqrt1.c: Likewise.
      	* gcc.target/powerpc/float128-sqrt2.c: Likewise.
      
      From-SVN: r252771
      Michael Meissner committed
    • re PR c++/81314 (Undefined reference to a function with -fopenmp) · 8b586510
      	PR c++/81314
      	* cp-gimplify.c (omp_var_to_track): Look through references.
      	(omp_cxx_notice_variable): Likewise.
      
      	* testsuite/libgomp.c++/pr81314.C: New test.
      
      From-SVN: r252770
      Jakub Jelinek committed
    • Fix crash accessing builtins in sanitizer.def and after (PR jit/82174) · 595ced60
      Calls to gcc_jit_context_get_builtin_function that accessed builtins
      in sanitizer.def and after (or failed to match any builtin) led to
      a crash accessing a NULL builtin name.
      
      The entries with the NULL name came from these lines in sanitizer.def:
      
        /* This has to come before all the sanitizer builtins.  */
        DEF_BUILTIN_STUB(BEGIN_SANITIZER_BUILTINS, (const char *)0)
      
        [...snip...]
      
        /* This has to come after all the sanitizer builtins.  */
        DEF_BUILTIN_STUB(END_SANITIZER_BUILTINS, (const char *)0)
      
      This patch updates jit-builtins.c to cope with such entries, fixing the
      crash.
      
      gcc/jit/ChangeLog:
      	PR jit/82174
      	* jit-builtins.c (matches_builtin): Ignore entries with a NULL
      	name.
      
      gcc/testsuite/ChangeLog:
      	PR jit/82174
      	* jit.dg/test-error-gcc_jit_context_get_builtin_function-unknown-builtin.c:
      	New test case.
      
      From-SVN: r252769
      David Malcolm committed
    • rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC reg (r2) isn't in the… · 44e13e60
      rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC reg (r2) isn't in the set of registers defined in the prologue.
      
      	* config/rs6000/rs6000.c (rs6000_set_up_by_prologue): Make sure the TOC
      	reg (r2) isn't in the set of registers defined in the prologue.
      
      	* gcc.target/powerpc/r2_shrink-wrap.c: New.
      
      From-SVN: r252768
      Pat Haugen committed
    • libgo: update to go1.9 · bc998d03
          
          Reviewed-on: https://go-review.googlesource.com/63753
      
      From-SVN: r252767
      Ian Lance Taylor committed
    • Add LOOP_VINFO_MAX_VECT_FACTOR · a41a6142
      Epilogue vectorisation uses the vectorisation factor of the main loop
      as the maximum vectorisation factor allowed for correctness.  That makes
      sense as a conservatively correct value, since the chosen vectorisation
      factor will be strictly less than that anyway.  However, once the VF
      itself becomes variable, it's easier to carry across the original
      maximum VF instead.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vectorizer.h (_loop_vec_info): Add max_vectorization_factor.
      	(LOOP_VINFO_MAX_VECT_FACTOR): New macro.
      	(LOOP_VINFO_ORIG_VECT_FACTOR): Replace with...
      	(LOOP_VINFO_ORIG_MAX_VECT_FACTOR): ...this new macro.
      	* tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Update
      	accordingly.
      	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
      	max_vectorization_factor.
      	(vect_analyze_loop_2): Set LOOP_VINFO_MAX_VECT_FACTOR.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252766
      Richard Sandiford committed
    • Add a vect_worthwhile_without_simd_p helper routine · ca09abcb
      The vectoriser sometimes considers lowering "vector" operations into N
      scalar word operations.  This N needs to be fixed at compile time, so
      the condition guarding it needs to change when variable-lengh vectors
      are added.  This patch puts the condition into a helper routine so that
      there's only one place to update.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vect_min_worthwhile_factor): Delete.
      	(vect_worthwhile_without_simd_p): Declare.
      	* tree-vect-loop.c (vect_worthwhile_without_simd_p): New function.
      	(vectorizable_reduction): Use it.
      	* tree-vect-stmts.c (vectorizable_shift): Likewise.
      	(vectorizable_operation): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252765
      Richard Sandiford committed
    • Add a vect_get_num_copies helper routine · e8f142e2
      This patch adds a vectoriser helper routine to calculate how
      many copies of a vector statement we need.  At present this
      is always:
      
        LOOP_VINFO_VECT_FACTOR (loop_vinfo) / TYPE_VECTOR_SUBPARTS (vectype)
      
      but later patches add other cases.  Another benefit of using
      a helper routine is that it can assert that the division is
      exact (which it must be).
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vect_get_num_copies): New function.
      	* tree-vect-data-refs.c (vect_get_data_access_cost): Use it.
      	* tree-vect-loop.c (vectorizable_reduction): Likewise.
      	(vectorizable_induction): Likewise.
      	(vectorizable_live_operation): Likewise.
      	* tree-vect-stmts.c (vectorizable_mask_load_store): Likewise.
      	(vectorizable_bswap): Likewise.
      	(vectorizable_call): Likewise.
      	(vectorizable_conversion): Likewise.
      	(vectorizable_assignment): Likewise.
      	(vectorizable_shift): Likewise.
      	(vectorizable_operation): Likewise.
      	(vectorizable_store): Likewise.
      	(vectorizable_load): Likewise.
      	(vectorizable_condition): Likewise.
      	(vectorizable_comparison): Likewise.
      	(vect_analyze_stmt): Pass the slp node to vectorizable_live_operation.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252764
      Richard Sandiford committed
    • Make more use of gimple-fold.h in tree-vect-loop.c · dccf43ae
      This patch makes the vectoriser use the gimple-fold.h routines
      in more cases, instead of vect_init_vector.  Later patches want
      to use the same interface to handle variable-length vectors.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vect-loop.c (vectorizable_induction): Use gimple_build instead
      	of vect_init_vector.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252763
      Richard Sandiford committed
    • Add gimple_build_vector* helpers · e7c45b66
      This patch adds gimple-fold.h equivalents of build_vector and
      build_vector_from_val.  Like the other gimple-fold.h routines
      they always return a valid gimple value and add any new
      statements to a given gimple_seq.  In combination with later
      patches this reduces the number of force_gimple_operands.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* gimple-fold.h (gimple_build_vector_from_val): Declare, and provide
      	an inline wrapper that provides a location.
      	(gimple_build_vector): Likewise.
      	* gimple-fold.c (gimple_build_vector_from_val): New function.
      	(gimple_build_vector): Likewise.
      	* tree-vect-loop.c (get_initial_def_for_reduction): Use the new
      	functions to build the initial value.  Always return a gimple value.
      	(get_initial_defs_for_reduction): Likewise.  Only compute
      	neutral_vec once.
      	(vect_create_epilog_for_reduction): Don't call force_gimple_operand or
      	vect_init_vector on the results from get_initial_def(s)_for_reduction.
      	(vectorizable_induction): Use gimple_build_vector rather than
      	vect_init_vector.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252762
      Richard Sandiford committed
    • Use vec<> for constant permute masks · 908a1a16
      This patch makes can_vec_perm_p & co. take a vec<>, wrapped in new
      typedefs vec_perm_indices and auto_vec_perm_indices.  There are two
      reasons for doing this for SVE:
      
      (1) it means that the number of elements is bundled with the elements
          themselves, and is obviously constant.
      
      (2) it makes it easier to change the "unsigned char" element type to
          something wider.
      
      Changing the target hook is left as follow-on work.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.h (vec_perm_indices): New typedef.
      	(auto_vec_perm_indices): Likewise.
      	* optabs-query.h: Include target.h
      	(can_vec_perm_p): Take a vec_perm_indices *.
      	* optabs-query.c (can_vec_perm_p): Likewise.
      	(can_mult_highpart_p): Update accordingly.  Use auto_vec_perm_indices.
      	* tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
      	* tree-vect-generic.c (lower_vec_perm): Likewise.
      	* tree-vect-data-refs.c (vect_grouped_store_supported): Likewise.
      	(vect_grouped_load_supported): Likewise.
      	(vect_shift_permute_load_chain): Likewise.
      	(vect_permute_store_chain): Use auto_vec_perm_indices.
      	(vect_permute_load_chain): Likewise.
      	* fold-const.c (fold_vec_perm): Take vec_perm_indices.
      	(fold_ternary_loc): Update accordingly.  Use auto_vec_perm_indices.
      	Update uses of can_vec_perm_p.
      	* tree-vect-loop.c (calc_vec_perm_mask_for_shift): Replace the
      	mode with a number of elements.  Take a vec_perm_indices *.
      	(vect_create_epilog_for_reduction): Update accordingly.
      	Use auto_vec_perm_indices.
      	(have_whole_vector_shift): Likewise.  Update call to can_vec_perm_p.
      	* tree-vect-slp.c (vect_build_slp_tree_1): Likewise.
      	(vect_transform_slp_perm_load): Likewise.
      	(vect_schedule_slp_instance): Use auto_vec_perm_indices.
      	* tree-vectorizer.h (vect_gen_perm_mask_any): Take a vec_perm_indices.
      	(vect_gen_perm_mask_checked): Likewise.
      	* tree-vect-stmts.c (vect_gen_perm_mask_any): Take a vec_perm_indices.
      	(vect_gen_perm_mask_checked): Likewise.
      	(vectorizable_mask_load_store): Use auto_vec_perm_indices.
      	(vectorizable_store): Likewise.
      	(vectorizable_load): Likewise.
      	(perm_mask_for_reverse): Likewise.  Update call to can_vec_perm_p.
      	(vectorizable_bswap): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252761
      Richard Sandiford committed
    • Use vec<> in build_vector · 794e3180
      This patch makes build_vector take the elements as a vec<> rather
      than a tree *.  This is useful for SVE because it bundles the number
      of elements with the elements themselves, and enforces the fact that
      the number is constant.  Also, I think things like the folds can be used
      with any generic GNU vector, not just those that match machine vectors,
      so the arguments to XALLOCAVEC had no clear limit.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (build_vector): Take a vec<tree> instead of a tree *.
      	* tree.c (build_vector): Likewise.
      	(build_vector_from_ctor): Update accordingly.
      	(build_vector_from_val): Likewise.
      	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Likewise.
      	* tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
      	* tree-vect-generic.c (add_rshift): Likewise.
      	(expand_vector_divmod): Likewise.
      	(optimize_vector_constructor): Likewise.
      	* tree-vect-slp.c (vect_get_constant_vectors): Likewise.
      	(vect_transform_slp_perm_load): Likewise.
      	(vect_schedule_slp_instance): Likewise.
      	* tree-vect-stmts.c (vectorizable_bswap): Likewise.
      	(vectorizable_call): Likewise.
      	(vect_gen_perm_mask_any): Likewise.  Add elements in order.
      	* expmed.c (make_tree): Likewise.
      	* fold-const.c (fold_negate_expr_1): Use auto_vec<tree> when building
      	a vector passed to build_vector.
      	(fold_convert_const): Likewise.
      	(exact_inverse): Likewise.
      	(fold_ternary_loc): Likewise.
      	(fold_relational_const): Likewise.
      	(const_binop): Likewise.  Use VECTOR_CST_ELT directly when operating
      	on VECTOR_CSTs, rather than going through vec_cst_ctor_to_array.
      	(const_unop): Likewise.  Store the reduction accumulator in a
      	variable rather than an array.
      	(vec_cst_ctor_to_array): Take the number of elements as a parameter.
      	(fold_vec_perm): Update calls accordingly.  Use auto_vec<tree> for
      	the new vector, rather than constructing it after the input arrays.
      	(native_interpret_vector): Use auto_vec<tree> when building
      	a vector passed to build_vector.  Add elements in order.
      	* tree-vect-loop.c (get_initial_defs_for_reduction): Use
      	auto_vec<tree> when building a vector passed to build_vector.
      	(vect_create_epilog_for_reduction): Likewise.
      	(vectorizable_induction): Likewise.
      	(get_initial_def_for_reduction): Likewise.  Fix indentation of
      	case statements.
      	* config/sparc/sparc.c (sparc_handle_vis_mul8x16): Change n_elts
      	to a vec<tree> *.
      	(sparc_fold_builtin): Use auto_vec<tree> when building a vector
      	passed to build_vector.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252760
      Richard Sandiford committed
    • Store VECTOR_CST_NELTS directly in tree_node · 9e822269
      Previously VECTOR_CST_NELTS (t) read the number of elements from
      TYPE_VECTOR_SUBPARTS (TREE_TYPE (t)).  There were two ways of handling
      this with variable TYPE_VECTOR_SUBPARTS: either forcibly convert the
      number to a constant (which is doable) or store the number directly
      in the VECTOR_CST.  The latter seemed better, since it involves less
      pointer chasing and since the tree_node u field is otherwise unused
      for VECTOR_CST.  It would still be easy to switch to the former in
      future if we need to free up the field for someting else.
      
      The patch also changes various bits of VECTOR_CST code to use
      VECTOR_CST_NELTS instead of TYPE_VECTOR_SUBPARTS when iterating
      over VECTOR_CST_ELTs.  Also, when the two are checked for equality,
      the patch prefers to read VECTOR_CST_NELTS (which must be constant)
      and check against TYPE_VECTOR_SUBPARTS, instead of the other way
      around.
      
      2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-core.h (tree_base::u): Add an "nelts" field.
      	(tree_vector): Use VECTOR_CST_NELTS as the length.
      	* tree.c (tree_size): Likewise.
      	(make_vector): Initialize VECTOR_CST_NELTS.
      	* tree.h (VECTOR_CST_NELTS): Use the u.nelts field.
      	* cfgexpand.c (expand_debug_expr): Use VECTOR_CST_NELTS instead of
      	TYPE_VECTOR_SUBPARTS.
      	* expr.c (const_vector_mask_from_tree): Consistently use "units"
      	as the number of units, setting it from VECTOR_CST_NELTS.
      	(const_vector_from_tree): Likewise.
      	* fold-const.c (negate_expr_p): Use VECTOR_CST_NELTS instead of
      	TYPE_VECTOR_SUBPARTS for the number of elements in a VECTOR_CST.
      	(fold_negate_expr_1): Likewise.
      	(fold_convert_const): Likewise.
      	(const_binop): Likewise.  Differentiate the number of output and
      	input elements.
      	(const_unop): Likewise.
      	(fold_ternary_loc): Use VECTOR_CST_NELTS for the number of elements
      	in a VECTOR_CST, asserting that it is the same as TYPE_VECTOR_SUBPARTS
      	in cases that did the opposite.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r252758
      Richard Sandiford committed
    • fold-vec-ld-longlong.c: Add lp64 requirement. · 2a94be35
      [gcc/testsuite]
      
      2017-09-14  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      	* gcc.target/powerpc/fold-vec-ld-longlong.c: Add lp64 requirement.
      
      From-SVN: r252757
      Will Schmidt committed
    • tree-ssa-sccvn.c (visit_phi): Merge undefined values similar to VN_TOP. · 0fa0fdb7
      2017-09-14  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-sccvn.c (visit_phi): Merge undefined values similar
      	to VN_TOP.
      
      	* gcc.dg/tree-ssa/ssa-fre-59.c: New testcase.
      	* gcc.dg/uninit-suppress_2.c: Adjust.
      	* gcc.dg/tree-ssa/ssa-sccvn-2.c: Likewise.
      
      From-SVN: r252756
      Richard Biener committed
    • Don't xfail gcc.dg/vect/vect-multitypes-12.c on 32-bit SPARC (PR tree-optimization/80996) · 83ada6e8
      	PR tree-optimization/80996
      	* gcc.dg/vect/vect-multitypes-12.c: Remove sparc*-*-* handling.
      
      From-SVN: r252754
      Rainer Orth committed
    • re PR target/81325 (-fcompare-debug failure on ppc64le) · c5f59763
      	PR target/81325
      	* cfgbuild.c (find_bb_boundaries): Ignore debug insns in decisions
      	if and where to split a bb, except for splitting before debug insn
      	sequences followed by non-label real insn.  Delete debug insns
      	in between basic blocks.
      
      	* g++.dg/cpp0x/pr81325.C: New test.
      
      From-SVN: r252752
      Jakub Jelinek committed
    • * combine.c (make_compound_operation_int): Formatting fixes. · 95a866ba
      From-SVN: r252751
      Jakub Jelinek committed
    • elf.h (LINK_EH_SPEC): Add -static-pie support. · 8c6562e1
      	* config/alpha/elf.h (LINK_EH_SPEC): Add -static-pie support.
      	* config/alpha/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
      	* config/netbsd.h (LINK_EH_SPEC): Likewise.
      	* config/sol2.h (LINK_EH_SPEC): Likewise.
      	* config/arm/uclinux-elf.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
      	* config/s390/linux.h (LINK_SPEC): Likewise.
      	* config/freebsd.h (LINK_EH_SPEC): Likewise.
      	* config/openbsd.h (LINK_EH_SPEC): Likewise.
      	* config/lm32/uclinux-elf.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
      	* config/aarch64/aarch64-linux.h (LINUX_TARGET_LINK_SPEC): Likewise.
      	* config/powerpcspe/sysv4.h (LINK_EH_SPEC): Likewise.
      	* config/bfin/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
      	* config/i386/gnu-user64.h (GNU_USER_TARGET_LINK_SPEC): Fix a typo.
      	* config/i386/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): Formatting fix.
      
      From-SVN: r252750
      Jakub Jelinek committed
    • compiler, runtime: simplify select and channel operations · 022aa0ce
          
          In preparation for upgrading libgo to the 1.9 release, this
          approximately incorporates https://golang.org/cl/37661 and
          https://golang.org/cl/38351.
          
          CL 37661 changed the gc compiler such that the select statement simply
          returns an integer which is then used as the argument for a switch.
          Since gccgo already worked that way, this just adjusts the switch code
          to look like the gc switch code by removing the explicit case index
          expression and calculating it from the order of calls to selectsend,
          selectrecv, and selectdefault.
          
          CL 38351 simplifies the channel code by not passing the unused channel
          type descriptor pointer.
          
          Reviewed-on: https://go-review.googlesource.com/62730
      
      From-SVN: r252749
      Ian Lance Taylor committed
    • compiler: avoid compiler crash on invalid program · 0468f67f
          
          I encountered this crash while working on upgrading libgo to the 1.9
          release.  I no longer have the cause of the crash, but it doesn't much
          matter, as the policy for crash-on-invalid errors is to fix the crash
          but not bother to commit the invalid test case.
          
          Reviewed-on: https://go-review.googlesource.com/62750
      
      From-SVN: r252748
      Ian Lance Taylor committed
    • compiler: emit type specific functions for aliases · 03ff36aa
          
          If we have an alias for a struct or array that requires a
          type-specific function, don't emit the function with the alias name.
          Emit it with the struct/array as usual.
          
          Test case is https://golang.org/cl/62531.
          
          Reviewed-on: https://go-review.googlesource.com/62412
      
      From-SVN: r252747
      Ian Lance Taylor committed
    • compiler, reflect: fix struct field names for embedded aliases · ce64a8b4
          
          This adds much of https://golang.org/cl/35731 and
          https://golang.org/cl/35732 to the gofrontend code.
          
          This is a step toward updating libgo to the 1.9 release.  The
          gofrontend already supports type aliases, and this is required for
          correct support of type aliases when used as embedded fields.
          
          The change to expressions.cc is to handle the << 1, used for the
          newly renamed offsetAnon field, in the constant context used for type
          descriptor initialization.
          
          Reviewed-on: https://go-review.googlesource.com/62710
      
      From-SVN: r252746
      Ian Lance Taylor committed
    • compiler: fix check for notinheap conversion · ed52163b
          
          A normal pointer may not be converted to a notinheap pointer.  We were
          erroneously permitting a conversion from a normal pointer to a
          notinheap unsafe.Pointer, which is useless since unsafe.Pointer is not
          marked notinheap.  Correct the test to permit a conversion from
          unsafe.Pointer to a notinheap pointer, which is the same test that the
          gc compiler uses.
          
          The test case for this is in the 1.9 runtime package.
          
          Reviewed-on: https://go-review.googlesource.com/62731
      
      From-SVN: r252745
      Ian Lance Taylor committed
    • Daily bump. · 09abdb23
      From-SVN: r252744
      GCC Administrator committed
  3. 13 Sep, 2017 3 commits