1. 21 Dec, 2017 40 commits
    • [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
    • poly_int: reload<->ira interface · 80ce7eb4
      This patch uses poly_int64 for:
      
      - ira_reuse_stack_slot
      - ira_mark_new_stack_slot
      - ira_spilled_reg_stack_slot::width
      
      all of which are part of the IRA/reload interface.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* ira-int.h (ira_spilled_reg_stack_slot::width): Change from
      	an unsigned int to a poly_uint64.
      	* ira.h (ira_reuse_stack_slot, ira_mark_new_stack_slot): Take the
      	sizes as poly_uint64s rather than unsigned ints.
      	* ira-color.c (ira_reuse_stack_slot, ira_mark_new_stack_slot):
      	Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255924
      Richard Sandiford committed
    • poly_int: emit_inc · 31ae0e43
      This patch changes the LRA emit_inc routine so that it takes
      a poly_int64 rather than an int.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* lra-constraints.c (emit_inc): Change inc_amount from an int
      	to a poly_int64.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255923
      Richard Sandiford committed
    • poly_int: cfgexpand stack variables · 5e48d894
      This patch changes the type of stack_var::size from HOST_WIDE_INT
      to poly_uint64.  The difference in signedness is because the
      field was set by:
      
        v->size = tree_to_uhwi (size);
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* cfgexpand.c (stack_var::size): Change from a HOST_WIDE_INT
      	to a poly_uint64.
      	(add_stack_var, stack_var_cmp, partition_stack_vars)
      	(dump_stack_var_partition): Update accordingly.
      	(alloc_stack_frame_space): Take the size as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(expand_stack_vars, expand_one_stack_var_1): Handle polynomial sizes.
      	(defer_stack_allocation, estimated_stack_frame_size): Likewise.
      	(account_stack_vars, expand_one_var): Likewise.  Return a poly_uint64
      	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: r255922
      Richard Sandiford committed
    • poly_int: argument sizes · a20c5714
      This patch changes various bits of state related to argument sizes so
      that they have type poly_int64 rather than HOST_WIDE_INT.  This includes:
      
      - incoming_args::pops_args and incoming_args::size
      - rtl_data::outgoing_args_size
      - pending_stack_adjust
      - stack_pointer_delta
      - stack_usage::pushed_stack_size
      - args_size::constant
      
      It also changes TARGET_RETURN_POPS_ARGS so that the size of the
      arguments passed in and the size returned by the hook are both
      poly_int64s.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.def (return_pops_args): Treat both the input and output
      	sizes as poly_int64s rather than HOST_WIDE_INTS.
      	* targhooks.h (default_return_pops_args): Update accordingly.
      	* targhooks.c (default_return_pops_args): Likewise.
      	* doc/tm.texi: Regenerate.
      	* emit-rtl.h (incoming_args): Change pops_args, size and
      	outgoing_args_size from int to poly_int64_pod.
      	* function.h (expr_status): Change x_pending_stack_adjust and
      	x_stack_pointer_delta from int to poly_int64.
      	(args_size::constant): Change from HOST_WIDE_INT to poly_int64.
      	(ARGS_SIZE_RTX): Update accordingly.
      	* calls.c (highest_outgoing_arg_in_use): Change from int to
      	unsigned int.
      	(stack_usage_watermark, stored_args_watermark): New variables.
      	(stack_region_maybe_used_p, mark_stack_region_used): New functions.
      	(emit_call_1): Change the stack_size and rounded_stack_size
      	parameters from HOST_WIDE_INT to poly_int64.  Track n_popped
      	as a poly_int64.
      	(save_fixed_argument_area): Check stack_usage_watermark.
      	(initialize_argument_information): Change old_pending_adj from
      	a HOST_WIDE_INT * to a poly_int64_pod *.
      	(compute_argument_block_size): Return the size as a poly_int64
      	rather than an int.
      	(finalize_must_preallocate): Track polynomial argument sizes.
      	(compute_argument_addresses): Likewise.
      	(internal_arg_pointer_based_exp): Track polynomial offsets.
      	(mem_overlaps_already_clobbered_arg_p): Rename to...
      	(mem_might_overlap_already_clobbered_arg_p): ...this and take the
      	size as a poly_uint64 rather than an unsigned HOST_WIDE_INT.
      	Check stored_args_used_watermark.
      	(load_register_parameters): Update accordingly.
      	(check_sibcall_argument_overlap_1): Likewise.
      	(combine_pending_stack_adjustment_and_call): Take the unadjusted
      	args size as a poly_int64 rather than an int.  Return a bool
      	indicating whether the optimization was possible and return
      	the new adjustment by reference.
      	(check_sibcall_argument_overlap): Track polynomail argument sizes.
      	Update stored_args_watermark.
      	(can_implement_as_sibling_call_p): Handle polynomial argument sizes.
      	(expand_call): Likewise.  Maintain stack_usage_watermark and
      	stored_args_watermark.  Update calls to
      	combine_pending_stack_adjustment_and_call.
      	(emit_library_call_value_1): Handle polynomial argument sizes.
      	Call stack_region_maybe_used_p and mark_stack_region_used.
      	Maintain stack_usage_watermark.
      	(store_one_arg): Likewise.  Update call to
      	mem_overlaps_already_clobbered_arg_p.
      	* config/arm/arm.c (arm_output_function_prologue): Add a cast to
      	HOST_WIDE_INT.
      	* config/avr/avr.c (avr_outgoing_args_size): Likewise.
      	* config/microblaze/microblaze.c (microblaze_function_prologue):
      	Likewise.
      	* config/cr16/cr16.c (cr16_return_pops_args): Update for new
      	TARGET_RETURN_POPS_ARGS interface.
      	(cr16_compute_frame, cr16_initial_elimination_offset): Add casts
      	to HOST_WIDE_INT.
      	* config/ft32/ft32.c (ft32_compute_frame): Likewise.
      	* config/i386/i386.c (ix86_return_pops_args): Update for new
      	TARGET_RETURN_POPS_ARGS interface.
      	(ix86_expand_split_stack_prologue): Add a cast to HOST_WIDE_INT.
      	* config/moxie/moxie.c (moxie_compute_frame): Likewise.
      	* config/m68k/m68k.c (m68k_return_pops_args): Update for new
      	TARGET_RETURN_POPS_ARGS interface.
      	* config/vax/vax.c (vax_return_pops_args): Likewise.
      	* config/pa/pa.h (STACK_POINTER_OFFSET): Add a cast to poly_int64.
      	(EXIT_IGNORE_STACK): Update reference to crtl->outgoing_args_size.
      	* config/arm/arm.h (CALLER_INTERWORKING_SLOT_SIZE): Likewise.
      	* config/powerpcspe/aix.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* config/powerpcspe/darwin.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* config/powerpcspe/powerpcspe.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* config/rs6000/aix.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* config/rs6000/darwin.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* config/rs6000/rs6000.h (STACK_DYNAMIC_OFFSET): Likewise.
      	* dojump.h (saved_pending_stack_adjust): Change x_pending_stack_adjust
      	and x_stack_pointer_delta from int to poly_int64.
      	* dojump.c (do_pending_stack_adjust): Update accordingly.
      	* explow.c (allocate_dynamic_stack_space): Handle polynomial
      	stack_pointer_deltas.
      	* function.c (STACK_DYNAMIC_OFFSET): Add a cast to poly_int64.
      	(pad_to_arg_alignment): Track polynomial offsets.
      	(assign_parm_find_stack_rtl): Likewise.
      	(assign_parms, locate_and_pad_parm): Handle polynomial argument sizes.
      	* toplev.c (output_stack_usage): Update reference to
      	current_function_pushed_stack_size.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255921
      Richard Sandiford committed
    • poly_int: instantiate_virtual_regs · e6715081
      This patch makes the instantiate virtual regs pass track offsets
      as poly_ints.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* function.c (in_arg_offset, var_offset, dynamic_offset)
      	(out_arg_offset, cfa_offset): Change from int to poly_int64.
      	(instantiate_new_reg): Return the new offset as a poly_int64_pod
      	rather than a HOST_WIDE_INT.
      	(instantiate_virtual_regs_in_rtx): Track polynomial offsets.
      	(instantiate_virtual_regs_in_insn): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255920
      Richard Sandiford committed
    • poly_int: REG_ARGS_SIZE · 68184180
      This patch adds new utility functions for manipulating REG_ARGS_SIZE
      notes and allows the notes to carry polynomial as well as constant sizes.
      
      The code was inconsistent about whether INT_MIN or HOST_WIDE_INT_MIN
      should be used to represent an unknown size.  The patch uses
      HOST_WIDE_INT_MIN throughout.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtl.h (get_args_size, add_args_size_note): New functions.
      	(find_args_size_adjust): Return a poly_int64 rather than a
      	HOST_WIDE_INT.
      	(fixup_args_size_notes): Likewise.  Make the same change to the
      	end_args_size parameter.
      	* rtlanal.c (get_args_size, add_args_size_note): New functions.
      	* builtins.c (expand_builtin_trap): Use add_args_size_note.
      	* calls.c (emit_call_1): Likewise.
      	* explow.c (adjust_stack_1): Likewise.
      	* cfgcleanup.c (old_insns_match_p): Update use of
      	find_args_size_adjust.
      	* combine.c (distribute_notes): Track polynomial arg sizes.
      	* dwarf2cfi.c (dw_trace_info): Change beg_true_args_size,
      	end_true_args_size, beg_delay_args_size and end_delay_args_size
      	from HOST_WIDE_INT to poly_int64.
      	(add_cfi_args_size): Take the args_size as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(notice_args_size, notice_eh_throw, maybe_record_trace_start)
      	(maybe_record_trace_start_abnormal, scan_trace, connect_traces): Track
      	polynomial arg sizes.
      	* emit-rtl.c (try_split): Use get_args_size.
      	* recog.c (peep2_attempt): Likewise.
      	* reload1.c (reload_as_needed): Likewise.
      	* expr.c (find_args_size_adjust): Return the adjustment as a
      	poly_int64 rather than a HOST_WIDE_INT.
      	(fixup_args_size_notes): Change end_args_size from a HOST_WIDE_INT
      	to a poly_int64 and change the return type in the same way.
      	(emit_single_push_insn): Track polynomial arg sizes.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255919
      Richard Sandiford committed
    • poly_int: push_block/emit_push_insn · a15b25dc
      This patch changes the "extra" parameters to push_block and
      emit_push_insn 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 (push_block, emit_push_insn): Change the "extra" parameter
      	from HOST_WIDE_INT to poly_int64.
      	* expr.c (push_block, emit_push_insn): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255918
      Richard Sandiford committed
    • poly_int: frame allocations · f075bd95
      This patch converts the frame allocation code (mostly in function.c)
      to use poly_int64 rather than HOST_WIDE_INT for frame offsets and
      sizes.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* function.h (frame_space): Change start and length from HOST_WIDE_INT
      	to poly_int64.
      	(get_frame_size): Return the size as a poly_int64 rather than a
      	HOST_WIDE_INT.
      	(frame_offset_overflow): Take the offset as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(assign_stack_local_1, assign_stack_local, assign_stack_temp_for_type)
      	(assign_stack_temp): Likewise for the size.
      	* function.c (get_frame_size): Return a poly_int64 rather than
      	a HOST_WIDE_INT.
      	(frame_offset_overflow): Take the offset as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(try_fit_stack_local): Take the start, length and size as poly_int64s
      	rather than HOST_WIDE_INTs.  Return the offset as a poly_int64_pod
      	rather than a HOST_WIDE_INT.
      	(add_frame_space): Take the start and end as poly_int64s rather than
      	HOST_WIDE_INTs.
      	(assign_stack_local_1, assign_stack_local, assign_stack_temp_for_type)
      	(assign_stack_temp): Likewise for the size.
      	(temp_slot): Change size, base_offset and full_size from HOST_WIDE_INT
      	to poly_int64.
      	(find_temp_slot_from_address): Handle polynomial offsets.
      	(combine_temp_slots): Likewise.
      	* emit-rtl.h (rtl_data::x_frame_offset): Change from HOST_WIDE_INT
      	to poly_int64.
      	* cfgexpand.c (alloc_stack_frame_space): Return the offset as a
      	poly_int64 rather than a HOST_WIDE_INT.
      	(expand_one_stack_var_at): Take the offset as a poly_int64 rather
      	than a HOST_WIDE_INT.
      	(expand_stack_vars, expand_one_stack_var_1, expand_used_vars): Handle
      	polynomial frame offsets.
      	* config/m32r/m32r-protos.h (m32r_compute_frame_size): Take the size
      	as a poly_int64 rather than an int.
      	* config/m32r/m32r.c (m32r_compute_frame_size): Likewise.
      	* config/v850/v850-protos.h (compute_frame_size): Likewise.
      	* config/v850/v850.c (compute_frame_size): Likewise.
      	* config/xtensa/xtensa-protos.h (compute_frame_size): Likewise.
      	* config/xtensa/xtensa.c (compute_frame_size): Likewise.
      	* config/pa/pa-protos.h (pa_compute_frame_size): Likewise.
      	* config/pa/pa.c (pa_compute_frame_size): Likewise.
      	* explow.h (get_dynamic_stack_base): Take the offset as a poly_int64
      	rather than a HOST_WIDE_INT.
      	* explow.c (get_dynamic_stack_base): Likewise.
      	* final.c (final_start_function): Use the constant lower bound
      	of the frame size for -Wframe-larger-than.
      	* ira.c (do_reload): Adjust for new get_frame_size return type.
      	* lra.c (lra): Likewise.
      	* reload1.c (reload): Likewise.
      	* config/avr/avr.c (avr_asm_function_end_prologue): Likewise.
      	* config/pa/pa.h (EXIT_IGNORE_STACK): Likewise.
      	* rtlanal.c (get_initial_register_offset): 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: r255917
      Richard Sandiford committed
    • poly_int: reload1.c · 7ee21616
      This patch makes a few small poly_int64 changes to reload1.c,
      mostly related to eliminations.  Again, there's no real expectation
      that reload will be used for targets that have polynomial-sized modes,
      but it seemed easier to convert it anyway.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* reload1.c (elim_table): Change initial_offset, offset and
      	previous_offset from HOST_WIDE_INT to poly_int64_pod.
      	(offsets_at): Change the target array's element type from
      	HOST_WIDE_INT to poly_int64_pod.
      	(set_label_offsets, eliminate_regs_1, eliminate_regs_in_insn)
      	(elimination_costs_in_insn, update_eliminable_offsets)
      	(verify_initial_elim_offsets, set_offsets_for_label)
      	(init_eliminable_invariants): Update after above changes.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255916
      Richard Sandiford committed
    • poly_int: reload.c · 0cb78959
      This patch makes a few small poly_int64 changes to reload.c,
      such as in the "decomposition" structure.  In practice, any
      port with polynomial-sized modes should be using LRA rather
      than reload, but it's easier to convert reload anyway than
      to sprinkle to_constants everywhere.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* reload.h (reload::inc): Change from an int to a poly_int64_pod.
      	* reload.c (combine_reloads, debug_reload_to_stream): Likewise.
      	(decomposition): Change start and end from HOST_WIDE_INT
      	to poly_int64_pod.
      	(decompose, immune_p): Update accordingly.
      	(find_inc_amount): Return a poly_int64 rather than an int.
      	* reload1.c (inc_for_reload): Take the inc_amount as a poly_int64
      	rather than an int.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255915
      Richard Sandiford committed
    • poly_int: get_inner_reference & co. · f37fac2b
      This patch makes get_inner_reference and ptr_difference_const return the
      bit size and bit position as poly_int64s rather than HOST_WIDE_INTS.
      The non-mechanical changes 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/
      	* tree.h (get_inner_reference): Return the bitsize and bitpos
      	as poly_int64_pods rather than HOST_WIDE_INT.
      	* fold-const.h (ptr_difference_const): Return the pointer difference
      	as a poly_int64_pod rather than a HOST_WIDE_INT.
      	* expr.c (get_inner_reference): Return the bitsize and bitpos
      	as poly_int64_pods rather than HOST_WIDE_INT.
      	(expand_expr_addr_expr_1, expand_expr_real_1): Track polynomial
      	offsets and sizes.
      	* fold-const.c (make_bit_field_ref): Take the bitpos as a poly_int64
      	rather than a HOST_WIDE_INT.  Update call to get_inner_reference.
      	(optimize_bit_field_compare): Update call to get_inner_reference.
      	(decode_field_reference): Likewise.
      	(fold_unary_loc): Track polynomial offsets and sizes.
      	(split_address_to_core_and_offset): Return the bitpos as a
      	poly_int64_pod rather than a HOST_WIDE_INT.
      	(ptr_difference_const): Likewise for the pointer difference.
      	* asan.c (instrument_derefs): Track polynomial offsets and sizes.
      	* config/mips/mips.c (r10k_safe_mem_expr_p): Likewise.
      	* dbxout.c (dbxout_expand_expr): Likewise.
      	* dwarf2out.c (loc_list_for_address_of_addr_expr_of_indirect_ref)
      	(loc_list_from_tree_1, fortran_common): Likewise.
      	* gimple-laddress.c (pass_laddress::execute): Likewise.
      	* gimple-ssa-store-merging.c (find_bswap_or_nop_load): Likewise.
      	* gimplify.c (gimplify_scan_omp_clauses): Likewise.
      	* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
      	* tree-affine.c (tree_to_aff_combination): Likewise.
      	(get_inner_reference_aff): Likewise.
      	* tree-data-ref.c (split_constant_offset_1): Likewise.
      	(dr_analyze_innermost): Likewise.
      	* tree-scalar-evolution.c (interpret_rhs_expr): Likewise.
      	* tree-sra.c (ipa_sra_check_caller): Likewise.
      	* tree-vect-data-refs.c (vect_check_gather_scatter): Likewise.
      	* ubsan.c (maybe_instrument_pointer_overflow): Likewise.
      	(instrument_bool_enum_load, instrument_object_size): Likewise.
      	* gimple-ssa-strength-reduction.c (slsr_process_ref): Update call
      	to get_inner_reference.
      	* hsa-gen.c (gen_hsa_addr): Likewise.
      	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.
      	* tsan.c (instrument_expr): Likewise.
      	* match.pd: Update call to ptr_difference_const.
      
      gcc/ada/
      	* gcc-interface/trans.c (Attribute_to_gnu): Track polynomial
      	offsets and sizes.
      	* gcc-interface/utils2.c (build_unary_op): Likewise.
      
      gcc/cp/
      	* constexpr.c (check_automatic_or_tls): Track polynomial
      	offsets and sizes.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255914
      Richard Sandiford committed
    • poly_int: fold_comparison · 5b9bbb63
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* fold-const.c (fold_comparison): Track sizes and offsets as
      	poly_int64s rather than HOST_WIDE_INTs when folding address
      	comparisons.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255913
      Richard Sandiford committed
    • poly_int: get_bit_range · 39bb8924
      This patch makes get_bit_range return the range and position as poly_ints.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* expr.h (get_bit_range): Return the bitstart and bitend as
      	poly_uint64s rather than unsigned HOST_WIDE_INTs.  Return the bitpos
      	as a poly_int64 rather than a HOST_WIDE_INT.
      	* expr.c (get_bit_range): Likewise.
      	(expand_assignment): Update call accordingly.
      	* fold-const.c (optimize_bit_field_compare): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255912
      Richard Sandiford committed
    • [AArch64] Tweak aarch64_classify_address interface · a97d8b98
      Previously aarch64_classify_address used an rtx code to distinguish
      LDP/STP addresses from normal addresses; the code was PARALLEL
      to select LDP/STP and anything else to select normal addresses.
      This patch replaces that parameter with a dedicated enum.
      
      The SVE port will add another enum value that didn't map naturally
      to an rtx code.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* config/aarch64/aarch64-protos.h (aarch64_addr_query_type): New enum.
      	(aarch64_legitimate_address_p): Use it instead of an rtx code,
      	as an optional final parameter.
      	* config/aarch64/aarch64.c (aarch64_classify_address): Likewise.
      	(aarch64_legitimate_address_p): Likewise.
      	(aarch64_print_address_internal): Take an aarch64_addr_query_type
      	instead of an rtx code.
      	(aarch64_address_valid_for_prefetch_p): Update calls accordingly.
      	(aarch64_legitimate_address_hook_p): Likewise.
      	(aarch64_print_ldpstp_address): Likewise.
      	(aarch64_print_operand_address): Likewise.
      	(aarch64_address_cost): Likewise.
      	* config/aarch64/constraints.md (Uml, Umq, Ump, Utq): Likewise.
      	* config/aarch64/predicates.md (aarch64_mem_pair_operand): Likewise.
      	(aarch64_mem_pair_lanes_operand): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255911
      Richard Sandiford committed
    • tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Call update_stmt_if_modified. · 75b7462e
      	* tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Call
      	update_stmt_if_modified.
      
      From-SVN: r255910
      Richard Biener committed