]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
6 years agopoly_int: SUBREG_BYTE
rsandifo [Wed, 20 Dec 2017 12:54:28 +0000 (12:54 +0000)] 
poly_int: SUBREG_BYTE

This patch changes SUBREG_BYTE from an int to a poly_int.
Since valid SUBREG_BYTEs must be contained within the mode of the
SUBREG_REG, the required range is the same as for GET_MODE_SIZE,
i.e. unsigned short.  The patch therefore uses poly_uint16(_pod)
for the SUBREG_BYTE.

Using poly_uint16_pod rtx fields requires a new field code ('p').
Since there are no other uses of 'p' besides SUBREG_BYTE, the patch
doesn't add an XPOLY or whatever; all uses should go via SUBREG_BYTE
instead.

The patch doesn't bother implementing 'p' support for legacy
define_peepholes, since none of the remaining ones have subregs
in their patterns.

As it happened, the rtl documentation used SUBREG as an example of a
code with mixed field types, accessed via XEXP (x, 0) and XINT (x, 1).
Since there's no direct replacement for XINT, and since people should
never use it even if there were, the patch changes the example to use
INT_LIST instead.

The patch also changes subreg-related helper functions so that they too
take and return polynomial offsets.  This makes the patch quite big, but
it's mostly mechanical.  The patch generally sticks to existing choices
wrt signedness.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/rtl.texi: Update documentation of SUBREG_BYTE.  Document the
'p' format code.  Use INT_LIST rather than SUBREG as the example of
a code with an XINT and an XEXP.  Remove the implication that
accessing an rtx field using XINT is expected to work.
* rtl.def (SUBREG): Change format from "ei" to "ep".
* rtl.h (rtunion::rt_subreg): New field.
(XCSUBREG): New macro.
(SUBREG_BYTE): Use it.
(subreg_shape): Change offset from an unsigned int to a poly_uint16.
Update constructor accordingly.
(subreg_shape::operator ==): Update accordingly.
(subreg_shape::unique_id): Return an unsigned HOST_WIDE_INT rather
than an unsigned int.
(subreg_lsb, subreg_lowpart_offset, subreg_highpart_offset): Return
a poly_uint64 rather than an unsigned int.
(subreg_lsb_1): Likewise.  Take the offset as a poly_uint64 rather
than an unsigned int.
(subreg_size_offset_from_lsb, subreg_size_lowpart_offset)
(subreg_size_highpart_offset): Return a poly_uint64 rather than
an unsigned int.  Take the sizes as poly_uint64s.
(subreg_offset_from_lsb): Return a poly_uint64 rather than
an unsigned int.  Take the shift as a poly_uint64 rather than
an unsigned int.
(subreg_regno_offset, subreg_offset_representable_p): Take the offset
as a poly_uint64 rather than an unsigned int.
(simplify_subreg_regno): Likewise.
(byte_lowpart_offset): Return the memory offset as a poly_int64
rather than an int.
(subreg_memory_offset): Likewise.  Take the subreg offset as a
poly_uint64 rather than an unsigned int.
(simplify_subreg, simplify_gen_subreg, subreg_get_info)
(gen_rtx_SUBREG, validate_subreg): Take the subreg offset as a
poly_uint64 rather than an unsigned int.
* rtl.c (rtx_format): Describe 'p' in comment.
(copy_rtx, rtx_equal_p_cb, rtx_equal_p): Handle 'p'.
* emit-rtl.c (validate_subreg, gen_rtx_SUBREG): Take the subreg
offset as a poly_uint64 rather than an unsigned int.
(byte_lowpart_offset): Return the memory offset as a poly_int64
rather than an int.
(subreg_memory_offset): Likewise.  Take the subreg offset as a
poly_uint64 rather than an unsigned int.
(subreg_size_lowpart_offset, subreg_size_highpart_offset): Take the
mode sizes as poly_uint64s rather than unsigned ints.  Return a
poly_uint64 rather than an unsigned int.
(subreg_lowpart_p): Treat subreg offsets as poly_ints.
(copy_insn_1): Handle 'p'.
* rtlanal.c (set_noop_p): Treat subregs offsets as poly_uint64s.
(subreg_lsb_1): Take the subreg offset as a poly_uint64 rather than
an unsigned int.  Return the shift in the same way.
(subreg_lsb): Return the shift as a poly_uint64 rather than an
unsigned int.
(subreg_size_offset_from_lsb): Take the sizes and shift as
poly_uint64s rather than unsigned ints.  Return the offset as
a poly_uint64.
(subreg_get_info, subreg_regno_offset, subreg_offset_representable_p)
(simplify_subreg_regno): Take the offset as a poly_uint64 rather than
an unsigned int.
* rtlhash.c (add_rtx): Handle 'p'.
* genemit.c (gen_exp): Likewise.
* gengenrtl.c (type_from_format, gendef): Likewise.
* gensupport.c (subst_pattern_match, get_alternatives_number)
(collect_insn_data, alter_predicate_for_insn, alter_constraints)
(subst_dup): Likewise.
* gengtype.c (adjust_field_rtx_def): Likewise.
* genrecog.c (find_operand, find_matching_operand, validate_pattern)
(match_pattern_2): Likewise.
(rtx_test::SUBREG_FIELD): New rtx_test::kind_enum.
(rtx_test::subreg_field): New function.
(operator ==, safe_to_hoist_p, transition_parameter_type)
(print_nonbool_test, print_test): Handle SUBREG_FIELD.
* genattrtab.c (attr_rtx_1): Say that 'p' is deliberately not handled.
* genpeep.c (match_rtx): Likewise.
* print-rtl.c (print_poly_int): Include if GENERATOR_FILE too.
(rtx_writer::print_rtx_operand): Handle 'p'.
(print_value): Handle SUBREG.
* read-rtl.c (apply_int_iterator): Likewise.
(rtx_reader::read_rtx_operand): Handle 'p'.
* alias.c (rtx_equal_for_memref_p): Likewise.
* cselib.c (rtx_equal_for_cselib_1, cselib_hash_rtx): Likewise.
* caller-save.c (replace_reg_with_saved_mem): Treat subreg offsets
as poly_ints.
* calls.c (expand_call): Likewise.
* combine.c (combine_simplify_rtx, expand_field_assignment): Likewise.
(make_extraction, gen_lowpart_for_combine): Likewise.
* loop-invariant.c (hash_invariant_expr_1, invariant_expr_equal_p):
Likewise.
* cse.c (remove_invalid_subreg_refs): Take the offset as a poly_uint64
rather than an unsigned int.  Treat subreg offsets as poly_ints.
(exp_equiv_p): Handle 'p'.
(hash_rtx_cb): Likewise.  Treat subreg offsets as poly_ints.
(equiv_constant, cse_insn): Treat subreg offsets as poly_ints.
* dse.c (find_shift_sequence): Likewise.
* dwarf2out.c (rtl_for_decl_location): Likewise.
* expmed.c (extract_low_bits): Likewise.
* expr.c (emit_group_store, undefined_operand_subword_p): Likewise.
(expand_expr_real_2): Likewise.
* final.c (alter_subreg): Likewise.
(leaf_renumber_regs_insn): Handle 'p'.
* function.c (assign_parm_find_stack_rtl, assign_parm_setup_stack):
Treat subreg offsets as poly_ints.
* fwprop.c (forward_propagate_and_simplify): Likewise.
* ifcvt.c (noce_emit_move_insn, noce_emit_cmove): Likewise.
* ira.c (get_subreg_tracking_sizes): Likewise.
* ira-conflicts.c (go_through_subreg): Likewise.
* ira-lives.c (process_single_reg_class_operands): Likewise.
* jump.c (rtx_renumbered_equal_p): Likewise.  Handle 'p'.
* lower-subreg.c (simplify_subreg_concatn): Take the subreg offset
as a poly_uint64 rather than an unsigned int.
(simplify_gen_subreg_concatn, resolve_simple_move): Treat
subreg offsets as poly_ints.
* lra-constraints.c (operands_match_p): Handle 'p'.
(match_reload, curr_insn_transform): Treat subreg offsets as poly_ints.
* lra-spills.c (assign_mem_slot): Likewise.
* postreload.c (move2add_valid_value_p): Likewise.
* recog.c (general_operand, indirect_operand): Likewise.
* regcprop.c (copy_value, maybe_mode_change): Likewise.
(copyprop_hardreg_forward_1): Likewise.
* reginfo.c (simplifiable_subregs_hasher::hash, simplifiable_subregs)
(record_subregs_of_mode): Likewise.
* rtlhooks.c (gen_lowpart_general, gen_lowpart_if_possible): Likewise.
* reload.c (operands_match_p): Handle 'p'.
(find_reloads_subreg_address): Treat subreg offsets as poly_ints.
* reload1.c (alter_reg, choose_reload_regs): Likewise.
(compute_reload_subreg_offset): Likewise, and return an poly_int64.
* simplify-rtx.c (simplify_truncation, simplify_binary_operation_1):
(test_vector_ops_duplicate): Treat subreg offsets as poly_ints.
(simplify_const_poly_int_tests<N>::run): Likewise.
(simplify_subreg, simplify_gen_subreg): Take the subreg offset as
a poly_uint64 rather than an unsigned int.
* valtrack.c (debug_lowpart_subreg): Likewise.
* var-tracking.c (var_lowpart): Likewise.
(loc_cmp): Handle 'p'.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255882 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: ira subreg liveness tracking
rsandifo [Wed, 20 Dec 2017 12:54:17 +0000 (12:54 +0000)] 
poly_int: ira subreg liveness tracking

Normmaly the IRA-reload interface tries to track the liveness of
individual bytes of an allocno if the allocno is sometimes written
to as a SUBREG.  This isn't possible for variable-sized allocnos,
but it doesn't matter because targets with variable-sized registers
should use LRA instead.

This patch adds a get_subreg_tracking_sizes function for deciding
whether it is possible to model a partial read or write.  Later
patches make it return false if anything is variable.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* ira.c (get_subreg_tracking_sizes): New function.
(init_live_subregs): Take an integer size rather than a register.
(build_insn_chain): Use get_subreg_tracking_sizes.  Update calls
to init_live_subregs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255881 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: store_field & co
rsandifo [Wed, 20 Dec 2017 12:54:10 +0000 (12:54 +0000)] 
poly_int: store_field & co

This patch makes store_field and related routines use poly_ints
for bit positions and sizes.  It keeps the existing choices
between signed and unsigned types (there are a mixture of both).

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* expr.c (store_constructor_field): Change bitsize from a
unsigned HOST_WIDE_INT to a poly_uint64 and bitpos from a
HOST_WIDE_INT to a poly_int64.
(store_constructor): Change size from a HOST_WIDE_INT to
a poly_int64.
(store_field): Likewise bitsize and bitpos.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255880 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: C++ bitfield regions
rsandifo [Wed, 20 Dec 2017 12:54:01 +0000 (12:54 +0000)] 
poly_int: C++ bitfield regions

