Commit Graph

158718 Commits

Author SHA1 Message Date
Dominique d'Humieres
d9bb51cdd3 PR 83704 Use size_t in write_character
For printing long characters, we need to use size_t instead of int in
the argument to write_character.

Regtested on x86_64-pc-linux-gnu, approved in the PR, committed to
trunk.

libgfortran/ChangeLog:

2018-01-06  Dominique d'Humieres  <dominiq@lps.ens.fr>
	    Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/83704
	* io/write.c (write_character): Use size_t instead of int for
	length.

Co-Authored-By: Janne Blomqvist <jb@gcc.gnu.org>

From-SVN: r256313
2018-01-06 21:09:52 +02:00
Richard Sandiford
b4c969723c Tighten LRA cycling check
LRA has code to try to prevent cycling, by avoiding reloads that
look too similar to the instruction being reloaded.  E.g. if we
have a R<-C move for some constant C, reloading the source with
another R<-C move is unlikely to be a good idea.

However, this safeguard unnecessarily triggered in tests like
the one in the patch.  We started with instructions like:

(insn 12 9 13 5 (set (reg:DI 0 x0)
        (reg/f:DI 459)) "reg-alloc-1.c":18 47 {*movdi_aarch64}
     (expr_list:REG_EQUAL (symbol_ref:DI ("x00") [flags 0xc0]  <var_decl 0x7f3c03c1f510 x00>)
        (nil)))

where r459 didn't get allocated a register and is equivalent to
constant x00.  LRA would then handle it like this:

Changing pseudo 459 in operand 1 of insn 12 on equiv `x00'
            1 Non-pseudo reload: reject+=2
            1 Non input pseudo reload: reject++
------->    Cycle danger: overall += LRA_MAX_REJECT
          alt=0,overall=609,losers=1,rld_nregs=1
[...]
          alt=13,overall=9,losers=1,rld_nregs=1
[...]
         Choosing alt 13 in insn 12:  (0) r  (1) w {*movdi_aarch64}

In other words, to avoid loading the constant x00 into another GPR,
LRA decided instead to move it into a floating-point register,
then move that floating-point register into x0:

      Creating newreg=630, assigning class FP_REGS to r630
      Set class ALL_REGS for r631
   12: x0:DI=r630:DI
      REG_EQUAL `x00'
    Inserting insn reload before:
  815: r631:DI=high(`x00')
  816: r630:DI=r631:DI+low(`x00')
      REG_EQUAL `x00'

That's inefficient and doesn't really help to resolve a cycling
problem, since the r630 destination of 816 needs to be reloaded into
a GPR anyway.

The cycling check already had an exception for source values that are
the result of an elimination.  This patch extends it to include the
result of equivalence substitution.

2018-01-06  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* lra-constraints.c (process_alt_operands): Test for the equivalence
	substitutions when detecting a possible reload cycle.

gcc/testsuite/
	* gcc.target/aarch64/reg-alloc-1.c: New test.

From-SVN: r256312
2018-01-06 11:07:53 +00:00
Janne Blomqvist
b081a37642 PR 78534 libgfortran ChangeLog
The libgfortran/ChangeLog entry was accidentally not included in
r256284.

From-SVN: r256311
2018-01-06 12:42:57 +02:00
Janne Blomqvist
ee2d398746 PR 50892 Latent bug in char pointer assignment
Due to r256284 (PR 78534) there was a latent bug that reared it's head
due to different character length types in the pointer
assignment. Fixed by this patch, which also adds a reduced testcase.

Regtested on x86_64-pc-linux-gnu, committed to trunk as obvious.

gcc/fortran/ChangeLog:

2018-01-06  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/50892
	* trans-expr.c (gfc_trans_pointer_assignment): fold_convert rhs to
	lhs type.

gcc/testsuite/ChangeLog:

2018-01-06  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/50892
	* gfortran.dg/char_pointer_assign_icb_1.f90: New test.

From-SVN: r256310
2018-01-06 12:41:03 +02:00
Jakub Jelinek
59931fb066 re PR debug/83480 (ICE in create_block_for_bookkeeping, at sel-sched.c:4557)
PR debug/83480
	* toplev.c (process_options): Don't enable debug_nonbind_markers_p
	by default if flag_selective_schedling{,2}.  Formatting fixes.

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

From-SVN: r256309
2018-01-06 08:48:31 +01:00
Jakub Jelinek
8fec4d222f re PR rtl-optimization/83682 (ICE in simplify_subreg, at simplify-rtx.c:6296)
PR rtl-optimization/83682
	* rtl.h (const_vec_duplicate_p): Only return true for VEC_DUPLICATE
	if it has non-VECTOR_MODE element mode.
	(vec_duplicate_p): Likewise.

	* gcc.target/i386/pr83682.c: New test.

From-SVN: r256308
2018-01-06 08:47:32 +01:00
Jakub Jelinek
dba9c1fd27 re PR debug/83694 (New test case gcc.dg/pr83666.c from r256232 ICEs)
PR middle-end/83694
	* cfgexpand.c (expand_debug_expr): Punt if mode1 is VOIDmode
	and bitsize might be greater than MAX_BITSIZE_MODE_ANY_INT.

From-SVN: r256307
2018-01-06 08:46:39 +01:00
Ian Lance Taylor
319e41dc77 libgo: fix GOARCH_CACHELINESIZE on ia64
Reviewed-on: https://go-review.googlesource.com/85256

From-SVN: r256306
2018-01-06 01:17:29 +00:00
Ian Lance Taylor
677202a206 go-gcc.cc (Gcc_backend::Gcc_backend): Correct math_function_type_long to take one argument.
* go-gcc.cc (Gcc_backend::Gcc_backend): Correct
	math_function_type_long to take one argument.

From-SVN: r256305
2018-01-06 01:11:33 +00:00
GCC Administrator
e1f67de8c8 Daily bump.
From-SVN: r256304
2018-01-06 00:16:17 +00:00
Jonathan Wakely
4ca07db039 PR libstdc++/83626 simplify filesystem::remove and filesystem::remove_all
PR libstdc++/83626
	* src/filesystem/ops.cc (remove(const path&, error_code&)): Remove
	unnecessary symlink_status call.
	(remove_all(const path&, error_code&)): Use filesystem::remove.
	* src/filesystem/std-ops.cc: Likewise.

From-SVN: r256301
2018-01-05 23:51:22 +00:00
Jonathan Wakely
2526c53acf PR libstdc++/83279 Use non-null offset argument for sendfile
PR libstdc++/83279
	* src/filesystem/std-ops.cc  (do_copy_file): Use non-null offset with
	sendfile.

From-SVN: r256289
2018-01-05 21:43:56 +00:00
Janne Blomqvist
f622221ab4 PR 78534 Change character length from int to size_t
In order to handle large character lengths on (L)LP64 targets, switch
the GFortran character length from an int to a size_t.

This is an ABI change, as procedures with character arguments take
hidden arguments with the character length.

I also changed the _size member in vtables from int to size_t, as
there were some cases where character lengths and sizes were
apparently mixed up and caused regressions otherwise. Although I
haven't tested, this might enable very large derived types as well.

Also, as there are some places in the frontend were negative character
lengths are used as special flag values, in the frontend the character
length is handled as a signed variable of the same size as a size_t,
although in the runtime library it really is size_t.

I haven't changed the character length variables for the co-array
intrinsics, as this is something that may need to be synchronized with
OpenCoarrays.

This is v5 of the patch. v4 was applied but caused breakage on big
endian targets. These have been fixed and tested, thanks to access to
the GCC compile farm.

Overview of v4 of the patch: v3 was applied but had to reverted due to
breaking bootstrap. The fix is in resolve.c:resolve_charlen, where
it's necessary to check that an expression is constant before using
mpz_sgn.

Overview of v3 of the patch: All the issues pointed out by FX's review
of v2 have been fixed. In particular, there are now new functions
gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions
mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT
instead of a long value. Similarly, gfc_get_int_expr now takes a
HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by
gfc_extract_hwi. Also, the preliminary work to handle
gfc_charlen_type_node being unsigned has been removed.

Regtested on x86_64-pc-linux-gnu, i686-pc-linux-gnu and
powerpc64-unknown-linux-gnu. Also regtested all three targets by
modifying gfortran-dg.exp to also test with "-g -flto", no new
failures observed.

frontend:

2018-01-05  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* array.c (got_charlen): Use gfc_charlen_int_kind.
	* class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of
	hardcoded kind.
	(find_intrinsic_vtab): Likewise.
	* decl.c (match_char_length): Use gfc_charlen_int_kind.
	(add_init_expr_to_sym): Use gfc_charlen_t and gfc_charlen_int_kind.
	(gfc_match_implicit): Use gfc_charlen_int_kind.
	* dump-parse-tree.c (show_char_const): Use gfc_charlen_t and size_t.
	(show_expr): Use HOST_WIDE_INT_PRINT_DEC.
	* expr.c (gfc_get_character_expr): Length parameter of type
	gfc_charlen_t.
	(gfc_get_int_expr): Value argument of type HOST_WIDE_INT.
	(gfc_extract_hwi): New function.
	(simplify_const_ref): Make string_len of type gfc_charlen_t.
	(gfc_simplify_expr): Use HOST_WIDE_INT for substring refs.
	* frontend-passes.c (optimize_trim): Use gfc_charlen_int_kind.
	* gfortran.h (gfc_mpz_get_hwi): New prototype.
	(gfc_mpz_set_hwi): Likewise.
	(gfc_charlen_t): New typedef.
	(gfc_expr): Use gfc_charlen_t for character lengths.
	(gfc_size_kind): New extern variable.
	(gfc_extract_hwi): New prototype.
	(gfc_get_character_expr): Use gfc_charlen_t for character length.
	(gfc_get_int_expr): Use HOST_WIDE_INT type for value argument.
	* gfortran.texi: Update description of hidden string length argument.
	* iresolve.c (check_charlen_present): Use gfc_charlen_int_kind.
	(gfc_resolve_char_achar): Likewise.
	(gfc_resolve_repeat): Pass string length directly without
	temporary, use gfc_charlen_int_kind.
	(gfc_resolve_transfer): Use gfc_charlen_int_kind.
	* match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen.
	* misc.c (gfc_mpz_get_hwi): New function.
	(gfc_mpz_set_hwi): New function.
	* module.c (atom_int): Change type from int to HOST_WIDE_INT.
	(parse_integer): Don't complain about large integers.
	(write_atom): Use HOST_WIDE_INT for integers.
	(mio_integer): Handle integer type mismatch.
	(mio_hwi): New function.
	(mio_intrinsic_op): Use HOST_WIDE_INT.
	(mio_array_ref): Likewise.
	(mio_expr): Likewise.
	* primary.c (match_substring): Use gfc_charlen_int_kind.
	* resolve.c (resolve_substring_charlen): Use gfc_charlen_int_kind.
	(resolve_character_operator): Likewise.
	(resolve_assoc_var): Likewise.
	(resolve_select_type): Use HOST_WIDE_INT for charlen, use snprintf.
	(resolve_charlen): Use mpz_sgn to determine sign.
	* simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t
	instead of long.
	* symbol.c (generate_isocbinding_symbol): Use gfc_charlen_int_kind.
	* target-memory.c (size_character): Length argument of type
	gfc_charlen_t.
	(gfc_encode_character): Likewise.
	(gfc_interpret_character): Use gfc_charlen_t.
	* target-memory.h (gfc_encode_character): Modify prototype.
	* trans-array.c (gfc_trans_array_ctor_element): Use existing type.
	(get_array_ctor_var_strlen): Use gfc_conv_mpz_to_tree_type.
	(trans_array_constructor): Use existing type.
	(get_array_charlen): Likewise.
	* trans-const.c (gfc_conv_mpz_to_tree_type): New function.
	* trans-const.h (gfc_conv_mpz_to_tree_type): New prototype.
	* trans-decl.c (gfc_trans_deferred_vars): Use existing type.
	(add_argument_checking): Likewise.
	* trans-expr.c (gfc_class_len_or_zero_get): Build const of type
	gfc_charlen_type_node.
	(gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of
	4, fold_convert to correct type.
	(gfc_conv_class_to_class): Build const of type size_type_node for
	size.
	(gfc_copy_class_to_class): Likewise.
	(gfc_conv_string_length): Use same type in expression.
	(gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen.
	(gfc_conv_string_tmp): Make sure len is of the right type.
	(gfc_conv_concat_op): Use same type in expression.
	(gfc_conv_procedure_call): Likewise.
	(fill_with_spaces): Comment out memset() block due to spurious
	-Wstringop-overflow warnings.
	(gfc_trans_string_copy): Use gfc_charlen_type_node.
	(alloc_scalar_allocatable_for_subcomponent_assignment):
	fold_convert to right type.
	(gfc_trans_subcomponent_assign): Likewise.
	(trans_class_vptr_len_assignment): Build const of correct type.
	(gfc_trans_pointer_assignment): Likewise.
	(alloc_scalar_allocatable_for_assignment): fold_convert to right
	type in expr.
	(trans_class_assignment): Build const of correct type.
	* trans-intrinsic.c (gfc_conv_associated): Likewise.
	(gfc_conv_intrinsic_repeat): Do calculation in sizetype.
	* trans-io.c (gfc_build_io_library_fndecls): Use
	gfc_charlen_type_node for character lengths.
	(set_string): Convert to right type in assignment.
	* trans-stmt.c (gfc_trans_label_assign): Build const of
	gfc_charlen_type_node.
	(trans_associate_var): Likewise.
	(gfc_trans_character_select): Likewise.
	(gfc_trans_allocate): Likewise, don't typecast strlen result.
	(gfc_trans_deallocate): Don't typecast strlen result.
	* trans-types.c (gfc_size_kind): New variable.
	(gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind
	from size_type_node.
	* trans-types.h: Fix comment.

testsuite:

2018-01-05  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* gfortran.dg/char_cast_1.f90: Update scan pattern.
	* gfortran.dg/dependency_49.f90: Likewise.
	* gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T.
	* gfortran.dg/repeat_7.f90: New test for PR 66310.
	* gfortran.dg/scan_2.f90: Handle potential cast in assignment.
	* gfortran.dg/string_1.f90: Limit to ilp32 targets.
	* gfortran.dg/string_1_lp64.f90: New test.
	* gfortran.dg/string_3.f90: Limit to ilp32 targets.
	* gfortran.dg/string_3_lp64.f90: New test.

libgfortran:

2019-01-05  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	* intrinsics/args.c (getarg_i4): Use gfc_charlen_type.
	(get_command_argument_i4): Likewise.
	(get_command_i4): Likewise.
	* intrinsics/chmod.c (chmod_internal): Likewise.
	* intrinsics/env.c (get_environment_variable_i4): Likewise.
	* intrinsics/extends_type_of.c (struct vtype): Use size_t for size
	member.
	* intrinsics/gerror.c (gerror): Use gfc_charlen_type.
	* intrinsics/getlog.c (getlog): Likewise.
	* intrinsics/hostnm.c (hostnm_0): Likewise.
	* intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to
	work if gfc_charlen_type is unsigned.
	(string_scan): Likewise.
	* io/transfer.c (transfer_character): Modify prototype.
	(transfer_character_write): Likewise.
	(transfer_character_wide): Likewise.
	(transfer_character_wide_write): Likewise.
	(transfer_array): Typecast to avoid signed-unsigned comparison.
	* io/unit.c (is_trim_ok): Use gfc_charlen_type.
	* io/write.c (namelist_write): Likewise.
	* libgfortran.h (gfc_charlen_type): Change typedef to size_t.

From-SVN: r256284
2018-01-05 21:01:12 +02:00
Jonathan Wakely
388058dd06 PR libstdc++/83626 handle ENOENT due to filesystem race
PR libstdc++/83626
	* src/filesystem/ops.cc (remove(const path&, error_code&)): Do not
	report an error for ENOENT.
	(remove_all(const path&)): Fix type of result variable.
	(remove_all(const path&, error_code&)): Use non-throwing increment
	for directory iterator. Call POSIX remove directly to avoid redundant
	calls to symlink_status. Do not report errors for ENOENT.
	* src/filesystem/std-ops.cc: Likewise.
	* testsuite/27_io/filesystem/operations/remove_all.cc: Test throwing
	overload.
	* testsuite/experimental/filesystem/operations/remove_all.cc:
	Likewise.

From-SVN: r256283
2018-01-05 18:02:18 +00:00
Jakub Jelinek
958d63e911 re PR target/83604 (ICE in copy_to_mode_reg, at explow.c:630)
PR target/83604
	* config/i386/i386-builtin.def
	(__builtin_ia32_vgf2p8affineinvqb_v64qi,
	__builtin_ia32_vgf2p8affineqb_v64qi, __builtin_ia32_vgf2p8mulb_v64qi):
	Require also OPTION_MASK_ISA_AVX512F in addition to
	OPTION_MASK_ISA_GFNI.
	(__builtin_ia32_vgf2p8affineinvqb_v16qi_mask,
	__builtin_ia32_vgf2p8affineqb_v16qi_mask): Require
	OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_SSE in addition
	to OPTION_MASK_ISA_GFNI.
	(__builtin_ia32_vgf2p8mulb_v32qi_mask): Require
	OPTION_MASK_ISA_AVX512VL in addition to OPTION_MASK_ISA_GFNI and
	OPTION_MASK_ISA_AVX512BW.
	(__builtin_ia32_vgf2p8mulb_v16qi_mask): Require
	OPTION_MASK_ISA_AVX512VL instead of OPTION_MASK_ISA_AVX512BW in
	addition to OPTION_MASK_ISA_GFNI.
	(__builtin_ia32_vgf2p8affineinvqb_v16qi,
	__builtin_ia32_vgf2p8affineqb_v16qi, __builtin_ia32_vgf2p8mulb_v16qi):
	Require OPTION_MASK_ISA_SSE2 instead of OPTION_MASK_ISA_SSE in addition
	to OPTION_MASK_ISA_GFNI.
	* config/i386/i386.c (def_builtin): Change to builtin isa/isa2 being
	a requirement for all ISAs rather than any of them with a few
	exceptions.
	(ix86_add_new_builtins): Clear OPTION_MASK_ISA_64BIT from isa before
	processing.
	(ix86_expand_builtin): Require all ISAs from builtin's isa and isa2
	bitmasks to be enabled with 3 exceptions, instead of requiring any
	enabled ISA with lots of exceptions.
	* config/i386/sse.md (vgf2p8affineinvqb_<mode><mask_name>,
	vgf2p8affineqb_<mode><mask_name>, vgf2p8mulb_<mode><mask_name>):
	Change avx512bw in isa attribute to avx512f.
	* config/i386/sgxintrin.h: Add license boilerplate.
	* config/i386/vaesintrin.h: Likewise.  Fix macro spelling __AVX512F
	to __AVX512F__ and __AVX512VL to __AVX512VL__.
	(_mm256_aesdec_epi128, _mm256_aesdeclast_epi128, _mm256_aesenc_epi128,
	_mm256_aesenclast_epi128): Enable temporarily avx if __AVX__ is not
	defined.
	* config/i386/gfniintrin.h (_mm_gf2p8mul_epi8,
	_mm_gf2p8affineinv_epi64_epi8, _mm_gf2p8affine_epi64_epi8): Enable
	temporarily sse2 rather than sse if not enabled already.

	* gcc.target/i386/sse-26.c: New test.

From-SVN: r256281
2018-01-05 17:40:24 +01:00
Jakub Jelinek
d33e32a723 re PR target/83604 (ICE in copy_to_mode_reg, at explow.c:630)
PR target/83604
	* config/i386/sse.md (VI248_VLBW): Rename to ...
	(VI248_AVX512VL): ... this.  Don't guard V32HI with TARGET_AVX512BW.
	(vpshrd_<mode><mask_name>, vpshld_<mode><mask_name>,
	vpshrdv_<mode>, vpshrdv_<mode>_mask, vpshrdv_<mode>_maskz,
	vpshrdv_<mode>_maskz_1, vpshldv_<mode>, vpshldv_<mode>_mask,
	vpshldv_<mode>_maskz, vpshldv_<mode>_maskz_1): Use VI248_AVX512VL
	mode iterator instead of VI248_VLBW.

	* gcc.target/i386/pr83604.c: New test.

From-SVN: r256280
2018-01-05 17:38:17 +01:00
Jan Hubicka
3b2a6901f9 ipa-fnsummary.c (record_modified_bb_info): Add OP.
* ipa-fnsummary.c (record_modified_bb_info): Add OP.
	(record_modified): Skip clobbers; add debug output.
	(param_change_prob): Use sreal frequencies.

From-SVN: r256279
2018-01-05 15:57:04 +00:00
Richard Sandiford
ccf2064917 Revert DECL_USER_ALIGN part of r241959
r241959 included code to stop the vectoriser increasing the alignment of
a "user-aligned" variable.  This wasn't the main purpose of the patch,
but was done for consistency with pass_increase_alignment, and was
needed to make the testcase work.

The documentation for the aligned attribute says:

  This attribute specifies a minimum alignment for the variable or
  structure field, measured in bytes.

so I think it's reasonable for the vectoriser to increase the
alignment further, if that helps us to vectorise code.  It's also
useful if the "user" alignment actually came from an earlier pass
rather than the source code.

A possible counterexample came up when this was discussed on the lists.
Users who are trying to collate things from several translation units
into a single section can use:

  __attribute__((section ("whatever"), aligned(N)))

and would not want extra padding.  It turns out that the supported way
of doing that is to add a "used" attribute, which works even when no
"aligned" attribute is given.

2018-01-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Don't
	punt for user-aligned variables.

gcc/testsuite/
	* gcc.dg/vect/vect-align-4.c: New test.
	* gcc.dg/vect/vect-nb-iter-ub-2.c (cc): Remove alignment attribute
	and redefine as a structure with an unaligned member "b".
	(foo): Update accordingly.

From-SVN: r256277
2018-01-05 13:49:46 +00:00
Richard Sandiford
8db2698d1c Make chrec_contains_symbols true for POLY_INT_CST
2018-01-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-chrec.c (chrec_contains_symbols): Return true for
	POLY_INT_CST.

From-SVN: r256276
2018-01-05 13:38:49 +00:00
Sudakshina Das
4947959040 [PATCH PR82439][simplify-rtx] Simplify (x | y) == x -> (y & ~x) == 0
This patch add support for the missing transformation of
(x | y) == x -> (y & ~x) == 0. The transformation for (x & y) == x case
already exists in simplify-rtx.c since 2014 as of r218503 and this patch
only adds a couple of extra patterns for the IOR case. This benefits 
targets that have the BICS instruction to generate better code. For
targets that do not have the BICS instructions, it still results in
no worse code generation and gives out 2 instructions.

ChangeLog Entries:

*** gcc/ChangeLog ***

2018-01-05  Sudakshina Das  <sudi.das@arm.com>

	PR target/82439
	* simplify-rtx.c (simplify_relational_operation_1): Add simplifications
	of (x|y) == x for BICS pattern.

*** gcc/testsuite/ChangeLog ***

2018-01-05  Sudakshina Das  <sudi.das@arm.com>

	PR target/82439
	* gcc.target/aarch64/bics_5.c: New test.
	* gcc.target/arm/bics_5.c: Likewise.

From-SVN: r256275
2018-01-05 10:45:37 +00:00
Jakub Jelinek
bef52a6895 re PR tree-optimization/83605 (ICE: verify_gimple failed (error: dead STMT in EH table))
PR tree-optimization/83605
	* gimple-ssa-strength-reduction.c: Include tree-eh.h.
	(find_candidates_dom_walker::before_dom_children): Ignore stmts that
	can throw.

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

From-SVN: r256274
2018-01-05 09:51:32 +01:00
Sebastian Huber
64b371b1b5 RTEMS/EPIPHANY: Add RTEMS support
gcc/
	* config.gcc (epiphany-*-elf*): Add (epiphany-*-rtems*) configuration.
	* config/epiphany/rtems.h: New file.

libgcc/
	* config.host (epiphany-*-elf*): Add (epiphany-*-rtems*)
	configuration.

From-SVN: r256273
2018-01-05 06:17:22 +00:00
GCC Administrator
e170de7c7f Daily bump.
From-SVN: r256272
2018-01-05 00:16:18 +00:00
Jonathan Wakely
994844d36a PR libstdc++/83626 Don't throw for remove("") and remove_all("")
PR libstdc++/83626
	* src/filesystem/ops.cc (remove(const path&, error_code&))): Remove
	redundant call to ec.clear().
	(remove_all(const path&, error_code&))): Do not return an error for
	non-existent paths.
	* src/filesystem/std-ops.cc: Likewise.
	* testsuite/27_io/filesystem/operations/remove.cc: New test.
	* testsuite/27_io/filesystem/operations/remove_all.cc: Fix expected
	results for non-existent paths.
	* testsuite/experimental/filesystem/operations/remove.cc: New test.
	* testsuite/experimental/filesystem/operations/remove_all.cc: Fix
	expected results for non-existent paths.

From-SVN: r256269
2018-01-04 22:58:59 +00:00
Jakub Jelinek
ac2be67b32 re PR target/83554 (ICE: in ix86_mitigate_rop, at config/i386/i386.c:41274 with -mmitigate-rop)
PR target/83554
	* config/i386/i386.md (*<rotate_insn>hi3_1 splitter): Use
	QIreg_operand instead of register_operand predicate.
	* config/i386/i386.c (ix86_rop_should_change_byte_p,
	set_rop_modrm_reg_bits, ix86_mitigate_rop): Use -mmitigate-rop in
	comments instead of -fmitigate[-_]rop.

	* gcc.target/i386/pr83554.c: New test.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>

From-SVN: r256268
2018-01-04 22:54:23 +01:00
Rainer Orth
91a00d11a3 Avoid Solaris/SPARC comparison failures with Solaris as (PR bootstrap/81926)
PR bootstrap/81926
	* cgraphunit.c (symbol_table::compile): Switch to text_section
	before calling assembly_start debug hook.
	* run-rtl-passes.c (run_rtl_passes): Likewise.
	Include output.h.

From-SVN: r256267
2018-01-04 21:47:35 +00:00
Jakub Jelinek
85e0b2c451 re PR other/82352 (comdat-local function called by void h::i() outside its comdat)
PR ipa/82352
	* g++.dg/ipa/pr82352.C (size_t): Define to __SIZE_TYPE__ instead of
	long unsigned int.

From-SVN: r256266
2018-01-04 22:13:17 +01:00
Thomas Koenig
fbd35ba1b3 re PR fortran/83683 (eoshift accepts wrong-length boundary)
2018-01-04  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/83683
	PR fortran/45689
	* check.c (gfc_check_eoshift): Check for string length and
	for conformance of boundary.
	* intrinsic.c (add_functions): Add gfc_simplify_eoshift.
	* intrinsic.h: Add prototype for gfc_simplify_eoshift.
	* simplify.c (gfc_simplify_eoshift): New function.

2018-01-04  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/83683
	PR fortran/45689
	* gfortran.dg/eoshift_8.f90: New test.
	* gfortran.dg/simplify_eoshift_1.f90: New test.

From-SVN: r256265
2018-01-04 21:04:23 +00:00
Richard Sandiford
1e678f69f7 Protect second call to extract_range_from_multiplicative_op_1
Following on from:

        * tree-vrp.c (extract_range_from_multiplicative_op_1): Assert
        for VR_RANGE only; don't allow VR_ANTI_RANGE.
        (extract_range_from_binary_expr_1): Don't call
        extract_range_from_multiplicative_op_1 if !range_int_cst_p.

there was a later call to extract_range_from_multiplicative_op_1 too,
that used a negative test for a symbolic (!is_gimple_min_invariant)
range rather than a positive test for an integer range.

2017-11-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-vrp.c (extract_range_from_binary_expr_1): Check
	range_int_cst_p rather than !symbolic_range_p before calling
	extract_range_from_multiplicative_op_1.

From-SVN: r256262
2018-01-04 19:13:55 +00:00
Jeff Law
682820ccf9 tree-ssa-math-opts.c (execute_cse_reciprocals_1): Remove redundant test in assertion.
* tree-ssa-math-opts.c (execute_cse_reciprocals_1): Remove
	redundant test in assertion.

From-SVN: r256260
2018-01-04 11:54:02 -07:00
Richard Sandiford
904c09f453 Document machine_mode wrapper classes
2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* doc/rtl.texi: Document machine_mode wrapper classes.

From-SVN: r256259
2018-01-04 18:05:30 +00:00
Richard Sandiford
1de1073520 Add tree_fits_uhwi_p tests to BIT_FIELD_REF folder
The first BIT_FIELD_REF folding pattern assumed without checking that
operands satisfy tree_fits_uhwi_p.  The second pattern does check this:

      /* On constants we can use native encode/interpret to constant
         fold (nearly) all BIT_FIELD_REFs.  */
      if (CONSTANT_CLASS_P (arg0)
          && can_native_interpret_type_p (type)
          && BITS_PER_UNIT == 8
          && tree_fits_uhwi_p (op1)
          && tree_fits_uhwi_p (op2))

so this patch adds the checks to the first pattern too.  This is needed
for POLY_INT_CST bit positions.

2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before
	using tree_to_uhwi.

From-SVN: r256258
2018-01-04 18:05:10 +00:00
Richard Sandiford
88654ce63d Allow VEC_PERM_EXPR folding to fail
tree-ssa-forwprop.c was asserting that a VEC_PERM_EXPR fold on three
VECTOR_CSTs would always succeed, but it's possible for it to fail
with variable-length vectors.

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

gcc/
	* tree-ssa-forwprop.c (is_combined_permutation_identity): Allow
	the VEC_PERM_EXPR fold to fail.

From-SVN: r256257
2018-01-04 18:04:54 +00:00
Jakub Jelinek
64d620ef97 re PR debug/83585 (Assembler messages: Error: can't resolve .text' {.text section} - .LCOLDB0' {.text.unlikely section})
PR debug/83585
	* bb-reorder.c (insert_section_boundary_note): Set has_bb_partition
	to switched_sections.

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

From-SVN: r256256
2018-01-04 18:47:55 +01:00
Nathan Sidwell
bc80e846eb [PR c++/83667] Fix tree_dump ICE
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00218.html
	PR c++/83667
	* g++.dg/ipa/pr83667.C: Fix regex, require alias.

From-SVN: r256254
2018-01-04 15:49:28 +00:00
Richard Sandiford
41baa38bf6 PR83680: Inverted test in arm_vectorize_vec_perm_const
2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR target/83680
	* config/arm/arm.c (arm_vectorize_vec_perm_const): Fix inverted
	test for d.testing.

From-SVN: r256251
2018-01-04 14:39:03 +00:00
Peter Bergner
87978504af re PR target/83387 (PowerPC64: Infinite loops in do_reload() with -msoft-float)
PR target/83387
	* config/rs6000/rs6000.c (rs6000_discover_homogeneous_aggregate): Do not
	allow arguments in FP registers if TARGET_HARD_FLOAT is false.

From-SVN: r256250
2018-01-04 08:36:35 -06:00
Jonathan Wakely
f7373fce65 Avoid redundant calls to filesystem::status_known
* include/bits/fs_ops.h (exists(const path&, error_code&))): Only
	check status_known once.
	* include/experimental/bits/fs_ops.h: Likewise.

From-SVN: r256243
2018-01-04 13:46:22 +00:00
Jakub Jelinek
c54af0682c re PR debug/83666 (ICE: SIGFPE with -O2 -g --param=sccvn-max-scc-size=10)
PR debug/83666
	* cfgexpand.c (expand_dbeug_expr) <case BIT_FIELD_REF>: Punt if mode
	is BLKmode and bitpos not zero or mode change is needed.

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

From-SVN: r256232
2018-01-04 12:44:07 +01:00
Jonathan Wakely
32489ab56a PR libstdc++/83607 specialize Boyer-Moore searchers for std::byte
PR libstdc++/83607
	* include/std/functional (__is_byte_like): New trait.
	(__is_std_equal_to): Remove.
	(__boyer_moore_base_t): Use __is_byte_like instead of
	__is_std_equal_to.
	* include/experimental/functional (__is_std_equal_to): Remove.
	(__boyer_moore_base_t): Use __is_byte_like instead of
	__is_std_equal_to.
	* testsuite/20_util/function_objects/83607.cc: New test.

From-SVN: r256231
2018-01-04 10:21:29 +00:00
Eric Botcazou
fb4a3d82a6 Bump copyright year
From-SVN: r256230
2018-01-04 09:51:31 +00:00
Richard Sandiford
da374b5b5b PR83675: Restore TARGET_VIS2 check for SPARC vec_perm_const
I'd missed a TARGET_VIS2 condition when replacing vec_perm_const_optab
with TARGET_VECTORIZE_VEC_PERM_CONST in r256093.

2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR target/83675
	* config/sparc/sparc.c (sparc_vectorize_vec_perm_const): Require
	TARGET_VIS2.

From-SVN: r256229
2018-01-04 09:51:08 +00:00
Uros Bizjak
02ea1c7689 re PR rtl-optimization/83628 (performance regression when accessing arrays on alpha)
PR target/83628
	* config/alpha/alpha.md (*sadd<modesuffix>): Use ASHIFT
	instead of MULT rtx.  Update all corresponding splitters.
	(*saddl_se): Ditto.
	(*ssub<modesuffix>): Ditto.
	(*ssubl_se): Ditto.
	(*cmp_sadd_di): Update split patterns.
	(*cmp_sadd_si): Ditto.
	(*cmp_sadd_sidi): Ditto.
	(*cmp_ssub_di): Ditto.
	(*cmp_ssub_si): Ditto.
	(*cmp_ssub_sidi): Ditto.
	* config/alpha/predicates.md (const23_operand): New predicate.
	* config/alpha/alpha.c (alpha_rtx_costs) [PLUS, MINUS]:
	Look for ASHIFT, not MULT inner operand.
	(alpha_split_conditional_move): Update for *sadd<modesuffix> change.

testsuite/ChangeLog:

	PR target/83628
	* gcc.target/alpha/pr83628-1.c: New test.
	* gcc.target/alpha/pr83628-2.c: Ditto.

From-SVN: r256228
2018-01-04 10:42:01 +01:00
Martin Liska
6f3102fdbb Add version to intermediate gcov file (PR gcov-profile/83669).
2018-01-04  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/83669
	* gcov.c (output_intermediate_file): Add version to intermediate
	gcov file.
	* doc/gcov.texi: Document new field 'version' in intermediate
	file format. Fix location of '-k' option of gcov command.

From-SVN: r256227
2018-01-04 08:55:15 +00:00
Martin Liska
fcb6fced16 Be careful about comdat boundary in ICF (PR ipa/82352).
2018-01-04  Martin Liska  <mliska@suse.cz>

	PR ipa/82352
	* ipa-icf.c (sem_function::merge): Do not cross comdat boundary.
2018-01-04  Martin Liska  <mliska@suse.cz>

	PR ipa/82352
	* g++.dg/ipa/pr82352.C: New test.

From-SVN: r256226
2018-01-04 08:54:17 +00:00
Jakub Jelinek
517d489618 vect-opt-info-1.c: Moved to ...
* gcc.dg/vect-opt-info-1.c: Moved to ...
	* gcc.dg/vect/nodump-vect-opt-info-1.c: ... here.  Only run on
	vect_int targets, use dg-additional-options instead of dg-options and
	use relative line numbers instead of absolute.

From-SVN: r256225
2018-01-04 09:51:09 +01:00
Eric Botcazou
5d35675c56 * gnatvsn.ads: Bump copyright year.
From-SVN: r256224
2018-01-04 07:20:19 +00:00
GCC Administrator
691069e1ed Daily bump.
From-SVN: r256222
2018-01-04 00:16:19 +00:00
Jakub Jelinek
a5a4a9dfa9 * gimple-ssa-sprintf.c (parse_directive): Cast second dir.len to uhwi.
From-SVN: r256219
2018-01-04 00:43:56 +01:00
Martin Sebor
cf3fc0e8ac PR tree-optimization/83655 - ICE on an invalid call to memcpy declared with no prototype
gcc/testsuite/ChangeLog:

	PR tree-optimization/83655
	* gcc.dg/Wrestrict-5.c: New test.
	* c-c++-common/builtins.c: New test.

gcc/ChangeLog:

	PR tree-optimization/83655
	* gimple-ssa-warn-restrict.c (wrestrict_dom_walker::check_call): Avoid
	checking calls with invalid arguments.

From-SVN: r256218
2018-01-03 16:41:32 -07:00