1. 22 Dec, 2017 5 commits
    • extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll. · 170a8bd6
      	* doc/extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll.
      c-family/
      	* c-pragma.c (init_pragma): Register pragma GCC unroll.
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_UNROLL.
      c/
      	* c-parser.c (c_parser_while_statement): Add unroll parameter and
      	build ANNOTATE_EXPR if present.  Add 3rd operand to ANNOTATE_EXPR.
      	(c_parser_do_statement): Likewise.
      	(c_parser_for_statement): Likewise.
      	(c_parser_statement_after_labels): Adjust calls to above.
      	(c_parse_pragma_ivdep): New static function.
      	(c_parser_pragma_unroll): Likewise.
      	(c_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      cp/
      	* constexpr.c (cxx_eval_constant_expression) <ANNOTATE_EXPR>: Remove
      	assertion on 2nd operand.
      	(potential_constant_expression_1): Likewise.
      	* cp-tree.def (RANGE_FOR_STMT): Take a 5th operand.
      	* cp-tree.h (RANGE_FOR_UNROLL): New macro.
      	(cp_convert_range_for): Adjust prototype.
      	(finish_while_stmt_cond): Likewise.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	* init.c (build_vec_init): Adjut call to finish_for_cond.
      	* parser.c (cp_parser_statement): Adjust call to
      	cp_parser_iteration_statement.
      	(cp_parser_for): Add unroll parameter and pass it in calls to
      	cp_parser_range_for and cp_parser_c_for.
      	(cp_parser_c_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_range_for): Add unroll parameter, set in on RANGE_FOR_STMT
      	and pass it in call to cp_convert_range_for.
      	(cp_convert_range_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_iteration_statement): Add unroll parameter and pass it in
      	calls to finish_while_stmt_cond, finish_do_stmt and cp_parser_for.
      	(cp_parser_pragma_ivdep): New static function.
      	(cp_parser_pragma_unroll): Likewise.
      	(cp_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      	* pt.c (tsubst_expr) <FOR_STMT>: Adjust call to finish_for_cond.
      	<RANGE_FOR_STMT>: Pass unrolling factor to cp_convert_range_for.
      	<WHILE_STMT>: Adjust call to finish_while_stmt_cond.
      	<DO_STMT>: Adjust call to finish_do_stmt.
      	* semantics.c (finish_while_stmt_cond): Add unroll parameter and
      	build ANNOTATE_EXPR if present.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	(begin_range_for_stmt): Build RANGE_FOR_STMT with 5th operand.
      fortran/
      	* array.c (gfc_copy_iterator): Copy unroll field.
      	* decl.c (directive_unroll): New global variable.
      	(gfc_match_gcc_unroll): New function.
      	* gfortran.h (gfc_iterator]): Add unroll field.
      	(directive_unroll): Declare:
      	* match.c (gfc_match_do): Use memset to initialize the iterator.
      	* match.h (gfc_match_gcc_unroll): New prototype.
      	* parse.c (decode_gcc_attribute): Match "unroll".
      	(parse_do_block): Set iterator's unroll.
      	(parse_executable): Diagnose misplaced unroll directive.
      	* trans-stmt.c (gfc_trans_simple_do) Annotate loop condition with
      	annot_expr_unroll_kind.
      	(gfc_trans_do): Likewise.
      	* gfortran.texi (GNU Fortran Compiler Directives): Split section into
      	subections 'ATTRIBUTES directive' and 'UNROLL directive'.
      
      From-SVN: r255973
      Eric Botcazou committed
    • compiler: improve escape analysis diagnostics · fa546f0f
          
          This CL brings escape analysis diagnostics closer to the gc
          compiler's. This makes porting and debugging escape analysis
          code easier. A few changes:
          
          - In the gc compiler, the variable expression is represented
            with the variable node itself (ONAME), the location of which
            is the location of definition. We add a definition_location
            method to Node, and make use of it when the gc compiler emits
            diagnostics at the definition locations.
          
          - In the gc compiler, methods are named T.M or (*T).M. Add the
            type to the method name when possible.
          
          - Print "moved to heap" messages only for variables.
          
          - Reduce some duplicated diagnostics.
          
          - Print "does not escape" messages in more situations which the
            gc compiler does.
          
          - Remove the special handling for closure numbers. In gofrontend,
            closures are named "$nested#" where # is a global counter
            starting from 0, whereas in the gc compiler they are named
            "outer.func#" where # is a per-function counter starting from
            1. We tried to adjust the closure name to better matching the
            ones in the gc compiler, however, it cannot match exactly
            because of the difference of the counter. Instead, just print
            "outer.$nested#".
          
          Reviewed-on: https://go-review.googlesource.com/83875
      
      From-SVN: r255967
      Ian Lance Taylor committed
    • [SFN] sync up debug-only stmt list's side effects with empty stmts too · 18408e96
      for  gcc/c-family/ChangeLog
      
      	PR debug/83527
      	PR debug/83419
      	* c-semantics.c (only_debug_stmts_after_p): New.
      	(pop_stmt_list): Clear side effects in debug-only stmt list.
      	Check for single nondebug stmt followed by debug stmts only.
      
      for  gcc/testsuite/ChangeLog
      
      	PR debug/83527
      	PR debug/83419
      	* gcc.dg/pr83527.c: New.
      
      From-SVN: r255966
      Alexandre Oliva committed
    • Daily bump. · cacb2cce
      From-SVN: r255965
      GCC Administrator committed
    • PR testsuite/83462 - c-c++-common/Warray-bounds-3.c fails · b635aba5
      gcc/testsuite/ChangeLog
      
      	* c-c++-common/Warray-bounds-3.c: Adjust dg-warning grep pattern.
      
      From-SVN: r255962
      Martin Sebor committed
  2. 21 Dec, 2017 35 commits
    • re PR middle-end/83487 (ICE in expand_call, at calls.c:4098) · 604aac48
      	PR middle-end/83487
      	* config/i386/i386.c (ix86_function_arg_boundary): Return
      	PARM_BOUNDARY for TYPE_EMPTY_P types.
      
      	* gcc.c-torture/compile/pr83487.c: New test.
      	* gcc.dg/compat/pr83487-1.h: New file.
      	* gcc.dg/compat/pr83487-1_main.c: New test.
      	* gcc.dg/compat/pr83487-1_x.c: New file.
      	* gcc.dg/compat/pr83487-1_y.c: New file.
      	* gcc.dg/compat/pr83487-2_main.c: New test.
      	* gcc.dg/compat/pr83487-2_x.c: New file.
      	* gcc.dg/compat/pr83487-2_y.c: New file.
      	* g++.dg/abi/pr83487.C: New test.
      	* g++.dg/compat/abi/pr83487-1_main.C: New test.
      	* g++.dg/compat/abi/pr83487-1_x.C: New file.
      	* g++.dg/compat/abi/pr83487-1_y.C: New file.
      	* g++.dg/compat/abi/pr83487-2_main.C: New test.
      	* g++.dg/compat/abi/pr83487-2_x.C: New file.
      	* g++.dg/compat/abi/pr83487-2_y.C: New file.
      
      From-SVN: r255961
      Jakub Jelinek committed
    • re PR c/83448 (ice in get_source_location_for_substring, at input.c:1507) · 36367d1f
      	PR c/83448
      	* gimple-ssa-sprintf.c (maybe_warn): Don't call set_caret_index
      	if navail is >= dir.len.
      
      	* gcc.c-torture/compile/pr83448.c: New test.
      	* gcc.dg/tree-ssa/builtin-snprintf-warn-4.c: New test.
      
      From-SVN: r255960
      Jakub Jelinek committed
    • Add missing PR number · 2428b035
      From-SVN: r255959
      Eric Botcazou committed
    • decl.c (gnat_to_gnu_entity): Always take into account the Esize if it is known. · 0e5b9de3
      	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always take
      	into account the Esize if it is known.
      
      From-SVN: r255958
      Eric Botcazou committed
    • t-aarch64-linux (MULTILIB_OSDIRNAMES): Fix triplet for ilp32. · 92cd3a86
      2017-12-21  Steve Ellcey  <sellcey@cavium.com>
      
      	* config/aarch64/t-aarch64-linux (MULTILIB_OSDIRNAMES): Fix
      	triplet for ilp32.
      
      From-SVN: r255957
      Steve Ellcey committed
    • move ChangeLog entry to the right file · c12d20d4
      From-SVN: r255955
      Alexandre Oliva committed
    • re PR rtl-optimization/80747 (gcc.dg/tree-ssa/tailrecursion-4.c fails with ICE… · 63e1159c
      re PR rtl-optimization/80747 (gcc.dg/tree-ssa/tailrecursion-4.c fails with ICE when compiled with options "-fprofile-use -freorder-blocks-and-partition")
      
      	PR rtl-optimization/80747
      	PR rtl-optimization/83512
      	* cfgrtl.c (force_nonfallthru_and_redirect): When splitting
      	succ edge from ENTRY, copy partition from e->dest to the newly
      	created bb.
      	* bb-reorder.c (reorder_basic_blocks_simple): If last_tail is
      	ENTRY, use BB_PARTITION of its successor block as current_partition.
      	Don't copy partition when splitting succ edge from ENTRY.
      
      	* gcc.dg/pr80747.c: New test.
      	* gcc.dg/pr83512.c: New test.
      
      From-SVN: r255954
      Jakub Jelinek committed
    • re PR tree-optimization/83523 (ICE: verify_gimple failed (error: statement… · 9b8e85a5
      re PR tree-optimization/83523 (ICE: verify_gimple failed (error: statement marked for throw, but doesn't))
      
      	PR tree-optimization/83523
      	* tree-ssa-math-opts.c (is_widening_mult_p): Return false if
      	for INTEGER_TYPE TYPE_OVERFLOW_TRAPS.
      	(convert_mult_to_fma): Likewise.
      
      	* g++.dg/tree-ssa/pr83523.C: New test.
      
      From-SVN: r255953
      Jakub Jelinek committed
    • re PR tree-optimization/83521 (ICE: verify_gimple failed (error: invalid operand… · a4710e09
      re PR tree-optimization/83521 (ICE: verify_gimple failed (error: invalid operand in unary operation))
      
      	PR tree-optimization/83521
      	* tree-ssa-phiopt.c (factor_out_conditional_conversion): Use
      	gimple_build_assign without code on result of
      	fold_build1 (VIEW_CONVERT_EXPR, ...), as it might not create
      	a VIEW_CONVERT_EXPR.
      
      	* gcc.dg/pr83521.c: New test.
      
      From-SVN: r255952
      Jakub Jelinek committed
    • t-aarch64-linux (MULTILIB_OSDIRNAMES): Handle multi-arch for ilp32. · da98f742
      2017-12-21  Andrew Pinski  <apinski@cavium.com>
      	    Steve Ellcey  <sellcey@cavium.com>
      
      	* config/aarch64/t-aarch64-linux (MULTILIB_OSDIRNAMES): Handle
      	multi-arch for ilp32.
      
      Co-Authored-By: Steve Ellcey <sellcey@cavium.com>
      
      From-SVN: r255951
      Andrew Pinski committed
    • [PR c++/83406] deducing lambda type · c0a499af
      https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01432.html
      	PR c++/83406
      	* parser.c (cp_parser_lambda_body): Remove obsolete
      	single-return-statement handling.
      
      	PR c++/83406
      	* g++.dg/cpp0x/lambda/lambda-ice15.C: Adjust error.
      	* g++.dg/cpp1y/pr83406.C: New.
      
      From-SVN: r255950
      Nathan Sidwell committed
    • re PR target/83467 (ICE: in assign_by_spills, at lra-assigns.c:1476: unable to… · cb4b152d
      re PR target/83467 (ICE: in assign_by_spills, at lra-assigns.c:1476: unable to find a register to spill with -flive-range-shrinkage -m8bit-idiv)
      
      	PR target/83467
      	* config/i386/i386.md (*ashl<mode>3_mask): Add operand
      	constraints to operand 2.
      	(*ashl<mode>3_mask_1): Ditto.
      	(*<shift_insn><mode>3_mask): Ditto.
      	(*<shift_insn><mode>3_mask_1): Ditto.
      	(*<rotate_insn><mode>3_mask): Ditto.
      	(*<rotate_insn><mode>3_mask_1): Ditto.
      
      testsuite/ChangeLog:
      
      	PR target/83467
      	* gcc.target/i386/pr83467-1.c: New test.
      	* gcc.target/i386/pr83467-2.c: Ditto.
      
      From-SVN: r255949
      Uros Bizjak committed
    • [-fcompare-debug] retain insn locations when turning dbr seq into return · 056cf434
      A number of -fcompare-debug errors on sparc arise as we split a dbr
      SEQUENCE back into separate insns to turn the branch into a return.
      If we just take the location from the PREV_INSN, it might be a debug
      insn without INSN_LOCATION, or an insn with an unrelated location.
      But that's silly: each of the SEQUENCEd insns is still an insn with
      its own INSN_LOCATION, so use that instead, even though some may have
      been adjusted while constructing the SEQUENCE.
      
      for  gcc/ChangeLog
      
      	* reorg.c (make_return_insns): Reemit each insn with its own
      	location.
      
      From-SVN: r255948
      Alexandre Oliva committed
    • [SFN] propagate single-nondebug-stmt's side effects to enclosing list · cb633233
      Statements without side effects, preceded by debug begin stmt markers,
      would become a statement list with side effects, although the stmt on
      its own would be extracted from the list and remain not having side
      effects.  This causes debug info and possibly codegen differences.
      This patch fixes it, identifying the situation in which the stmt would
      have been extracted from the stmt list, and propagating the side
      effects flag from the stmt to the list.
      
      for  gcc/ChangeLog
      
      	PR debug/83419
      	* c-family/c-semantics.c (pop_stmt_list): Propagate side
      	effects from single nondebug stmt to container list.
      
      for  gcc/testsuite/ChangeLog
      
      	PR debug/83419
      	* gcc.dg/pr83419.c: New.
      
      From-SVN: r255947
      Alexandre Oliva committed
    • [patch AArch64] Do not perform a vector splat for vector initialisation if it is not useful · 6b6d8f38
      Our current vector initialisation code will first duplicate
      the first element to both lanes, then overwrite the top lane with a new
      value.
      
      This duplication can be clunky and wasteful.
      
      Better would be to simply use the fact that we will always be overwriting
      the remaining bits, and simply move the first element to the corrcet place
      (implicitly zeroing all other bits).
      
      We also need a new pattern in simplify-rtx.c:simplify_ternary_operation ,
      to ensure we can still simplify:
      
        (vec_merge:OUTER
           (vec_duplicate:OUTER x:INNER)
           (subreg:OUTER y:INNER 0)
           (const_int N))
      
      To:
      
        (vec_concat:OUTER x:INNER y:INNER) or (vec_concat y x)
      
      
      ---
      gcc/
      
      	* config/aarch64/aarch64.c (aarch64_expand_vector_init): Modify code
      	generation for cases where splatting a value is not useful.
      	* simplify-rtx.c (simplify_ternary_operation): Simplify vec_merge
      	across a vec_duplicate and a paradoxical subreg forming a vector
      	mode to a vec_concat.
      
      gcc/testsuite/
      
      	* gcc.target/aarch64/vect-slp-dup.c: New.
      
      From-SVN: r255946
      James Greenhalgh committed
    • [Patch combine] Don't create ZERO_EXTEND from subregs unless we have a scalar int mode · c587c0a9
      gcc/
      
      	* combine.c (simplify_set): Do not transform subregs to zero_extends
      	if the destination is not a scalar int mode.
      
      From-SVN: r255945
      James Greenhalgh committed
    • re PR c++/82872 (ICE in ignore_overflows on __PTRDIFF_MAX__ index) · 6ffc0c0c
      	PR c++/82872
      	* convert.c (convert_to_integer_1) <POINTER_TYPE>: Do not return the
      	shared zero if the input has overflowed.
      
      From-SVN: r255944
      Eric Botcazou committed
    • [arm] Specify +dotprod support for Cortex-A55 and Cortex-A75 in native system detection · b3eec1d6
      Since support for -mcpu=cortex-a55 and -mcpu=cortex-a75
      was added we added support for the +dotprod extension
      which these CPUs support.
      
      We already specify as such in the arm-cpus.in entries for
      these processors. However the table in driver-arm.c was
      not adding +dotproct to the -march string that it generates.
      
      This patch fixes that oversight.
      In the future I'd like to get the arm_cpu_table in driver-arm.c
      be auto-generated somehow from the arm-cpus.in data so
      that we don't have to keep track of discrepancies explicitly...
      
      Bootstrapped and tested on arm-none-linux-gnueabihf.
      
      	* config/arm/driver-arm.c (arm_cpu_table): Specify dotprod
      	support for Cortex-A55 and Cortex-A75.
      
      From-SVN: r255943
      Kyrylo Tkachov committed
    • [arm] Fix assembler option rewrite alphabetical comparison · e3d444a7
      	* common/config/arm/arm-common.c (compare_opt_names): Add function
      	comment.  Use strcmp instead of manual loop.
      
      From-SVN: r255942
      Kyrylo Tkachov committed
    • Fix gcov-dump tool for GCDA files (PR gcov-profile/83509). · bb5307a6
      2017-12-21  Martin Liska  <mliska@suse.cz>
      
      	PR gcov-profile/83509
      	* gcov-dump.c (dump_gcov_file): Do not read info about
      	support_unexecuted_blocks for gcda files.
      
      From-SVN: r255941
      Martin Liska committed
    • re PR rtl-optimization/82973 (ICE in output_constant_pool_2, at varasm.c:3896 on aarch64) · 63987ca4
      	PR rtl-optimization/82973
      	* emit-rtl.h (valid_for_const_vec_duplicate_p): Rename to ...
      	(valid_for_const_vector_p): ... this.
      	* emit-rtl.c (valid_for_const_vec_duplicate_p): Rename to ...
      	(valid_for_const_vector_p): ... this.  Adjust function comment.
      	(gen_vec_duplicate): Adjust caller.
      	* optabs.c (expand_vector_broadcast): Likewise.
      	* simplify-rtx.c (simplify_const_unary_operation): Don't optimize into
      	CONST_VECTOR if some element isn't simplified valid_for_const_vector_p
      	constant.
      	(simplify_const_binary_operation): Likewise.  Use CONST_FIXED_P macro
      	instead of GET_CODE == CONST_FIXED.
      	(simplify_subreg): Use CONST_FIXED_P macro instead of
      	GET_CODE == CONST_FIXED.
      
      	* gfortran.dg/pr82973.f90: New test.
      
      From-SVN: r255939
      Jakub Jelinek committed
    • re PR rtl-optimization/82973 (ICE in output_constant_pool_2, at varasm.c:3896 on aarch64) · c0cc00c4
      	PR rtl-optimization/82973
      	* emit-rtl.h (valid_for_const_vec_duplicate_p): Rename to ...
      	(valid_for_const_vector_p): ... this.
      	* emit-rtl.c (valid_for_const_vec_duplicate_p): Rename to ...
      	(valid_for_const_vector_p): ... this.  Adjust function comment.
      	(gen_vec_duplicate): Adjust caller.
      	* optabs.c (expand_vector_broadcast): Likewise.
      	* simplify-rtx.c (simplify_const_unary_operation): Don't optimize into
      	CONST_VECTOR if some element isn't simplified valid_for_const_vector_p
      	constant.
      	(simplify_const_binary_operation): Likewise.  Use CONST_FIXED_P macro
      	instead of GET_CODE == CONST_FIXED.
      	(simplify_subreg): Use CONST_FIXED_P macro instead of
      	GET_CODE == CONST_FIXED.
      
      	* gfortran.dg/pr82973.f90: New test.
      
      From-SVN: r255938
      Jakub Jelinek committed
    • re PR target/83488 (ICE on a CET test-case) · b1ccd09a
      	PR target/83488
      	* config/i386/i386.c (ix86_target_string): Move -mavx512vbmi2 and
      	-mshstk entries from isa_opts2 to isa_opts and -mhle, -mmovbe,
      	-mclzero and -mmwaitx entries from isa_opts to isa_opts2.
      	(ix86_option_override_internal): Adjust for
      	OPTION_MASK_ISA_{HLE,MOVBE,CLZERO,MWAITX} moving to ix86_isa_flags2
      	and OPTION_MASK_ISA_SHSTK moving to ix86_isa_flags.
      	(BDESC_VERIFYS): Remove SPECIAL_ARGS2 related checks.
      	(ix86_init_mmx_sse_builtins): Remove bdesc_special_args2 handling.
      	Use def_builtin2 instead of def_builtin for OPTION_MASK_ISA_MWAITX
      	and OPTION_MASK_ISA_CLZERO builtins.  Use def_builtin instead of
      	def_builtin2 for CET builtins.
      	(ix86_expand_builtin): Remove bdesc_special_args2 handling.  Fix
      	up formatting in IX86_BUILTIN_RDPID code.
      	* config/i386/i386-builtin.def: Move VBMI2 builtins from SPECIAL_ARGS2
      	section to SPECIAL_ARGS and from ARGS2 section to ARGS.
      	* config/i386/i386.opt (mavx512vbmi2, mshstk): Move from
      	ix86_isa_flags2 to ix86_isa_flags.
      	(mhle, mmovbe, mclzero, mmwaitx): Move from ix86_isa_flags to
      	ix86_isa_flags2.
      	* config/i386/i386-c.c (ix86_target_macros_internal): Check for
      	OPTION_MASK_ISA_{CLZERO,MWAITX} in isa_flag2 instead of isa_flag.
      	Check for OPTION_MASK_ISA_{SHSTK,AVX512VBMI2} in isa_flag instead
      	of isa_flag2.
      	* common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VBMI2_SET):
      	Or in OPTION_MASK_ISA_AVX512F_SET.
      	(OPTION_MASK_ISA_AVX512F_UNSET): Or in
      	OPTION_MASK_ISA_AVX512VBMI2_UNSET.
      	(ix86_handle_option): Adjust for
      	OPTION_MASK_ISA_{SHSTK,AVX512VBMI2}_*SET being in ix86_isa_flags
      	and OPTION_MASK_ISA_{MOVBE,MWAITX,CLZERO}_*SET in ix86_isa_flags2.
      
      	* gcc.target/i386/pr83488.c: New test.
      
      From-SVN: r255937
      Jakub Jelinek committed
    • poly_int: prune_runtime_alias_test_list · 079b4a9c
      This patch makes prune_runtime_alias_test_list take the iteration
      factor as a poly_int and tracks polynomial offsets internally
      as well.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-data-ref.h (prune_runtime_alias_test_list): Take the
      	factor as a poly_uint64 rather than an unsigned HOST_WIDE_INT.
      	* tree-data-ref.c (prune_runtime_alias_test_list): Likewise.
      	Track polynomial offsets.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255936
      Richard Sandiford committed
    • poly_int: compute_data_ref_alignment · 8944b5b3
      This patch makes vect_compute_data_ref_alignment treat DR_INIT as a
      poly_int and handles cases in which the calculated misalignment might
      not be constant.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vect-data-refs.c (vect_compute_data_ref_alignment):
      	Treat drb->init as a poly_int.  Fail if its misalignment wrt
      	vector_alignment isn't known.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255935
      Richard Sandiford committed
    • poly_int: loop versioning threshold · a696bc4f
      This patch splits the loop versioning threshold out from the
      cost model threshold so that the former can become a poly_uint64.
      We still use a single test to enforce both limits where possible.
      
      2017-12-21  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 a versioning_threshold
      	field.
      	(LOOP_VINFO_VERSIONING_THRESHOLD): New macro
      	(vect_loop_versioning): Take the loop versioning threshold as a
      	separate parameter.
      	* tree-vect-loop-manip.c (vect_loop_versioning): Likewise.
      	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
      	versioning_threshold.
      	(vect_analyze_loop_2): Compute the loop versioning threshold
      	whenever loop versioning is needed, and store it in the new
      	field rather than combining it with the cost model threshold.
      	(vect_transform_loop): Update call to vect_loop_versioning.
      	Try to combine the loop versioning and cost thresholds here.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255934
      Richard Sandiford committed
    • poly_int: tree-ssa-loop-ivopts.c:iv_use · d2fd6a04
      This patch makes ivopts handle polynomial address offsets
      when recording potential IV uses.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-ssa-loop-ivopts.h (strip_offset): Return the offset as
      	poly_uint64_pod rather than an unsigned HOST_WIDE_INT.
      	* tree-loop-distribution.c (classify_builtin_st): Update accordingly.
      	* tree-ssa-loop-ivopts.c (iv_use::addr_offset): Change from
      	an unsigned HOST_WIDE_INT to a poly_uint64_pod.
      	(group_compare_offset): Update accordingly.
      	(split_small_address_groups_p): Likewise.
      	(record_use): Take addr_offset as a poly_uint64 rather than
      	an unsigned HOST_WIDE_INT.
      	(strip_offset): Return the offset as a poly_uint64 rather than
      	an unsigned HOST_WIDE_INT.
      	(record_group_use, split_address_groups): Track polynomial offsets.
      	(add_iv_candidate_for_use): Likewise.
      	(addr_offset_valid_p): Take the offset as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(strip_offset_1): Return the offset as a poly_int64 rather than
      	a HOST_WIDE_INT.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255933
      Richard Sandiford committed
    • poly_int: get_binfo_at_offset · 0ddcd294
      This patch changes the offset parameter to get_binfo_at_offset
      from HOST_WIDE_INT to poly_int64.  This function probably doesn't
      need to handle polynomial offsets in practice, but it's easy
      to do and avoids forcing the caller to check first.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (get_binfo_at_offset): Take the offset as a poly_int64
      	rather than a HOST_WIDE_INT.
      	* tree.c (get_binfo_at_offset): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255932
      Richard Sandiford committed
    • poly_int: build_ref_for_offset · f7ed3195
      This patch changes the offset parameter to build_ref_for_offset
      from HOST_WIDE_INT to poly_int64.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* ipa-prop.h (build_ref_for_offset): Take the offset as a poly_int64
      	rather than a HOST_WIDE_INT.
      	* tree-sra.c (build_ref_for_offset): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255931
      Richard Sandiford committed
    • poly_int: MEM_REF offsets · aca52e6f
      This patch allows MEM_REF offsets to be polynomial, with mem_ref_offset
      now returning a poly_offset_int instead of an offset_int.  The
      non-mechanical changes to callers of mem_ref_offset were handled by
      previous patches.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* fold-const.h (mem_ref_offset): Return a poly_offset_int rather
      	than an offset_int.
      	* tree.c (mem_ref_offset): Likewise.
      	(build_simple_mem_ref_loc): Treat MEM_REF offsets as poly_ints.
      	* builtins.c (get_object_alignment_2): Likewise.
      	* expr.c (get_inner_reference, expand_expr_real_1): Likewise.
      	* gimple-fold.c (get_base_constructor): Likewise.
      	* gimple-ssa-strength-reduction.c (restructure_reference): Likewise.
      	* gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref):
      	Likewise.
      	* ipa-polymorphic-call.c
      	(ipa_polymorphic_call_context::ipa_polymorphic_call_context): Likewise.
      	* ipa-prop.c (compute_complex_assign_jump_func): Likewise.
      	(get_ancestor_addr_info): Likewise.
      	* ipa-param-manipulation.c (ipa_get_adjustment_candidate): Likewise.
      	* match.pd: Likewise.
      	* tree-data-ref.c (dr_analyze_innermost): Likewise.
      	* tree-dfa.c (get_addr_base_and_unit_offset_1): Likewise.
      	* tree-eh.c (tree_could_trap_p): Likewise.
      	* tree-object-size.c (addr_object_size): Likewise.
      	* tree-ssa-address.c (copy_ref_info): Likewise.
      	* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Likewise.
      	(indirect_refs_may_alias_p): Likewise.
      	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
      	* tree-ssa.c (maybe_rewrite_mem_ref_base): Likewise.
      	(non_rewritable_mem_ref_base): Likewise.
      	* tree-vect-data-refs.c (vect_check_gather_scatter): Likewise.
      	* tree-vrp.c (vrp_prop::check_array_ref): Likewise.
      	* varasm.c (decode_addr_const): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255930
      Richard Sandiford committed
    • poly_int: find_bswap_or_nop_load · 3fed2ce9
      This patch handles polynomial offsets in find_bswap_or_nop_load,
      which could be useful for constant-sized data at a variable offset.
      It is needed for a later patch to compile.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* gimple-ssa-stor-merging.c (find_bswap_or_nop_load): Track polynomial
      	offsets for MEM_REFs.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255929
      Richard Sandiford committed
    • poly_int: adjust_ptr_info_misalignment · bc83d568
      This patch makes adjust_ptr_info_misalignment take the adjustment
      as a poly_uint64 rather than an unsigned int.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-ssanames.h (adjust_ptr_info_misalignment): Take the increment
      	as a poly_uint64 rather than an unsigned int.
      	* tree-ssanames.c (adjust_ptr_info_misalignment): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255928
      Richard Sandiford committed
    • poly_int: decode_addr_const · 1079d2c1
      This patch makes the varasm-local addr_const track polynomial offsets.
      I'm not sure how useful this is, but it was easier to convert than not.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* varasm.c (addr_const::offset): Change from HOST_WIDE_INT
      	to poly_int64.
      	(decode_addr_const): Update accordingly.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255927
      Richard Sandiford committed
    • poly_int: bit_field_size/offset · e7301f5f
      verify_expr ensured that the size and offset in gimple BIT_FIELD_REFs
      satisfied tree_fits_uhwi_p.  This patch extends that so that they can
      be poly_uint64s, and adds helper routines for accessing them when the
      verify_expr requirements apply.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (bit_field_size, bit_field_offset): New functions.
      	* hsa-gen.c (gen_hsa_addr): Use them.
      	* tree-ssa-forwprop.c (simplify_bitfield_ref): Likewise.
      	(simplify_vector_constructor): Likewise.
      	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
      	* tree-cfg.c (verify_expr): Require the sizes and offsets of a
      	BIT_FIELD_REF to be poly_uint64s rather than uhwis.
      	* fold-const.c (fold_ternary_loc): Protect tree_to_uhwi with
      	tree_fits_uhwi_p.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255926
      Richard Sandiford committed
    • poly_int: emit_group_load/store · f8f667be
      This patch changes the sizes passed to emit_group_load and
      emit_group_store from int to poly_int64.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* expr.h (emit_group_load, emit_group_load_into_temps)
      	(emit_group_store): Take the size as a poly_int64 rather than an int.
      	* expr.c (emit_group_load_1, emit_group_load): Likewise.
      	(emit_group_load_into_temp, emit_group_store): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255925
      Richard Sandiford committed