This patch changes C++ bitregion_start/end values from constants to
poly_ints.  Although it's unlikely that the size needs to be polynomial
in practice, the offset could be with future language extensions.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* expmed.h (store_bit_field): Change bitregion_start and
bitregion_end from unsigned HOST_WIDE_INT to poly_uint64.
* expmed.c (adjust_bit_field_mem_for_reg, strict_volatile_bitfield_p)
(store_bit_field_1, store_integral_bit_field, store_bit_field)
(store_fixed_bit_field, store_split_bit_field): Likewise.
* expr.c (store_constructor_field, store_field): Likewise.
(optimize_bitfield_assignment_op): Likewise.  Make the same change
to bitsize and bitpos.
* machmode.h (bit_field_mode_iterator): Change m_bitregion_start
and m_bitregion_end from HOST_WIDE_INT to poly_int64.  Make the
same change in the constructor arguments.
(get_best_mode): Change bitregion_start and bitregion_end from
unsigned HOST_WIDE_INT to poly_uint64.
* stor-layout.c (bit_field_mode_iterator::bit_field_mode_iterator):
Change bitregion_start and bitregion_end from HOST_WIDE_INT to
poly_int64.
(bit_field_mode_iterator::next_mode): Update for new types
of m_bitregion_start and m_bitregion_end.
(get_best_mode): Change bitregion_start and bitregion_end from
unsigned HOST_WIDE_INT to poly_uint64.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255879 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: extract_bit_field bitrange
rsandifo [Wed, 20 Dec 2017 12:53:52 +0000 (12:53 +0000)] 
poly_int: extract_bit_field bitrange

Similar to the previous store_bit_field patch, but for extractions
rather than insertions.  The patch splits out the extraction-as-subreg
handling into a new function (extract_bit_field_as_subreg), both for
ease of writing and because a later patch will add another caller.

The simplify_gen_subreg overload is temporary; it goes away
in a later patch.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* rtl.h (simplify_gen_subreg): Add a temporary overload that
accepts poly_uint64 offsets.
* expmed.h (extract_bit_field): Take bitsize and bitnum as
poly_uint64s rather than unsigned HOST_WIDE_INTs.
* expmed.c (lowpart_bit_field_p): Likewise.
(extract_bit_field_as_subreg): New function, split out from...
(extract_bit_field_1): ...here.  Take bitsize and bitnum as
poly_uint64s rather than unsigned HOST_WIDE_INTs.  For vector
extractions, check that BITSIZE matches the size of the extracted
value and that BITNUM is an exact multiple of that size.
If all else fails, try forcing the value into memory if
BITNUM is variable, and adjusting the address so that the
offset is constant.  Split the part that can only handle constant
bitsize and bitnum out into...
(extract_integral_bit_field): ...this new function.
(extract_bit_field): Take bitsize and bitnum as poly_uint64s
rather than unsigned HOST_WIDE_INTs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255878 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: store_bit_field bitrange
rsandifo [Wed, 20 Dec 2017 12:53:44 +0000 (12:53 +0000)] 
poly_int: store_bit_field bitrange

This patch changes the bitnum and bitsize arguments to
store_bit_field from unsigned HOST_WIDE_INTs to poly_uint64s.
The later part of store_bit_field_1 still needs to operate
on constant bit positions and sizes, so the patch splits
it out into a subfunction (store_integral_bit_field).

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* expmed.h (store_bit_field): Take bitsize and bitnum as
poly_uint64s rather than unsigned HOST_WIDE_INTs.
* expmed.c (simple_mem_bitfield_p): Likewise.  Add a parameter
that returns the byte size.
(store_bit_field_1): Take bitsize and bitnum as
poly_uint64s rather than unsigned HOST_WIDE_INTs.  Update call
to simple_mem_bitfield_p.  Split the part that can only handle
constant bitsize and bitnum out into...
(store_integral_bit_field): ...this new function.
(store_bit_field): Take bitsize and bitnum as poly_uint64s rather
than unsigned HOST_WIDE_INTs.
(extract_bit_field_1): Update call to simple_mem_bitfield_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255877 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: lra frame offsets
rsandifo [Wed, 20 Dec 2017 12:53:35 +0000 (12:53 +0000)] 
poly_int: lra frame offsets

This patch makes LRA use poly_int64s rather than HOST_WIDE_INTs
to store a frame offset (including in things like eliminations).

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* lra-int.h (lra_reg): Change offset from int to poly_int64.
(lra_insn_recog_data): Change sp_offset from HOST_WIDE_INT
to poly_int64.
(lra_eliminate_regs_1, eliminate_regs_in_insn): Change
update_sp_offset from a HOST_WIDE_INT to a poly_int64.
(lra_update_reg_val_offset, lra_reg_val_equal_p): Take the
offset as a poly_int64 rather than an int.
* lra-assigns.c (find_hard_regno_for_1): Handle poly_int64 offsets.
(setup_live_pseudos_and_spill_after_risky_transforms): Likewise.
* lra-constraints.c (equiv_address_substitution): Track offsets
as poly_int64s.
(emit_inc): Check poly_int_rtx_p instead of CONST_INT_P.
(curr_insn_transform): Handle the new form of sp_offset.
* lra-eliminations.c (lra_elim_table): Change previous_offset
and offset from HOST_WIDE_INT to poly_int64.
(print_elim_table, update_reg_eliminate): Update accordingly.
(self_elim_offsets): Change from HOST_WIDE_INT to poly_int64_pod.
(get_elimination): Update accordingly.
(form_sum): Check poly_int_rtx_p instead of CONST_INT_P.
(lra_eliminate_regs_1, eliminate_regs_in_insn): Change
update_sp_offset from a HOST_WIDE_INT to a poly_int64.  Handle
poly_int64 offsets generally.
(curr_sp_change): Change from HOST_WIDE_INT to poly_int64.
(mark_not_eliminable, init_elimination): Update accordingly.
(remove_reg_equal_offset_note): Return a bool and pass the new
offset back by pointer as a poly_int64.
* lra-remat.c (change_sp_offset): Take sp_offset as a poly_int64
rather than a HOST_WIDE_INT.
(do_remat): Track offsets poly_int64s.
* lra.c (lra_update_insn_recog_data, setup_sp_offset): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255876 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: MEM_OFFSET and MEM_SIZE
rsandifo [Wed, 20 Dec 2017 12:53:23 +0000 (12:53 +0000)] 
poly_int: MEM_OFFSET and MEM_SIZE

This patch changes the MEM_OFFSET and MEM_SIZE memory attributes
from HOST_WIDE_INT to poly_int64.  Most of it is mechanical,
but there is one nonbovious change in widen_memory_access.
Previously the main while loop broke with:

      /* Similarly for the decl.  */
      else if (DECL_P (attrs.expr)
               && DECL_SIZE_UNIT (attrs.expr)
               && TREE_CODE (DECL_SIZE_UNIT (attrs.expr)) == INTEGER_CST
               && compare_tree_int (DECL_SIZE_UNIT (attrs.expr), size) >= 0
               && (! attrs.offset_known_p || attrs.offset >= 0))
        break;

but it seemed wrong to optimistically assume the best case
when the offset isn't known (and thus might be negative).
As it happens, the "! attrs.offset_known_p" condition was
always false, because we'd already nullified attrs.expr in
that case:

  /* If we don't know what offset we were at within the expression, then
     we can't know if we've overstepped the bounds.  */
  if (! attrs.offset_known_p)
    attrs.expr = NULL_TREE;

The patch therefore drops "! attrs.offset_known_p ||" when
converting the offset check to the may/must interface.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* rtl.h (mem_attrs): Add a default constructor.  Change size and
offset from HOST_WIDE_INT to poly_int64.
* emit-rtl.h (set_mem_offset, set_mem_size, adjust_address_1)
(adjust_automodify_address_1, set_mem_attributes_minus_bitpos)
(widen_memory_access): Take the sizes and offsets as poly_int64s
rather than HOST_WIDE_INTs.
* alias.c (ao_ref_from_mem): Handle the new form of MEM_OFFSET.
(offset_overlap_p): Take poly_int64s rather than HOST_WIDE_INTs
and ints.
(adjust_offset_for_component_ref): Change the offset from a
HOST_WIDE_INT to a poly_int64.
(nonoverlapping_memrefs_p): Track polynomial offsets and sizes.
* cfgcleanup.c (merge_memattrs): Update after mem_attrs changes.
* dce.c (find_call_stack_args): Likewise.
* dse.c (record_store): Likewise.
* dwarf2out.c (tls_mem_loc_descriptor, dw_sra_loc_expr): Likewise.
* print-rtl.c (rtx_writer::print_rtx): Likewise.
* read-rtl-function.c (test_loading_mem): Likewise.
* rtlanal.c (may_trap_p_1): Likewise.
* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
* var-tracking.c (int_mem_offset, track_expr_p): Likewise.
* emit-rtl.c (mem_attrs_eq_p, get_mem_align_offset): Likewise.
(mem_attrs::mem_attrs): New function.
(set_mem_attributes_minus_bitpos): Change bitpos from a
HOST_WIDE_INT to poly_int64.
(set_mem_alias_set, set_mem_addr_space, set_mem_align, set_mem_expr)
(clear_mem_offset, clear_mem_size, change_address)
(get_spill_slot_decl, set_mem_attrs_for_spill): Directly
initialize mem_attrs.
(set_mem_offset, set_mem_size, adjust_address_1)
(adjust_automodify_address_1, offset_address, widen_memory_access):
Likewise.  Take poly_int64s rather than HOST_WIDE_INT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255875 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: rtx_addr_can_trap_p_1
rsandifo [Wed, 20 Dec 2017 12:53:12 +0000 (12:53 +0000)] 
poly_int: rtx_addr_can_trap_p_1

This patch changes the offset and size arguments of
rtx_addr_can_trap_p_1 from HOST_WIDE_INT to poly_int64.  It also
uses a size of -1 rather than 0 to represent an unknown size and
BLKmode rather than VOIDmode to represent an unknown mode.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* rtlanal.c (rtx_addr_can_trap_p_1): Take the offset and size
as poly_int64s rather than HOST_WIDE_INTs.  Use a size of -1
rather than 0 to represent an unknown size.  Assert that the size
is known when the mode isn't BLKmode.
(may_trap_p_1): Use -1 for unknown sizes.
(rtx_addr_can_trap_p): Likewise.  Pass BLKmode rather than VOIDmode.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255874 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: dse.c
rsandifo [Wed, 20 Dec 2017 12:53:05 +0000 (12:53 +0000)] 
poly_int: dse.c

This patch makes RTL DSE use poly_int for offsets and sizes.
The local phase can optimise them normally but the global phase
treats them as wild accesses.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* dse.c (store_info): Change offset and width from HOST_WIDE_INT
to poly_int64.  Update commentary for positions_needed.large.
(read_info_type): Change offset and width from HOST_WIDE_INT
to poly_int64.
(set_usage_bits): Likewise.
(canon_address): Return the offset as a poly_int64 rather than
a HOST_WIDE_INT.  Use strip_offset_and_add.
(set_all_positions_unneeded, any_positions_needed_p): Use
positions_needed.large to track stores with non-constant widths.
(all_positions_needed_p): Likewise.  Take the offset and width
as poly_int64s rather than ints.  Assert that rhs is nonnull.
(record_store): Cope with non-constant offsets and widths.
Nullify the rhs of an earlier store if we can't tell which bytes
of it are needed.
(find_shift_sequence): Take the access_size and shift as poly_int64s
rather than ints.
(get_stored_val): Take the read_offset and read_width as poly_int64s
rather than HOST_WIDE_INTs.
(check_mem_read_rtx, scan_stores, scan_reads, dse_step5): Handle
non-constant offsets and widths.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255873 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: ao_ref and vn_reference_op_t
rsandifo [Wed, 20 Dec 2017 12:52:58 +0000 (12:52 +0000)] 
poly_int: ao_ref and vn_reference_op_t

This patch changes the offset, size and max_size fields
of ao_ref from HOST_WIDE_INT to poly_int64 and propagates
the change through the code that references it.  This includes
changing the off field of vn_reference_op_struct in the same way.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* inchash.h (inchash::hash::add_poly_int): New function.
* tree-ssa-alias.h (ao_ref::offset, ao_ref::size, ao_ref::max_size):
Use poly_int64 rather than HOST_WIDE_INT.
(ao_ref::max_size_known_p): New function.
* tree-ssa-sccvn.h (vn_reference_op_struct::off): Use poly_int64_pod
rather than HOST_WIDE_INT.
* tree-ssa-alias.c (ao_ref_base): Apply get_ref_base_and_extent
to temporaries until its interface is adjusted to match.
(ao_ref_init_from_ptr_and_size): Handle polynomial offsets and sizes.
(aliasing_component_refs_p, decl_refs_may_alias_p)
(indirect_ref_may_alias_decl_p, indirect_refs_may_alias_p): Take
the offsets and max_sizes as poly_int64s instead of HOST_WIDE_INTs.
(refs_may_alias_p_1, stmt_kills_ref_p): Adjust for changes to
ao_ref fields.
* alias.c (ao_ref_from_mem): Likewise.
* tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): Likewise.
* tree-ssa-dse.c (valid_ao_ref_for_dse, normalize_ref)
(clear_bytes_written_by, setup_live_bytes_from_ref, compute_trims)
(maybe_trim_complex_store, maybe_trim_constructor_store)
(live_bytes_read, dse_classify_store): Likewise.
* tree-ssa-sccvn.c (vn_reference_compute_hash, vn_reference_eq):
(copy_reference_ops_from_ref, ao_ref_init_from_vn_reference)
(fully_constant_vn_reference_p, valueize_refs_1): Likewise.
(vn_reference_lookup_3): Likewise.
* tree-ssa-uninit.c (warn_uninitialized_vars): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255872 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: indirect_refs_may_alias_p
rsandifo [Wed, 20 Dec 2017 12:52:50 +0000 (12:52 +0000)] 
poly_int: indirect_refs_may_alias_p

This patch makes indirect_refs_may_alias_p use ranges_may_overlap_p
rather than ranges_overlap_p.  Unlike the former, the latter can handle
negative offsets, so the fix for PR44852 should no longer be necessary.
It can also handle offset_int, so avoids unchecked truncations to
HOST_WIDE_INT.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p)
(indirect_refs_may_alias_p): Use ranges_may_overlap_p
instead of ranges_overlap_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255871 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: same_addr_size_stores_p
rsandifo [Wed, 20 Dec 2017 12:52:43 +0000 (12:52 +0000)] 
poly_int: same_addr_size_stores_p

This patch makes tree-ssa-alias.c:same_addr_size_stores_p handle
poly_int sizes and offsets.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* tree-ssa-alias.c (same_addr_size_stores_p): Take the offsets and
sizes as poly_int64s rather than HOST_WIDE_INTs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255870 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: fold_ctor_reference
rsandifo [Wed, 20 Dec 2017 12:52:37 +0000 (12:52 +0000)] 
poly_int: fold_ctor_reference

This patch changes the offset and size arguments to
fold_ctor_reference from unsigned HOST_WIDE_INT to poly_uint64.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* gimple-fold.h (fold_ctor_reference): Take the offset and size
as poly_uint64 rather than unsigned HOST_WIDE_INT.
* gimple-fold.c (fold_ctor_reference): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255869 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: DWARF locations
rsandifo [Wed, 20 Dec 2017 12:52:30 +0000 (12:52 +0000)] 
poly_int: DWARF locations

This patch adds support for DWARF location expressions
that involve polynomial offsets.  It adds a target hook that
says how the runtime invariants used in the offsets should be
represented in DWARF.  SVE vectors have to be a multiple of
128 bits in size, so the GCC port uses the number of 128-bit
blocks minus one as the runtime invariant.  However, in DWARF,
the vector length is exposed via a pseudo "VG" register that
holds the number of 64-bit elements in a vector.  Thus:

  indeterminate 1 == (VG / 2) - 1

The hook needs to be general enough to express this.
Note that in most cases the division and subtraction fold
away into surrounding expressions.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* target.def (dwarf_poly_indeterminate_value): New hook.
* targhooks.h (default_dwarf_poly_indeterminate_value): Declare.
* targhooks.c (default_dwarf_poly_indeterminate_value): New function.
* doc/tm.texi.in (TARGET_DWARF_POLY_INDETERMINATE_VALUE): Document.
* doc/tm.texi: Regenerate.
* dwarf2out.h (build_cfa_loc, build_cfa_aligned_loc): Take the
offset as a poly_int64.
* dwarf2out.c (new_reg_loc_descr): Move later in file.  Take the
offset as a poly_int64.
(loc_descr_plus_const, loc_list_plus_const, build_cfa_aligned_loc):
Take the offset as a poly_int64.
(build_cfa_loc): Likewise.  Use loc_descr_plus_const.
(frame_pointer_fb_offset): Change to a poly_int64.
(int_loc_descriptor): Take the offset as a poly_int64.  Use
targetm.dwarf_poly_indeterminate_value for polynomial offsets.
(based_loc_descr): Take the offset as a poly_int64.
Use strip_offset_and_add to handle (plus X (const)).
Use new_reg_loc_descr instead of an open-coded version of the
previous implementation.
(mem_loc_descriptor): Handle CONST_POLY_INT.
(compute_frame_pointer_to_fb_displacement): Take the offset as a
poly_int64.  Use strip_offset_and_add to handle (plus X (const)).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255868 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: REG_OFFSET
rsandifo [Wed, 20 Dec 2017 12:52:22 +0000 (12:52 +0000)] 
poly_int: REG_OFFSET

This patch changes the type of the reg_attrs offset field
from HOST_WIDE_INT to poly_int64 and updates uses accordingly.
This includes changing reg_attr_hasher::hash to use inchash.
(Doing this has no effect on code generation since the only
use of the hasher is to avoid creating duplicate objects.)

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* rtl.h (reg_attrs::offset): Change from HOST_WIDE_INT to poly_int64.
(gen_rtx_REG_offset): Take the offset as a poly_int64.
* inchash.h (inchash::hash::add_poly_hwi): New function.
* gengtype.c (main): Register poly_int64.
* emit-rtl.c (reg_attr_hasher::hash): Use inchash.  Treat the
offset as a poly_int.
(reg_attr_hasher::equal): Use must_eq to compare offsets.
(get_reg_attrs, update_reg_offset, gen_rtx_REG_offset): Take the
offset as a poly_int64.
(set_reg_attrs_from_value): Treat the offset as a poly_int64.
* print-rtl.c (print_poly_int): New function.
(rtx_writer::print_rtx_operand_code_r): Treat REG_OFFSET as
a poly_int.
* var-tracking.c (track_offset_p, get_tracked_reg_offset): New
functions.
(var_reg_set, var_reg_delete_and_set, var_reg_delete): Use them.
(same_variable_part_p, track_loc_p): Take the offset as a poly_int64.
(vt_get_decl_and_offset): Return the offset as a poly_int64.
Enforce track_offset_p for parts of a PARALLEL.
(vt_add_function_parameter): Use const_offset for the final
offset to track.  Use get_tracked_reg_offset for the parts
of a PARALLEL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255867 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: TRULY_NOOP_TRUNCATION
rsandifo [Wed, 20 Dec 2017 12:52:12 +0000 (12:52 +0000)] 
poly_int: TRULY_NOOP_TRUNCATION

This patch makes TRULY_NOOP_TRUNCATION take the mode sizes as
poly_uint64s instead of unsigned ints.  The function bodies
don't need to change.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* target.def (truly_noop_truncation): Take poly_uint64s instead of
unsigned ints.  Change default to hook_bool_puint64_puint64_true.
* doc/tm.texi: Regenerate.
* hooks.h (hook_bool_uint_uint_true): Delete.
(hook_bool_puint64_puint64_true): Declare.
* hooks.c (hook_bool_uint_uint_true): Delete.
(hook_bool_puint64_puint64_true): New function.
* config/mips/mips.c (mips_truly_noop_truncation): Take poly_uint64s
instead of unsigned ints.
* config/spu/spu.c (spu_truly_noop_truncation): Likewise.
* config/tilegx/tilegx.c (tilegx_truly_noop_truncation): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255866 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: create_integer_operand
rsandifo [Wed, 20 Dec 2017 12:52:04 +0000 (12:52 +0000)] 
poly_int: create_integer_operand

This patch generalises create_integer_operand so that it accepts
poly_int64s rather than HOST_WIDE_INTs.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* optabs.h (expand_operand): Add an int_value field.
(create_expand_operand): Add an int_value parameter and use it
to initialize the new expand_operand field.
(create_integer_operand): Replace with a declaration of a function
that accepts poly_int64s.  Move the implementation to...
* optabs.c (create_integer_operand): ...here.
(maybe_legitimize_operand): For EXPAND_INTEGER, check whether
the mode preserves the value of int_value, instead of calling
const_int_operand on the rtx.  Use gen_int_mode to generate
the new rtx.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255865 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: dump routines
rsandifo [Wed, 20 Dec 2017 12:51:57 +0000 (12:51 +0000)] 
poly_int: dump routines

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* dumpfile.h (dump_dec): Declare.
* dumpfile.c (dump_dec): New function.
* pretty-print.h (pp_wide_integer): Turn into a function and
declare a poly_int version.
* pretty-print.c (pp_wide_integer): New function for poly_ints.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255864 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: tree constants
rsandifo [Wed, 20 Dec 2017 12:51:50 +0000 (12:51 +0000)] 
poly_int: tree constants

This patch adds a tree representation for poly_ints.  Unlike the
rtx version, the coefficients are INTEGER_CSTs rather than plain
integers, so that we can easily access them as poly_widest_ints
and poly_offset_ints.

The patch also adjusts some places that previously
relied on "constant" meaning "INTEGER_CST".  It also makes
sure that the TYPE_SIZE agrees with the TYPE_SIZE_UNIT for
vector booleans, given the existing:

/* Several boolean vector elements may fit in a single unit.  */
if (VECTOR_BOOLEAN_TYPE_P (type)
    && type->type_common.mode != BLKmode)
  TYPE_SIZE_UNIT (type)
    = size_int (GET_MODE_SIZE (type->type_common.mode));
else
  TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
   TYPE_SIZE_UNIT (innertype),
   size_int (nunits));

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/generic.texi (POLY_INT_CST): Document.
* tree.def (POLY_INT_CST): New tree code.
* treestruct.def (TS_POLY_INT_CST): New tree layout.
* tree-core.h (tree_poly_int_cst): New struct.
(tree_node): Add a poly_int_cst field.
* tree.h (POLY_INT_CST_P, POLY_INT_CST_COEFF): New macros.
(wide_int_to_tree, force_fit_type): Take a poly_wide_int_ref
instead of a wide_int_ref.
(build_int_cst, build_int_cst_type): Take a poly_int64 instead
of a HOST_WIDE_INT.
(build_int_cstu, build_array_type_nelts): Take a poly_uint64
instead of an unsigned HOST_WIDE_INT.
(build_poly_int_cst, tree_fits_poly_int64_p, tree_fits_poly_uint64_p)
(ptrdiff_tree_p): Declare.
(tree_to_poly_int64, tree_to_poly_uint64): Likewise.  Provide
extern inline implementations if the target doesn't use POLY_INT_CST.
(poly_int_tree_p): New function.
(wi::unextended_tree): New class.
(wi::int_traits <unextended_tree>): New override.
(wi::extended_tree): Add a default constructor.
(wi::extended_tree::get_tree): New function.
(wi::widest_extended_tree, wi::offset_extended_tree): New typedefs.
(wi::tree_to_widest_ref, wi::tree_to_offset_ref): Use them.
(wi::tree_to_poly_widest_ref, wi::tree_to_poly_offset_ref)
(wi::tree_to_poly_wide_ref): New typedefs.
(wi::ints_for): Provide overloads for extended_tree and
unextended_tree.
(poly_int_cst_value, wi::to_poly_widest, wi::to_poly_offset)
(wi::to_wide): New functions.
(wi::fits_to_boolean_p, wi::fits_to_tree_p): Handle poly_ints.
* tree.c (poly_int_cst_hasher): New struct.
(poly_int_cst_hash_table): New variable.
(tree_node_structure_for_code, tree_code_size, simple_cst_equal)
(valid_constant_size_p, add_expr, drop_tree_overflow): Handle
POLY_INT_CST.
(initialize_tree_contains_struct): Handle TS_POLY_INT_CST.
(init_ttree): Initialize poly_int_cst_hash_table.
(build_int_cst, build_int_cst_type, build_invariant_address): Take
a poly_int64 instead of a HOST_WIDE_INT.
(build_int_cstu, build_array_type_nelts): Take a poly_uint64
instead of an unsigned HOST_WIDE_INT.
(wide_int_to_tree): Rename to...
(wide_int_to_tree_1): ...this.
(build_new_poly_int_cst, build_poly_int_cst): New functions.
(force_fit_type): Take a poly_wide_int_ref instead of a wide_int_ref.
(wide_int_to_tree): New function that takes a poly_wide_int_ref.
(ptrdiff_tree_p, tree_to_poly_int64, tree_to_poly_uint64)
(tree_fits_poly_int64_p, tree_fits_poly_uint64_p): New functions.
* lto-streamer-out.c (DFS::DFS_write_tree_body, hash_tree): Handle
TS_POLY_INT_CST.
* tree-streamer-in.c (lto_input_ts_poly_tree_pointers): Likewise.
(streamer_read_tree_body): Likewise.
* tree-streamer-out.c (write_ts_poly_tree_pointers): Likewise.
(streamer_write_tree_body): Likewise.
* tree-streamer.c (streamer_check_handled_ts_structures): Likewise.
* asan.c (asan_protect_global): Require the size to be an INTEGER_CST.
* cfgexpand.c (expand_debug_expr): Handle POLY_INT_CST.
* expr.c (expand_expr_real_1, const_vector_from_tree): Likewise.
* gimple-expr.h (is_gimple_constant): Likewise.
* gimplify.c (maybe_with_size_expr): Likewise.
* print-tree.c (print_node): Likewise.
* tree-data-ref.c (data_ref_compare_tree): Likewise.
* tree-pretty-print.c (dump_generic_node): Likewise.
* tree-ssa-address.c (addr_for_mem_ref): Likewise.
* tree-vect-data-refs.c (dr_group_sort_cmp): Likewise.
* tree-vrp.c (compare_values_warnv): Likewise.
* tree-ssa-loop-ivopts.c (determine_base_object, constant_multiple_of)
(get_loop_invariant_expr, add_candidate_1, get_computation_aff_1)
(force_expr_to_var_cost): Likewise.
* tree-ssa-loop.c (for_each_index): Likewise.
* fold-const.h (build_invariant_address, size_int_kind): Take a
poly_int64 instead of a HOST_WIDE_INT.
* fold-const.c (fold_negate_expr_1, const_binop, const_unop)
(fold_convert_const, multiple_of_p, fold_negate_const): Handle
POLY_INT_CST.
(size_binop_loc): Likewise.  Allow int_const_binop_1 to fail.
(int_const_binop_2): New function, split out from...
(int_const_binop_1): ...here.  Handle POLY_INT_CST.
(size_int_kind): Take a poly_int64 instead of a HOST_WIDE_INT.
* expmed.c (make_tree): Handle CONST_POLY_INT_P.
* gimple-ssa-strength-reduction.c (slsr_process_add)
(slsr_process_mul): Check for INTEGER_CSTs before using them
as candidates.
* stor-layout.c (bits_from_bytes): New function.
(bit_from_pos): Use it.
(layout_type): Likewise.  For vectors, multiply the TYPE_SIZE_UNIT
by BITS_PER_UNIT to get the TYPE_SIZE.
* tree-cfg.c (verify_expr, verify_types_in_gimple_reference): Allow
MEM_REF and TARGET_MEM_REF offsets to be a POLY_INT_CST.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255863 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agopoly_int: rtx constants
rsandifo [Wed, 20 Dec 2017 12:51:36 +0000 (12:51 +0000)] 
poly_int: rtx constants

This patch adds an rtl representation of poly_int values.
There were three possible ways of doing this:

(1) Add a new rtl code for the poly_ints themselves and store the
    coefficients as trailing wide_ints.  This would give constants like:

      (const_poly_int [c0 c1 ... cn])

    The runtime value would be:

      c0 + c1 * x1 + ... + cn * xn

(2) Like (1), but use rtxes for the coefficients.  This would give
    constants like:

      (const_poly_int [(const_int c0)
                       (const_int c1)
                       ...
                       (const_int cn)])

    although the coefficients could be const_wide_ints instead
    of const_ints where appropriate.

(3) Add a new rtl code for the polynomial indeterminates,
    then use them in const wrappers.  A constant like c0 + c1 * x1
    would then look like:

      (const:M (plus:M (mult:M (const_param:M x1)
                               (const_int c1))
                       (const_int c0)))

There didn't seem to be that much to choose between them.  The main
advantage of (1) is that it's a more efficient representation and
that we can refer to the cofficients directly as wide_int_storage.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/rtl.texi (const_poly_int): Document.  Also document the
rtl sharing behavior.
* gengenrtl.c (excluded_rtx): Return true for CONST_POLY_INT.
* rtl.h (const_poly_int_def): New struct.
(rtx_def::u): Add a cpi field.
(CASE_CONST_UNIQUE, CASE_CONST_ANY): Add CONST_POLY_INT.
(CONST_POLY_INT_P, CONST_POLY_INT_COEFFS): New macros.
(wi::rtx_to_poly_wide_ref): New typedef
(const_poly_int_value, wi::to_poly_wide, rtx_to_poly_int64)
(poly_int_rtx_p): New functions.
(trunc_int_for_mode): Declare a poly_int64 version.
(plus_constant): Take a poly_int64 instead of a HOST_WIDE_INT.
(immed_wide_int_const): Take a poly_wide_int_ref rather than
a wide_int_ref.
(strip_offset): Declare.
(strip_offset_and_add): New function.
* rtl.def (CONST_POLY_INT): New rtx code.
* rtl.c (rtx_size): Handle CONST_POLY_INT.
(shared_const_p): Use poly_int_rtx_p.
* emit-rtl.h (gen_int_mode): Take a poly_int64 instead of a
HOST_WIDE_INT.
(gen_int_shift_amount): Likewise.
* emit-rtl.c (const_poly_int_hasher): New class.
(const_poly_int_htab): New variable.
(init_emit_once): Initialize it when NUM_POLY_INT_COEFFS > 1.
(const_poly_int_hasher::hash): New function.
(const_poly_int_hasher::equal): Likewise.
(gen_int_mode): Take a poly_int64 instead of a HOST_WIDE_INT.
(immed_wide_int_const): Rename to...
(immed_wide_int_const_1): ...this and make static.
(immed_wide_int_const): New function, taking a poly_wide_int_ref
instead of a wide_int_ref.
(gen_int_shift_amount): Take a poly_int64 instead of a HOST_WIDE_INT.
(gen_lowpart_common): Handle CONST_POLY_INT.
* cse.c (hash_rtx_cb, equiv_constant): Likewise.
* cselib.c (cselib_hash_rtx): Likewise.
* dwarf2out.c (const_ok_for_output_1): Likewise.
* expr.c (convert_modes): Likewise.
* print-rtl.c (rtx_writer::print_rtx, print_value): Likewise.
* rtlhash.c (add_rtx): Likewise.
* explow.c (trunc_int_for_mode): Add a poly_int64 version.
(plus_constant): Take a poly_int64 instead of a HOST_WIDE_INT.
Handle existing CONST_POLY_INT rtxes.
* expmed.h (expand_shift): Take a poly_int64 instead of a
HOST_WIDE_INT.
* expmed.c (expand_shift): Likewise.
* rtlanal.c (strip_offset): New function.
(commutative_operand_precedence): Give CONST_POLY_INT the same
precedence as CONST_DOUBLE and put CONST_WIDE_INT between that
and CONST_INT.
* rtl-tests.c (const_poly_int_tests): New struct.
(rtl_tests_c_tests): Use it.
* simplify-rtx.c (simplify_const_unary_operation): Handle
CONST_POLY_INT.
(simplify_const_binary_operation): Likewise.
(simplify_binary_operation_1): Fold additions of symbolic constants
and CONST_POLY_INTs.
(simplify_subreg): Handle extensions and truncations of
CONST_POLY_INTs.
(simplify_const_poly_int_tests): New struct.
(simplify_rtx_c_tests): Use it.
* wide-int.h (storage_ref): Add default constructor.
(wide_int_ref_storage): Likewise.
(trailing_wide_ints): Use GTY((user)).
(trailing_wide_ints::operator[]): Add a const version.
(trailing_wide_ints::get_precision): New function.
(trailing_wide_ints::extra_size): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255862 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoAdd a gen_int_shift_amount helper function
rsandifo [Wed, 20 Dec 2017 12:51:22 +0000 (12:51 +0000)] 
Add a gen_int_shift_amount helper function

This patch adds a helper routine that constructs rtxes
for constant shift amounts, given the mode of the value
being shifted.  As well as helping with the SVE patches, this
is one step towards allowing CONST_INTs to have a real mode.

One long-standing problem has been to decide what the mode
of a shift count should be for arbitrary rtxes (as opposed to those
directly tied to a target pattern).  Realistic choices would be
the mode of the shifted elements, word_mode, QImode, a 64-bit mode,
or the same mode as the shift optabs (in which case what should the
mode be when the target doesn't have a pattern?)

For now the patch picks a 64-bit mode, but with a ??? comment.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* emit-rtl.h (gen_int_shift_amount): Declare.
* emit-rtl.c (gen_int_shift_amount): New function.
* asan.c (asan_emit_stack_protection): Use gen_int_shift_amount
instead of GEN_INT.
* calls.c (shift_return_value): Likewise.
* cse.c (fold_rtx): Likewise.
* dse.c (find_shift_sequence): Likewise.
* expmed.c (init_expmed_one_mode, store_bit_field_1, expand_shift_1)
(expand_shift, expand_smod_pow2): Likewise.
* lower-subreg.c (shift_cost): Likewise.
* optabs.c (expand_superword_shift, expand_doubleword_mult)
(expand_unop, expand_binop, shift_amt_for_vec_perm_mask)
(expand_vec_perm_var): Likewise.
* simplify-rtx.c (simplify_unary_operation_1): Likewise.
(simplify_binary_operation_1): Likewise.
* combine.c (try_combine, find_split_point, force_int_to_mode)
(simplify_shift_const_1, simplify_shift_const): Likewise.
(change_zero_ext): Likewise.  Use simplify_gen_binary.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255861 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix multiple_p for two non-poly_ints
rsandifo [Wed, 20 Dec 2017 12:50:35 +0000 (12:50 +0000)] 
Fix multiple_p for two non-poly_ints

Fix a stupid inversion.  This function is very rarely used and was
mostly to help split patches up, which is why it didn't get picked
up during initial testing.

2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* poly-int.h (multiple_p): Fix handling of two non-poly_ints.

gcc/testsuite/
* gcc.dg/plugin/poly-int-tests.h (test_nonpoly_multiple_p): New
function.
(test_nonpoly_type): Call it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255860 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[arm][doc] Document accepted -march=armv8.3-a extension options
ktkachov [Wed, 20 Dec 2017 10:34:37 +0000 (10:34 +0000)] 
[arm][doc] Document accepted -march=armv8.3-a extension options

I noticed that we helpfully list the extensions that are accepted
by the -march options on arm but we were missing the information
for 'armv8.3-a'.

This patchlet corrects that.
Built the documentation and it looked ok.

* doc/invoke.texi (ARM Options): Document accepted extension options
for -march=armv8.3-a.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255859 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[arm] PR target/83105: Minor change of default CPU for arm-linux-gnueabi
rearnsha [Wed, 20 Dec 2017 10:30:00 +0000 (10:30 +0000)] 
[arm] PR target/83105: Minor change of default CPU for arm-linux-gnueabi

When GCC for ARM/linux is configured with --with-float=hard, or
--with-float=softfp the compiler will now die when trying to build the
support libraries because the baseline architecture is too old to
support VFP (older versions of GCC just emitted the VFP instructions
anyway, even though they wouldn't run on that version of the
architecture; but we're now more prickly about it).

This patch fixed the problem by raising the default architecture
(actually the default CPU) to ARMv5te (ARM10e) when we need to generate
HW floating-point code.

PR target/83105
* config.gcc (arm*-*-linux*): When configured with --with-float=hard
or --with-float=softfp, set the default CPU to arm10e.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255858 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[aarch64][libstdc++] Use __ARM_BIG_ENDIAN instead of __AARCH64EB__ in opt_random.h
ktkachov [Wed, 20 Dec 2017 10:28:13 +0000 (10:28 +0000)] 
[aarch64][libstdc++] Use __ARM_BIG_ENDIAN instead of __AARCH64EB__ in opt_random.h

As has been spotted at https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01289.html
we check the __AARCH64EB__ macro for aarch64 big-endian
detection in config/cpu/aarch64/opt/ext/opt_random.h.
That works just fine with GCC but the standardised ACLE[1] macro
for that purpose is __ARM_BIG_ENDIAN so there is a possibility
that non-GCC compilers that include this header are not aware
of this predefine.

So this patch changes the use of __AARCH64EB__ to
the more portable __ARM_BIG_ENDIAN.

Tested on aarch64-none-elf and aarch64_be-none-elf.

Preapproved by Jeff at https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01326.html

* config/cpu/aarch64/opt/ext/opt_random.h (__VEXT): Check
__ARM_BIG_ENDIAN instead of __AARCH64EB__.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255857 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * config/visium/constraints.md (J, K, L): Use IN_RANGE macro.
ebotcazou [Wed, 20 Dec 2017 09:52:15 +0000 (09:52 +0000)] 
* config/visium/constraints.md (J, K, L): Use IN_RANGE macro.
* config/visium/predicates.md (const_shift_operand): Likewise.
* config/visium/visium.c (visium_legitimize_address): Fix oversight.
(visium_legitimize_reload_address): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255856 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-20 Paolo Carlini <paolo.carlini@oracle.com>
paolo [Wed, 20 Dec 2017 09:47:05 +0000 (09:47 +0000)] 
2017-12-20  Paolo Carlini  <paolo.carlini@oracle.com>

* Committing ChangeLog entry.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255855 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * gcc-interface/trans.c (Loop_Statement_to_gnu): Use IN_RANGE macro.
ebotcazou [Wed, 20 Dec 2017 09:38:47 +0000 (09:38 +0000)] 
* gcc-interface/trans.c (Loop_Statement_to_gnu): Use IN_RANGE macro.
* gcc-interface/misc.c (gnat_get_array_descr_info): Likewise.
(default_pass_by_ref): Likewise.
* gcc-interface/decl.c (gnat_to_gnu_entity): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255854 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h
ktkachov [Wed, 20 Dec 2017 09:29:13 +0000 (09:29 +0000)] 
[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h

Commit missing hunk to arm.h TEST_REGNO comment.

PR target/82975
* config/arm/arm.h (TEST_REGNO): Adjust comment as expected in
r255830.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255853 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR c++/83490
jakub [Wed, 20 Dec 2017 09:12:09 +0000 (09:12 +0000)] 
PR c++/83490
* calls.c (compute_argument_addresses): Ignore TYPE_EMPTY_P arguments.

* g++.dg/abi/empty29.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255852 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoAdd two test-cases for (PR middle-end/82404).
marxin [Wed, 20 Dec 2017 08:50:56 +0000 (08:50 +0000)] 
Add two test-cases for (PR middle-end/82404).

2017-12-20  Martin Liska  <mliska@suse.cz>

PR middle-end/82404
* g++.dg/pr82404.C: New test.
* gcc.dg/pr82404.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255851 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoEnable VPCLMULQDQ support
kyukhin [Wed, 20 Dec 2017 06:20:44 +0000 (06:20 +0000)] 
Enable VPCLMULQDQ support

gcc/
* common/config/i386/i386-common.c (OPTION_MASK_ISA_VPCLMULQDQ_SET,
OPTION_MASK_ISA_VPCLMULQDQ_UNSET): New.
(ix86_handle_option): Handle -mvpclmulqdq, move cx6 to flags2.
* config.gcc: Include vpclmulqdqintrin.h.
* config/i386/cpuid.h: Handle bit_VPCLMULQDQ.
* config/i386/driver-i386.c (host_detect_local_cpu): Handle -mvpclmulqdq.
* config/i386/i386-builtin.def (__builtin_ia32_vpclmulqdq_v2di,
__builtin_ia32_vpclmulqdq_v4di, __builtin_ia32_vpclmulqdq_v8di): New.
* config/i386/i386-c.c (__VPCLMULQDQ__): New.
* config/i386/i386.c (isa2_opts): Add -mcx16.
(isa_opts): Add -mpclmulqdq, remove -mcx16.
(ix86_option_override_internal): Move mcx16 to flags2.
(ix86_valid_target_attribute_inner_p): Add vpclmulqdq.
(ix86_expand_builtin): Handle OPTION_MASK_ISA_VPCLMULQDQ.
* config/i386/i386.h (TARGET_VPCLMULQDQ, TARGET_VPCLMULQDQ_P): New.
* config/i386/i386.opt: Add mvpclmulqdq, move mcx16 to flags2.
* config/i386/immintrin.h: Include vpclmulqdqintrin.h.
* config/i386/sse.md (vpclmulqdq_<mode>): New pattern.
* config/i386/vpclmulqdqintrin.h (_mm512_clmulepi64_epi128,
_mm_clmulepi64_epi128, _mm256_clmulepi64_epi128): New intrinsics.
* doc/invoke.texi: Add -mvpclmulqdq.

gcc/testsuite/
* gcc.target/i386/avx-1.c: Handle new intrinsics.
* gcc.target/i386/sse-13.c: Ditto.
* gcc.target/i386/sse-23.c: Ditto.
* gcc.target/i386/avx512-check.h: Handle bit_VPCLMULQDQ.
* gcc.target/i386/avx512f-vpclmulqdq-2.c: New test.
* gcc.target/i386/avx512vl-vpclmulqdq-2.c: Ditto.
* gcc.target/i386/vpclmulqdq.c: Ditto.
* gcc.target/i386/i386.exp (check_effective_target_vpclmulqdq): New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255850 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoDon't call targetm.calls.static_chain in non-static function
vries [Wed, 20 Dec 2017 00:46:38 +0000 (00:46 +0000)] 
Don't call targetm.calls.static_chain in non-static function

2017-12-20  Tom de Vries  <tom@codesourcery.com>

PR middle-end/83423
* config/i386/i386.c (ix86_static_chain): Move DECL_STATIC_CHAIN test ...
* calls.c (rtx_for_static_chain): ... here.  New function.
* calls.h (rtx_for_static_chain): Declare.
* builtins.c (expand_builtin_setjmp_receiver): Use rtx_for_static_chain
instead of targetm.calls.static_chain.
* df-scan.c (df_get_entry_block_def_set): Same.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255849 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoDaily bump.
gccadmin [Wed, 20 Dec 2017 00:16:17 +0000 (00:16 +0000)] 
Daily bump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255848 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago/cp
paolo [Tue, 19 Dec 2017 22:14:59 +0000 (22:14 +0000)] 
/cp
2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/82593
* decl.c (check_array_designated_initializer): Not static.
* cp-tree.h (check_array_designated_initializer): Declare.
* typeck2.c (process_init_constructor_array): Call the latter.
* parser.c (cp_parser_initializer_list): Check the return value
of require_potential_rvalue_constant_expression.

/testsuite
2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/82593
* g++.dg/cpp0x/desig2.C: New.
* g++.dg/cpp0x/desig3.C: Likewise.
* g++.dg/cpp0x/desig4.C: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255845 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR c++/83394 - always_inline vs. noinline no longer diagnosed
msebor [Tue, 19 Dec 2017 22:09:00 +0000 (22:09 +0000)] 
PR c++/83394 - always_inline vs. noinline no longer diagnosed
PR c++/83322 - ICE: tree check: expected class ‘type’, have ‘exceptional’

gcc/cp/ChangeLog:

PR c++/83394
PR c++/83322
* decl2.c (cplus_decl_attributes): Look up member functions
in the scope of their class.

gcc/testsuite/ChangeLog:

PR c++/83394
* g++.dg/Wattributes-3.C: New test.
* g++.dg/Wattributes-4.C: New test.
* g++.dg/Wattributes-5.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255844 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR target/82975
jakub [Tue, 19 Dec 2017 21:55:23 +0000 (21:55 +0000)] 
PR target/82975
* gcc.dg/pr82975.c: Only add -mtune=cortex-a57 on arm*/aarch64*
targets.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255843 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix sharing in translate_isl_ast_node_for
vries [Tue, 19 Dec 2017 21:49:20 +0000 (21:49 +0000)] 
Fix sharing in translate_isl_ast_node_for

2017-12-19  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/83493
* graphite-isl-ast-to-gimple.c (translate_isl_ast_node_for): Unshare ub
and lb.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255842 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix last ChangeLog entry date.
fdumont [Tue, 19 Dec 2017 21:24:30 +0000 (21:24 +0000)] 
Fix last ChangeLog entry date.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255841 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * gimple-ssa-sprintf.c (format_directive): Use inform_n instead of
jakub [Tue, 19 Dec 2017 21:06:04 +0000 (21:06 +0000)] 
* gimple-ssa-sprintf.c (format_directive): Use inform_n instead of
inform with hardcoded english plural handling.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255840 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR c++/82231
mpolacek [Tue, 19 Dec 2017 20:44:19 +0000 (20:44 +0000)] 
PR c++/82231
* g++.dg/cpp1z/nontype-auto14.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255839 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR tree-optimization/83477
law [Tue, 19 Dec 2017 20:13:04 +0000 (20:13 +0000)] 
PR tree-optimization/83477
* tree-ssa-threadedge.c (record_temporary_equivalences_from_phis): For
a non-virtual PHI, always push a new range.

PR tree-optimization/83477
* gcc.c-torture/execute/pr83477.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255837 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR middle-end/77608 - missing protection on trivially detectable runtime buffer overflow
msebor [Tue, 19 Dec 2017 19:14:57 +0000 (19:14 +0000)] 
PR middle-end/77608 - missing protection on trivially detectable runtime buffer overflow

gcc/ChangeLog:

PR middle-end/77608
* builtins.c (compute_objsize): Handle non-constant offsets.

gcc/testsuite/ChangeLog:

PR middle-end/77608
* gcc.dg/Wstringop-overflow.c: New test.
* gcc/testsuite/c-c++-common/Warray-bounds-3.c: Adjust.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255836 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR tree-optimization/83444
jakub [Tue, 19 Dec 2017 18:10:04 +0000 (18:10 +0000)] 
PR tree-optimization/83444
* tree-ssa-strlen.c (strlen_check_and_optimize_stmt): For the
character load case, if get_stridx on MEM_REF's operand doesn't
look usable, retry with get_addr_stridx.

* gcc.dg/strlenopt-38.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255835 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoSFN: don't drop markers for skipping var-tracking
aoliva [Tue, 19 Dec 2017 17:50:54 +0000 (17:50 +0000)] 
SFN: don't drop markers for skipping var-tracking

Although debug markers are more useful when bind stmts are placed
among them, there is value in keeping them even when VTA limits are
exceeded.

for  gcc/ChangeLog

PR debug/83422
* var-tracking.c (vt_debug_insns_local): Do not drop markers.
(variable_tracking_main_1): Keep markers even when VTA fails.

for  gcc/testsuite/ChangeLog

PR debug/83422
* gcc.dg/pr83422.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255834 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[SFN] start rtl block with label, then markers
aoliva [Tue, 19 Dec 2017 17:50:31 +0000 (17:50 +0000)] 
[SFN] start rtl block with label, then markers

Emitting markers before labels turned out to not be worth the trouble.
The markers outside BBs confuse the ebb scheduler, and they don't add
any useful information.  I'll arrange for markers to be moved past
labels, even in gimple, but for now this will fix the two remaining
known problems on ia64.

for  gcc/ChangeLog

PR bootstrap/83396
* cfgexpand.c (expand_gimple_basic_block): Expand label first,
even if there are markers before it.
* cfgrtl.c (rtl_verify_bb_layout): Reject DEBUG_INSNs outside BBs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255833 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR testsuite/83454
jakub [Tue, 19 Dec 2017 17:12:41 +0000 (17:12 +0000)] 
PR testsuite/83454
* gcc.dg/tree-ssa/cswtch-4.c: Require nonpic effective target.
* gcc.dg/tree-ssa/cswtch-5.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255832 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * read-rtl.c (parse_reg_note_name): Replace Yoda conditions with
jakub [Tue, 19 Dec 2017 17:11:57 +0000 (17:11 +0000)] 
* read-rtl.c (parse_reg_note_name): Replace Yoda conditions with
typical order conditions.
* sel-sched.c (extract_new_fences_from): Likewise.
* config/visium/constraints.md (J, K, L): Likewise.
* config/visium/predicates.md (const_shift_operand): Likewise.
* config/visium/visium.c (visium_legitimize_address,
visium_legitimize_reload_address): Likewise.
* config/m68k/m68k.c (output_reg_adjust, emit_reg_adjust): Likewise.
* config/arm/arm.c (arm_block_move_unaligned_straight): Likewise.
* config/avr/constraints.md (Y01, Ym1, Y02, Ym2): Likewise.
* config/avr/avr-log.c (avr_vdump, avr_log_set_avr_log,
SET_DUMP_DETAIL): Likewise.
* config/avr/predicates.md (const_8_16_24_operand): Likewise.
* config/avr/avr.c (STR_PREFIX_P, avr_popcount_each_byte,
avr_is_casesi_sequence, avr_casei_sequence_check_operands,
avr_set_core_architecture, avr_set_current_function,
avr_legitimize_reload_address, avr_asm_len, avr_print_operand,
output_movqi, output_movsisf, avr_out_plus, avr_out_bitop,
avr_out_fract, avr_adjust_insn_length, avr_encode_section_info,
avr_2word_insn_p, output_reload_in_const, avr_has_nibble_0xf,
avr_map_decompose, avr_fold_builtin): Likewise.
* config/avr/driver-avr.c (avr_devicespecs_file): Likewise.
* config/avr/gen-avr-mmcu-specs.c (str_prefix_p, print_mcu): Likewise.
* config/i386/i386.c (ix86_parse_stringop_strategy_string): Likewise.
* config/m32c/m32c-pragma.c (m32c_pragma_memregs): Likewise.
* config/m32c/m32c.c (m32c_conditional_register_usage,
m32c_address_cost): Likewise.
* config/m32c/predicates.md (shiftcount_operand,
longshiftcount_operand): Likewise.
* config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise.
* config/nios2/nios2.c (nios2_handle_custom_fpu_insn_option,
can_use_cdx_ldstw): Likewise.
* config/nios2/nios2.h (CDX_REG_P): Likewise.
* config/cr16/cr16.h (RETURN_ADDR_RTX, REGNO_MODE_OK_FOR_BASE_P):
Likewise.
* config/cr16/cr16.md (*mov<mode>_double): Likewise.
* config/cr16/cr16.c (cr16_create_dwarf_for_multi_push): Likewise.
* config/h8300/h8300.c (h8300_rtx_costs, get_shift_alg): Likewise.
* config/vax/constraints.md (U06, U08, U16, CN6, S08, S16): Likewise.
* config/vax/vax.c (adjacent_operands_p): Likewise.
* config/ft32/constraints.md (L, b, KA): Likewise.
* config/ft32/ft32.c (ft32_load_immediate, ft32_expand_prologue):
Likewise.
* cfgexpand.c (expand_stack_alignment): Likewise.
* gcse.c (insert_expr_in_table): Likewise.
* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Likewise.
* cgraphunit.c (cgraph_node::expand): Likewise.
* ira-build.c (setup_min_max_allocno_live_range_point): Likewise.
* emit-rtl.c (add_insn): Likewise.
* input.c (dump_location_info): Likewise.
* passes.c (NEXT_PASS): Likewise.
* read-rtl-function.c (parse_note_insn_name,
function_reader::read_rtx_operand_r, function_reader::parse_mem_expr):
Likewise.
* sched-rgn.c (sched_rgn_init): Likewise.
* diagnostic-show-locus.c (layout::show_ruler): Likewise.
* combine.c (find_split_point, simplify_if_then_else, force_to_mode,
if_then_else_cond, simplify_shift_const_1, simplify_comparison): Likewise.
* explow.c (eliminate_constant_term): Likewise.
* final.c (leaf_renumber_regs_insn): Likewise.
* cfgrtl.c (print_rtl_with_bb): Likewise.
* genhooks.c (emit_init_macros): Likewise.
* poly-int.h (maybe_ne, maybe_le, maybe_lt): Likewise.
* tree-data-ref.c (conflict_fn): Likewise.
* selftest.c (assert_streq): Likewise.
* expr.c (store_constructor_field, expand_expr_real_1): Likewise.
* fold-const.c (fold_range_test, extract_muldiv_1, fold_truth_andor,
fold_binary_loc, multiple_of_p): Likewise.
* reload.c (push_reload, find_equiv_reg): Likewise.
* et-forest.c (et_nca, et_below): Likewise.
* dbxout.c (dbxout_symbol_location): Likewise.
* reorg.c (relax_delay_slots): Likewise.
* dojump.c (do_compare_rtx_and_jump): Likewise.
* gengtype-parse.c (type): Likewise.
* simplify-rtx.c (simplify_gen_ternary, simplify_gen_relational,
simplify_const_relational_operation): Likewise.
* reload1.c (do_output_reload): Likewise.
* dumpfile.c (get_dump_file_info_by_switch): Likewise.
* gengtype.c (type_for_name): Likewise.
* gimple-ssa-sprintf.c (format_directive): Likewise.
ada/
* gcc-interface/trans.c (Loop_Statement_to_gnu): Replace Yoda
conditions with typical order conditions.
* gcc-interface/misc.c (gnat_get_array_descr_info,
default_pass_by_ref): Likewise.
* gcc-interface/decl.c (gnat_to_gnu_entity): Likewise.
* adaint.c (__gnat_tmp_name): Likewise.
c-family/
* known-headers.cc (get_stdlib_header_for_name): Replace Yoda
conditions with typical order conditions.
c/
* c-typeck.c (comptypes_internal, function_types_compatible_p,
perform_integral_promotions, digest_init): Replace Yoda conditions
with typical order conditions.
* c-decl.c (check_bitfield_type_and_width): Likewise.
cp/
* name-lookup.c (get_std_name_hint): Replace Yoda conditions with
typical order conditions.
* class.c (check_bitfield_decl): Likewise.
* pt.c (convert_template_argument): Likewise.
* decl.c (duplicate_decls): Likewise.
* typeck.c (commonparms): Likewise.
fortran/
* scanner.c (preprocessor_line): Replace Yoda conditions with typical
order conditions.
* dependency.c (check_section_vs_section): Likewise.
* trans-array.c (gfc_conv_expr_descriptor): Likewise.
jit/
* jit-playback.c (get_type, playback::compile_to_file::copy_file,
playback::context::acquire_mutex): Replace Yoda conditions with
typical order conditions.
* libgccjit.c (gcc_jit_context_new_struct_type,
gcc_jit_struct_set_fields, gcc_jit_context_new_union_type,
gcc_jit_context_new_function, gcc_jit_timer_pop): Likewise.
* jit-builtins.c (matches_builtin): Likewise.
* jit-recording.c (recording::compound_type::set_fields,
recording::fields::write_reproducer, recording::rvalue::set_scope,
recording::function::validate): Likewise.
* jit-logging.c (logger::decref): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255831 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h
ktkachov [Tue, 19 Dec 2017 16:58:22 +0000 (16:58 +0000)] 
[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h

In this bug we ICE when checking REGNO_OK_FOR_INDEX_P on arm during pre-IRA scheduling.
This is because REGNO_OK_FOR_INDEX_P ends up checking the reg_renumber array.
Before IRA reg_renumber is NULL and thus we segfault.

The fix is to guard the use of reg_renumber in the logic in TEST_REGNO in arm.h.
On aarch64, for example, we also guard against the reg_renumber == NULL case.
This fixes the ICE. I also remove the part of the comment that muses on when reg_renumber
is available as with this patch it should now be safe to use at any point.

Bootstrapped and tested on arm-none-linux-gnueabihf.

PR target/82975
* config/arm/arm.h (TEST_REGNO): Check reg_renumber is set before
accessing it.  Adjust comment.

* gcc.dg/pr82975.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255830 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR middle-end/81914
jakub [Tue, 19 Dec 2017 16:43:04 +0000 (16:43 +0000)] 
PR middle-end/81914
* predict.c (zero_one_minusone): New function.
(apply_return_prediction): Avoid return prediction for functions
returning only -1, 0 and 1 values, unless they only return -1 and 0
or 0 and 1.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255829 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[ARC][COMMITTED] Clean up build warnings.
claziss [Tue, 19 Dec 2017 15:11:20 +0000 (15:11 +0000)] 
[ARC][COMMITTED] Clean up build warnings.

2017-12-19  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (legitimate_scaled_address_p): Clean
fall-through warning.
(arc_compute_frame_size): Remove unused variables.
(arc_print_operand): Fix fprintif format.
(arc_can_follow_jump): Clean fall-through warning.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255827 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix a file name.
mpolacek [Tue, 19 Dec 2017 15:06:18 +0000 (15:06 +0000)] 
Fix a file name.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255826 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix PR numbers.
mpolacek [Tue, 19 Dec 2017 15:03:33 +0000 (15:03 +0000)] 
Fix PR numbers.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255825 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR c++/83490
mpolacek [Tue, 19 Dec 2017 14:58:17 +0000 (14:58 +0000)] 
PR c++/83490
* config/i386/i386.c (init_cumulative_args): Don't check TYPE_EMPTY_P
on an error node.

* g++.dg/abi/pr83490.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255824 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agocommit_message
claziss [Tue, 19 Dec 2017 14:31:03 +0000 (14:31 +0000)] 
commit_message

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255823 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoAdd a tetst for PR middle-end/83471
hjl [Tue, 19 Dec 2017 13:38:29 +0000 (13:38 +0000)] 
Add a tetst for PR middle-end/83471

PR middle-end/83471
* g++.dg/torture/pr83471.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255821 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[PATCH] -fdump-tree, -save-temps=obj & subdirs
nathan [Tue, 19 Dec 2017 13:27:55 +0000 (13:27 +0000)] 
[PATCH] -fdump-tree, -save-temps=obj & subdirs

https://gcc.gnu.org/ml/gcc-patches/2017-12/msg00377.html
* opts.c (finish_options): Don't prefix dump_base_name if it
already contains directories.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255820 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix another failing test-case.
marxin [Tue, 19 Dec 2017 13:21:07 +0000 (13:21 +0000)] 
Fix another failing test-case.

2017-12-19  Martin Liska  <mliska@suse.cz>

* gcc.dg/tree-prof/switch-case-1.c: Scan IPA profile dump
file instead of expand in order to not mix it with expanded
tree decision tree for the switch statement.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255819 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoFix off by one error in loop-unroll.c (PR rtl-optimization/82675).
marxin [Tue, 19 Dec 2017 13:20:07 +0000 (13:20 +0000)] 
Fix off by one error in loop-unroll.c (PR rtl-optimization/82675).

2017-12-19  Martin Liska  <mliska@suse.cz>

PR rtl-optimization/82675
* loop-unroll.c (unroll_loop_constant_iterations): Allocate one
more element in sbitmap.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255818 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR tree-optimization/83482
mpolacek [Tue, 19 Dec 2017 11:12:35 +0000 (11:12 +0000)] 
PR tree-optimization/83482
* g++.dg/torture/pr83482.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255817 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-19 Paolo Carlini <paolo.carlini@oracle.com>
paolo [Tue, 19 Dec 2017 10:54:20 +0000 (10:54 +0000)] 
2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>

* gimplify.c (gimplify_expr): Use error_operand_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255816 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-19 Paolo Carlini <paolo.carlini@oracle.com>
paolo [Tue, 19 Dec 2017 10:49:03 +0000 (10:49 +0000)] 
2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>

* cp-tree.h: Fix typo in comment.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255815 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoAdded testcase for PR 83329
jamborm [Tue, 19 Dec 2017 10:43:00 +0000 (10:43 +0000)] 
Added testcase for PR 83329

2017-12-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/83329
* gcc.dg/tree-ssa/pr83329.c: New test

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255814 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-19 Paolo Carlini <paolo.carlini@oracle.com>
paolo [Tue, 19 Dec 2017 09:26:39 +0000 (09:26 +0000)] 
2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/79490
* g++.dg/other/fsyntax-only2.C: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255812 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR ada/66205
charlet [Tue, 19 Dec 2017 08:43:49 +0000 (08:43 +0000)] 
PR ada/66205
* bindgen.adb (Gen_AdaFinal): Revert previous change.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255811 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoRTEMS/PowerPC: Remove 64-bit soft-float multilib
sh [Tue, 19 Dec 2017 08:16:34 +0000 (08:16 +0000)] 
RTEMS/PowerPC: Remove 64-bit soft-float multilib

gcc/
PR target/83387
* config/rs6000/t-rtems (MULTILIB_REQUIRED): Remove 64-bit soft-float
multilib.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255809 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoSPARC: Make sure that jump is to a label in errata workaround
sh [Tue, 19 Dec 2017 08:04:52 +0000 (08:04 +0000)] 
SPARC: Make sure that jump is to a label in errata workaround

In some cases the jump could be to a return instruction and in those cases the
next_active_insn() function tries to follow an invalid pointer which leads to a
crash. This error did not manifest when using a 32-bit version of GCC which is
why I did not detect it before.

gcc/
* config/sparc/sparc.c (sparc_do_work_around_errata): Make sure
the jump is to a label.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255807 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR tree-optimization/83444
jakub [Tue, 19 Dec 2017 07:44:07 +0000 (07:44 +0000)] 
PR tree-optimization/83444
* tree-ssa-strlen.c (strlen_check_and_optimize_stmt): Optimize
character loads.

* gcc.dg/strlenopt-38.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255806 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR ipa/82801
jakub [Tue, 19 Dec 2017 07:41:30 +0000 (07:41 +0000)] 
PR ipa/82801
PR ipa/83346
* ipa-inline.c (flatten_remove_node_hook): New function.
(ipa_inline): Keep only nodes with flatten attribute at the end of
the array in the order from ipa_reverse_postorder, only walk that
portion of array for flattening, if there is more than one such
node, temporarily register a removal hook and ignore removed nodes.

* g++.dg/ipa/pr82801.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255805 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR tree-optimization/80631
jakub [Tue, 19 Dec 2017 07:39:24 +0000 (07:39 +0000)] 
PR tree-optimization/80631
* tree-vect-loop.c (vect_create_epilog_for_reduction): Compare
induc_code against MAX_EXPR or MIN_EXPR instead of reduc_fn against
IFN_REDUC_MAX or IFN_REDUC_MIN.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255804 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * tree-ssa-dom.c (record_equivalences_from_phis): Do not
law [Tue, 19 Dec 2017 05:04:55 +0000 (05:04 +0000)] 
* tree-ssa-dom.c (record_equivalences_from_phis): Do not
record symbolic equivalences from backedges in the CFG.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255803 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago Revert
law [Tue, 19 Dec 2017 04:35:59 +0000 (04:35 +0000)] 
Revert
2017-11-19  Jeff Law  <law@redhat.com>

* tree-ssa-dom.c (record_equivalences_from_phis): Fix handling
of degenerates resulting from ignoring an edge.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255802 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoDaily bump.
gccadmin [Tue, 19 Dec 2017 00:16:18 +0000 (00:16 +0000)] 
Daily bump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255795 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR middle-end/83373 - False positive reported by -Wstringop-overflow
msebor [Mon, 18 Dec 2017 22:49:57 +0000 (22:49 +0000)] 
PR middle-end/83373 - False positive reported by -Wstringop-overflow
PR tree-optimization/78450 - strlen(s) return value can be assumed to be less than the size of s

gcc/ChangeLog:

PR middle-end/83373
PR tree-optimization/78450
* tree-ssa-strlen.c (maybe_set_strlen_range): New function.
(handle_builtin_strlen): Call it.

gcc/testsuite/ChangeLog:

PR middle-end/83373
PR tree-optimization/78450
* gcc.dg/pr83373.c: New test.
* gcc.dg/strlenopt-36.c: New test.
* gcc.dg/strlenopt-37.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255790 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-11-20 François Dumont <fdumont@gcc.gnu.org>
fdumont [Mon, 18 Dec 2017 21:59:17 +0000 (21:59 +0000)] 
2017-11-20  François Dumont  <fdumont@gcc.gnu.org>

PR libstdc++/80761
* include/debug/map.h
(std::__debug::map<>::insert_return_type): Define using
_Node_insert_return.
* include/debug/set.h (std::__debug::set<>::insert_return_type):
Likewise.
* include/debug/unordered_map:
(std::__debug::unordered_map<>::insert_return_type): Likewise.
* include/debug/unordered_set:
(std::__debug::unordered_set<>::insert_return_type): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255789 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR c++/83116
mpolacek [Mon, 18 Dec 2017 21:25:16 +0000 (21:25 +0000)] 
PR c++/83116
* constexpr.c (cxx_eval_call_expression): Only look into
constexpr_call_table if ctx->strict.

* g++.dg/cpp1y/constexpr-83116.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255788 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agortlanal: dead_or_set_regno_p should handle CLOBBER (PR83424)
segher [Mon, 18 Dec 2017 20:16:19 +0000 (20:16 +0000)] 
rtlanal: dead_or_set_regno_p should handle CLOBBER (PR83424)

In PR83424 combine's move_deaths puts a REG_DEAD note in the wrong place
because dead_or_set_regno_p does not account for CLOBBER insns.  This
fixes it.

PR rtl-optimization/83424
* rtlanal.c (dead_or_set_regno_p): Handle CLOBBER just like SET.

gcc/testsuite/
PR rtl-optimization/83424
* gcc.dg/pr83424.c: New testsuite.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255787 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agotestsuite: add coverage for diagnostics relating to inlining (PR tree-optimization...
dmalcolm [Mon, 18 Dec 2017 19:23:30 +0000 (19:23 +0000)] 
testsuite: add coverage for diagnostics relating to inlining (PR tree-optimization/83336)

In theory, the diagnostics subsystem can print context information on
code inlining when diagnostics are emitted by the middle-end, describing
the chain of inlined callsites that led to a particular warning,
but PR tree-optimization/83336 describes various issues with this.

An underlying issue is that we have very little automated testing for
this code: gcc.dg/tm/pr52141.c has a test, but in general, prune.exp
filters out the various "inlined from" lines.

The following patch adds test coverage for it for C and C++ via a new
testsuite plugin, which emits a warning from the middle-end; the test
cases use dg-regexp to verify that the "inlined from" lines are
emitted correctly, with the correct function names and source locations.

Doing so requires a change to prune.exp: the dg-regexp lines have to
be handled *before* the "inlined from" lines are stripped.

gcc/testsuite/ChangeLog:
PR tree-optimization/83336
* g++.dg/cpp0x/missing-initializer_list-include.C: Update for
changes to prune.exp's handling of dg-regexp.
* g++.dg/plugin/diagnostic-test-inlining-1.C: New test case.
* g++.dg/plugin/plugin.exp (plugin_test_list): Add it, via
gcc.dg's plugin/diagnostic_plugin_test_inlining.c.
* gcc.dg/plugin/diagnostic-test-inlining-1.c: New test case.
* gcc.dg/plugin/diagnostic-test-inlining-2.c: Likewise.
* gcc.dg/plugin/diagnostic-test-inlining-3.c: Likewise.
* gcc.dg/plugin/diagnostic-test-inlining-4.c: Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_inlining.c: New test
plugin.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add them.
* lib/prune.exp (prune_gcc_output): Move call to handle-dg-regexps
to before the various text stripping regsup invocations,
in particular, to before the stripping of "inlined from".

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255786 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR libstdc++/68430
ville [Mon, 18 Dec 2017 18:46:30 +0000 (18:46 +0000)] 
PR libstdc++/68430

* testsuite/20_util/is_constructible/68430.cc: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255785 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR middle-end/83460
law [Mon, 18 Dec 2017 18:13:20 +0000 (18:13 +0000)] 
PR middle-end/83460
* g++.dg/pr79095-4.C: Remove compromised test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255784 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR c++/83300
jakub [Mon, 18 Dec 2017 17:52:13 +0000 (17:52 +0000)] 
PR c++/83300
* decl2.c (save_template_attributes): Add flags argument, if
not ATTR_FLAG_TYPE_IN_PLACE, *decl_p is a type and we want to
modify TYPE_ATTRIBUTES, add them on type attribute variant.

* g++.dg/ext/vector33.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255783 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * c-warn.c (warn_logical_operator): Return early if -Wlogical-op is
mpolacek [Mon, 18 Dec 2017 16:49:59 +0000 (16:49 +0000)] 
* c-warn.c (warn_logical_operator): Return early if -Wlogical-op is
not in effect.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255782 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago PR middle-end/83463
mpolacek [Mon, 18 Dec 2017 16:44:35 +0000 (16:44 +0000)] 
PR middle-end/83463
* gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref):
Check if TYPE is INTEGRAL_TYPE_P before accessing its min/max
values.

* gcc.dg/pr83463.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255781 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[PR c++/59930] template friend injection
nathan [Mon, 18 Dec 2017 16:30:58 +0000 (16:30 +0000)] 
[PR c++/59930] template friend injection

https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01168.html
PR c++/59930
* name-lookup.c (name_lookup::search_unqualified): Don't search
parent namespace when looking for hidden things.
* pt.c (tsubst_friend_class): Always push to friend scope, drop
unneeded self-friend check. Inject new hidden friend into correct
scope.

PR c++/59930
* g++.dg/parse/pr81247-c.C: Adjust.
* g++.dg/template/pr59930-[123].C: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255780 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[ARC] Update (u)maddsidi patterns.
claziss [Mon, 18 Dec 2017 15:26:47 +0000 (15:26 +0000)] 
[ARC] Update (u)maddsidi patterns.

The accumulator registers are freely used by the compiler. However,
there are a number of instructions which are having an intrinsic use
of these registers. Update patterns to inform the compiler which ones.

gcc/
2017-09-19  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (maddsidi4, maddsidi4_split): Update pattern.
(umaddsidi4,umaddsidi4): Likewise.

gcc/testsuite
2017-09-19  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/tumaddsidi4.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255779 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago[ARC] Update legitimate constant hook.
claziss [Mon, 18 Dec 2017 15:26:35 +0000 (15:26 +0000)] 
[ARC] Update legitimate constant hook.

Make sure we check the constants in all cases.

gcc/
2017-10-14  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_legitimate_constant_p): Always check all
constants.

testsuite/
2017-10-14  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/tls-1.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255778 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoS/390: PR83420: Improve hotpatch option parsing.
krebbel [Mon, 18 Dec 2017 11:31:06 +0000 (11:31 +0000)] 
S/390: PR83420: Improve hotpatch option parsing.

With the attached patch we get rid of the following build failure:

/home/andreas/build/../gcc/gcc/config/s390/s390.c: In function ‘void
s390_option_override()’:
/home/andreas/build/../gcc/gcc/config/s390/s390.c:15361:16: error: ‘char*
strncpy(char*, const char*, size_t)’ specified bound 256 equals destination
size [-Werror=stringop-truncation]
        strncpy (s, opt->arg, 256);
        ~~~~~~~~^~~~~~~~~~~~~~~~~~

gcc/ChangeLog:

2017-12-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

PR target/83420
* config/s390/s390.c (s390_option_override): Avoid strncpy.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255777 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-18 Richard Biener <rguenther@suse.de>
rguenth [Mon, 18 Dec 2017 08:35:23 +0000 (08:35 +0000)] 
2017-12-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81877
* tree-ssa-loop-im.c (ref_indep_loop_p): Remove safelen parameters.
(outermost_indep_loop): Adjust.
(ref_indep_loop_p_1): Likewise.  Remove safelen handling again.
(can_sm_ref_p): Adjust.

* g++.dg/torture/pr81877.C: New testcase.
* g++.dg/vect/pr70729.cc: XFAIL.
* g++.dg/vect/pr70729-nest.cc: XFAIL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255776 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-18 Richard Biener <rguenther@suse.de>
rguenth [Mon, 18 Dec 2017 08:33:26 +0000 (08:33 +0000)] 
2017-12-18  Richard Biener  <rguenther@suse.de>

PR middle-end/77291
* tree.c (array_at_struct_end_p): Return true if the underlying
object has space for at least one element in excess of what
the array domain specifies.

* gcc.dg/Warray-bounds-26.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255775 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-17 Sandra Loosemore <sandra@codesourcery.com>
sandra [Mon, 18 Dec 2017 05:38:59 +0000 (05:38 +0000)] 
2017-12-17  Sandra Loosemore  <sandra@codesourcery.com>

gcc/
* doc/extend.texi (x86 Function Attributes): Reformat nocf_check
example to avoid overfull hbox.
* doc/invoke.texi (Option Summary): Add missing @gol.
(C++ Dialect Options): Reformat -Wnoexcept-type example to avoid
overfull hbox.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255774 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-17 Sandra Loosemore <sandra@codesourcery.com>
sandra [Mon, 18 Dec 2017 04:02:47 +0000 (04:02 +0000)] 
2017-12-17  Sandra Loosemore  <sandra@codesourcery.com>
    Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

gcc/
* doc/invoke.texi (Option Summary): Add -mverbose-cost-dump
to AArch64 and ARM lists, plus missing -mflip-thumb for ARM.
(AArch64 Options): Document -mverbose-cost-dump.
(ARM Options): Likewise, plus -mflip-thumb.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255773 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoPR bootstrap/83446 - Bootstrap failed on i686
msebor [Mon, 18 Dec 2017 03:31:05 +0000 (03:31 +0000)] 
PR bootstrap/83446 - Bootstrap failed on i686

gcc/testsuite/ChangeLog:

PR bootstrap/83446
* c-c++-common/Warray-bounds-3.c: Adjust.
* gcc.dg/Warray-bounds-25.c: New test.

gcc/ChangeLog:

PR bootstrap/83446
* gimple-ssa-warn-restrict.c
(builtin_memref::offset_out_of_bounds): Correct the handling of
anti-ranges.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255772 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoDaily bump.
gccadmin [Mon, 18 Dec 2017 00:16:20 +0000 (00:16 +0000)] 
Daily bump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255771 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago2017-12-17 Sandra Loosemore <sandra@codesourcery.com>
sandra [Sun, 17 Dec 2017 23:58:27 +0000 (23:58 +0000)] 
2017-12-17  Sandra Loosemore  <sandra@codesourcery.com>

gcc/
* doc/invoke.texi (ARC Options): Add missing -mlra entry.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255768 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agogcc/c-family/ChangeLog:
msebor [Sun, 17 Dec 2017 23:23:28 +0000 (23:23 +0000)] 
gcc/c-family/ChangeLog:

* c-attribs.c (common_handle_aligned_attribute): Avoid issuing
an error for attribute warn_if_not_aligned.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255767 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoRevert hunk with debug code that was comitted by mistake
ak [Sun, 17 Dec 2017 20:41:59 +0000 (20:41 +0000)] 
Revert hunk with debug code that was comitted by mistake

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255766 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * gcc.dg/guality/guality.h (guality_check): Cast %lli arguments
uros [Sun, 17 Dec 2017 20:22:36 +0000 (20:22 +0000)] 
* gcc.dg/guality/guality.h (guality_check): Cast %lli arguments
inf fprintf statements to long long int.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255765 138bc75d-0d04-0410-961f-82ee72b054a4

6 years ago * config/pa/pa.c (pa_som_asm_init_sections): Fix comment.
danglin [Sun, 17 Dec 2017 18:36:50 +0000 (18:36 +0000)] 
* config/pa/pa.c (pa_som_asm_init_sections): Fix comment.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255764 138bc75d-0d04-0410-961f-82ee72b054a4

6 years agoSupport -std=f2018
jb [Sun, 17 Dec 2017 16:28:08 +0000 (16:28 +0000)] 
Support -std=f2018

The Fortran committee has decided to rename the upcoming Fortran 2015
standard to Fortran 2018.  This is not a reflection of a three year
delay in the process, but rather they are following other standards in
adopting the year of publication for the name. For more details see
N2144.

This patch renames GFC_STD_F2015 to GFC_STD_F2018, and makes it a
separate flag rather than an alias for GFC_STD_GNU. Also, it adds a
-std=f2018 argument, and documents it.

Regtested on x86_64-pc-linux-gnu.

gcc/fortran/ChangeLog:

2017-12-17  Janne Blomqvist  <jb@gcc.gnu.org>

* decl.c (gfc_match_implicit_none): Use GFC_STD_F2018 instead of
GFC_STD_F2015.
* error.c (gfc_notify_std): Add GFC_STD_F2018{_DEL,_OBS} to
switch.
* gfortran.texi: Document -std=f2018.
* interface.c (compare_parameter): Fix comment.
* invoke.texi: Document -std=f2018.
* lang.opt: Add -std=f2018 argumnet.
* libgfortran.h (GFC_STD_F2015): Rename to GFC_STD_F0218, use
separate flag bit.
(GFC_STD_F2018_DEL): New macro.
(GFC_STD_F2018_OBS): Likewise.
* match.c (gfc_match_stopcode): Use GFC_STD_F2018.
* options.c (set_default_std_flags): Add F2018 flags to defaults.
(gfc_handle_option): Set options for -std=f2018.

gcc/testsuite/ChangeLog:

2017-12-17  Janne Blomqvist  <jb@gcc.gnu.org>

* gfortran.dg/error_stop_3.f90: Update -std= option, fix comments.
* gfortran.dg/error_stop_4.f90: Update error message.
* gfortran.dg/implicit_14.f90: Likewise.
* gfortran.dg/spellcheck-procedure_2.f90: Don't warn for F2018
features.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255761 138bc75d-0d04-0410-961f-82ee72b054a4