Commit Graph

158141 Commits

Author SHA1 Message Date
GCC Administrator 6ba9908a0c Daily bump.
From-SVN: r255520
2017-12-09 00:16:12 +00:00
Vladimir Makarov 4692a78365 [multiple changes]
2017-12-08  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/83317
	* lra-constraints.c (process_address_1): Add insn code check.

2017-12-08  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/83317
	* gcc.target/i386/pr83317.c: New test.

From-SVN: r255517
2017-12-08 23:47:44 +00:00
Jakub Jelinek d5910e08a3 re PR rtl-optimization/81595 (ICE: verify_flow_info failed (error: multiple hot/cold transitions found))
PR rtl-optimization/81595
	* gcc.c-torture/compile/pr81595.c: New test.

From-SVN: r255516
2017-12-08 20:05:56 +01:00
Michael Matz dc236397e4 re PR tree-optimization/83323 (186.crafty miscompares)
Fix PR83323

	* gimple-loop-jam (unroll_jam_possible_p): Correct test for
	head-controlled loops and loop BBs.
	* common.opt (funroll-and-jam): Remove, instead ...
	(floop-unroll-and-jam): ... reuse this option.
	* opts.c (default_options_table): Use OPT_floop_unroll_and_jam.
	* doc/invoke.texi (-funroll-and-jam): Move docu to ...
	(-floop-unroll-and-jam): ... this option.

testsuite/
	* gcc.dg/pr83323.c: New test.
	* gcc.dg/unroll-and-jam.c: Use -floop-unroll-and-jam.

From-SVN: r255514
2017-12-08 17:41:58 +00:00
Jakub Jelinek 450aa0ee3d ipa-polymorphic-call.c (noncall_stmt_may_be_vtbl_ptr_store): Fix a comment typo, get_base_ref_and_offset -> get_ref_base_and_extent.
* ipa-polymorphic-call.c (noncall_stmt_may_be_vtbl_ptr_store): Fix
	a comment typo, get_base_ref_and_offset -> get_ref_base_and_extent.
	* ipa-prop.c (stmt_may_be_vtbl_ptr_store): Likewise.

From-SVN: r255513
2017-12-08 17:47:06 +01:00
Richard Biener 68e6d5a6bd re PR middle-end/81782 (Yet another -Wmaybe-uninitialized false positive with empty array)
2017-12-08  Richard Biener  <rguenther@suse.de>

	PR middle-end/81782
	* tree-ssa-uninit.c (warn_uninitialized_vars): Properly
	handle accesses outside of zero-sized vars.

	* gcc.dg/uninit-pr81782.c: New testcase.

From-SVN: r255512
2017-12-08 14:45:30 +00:00
Rainer Orth 4f29e04064 Disable hwcap on Solaris in g++.dg/opt/pr83252.C
* g++.dg/opt/pr83252.C: Add -mclear-hwcap on *-*-solaris*.

From-SVN: r255511
2017-12-08 13:03:54 +00:00
Martin Jambor d90ffcfb7d Prevent SRA from removing type changing assignment
2017-12-08  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/83141
	* tree-sra.c (contains_vce_or_bfcref_p): Move up in the file, also
	test for MEM_REFs implicitely changing types with padding.  Remove
	inline keyword.
	(build_accesses_from_assign): Added contains_vce_or_bfcref_p checks.

testsuite/
	* gcc.dg/tree-ssa/pr83141.c: New test.
	* gcc.dg/guality/pr54970.c: XFAIL tests querying a[0].

From-SVN: r255510
2017-12-08 13:11:02 +01:00
Jakub Jelinek 0123db8e39 arc.c (arc_attribute_table): Add exclusions to the comment.
* config/arc/arc.c (arc_attribute_table): Add exclusions to
	the comment.
	* config/avr/avr.c (avr_attribute_table): Likewise.
	* config/msp430/msp430.c (msp430_attribute_table): Likewise.
	* config/rl78/rl78.c (rl78_attribute_table): Likewise.
	* config/nds32/nds32.c (nds32_attribute_table): Likewise.
	* config/darwin.h (SUBTARGET_ATTRIBUTE_TABLE): Initialize new member
	of struct attribute_spec.
	* config/i386/cygming.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise.
ada/
	* gcc-interface/utils.c (gnat_internal_attribute_table): Add
	exclusions to the comment.
brig/
	* brig-lang.c (brig_attribute_table): Fix up comment.

From-SVN: r255509
2017-12-08 12:55:23 +01:00
Ulrich Weigand deb8237f28 re PR target/82960 (spu_machine_dependent_reorg does not handle jump_table_data insn)
gcc/
	PR target/82960
	* config/spu/spu.c (pad_bb): Only check INSN_CODE when INSN_P is true.

From-SVN: r255508
2017-12-08 11:33:09 +00:00
Jan Hubicka f6422f23bb re PR tree-optimization/83609 (ICE in read_complex_part at gcc/expr.c:3202)
* profile-count.c (profile_count::from_gcov_type): Move from
	profile-count.h; handle overflow.
	* profile-count. (profile_count::from_gcov_type): Move offline.

	PR middle-end/83609
	* gcc.c-torture/compile/pr83069.c: New testcase.

From-SVN: r255507
2017-12-08 11:27:28 +00:00
Segher Boessenkool b1cf82933e combine: Fix PR83304
In PR83304 two insns are combined, where the I2 uses a register that
has a REG_DEAD note on an insn after I2 but before I3.  In such a case
move_deaths should move that death note.  But move_deaths only looks
at the reg_stat[regno].last_death insn, and that field can be zeroed
out (previously, use_crosses_set_p would prevent the combination in
this case).

If the last_death field is zero it means "unknown", not "no death", so
we have to find if there is a REG_DEAD note.


	PR rtl-optimization/83304
	* combine.c (move_deaths): If we do not know where a register died,
	search for it.

From-SVN: r255506
2017-12-08 12:26:35 +01:00
Richard Biener da472c1b3b gimple-loop-interchange.cc (tree_loop_interchange::interchange): Provide -fopt-info-loop feedback when we interchange in a nest.
2017-12-08  Richard Biener  <rguenther@suse.de>

	* gimple-loop-interchange.cc (tree_loop_interchange::interchange):
	Provide -fopt-info-loop feedback when we interchange in a nest.

From-SVN: r255505
2017-12-08 11:24:36 +00:00
Richard Earnshaw 801840e175 [arm] PR target/83206: Make native driver select fp-capable armv6 cores
A quirk in the historical naming of some ARMv6 products means that the
main CPU name implies the presence or otherwise of the floating point unit.
This causes problems when using -mfpu=auto with -mcpu=native: the driver is
picking a CPU that does not support a floating-point unit, even though
one may well exist.

This patch addresses this by selecting the FP-capable names so that FP
instructions will be generated if the other options suggest this is
permitted.

Note that a more complete fix is really needed here to look up the
FP/simd capabilities and append the appropriate capability extensions.
This will be the subject of some follow-up patches.

	* config/arm/driver-arm.c (arm_cpu_table): Use fp-capable product names
	for armv6 ARM CPU IDs.

From-SVN: r255504
2017-12-08 11:19:20 +00:00
Richard Earnshaw 24531cd697 [arm] Don't strip off all architecture features from -march passed to assembler
When GCC invokes the assembler it generates a sanitized version of the
user-specified -march option to pass through, since the assembler does
not understand all the new FPU-related architectural options.
Unfortunately it goes too far and strips off all the architectural
extensions, including some that are unrelated to the -mfpu variant
selected.

Again, this doesn't really matter when compiling C code because the
compiler will override the command-line specified architecture with
directives in the assembly file itself, but when using the compiler
driver to invoke the assembler the only indiciation of the desired
architecture might come from the command line.

We fix this by adjusting the canonicalization pass to remove any
option that only specifies features that can be expressed by -mfpu
(any that go beyond that are already supported by the assembler).  We
do have to take care to re-order the options, though as the assembler
expects feature options to be in a canonical order (unlike the
compiler, where ordering is handled left-to-right: there's only a
difference if there are negation options, but a canonicalized
architecture string shouldn't have any of those).  We do this by
recording which options we need and then sorting the final list
alphabetically.

	* common/config/arm/arm-common.c: Include <algorithm>.
	(INCLUDE_VECTOR): Define.
	(compare_opt_names): New function.
	(arm_rewrite_selected_arch): Only strip out extensions that can be
	expressed through -mfpu.  Sort the remaining extensions
	alphabetically.

From-SVN: r255503
2017-12-08 11:14:09 +00:00
Richard Earnshaw 940269b679 [arm] Generate a -mfpu= option for passing to the assembler
When gcc runs with the new -mfpu=auto option (either explicitly or
when that's the default behaviour) then this option is not passed
through to the assembler as we cannot rely on the assembler
understanding it (currently it doesn't understand it at all, but in
future that might change).  That means that the assembler falls back
to its builtin default, which may not correspond to what the user
expected based on the command-line options they passed.

Normally that wouldn't matter because assembler files generated by the
compiler will contain explicit directives that set the FPU type
directly and override any internal defaults; but when the compiler
driver is used to invoke the assembler directly (because the source
file ends in .s or .S) then this might cause a problem if that assumes
the FPU matches the compiler.

To address this, this patch makes the driver construct a -mfpu= option
for the assembler in the same way as the compiler generates an
internal .fpu directive.  As mentioned, this makes no difference if
the assembler file explicitly overrides the command line options, but
helps in the case where this is implicit.


	* config/arm/arm.h (arm_asm_auto_mfpu): Declare.
	(ASM_CPU_SPEC_FUNCTIONS): Add new rule asm_auto_mfpu.
	(ASM_CPU_SPEC): Use it if -mfpu is set to auto.
	* common/config/arm/arm-common.c (arm_asm_auto_mfpu): New function.
-- This line, and those below, will be ignored--

M    gcc/ChangeLog
M    gcc/common/config/arm/arm-common.c
M    gcc/config/arm/arm.h

From-SVN: r255502
2017-12-08 10:55:01 +00:00
Tristan Gingold 4a53066d0e re PR bootstrap/81470 (Bootstrap comparison failures in gcc/ada)
2017-06-08  Tristan Gingold  <gindold@adacore.com>

	PR ada/81470
	* dwarf2out.c (dwarf2out_do_cfi_startproc): Only emit
	.cfi_personality or .cfi_lsda if the eh data format is dwarf2.

From-SVN: r255501
2017-12-08 09:33:08 +00:00
Rainer Orth 1db9ce24bb Initialize new member of SOLARIS_ATTRIBUTE_TABLE
* config/sol2.h (SOLARIS_ATTRIBUTE_TABLE): Initialize new member
	of struct attribute_spec.

From-SVN: r255500
2017-12-08 09:27:40 +00:00
Richard Biener becb7a3660 re PR tree-optimization/81303 (410.bwaves regression caused by r249919)
2017-12-08  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/81303
	* gfortran.dg/pr81303.f: New testcase.
	* gfortran.dg/vect/pr81303.f: Likewise.

From-SVN: r255499
2017-12-08 08:22:08 +00:00
Julia Koval 3e4a6f9d6c Enable VNNI support [5/5]
gcc/
	* config/i386/avx512vnniintrin.h (_mm512_dpwssds_epi32,
	_mm512_mask_dpwssds_epi32, _mm512_maskz_dpwssds_epi32): New intrinsics.
	* config/i386/avx512vnnivlintrin.h (_mm256_dpwssds_epi32,
	_mm256_mask_dpwssds_epi32, _mm256_maskz_dpwssds_epi32,
	_mm_dpwssds_epi32, _mm_mask_dpwssds_epi32,
	_mm_maskz_dpwssds_epi32): Ditto.

gcc/testsuite/
	* gcc.target/i386/avx512f-vnni-1.c: Add checks for vdpdwssds.
	* gcc.target/i386/avx512vl-vnni-1.c: Ditto.
	* gcc.target/i386/avx512f-vpdpwssds-2.c: New test.
	* gcc.target/i386/avx512vl-vpdpwssds-2.c: Ditto.

From-SVN: r255498
2017-12-08 08:12:49 +00:00
Richard Biener 8da4c8d83b re PR tree-optimization/81303 (410.bwaves regression caused by r249919)
2017-12-08  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/81303
	* tree-vect-stmts.c (vect_is_simple_cond): For invariant
	conditions try to create a comparison vector type matching
	the data vector type.
	(vectorizable_condition): Adjust.
	* tree-vect-patterns.c (vect_recog_mask_conversion_pattern):
	Leave invariant conditions alone in case we can vectorize those.

	* gcc.target/i386/vectorize9.c: New testcase.
	* gcc.target/i386/vectorize10.c: New testcase.

From-SVN: r255497
2017-12-08 08:06:31 +00:00
Julia Koval 5cb7ca6033 Enable VNNI support [4/5]
gcc/
	* config/i386/avx512vnniintrin.h (_mm512_dpwssd_epi32,
	_mm512_mask_dpwssd_epi32, _mm512_maskz_dpwssd_epi32): New intrinsics.
	* config/i386/avx512vnnivlintrin.h (_mm256_dpwssd_epi32,
	_mm256_mask_dpwssd_epi32, _mm256_maskz_dpwssd_epi32, _mm_dpwssd_epi32,
	_mm_mask_dpwssd_epi32, _mm_maskz_dpwssd_epi32): Ditto.

gcc/testsuite/
	* gcc.target/i386/avx512f-vnni-1.c: Add vdpwssd checks.
	* gcc.target/i386/avx512vl-vnni-1.c: Ditto.
	* gcc.target/i386/avx512f-vpdpwssd-2.c: New.
	* gcc.target/i386/avx512vl-vpdpwssd-2.c: Ditto.

From-SVN: r255496
2017-12-08 08:05:33 +00:00
Julia Koval 17ecc36ec4 Enable VAES support [2/5]
gcc/
	* config.gcc: Add vaesintrin.h.
	* config/i386/i386-builtin-types.def (V64QI_FTYPE_V64QI_V64QI): New type.
	* config/i386/i386-builtin.def (__builtin_ia32_vaesdec_v16qi,
	__builtin_ia32_vaesdec_v32qi, __builtin_ia32_vaesdec_v64qi): New builtins.
	* config/i386/i386.c (ix86_expand_args_builtin): Handle new type.
	* config/i386/immintrin.h: Include vaesintrin.h.
	* config/i386/sse.md (vaesdec_<mode>): New pattern.
	* config/i386/vaesintrin.h (_mm256_aesdec_epi128, _mm512_aesdec_epi128,
	_mm_aesdec_epi128): New intrinsics.

gcc/testsuite/
	* gcc.target/i386/avx512-check.h: Handle bit_VAES.
	* gcc.target/i386/avx512f-aesdec-2.c: New test.
	* gcc.target/i386/avx512fvl-vaes-1.c: Ditto.
	* gcc.target/i386/avx512vl-aesdec-2.c: Ditto.
	* gcc.target/i386/i386.exp (check_effective_target_avx512vaes): New.

From-SVN: r255495
2017-12-08 05:04:26 +00:00
Sandra Loosemore 2632371c00 const-addr-1.c: New.
2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/testsuite/
	* gcc.target/nios2/const-addr-1.c: New.
	* gcc.target/nios2/const-addr-2.c: New.
	* gcc.target/nios2/const-addr-3.c: New.

From-SVN: r255494
2017-12-07 23:26:12 -05:00
Sandra Loosemore e0727ae56b nios2.md (ld<bhw_uns>io): Add splitter for memory operand.
2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/nios2/nios2.md (ld<bhw_uns>io): Add splitter for memory
	operand.
	(ld<bh>io_signed): Likewise.
	(st<bhw>io): Likewise.
	* config/nios2/predicates.md (ldstio_memory_operand): Allow
	SMALL_INT12 constant integer operand.

From-SVN: r255493
2017-12-07 23:24:21 -05:00
Sandra Loosemore df8ceba6a2 nios2.c (nios2_symbolic_constant_allowed): Rename to...
2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/nios2/nios2.c (nios2_symbolic_constant_allowed):
	Rename to...
	(nios2_large_constant_allowed): ...this.  Adjust uses.
	(nios2_plus_symbolic_constant_p): Rename to...
	(nios2_plus_large_constant_p): ...this.  Adjust uses.
	(nios2_legitimate_address_p): Correct CONST_INT handling.
	(nios2_symbolic_memory_operand_p): Rename to...
	(nios2_large_constant_memory_operand_p): ...this.  Adjust uses.
	(nios2_large_constant_p): Check for large constant integers too.
	(nios2_split_large_constant): Handle constant integers.
	(nios2_split_symbolic_memory_operand): Rename to...
	(nios2_split_large_constant_memory_operand): ...this.  Adjust uses.
	(nios2_legitimize_constant_address): Handle constant integers.
	(r0rel_constant_p): Handle small constant integers.
	(nios2_print_operand_address): Handle r0-relative integer addresses.
	* config/nios2/nios2-protos.h: Adjust for renamed functions.
	* config/nios2/nios2.md: Adjust for renamed functions.

From-SVN: r255492
2017-12-07 23:23:00 -05:00
Andrew Waterman 6cb0725cdb Add srodata section support to riscv port.
2017-12-07  Andrew Waterman  <andrew@sifive.com>
	gcc/
	* config/riscv/riscv.c (TARGET_ASM_SELECT_SECTION): New define.
	(TARGET_HAVE_SRODATA_SECTION): New define.
	(riscv_select_section): New function.

From-SVN: r255491
2017-12-07 16:44:13 -08:00
GCC Administrator 68a970039e Daily bump.
From-SVN: r255490
2017-12-08 00:16:13 +00:00
Jakub Jelinek 5bac1edb4f re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")
PR target/83252
	* gcc.target/i386/i386.exp (check_effective_target_bmi2): Moved to ...
	* lib/target-supports.exp (check_effective_target_bmi2): ... here.  Guard with
	i?86-*-* x86_64-*-*.
	* g++.dg/opt/pr83252.C: New test.

From-SVN: r255487
2017-12-08 01:03:28 +01:00
Jakub Jelinek 7f5aed1e5d re PR target/81906 (Calls to rint() wrongly optimized away starting in g++ 6)
PR target/81906
	* config/i386/i386.c (ix86_expand_rint): Handle flag_rounding_math.

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

From-SVN: r255486
2017-12-08 00:56:34 +01:00
Jakub Jelinek 9b6c97373a re PR tree-optimization/83075 (Invalid strncpy optimization)
PR tree-optimization/83075
	* gcc.dg/tree-ssa/strncpy-2.c: Use size_t instead of unsigned, add
	separate function with noipa attribute to also verify behavior when
	optimizers don't know the sizes and aliasing, verify resulting sizes
	and array content.  Add -Wstringop-overflow to dg-options.
	* gcc.dg/tree-ssa/strncat.c: Likewise.

From-SVN: r255485
2017-12-08 00:55:18 +01:00
Thomas Preud'homme 38b28c6eb2 Improve fstack_protector effective target
Effective target fstack_protector fails to return an error for
newlib-based target (such as arm-none-eabi targets) which does not
support stack protector. This is due to the test being too simplist for
stack protection code to be generated by GCC: it does not contain a
local buffer and does not read unknown input.

This commit adds a small local buffer with a copy of the filename to
trigger stack protector code to be generated. The filename is used
instead of the full path so as to ensure the size will fit in the local
buffer.

2017-12-07  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/testsuite/
    * lib/target-supports.exp (check_effective_target_fstack_protector):
    Copy filename in local buffer to trigger stack protection.

From-SVN: r255484
2017-12-07 21:48:35 +00:00
David Edelsohn d3861707eb re PR libstdc++/83120 (ext/special_functions/hyperg failure on AIX)
PR libstdc++/83120
        * testsuite/ext/special_functions/hyperg/check_value.cc: Add
        -ffp-contract=off. Add -ffloat-store for m68* and ia32.
        * testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc: Same.

From-SVN: r255483
2017-12-07 15:05:59 -05:00
Joseph Myers 4b2b493f86 Allow _Alignas in compound literals (C11 DR#444).
C11 DR#444 dealt with how C11 intended to allow alignment specifiers
on struct and union members, but failed to include that in the syntax.
The final resolution of that DR also allows alignment specifiers in
type names in compound literals (in order to apply an increased
alignment to the unnamed object created by the compound literal), but
not other cases of type names.

This patch implements allowing alignment specifiers in compound
literals and adds tests for the resolution of the DR (including that
they are allowed on struct and union members, which GCC already
implemented).  Because the parser has to parse the parenthesized type
name of a compound literal before it can tell that it's a compound
literal (rather than, depending on the context, a cast expression or
sizeof (type-name) or _Alignof (type-name)), this means _Alignas
specifiers are allowed syntactically in those contexts and then an
error is given once it's known to be an invalid use (whereas _Alignas
specifiers are disallowed syntactically in other contexts where type
names can occur and a compound literal is not possible).

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c:
	* c-decl.c (build_compound_literal): Add parameter alignas_align
	and set alignment of decl if nonzero.
	* c-parser.c (c_keyword_starts_typename): Allow RID_ALIGNAS.
	(c_parser_declspecs): Allow RID_ALIGNAS to follow a type, like a
	qualifier.
	(c_parser_struct_declaration): Update syntax comment.
	(c_parser_type_name): Add alignas_ok argument and pass it to
	c_parser_declspecs.
	(c_parser_cast_expression): Pass true to c_parser_type_name and
	give error if a cast used an _Alignas specifier.
	(c_parser_sizeof_expression): Pass true to c_parser_type_name and
	give error if sizeof (type-name) used an _Alignas specifier.
	(c_parser_alignof_expression): Pass true to c_parser_type_name and
	give error if _Alignof (type-name) used an _Alignas specifier.
	(c_parser_postfix_expression_after_paren_type): Check specified
	alignment for a compound literal and pass it to
	build_compound_literal.
	* c-parser.h (c_parser_type_name): Update prototype.
	* c-tree.h (build_compound_literal): Update prototype.

gcc/testsuite:
	* gcc.dg/c11-align-7.c, gcc.dg/c11-align-8.c,
	gcc.dg/c11-align-9.c, gcc.dg/gnu11-align-1.c: New tests.
	* gcc.dg/c11-align-5.c (test): Update expected error for sizeof
	case.

From-SVN: r255482
2017-12-07 18:47:20 +00:00
Richard Sandiford c348cab062 [AArch64] Fix ICEs in aarch64_print_operand
Three related regression fixes:

- We can't use asserts like:

    gcc_assert (GET_MODE_SIZE (mode) == 16);

  in aarch64_print_operand because it could trigger for invalid user input.

- The output_operand_lossage in aarch64_print_address_internal:

    output_operand_lossage ("invalid operand for '%%%c'", op);

  wasn't right because "op" is an rtx_code enum rather than the
  prefix character.

- aarch64_print_operand_address shouldn't call output_operand_lossage
  (because it doesn't have a prefix code) but instead fall back to
  output_addr_const.

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

gcc/
	* config/aarch64/aarch64.c (aarch64_print_address_internal): Return
	a bool success value.  Don't call output_operand_lossage here.
	(aarch64_print_ldpstp_address): Return a bool success value.
	(aarch64_print_operand_address): Call output_addr_const if
	aarch64_print_address_internal fails.
	(aarch64_print_operand): Don't assert that the mode is 16 bytes for
	'y'; call output_operand_lossage instead.  Call output_operand_lossage
	if aarch64_print_ldpstp_address fails.

gcc/testsuite/
	* gcc.target/aarch64/asm-2.c: New test.
	* gcc.target/aarch64/asm-3.c: Likewise.

From-SVN: r255481
2017-12-07 18:43:40 +00:00
Richard Sandiford 63570af0b5 Make more use of VECTOR_CST_ENCODED_ELT
This patch makes various bits of code operate directly on the new
VECTOR_CST encoding, instead of using VECTOR_CST_ELT on all elements
of the vector.

Previous patches handled operations that produce a new VECTOR_CST,
while this patch handles things like predicates.  It also makes
print_node dump the encoding instead of the full vector that
the encoding represents.

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

gcc/
	* tree-vector-builder.h
	(tree_vector_builder::binary_encoded_nelts): Declare.
	* tree-vector-builder.c
	(tree_vector_builder::binary_encoded_nelts): New function.
	* fold-const.c (negate_expr_p): Likewise.
	(operand_equal_p, fold_checksum_tree): Likewise.
	* tree-loop-distribution.c (const_with_all_bytes_same): Likewise.
	* tree.c (integer_zerop, integer_onep, integer_all_onesp, real_zerop)
	(real_onep, real_minus_onep, add_expr, initializer_zerop): Likewise.
	(uniform_vector_p): Likewise.
	* varasm.c (const_hash_1, compare_constant): Likewise.
	* tree-ssa-ccp.c: Include tree-vector-builder.h.
	(valid_lattice_transition): Operate directly on the VECTOR_CST
	encoding.
	* ipa-icf.c: Include tree-vector-builder.h.
	(sem_variable::equals): Operate directly on the VECTOR_CST encoding.
	* print-tree.c (print_node): Print encoding of VECTOR_CSTs.

From-SVN: r255480
2017-12-07 18:42:41 +00:00
Richard Sandiford 44e1aae4db Make build_vector static
The only remaining uses of build_vector are in the selftests in tree.c.
This patch makes it static and moves it to the selftest part of the file.

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

gcc/
	* tree.c (build_vector): Delete.
	* tree.h (build_vector): Make static and move into the self-testing
	block.

From-SVN: r255479
2017-12-07 18:42:14 +00:00
Richard Sandiford abe73c3d32 Make gimple_build_vector take a tree_vector_builder
This patch changes gimple_build_vector so that it takes a
tree_vector_builder instead of a size and a vector of trees.

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

gcc/
	* vector-builder.h (vector_builder::derived): New const overload.
	(vector_builder::elt): New function.
	* tree-vector-builder.h (tree_vector_builder::type): New function.
	(tree_vector_builder::apply_step): Declare.
	* tree-vector-builder.c (tree_vector_builder::apply_step): New
	function.
	* gimple-fold.h (tree_vector_builder): Declare.
	(gimple_build_vector): Take a tree_vector_builder instead of a
	type and vector of elements.
	* gimple-fold.c (gimple_build_vector): Likewise.
	* tree-vect-loop.c (get_initial_def_for_reduction): Update call
	accordingly.
	(get_initial_defs_for_reduction): Likewise.
	(vectorizable_induction): Likewise.

From-SVN: r255478
2017-12-07 18:41:59 +00:00
Richard Sandiford b3def403fa Use tree_vector_builder::new_binary_operation for folding
This patch makes fold-const.c operate directly on the VECTOR_CST
encoding when folding an operation that has two VECTOR_CST inputs.

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

gcc/
	* tree-vector-builder.h
	(tree_vector_builder::new_binary_operation): Declare.
	* tree-vector-builder.c
	(tree_vector_builder::new_binary_operation): New function.
	* fold-const.c (fold_relational_const): Use it.
	(const_binop): Likewise.  Check that both input vectors have
	the same number of elements, thus excluding things like WIDEN_SUM.
	Check whether it is possible to operate directly on the encodings
	of stepped inputs.

From-SVN: r255477
2017-12-07 18:41:35 +00:00
Richard Sandiford 059c18abcb Use tree_vector_builder::new_unary_operation for folding
This patch makes fold-const.c operate directly on the VECTOR_CST
encoding when folding an operation that has a single VECTOR_CST input.

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

gcc/
	* fold-const.c (fold_negate_expr_1): Use tree_vector_builder and
	new_unary_operation, operating only on the encoded elements.
	(const_unop): Likewise.
	(exact_inverse): Likewise.
	(distributes_over_addition_p): New function.
	(const_binop): Use tree_vector_builder and new_unary_operation
	for combinations of VECTOR_CST and INTEGER_CST.  Operate only
	on the encoded elements unless the encoding is strided and the
	operation does not distribute over addition.
	(fold_convert_const):  Use tree_vector_builder and
	new_unary_operation.  Operate only on the encoded elements
	for truncating integer conversions, or for non-stepped encodings.

From-SVN: r255476
2017-12-07 18:41:13 +00:00
Richard Sandiford 5ebaa4774f Use tree_vector_builder instead of build_vector
This patch switches most build_vector calls over to tree_vector_builder,
using explicit encodings where appropriate.  Later patches handle
the remaining uses of build_vector.

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

gcc/
	* config/sparc/sparc.c: Include tree-vector-builder.h.
	(sparc_fold_builtin): Use tree_vector_builder instead of build_vector.
	* expmed.c: Include tree-vector-builder.h.
	(make_tree): Use tree_vector_builder instead of build_vector.
	* fold-const.c: Include tree-vector-builder.h.
	(const_binop): Use tree_vector_builder instead of build_vector.
	(const_unop): Likewise.
	(native_interpret_vector): Likewise.
	(fold_vec_perm): Likewise.
	(fold_ternary_loc): Likewise.
	* gimple-fold.c: Include tree-vector-builder.h.
	(gimple_fold_stmt_to_constant_1): Use tree_vector_builder instead
	of build_vector.
	* tree-ssa-forwprop.c: Include tree-vector-builder.h.
	(simplify_vector_constructor): Use tree_vector_builder instead
	of build_vector.
	* tree-vect-generic.c: Include tree-vector-builder.h.
	(add_rshift): Use tree_vector_builder instead of build_vector.
	(expand_vector_divmod): Likewise.
	(optimize_vector_constructor): Likewise.
	* tree-vect-loop.c: Include tree-vector-builder.h.
	(vect_create_epilog_for_reduction): Use tree_vector_builder instead
	of build_vector.  Explicitly use a stepped encoding for
	{ 1, 2, 3, ... }.
	* tree-vect-slp.c: Include tree-vector-builder.h.
	(vect_get_constant_vectors): Use tree_vector_builder instead
	of build_vector.
	(vect_transform_slp_perm_load): Likewise.
	(vect_schedule_slp_instance): Likewise.
	* tree-vect-stmts.c: Include tree-vector-builder.h.
	(vectorizable_bswap): Use tree_vector_builder instead of build_vector.
	(vect_gen_perm_mask_any): Likewise.
	(vectorizable_call): Likewise.  Explicitly use a stepped encoding.
	* tree.c: (build_vector_from_ctor): Use tree_vector_builder instead
	of build_vector.
	(build_vector_from_val): Likewise.  Explicitly use a duplicate
	encoding.

From-SVN: r255475
2017-12-07 18:40:50 +00:00
Richard Sandiford 734914b6e2 New VECTOR_CST layout
This patch uses a simple compression scheme to represent the contents
of a VECTOR_CST using its leading elements.  There are three formats:

1) a repeating sequence of N values.  This is encoded using the first
   N elements.

2) a "foreground" sequence of N values inserted at the beginning of
   a "background" repeating sequence of N values, such as:
   { 1, 2, 0, 0, 0, 0, ... }.  This is encoded using the first 2*N
   elements.

2) a "foreground" sequence of N values inserted at the beginning of
   a "background" repeating sequence of N interleaved linear series,
   such as: { 0, 0, 8, 10, 9, 11, 10, 12, ... }.  This is encoded
   using the first 3*N elements.  In practice the foreground values
   are often part of the same series as the background values,
   such as: { 1, 11, 2, 12, 3, 13, ... }.

This reduces the amount of work involved in processing simple
vector constants and means that the encoding extends naturally
to variable-length vectors.

2017-12-07  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* doc/generic.texi (VECTOR_CST): Describe new representation of
	vector constants.
	* vector-builder.h: New file.
	* tree-vector-builder.h: Likewise.
	* tree-vector-builder.c: Likewise.
	* Makefile.in (OBJS): Add tree-vector-builder.o.
	* tree.def (VECTOR_CST): Update comment to refer to generic.texi.
	* tree-core.h (tree_base): Add a vector_cst field to the u union.
	(tree_vector): Change the number of elements to
	vector_cst_encoded_nelts.
	* tree.h (VECTOR_CST_NELTS): Redefine using TYPE_VECTOR_SUBPARTS.
	(VECTOR_CST_ELTS): Delete.
	(VECTOR_CST_ELT): Redefine using vector_cst_elt.
	(VECTOR_CST_LOG2_NPATTERNS, VECTOR_CST_NPATTERNS): New macros.
	(VECTOR_CST_NELTS_PER_PATTERN, VECTOR_CST_DUPLICATE_P): Likewise.
	(VECTOR_CST_STEPPED_P, VECTOR_CST_ENCODED_ELTS): Likewise.
	(VECTOR_CST_ENCODED_ELT): Likewise.
	(vector_cst_encoded_nelts): New function.
	(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
	VECTOR_CST_NELTS_PER_PATTERN as arguments.
	(vector_cst_int_elt, vector_cst_elt): Declare.
	* tree.c: Include tree-vector-builder.h.
	(tree_code_size): Abort if passed VECTOR_CST.
	(tree_size): Update for new VECTOR_CST layout.
	(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
	VECTOR_CST_NELTS_PER_PATTERN as arguments.
	(build_vector): Use tree_vector_builder.
	(vector_cst_int_elt, vector_cst_elt): New functions.
	(drop_tree_overflow): For VECTOR_CST, drop the TREE_OVERFLOW from the
	encoded elements and then create the vector in the canonical form.
	(check_vector_cst, check_vector_cst_duplicate, check_vector_cst_fill)
	(check_vector_cst_stepped, test_vector_cst_patterns): New functions.
	(tree_c_tests): Call test_vector_cst_patterns.
	* lto-streamer-out.c (DFS::DFS_write_tree_body): Handle the new
	VECTOR_CST fields.
	(hash_tree): Likewise.
	* tree-streamer-out.c (write_ts_vector_tree_pointers): Likewise.
	(streamer_write_tree_header): Likewise.
	* tree-streamer-in.c (lto_input_ts_vector_tree_pointers): Likewise.
	(streamer_alloc_tree): Likewise.  Update call to make_vector.
	* fold-const.c (fold_ternary_loc): Avoid using VECTOR_CST_ELTS.

gcc/lto/
	* lto.c (compare_tree_sccs_1): Compare the new VECTOR_CST flags.

From-SVN: r255474
2017-12-07 18:40:28 +00:00
Richard Sandiford a0e7e36ebf Add underscores to local vars in selftest macros
Allows functions doing selftests to take parameters with names like
"actual".

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

gcc/
	* selftest.h (ASSERT_TRUE_AT, ASSERT_FALSE_AT, ASSERT_EQ_AT)
	(ASSERT_NE, ASSERT_PRED1): Add underscores to local variable names
	* selftest-rtl.h (ASSERT_RTX_EQ, ASSERT_RTX_PTR_EQ): Likewise.

From-SVN: r255473
2017-12-07 18:40:06 +00:00
Bin Cheng fbdec14e80 re PR tree-optimization/81303 (410.bwaves regression caused by r249919)
PR tree-optimization/81303
	* Makefile.in (gimple-loop-interchange.o): New object file.
	* common.opt (floop-interchange): Reuse the option from graphite.
	* doc/invoke.texi (-floop-interchange): Ditto.  New document for
	-floop-interchange and mention it for -O3.
	* opts.c (default_options_table): Enable -floop-interchange at -O3.
	* gimple-loop-interchange.cc: New file.
	* params.def (PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS): New parameter.
	(PARAM_LOOP_INTERCHANGE_STRIDE_RATIO): New parameter.
	* passes.def (pass_linterchange): New pass.
	* timevar.def (TV_LINTERCHANGE): New time var.
	* tree-pass.h (make_pass_linterchange): New declaration.
	* tree-ssa-loop-ivcanon.c (create_canonical_iv): Change to external
	interchange.  Record IV before/after increment in new parameters.
	* tree-ssa-loop-ivopts.h (create_canonical_iv): New declaration.
	* tree-vect-loop.c (vect_is_simple_reduction): Factor out reduction
	path check into...
	(check_reduction_path): ...New function here.
	* tree-vectorizer.h (check_reduction_path): New declaration.

	gcc/testsuite
	* gcc.dg/tree-ssa/loop-interchange-1.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-1b.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-2.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-3.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-4.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-5.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-6.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-7.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-8.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-9.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-10.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-11.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-12.c: New test.
	* gcc.dg/tree-ssa/loop-interchange-13.c: New test.

Co-Authored-By: Richard Biener <rguenther@suse.de>

From-SVN: r255472
2017-12-07 18:03:53 +00:00
Vladimir Makarov 75214935be re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")
2017-12-07  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/83252
	PR rtl-optimization/80818
	* lra.c (add_regs_to_insn_regno_info): Make a hard reg in CLOBBER
	always early clobbered.
	* lra-lives.c (process_bb_lives): Check input hard regs for early
	clobbered non-operand hard reg.

From-SVN: r255471
2017-12-07 17:50:54 +00:00
Jakub Jelinek 47f5f7e749 re PR middle-end/83164 (internal compiler error: verify_gimple failed)
PR middle-end/83164
	* tree-cfg.c (verify_gimple_assign_binary): Don't require
	types_compatible_p, just that TYPE_MODE is the same.

	* gcc.c-torture/compile/pr83164.c: New test.

From-SVN: r255470
2017-12-07 18:06:08 +01:00
Martin Sebor 5d9ae53d70 PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
PR c/81566 - invalid attribute aligned accepted on functions

gcc/ada/ChangeLog:

	PR c/81544
	* gcc-interface/utils.c (gnat_internal_attribute_table): Initialize
	new member of struct attribute_spec.

gcc/c/ChangeLog:

	PR c/81544
	* c-decl.c (c_decl_attributes): Look up existing declaration and
	pass it to decl_attributes.

gcc/c-family/ChangeLog:

	PR c/81544
	PR c/81566
	* c-attribs.c (attr_aligned_exclusions): New array.
	(attr_alloc_exclusions, attr_cold_hot_exclusions): Same.
	(attr_common_exclusions, attr_const_pure_exclusions): Same.
	(attr_gnu_inline_exclusions, attr_inline_exclusions): Same.
	(attr_noreturn_exclusions, attr_returns_twice_exclusions): Same.
	(attr_warn_unused_result_exclusions): Same.
	(handle_hot_attribute, handle_cold_attribute): Simplify.
	(handle_const_attribute): Warn on function returning void.
	(handle_pure_attribute): Same.
	(handle_aligned_attribute): Diagnose conflicting attribute
	specifications.
	* c-warn.c (diagnose_mismatched_attributes): Simplify.

gcc/cp/ChangeLog:

	PR c/81544
	* cp-tree.h (decls_match): Add default argument.
	* decl.c (decls_match): Avoid calling into the target back end
	and triggering an error.
	* decl2.c (cplus_decl_attributes): Look up existing declaration and
	pass it to decl_attributes.
	* tree.c (cxx_attribute_table): Initialize new member of struct
	attribute_spec.

gcc/fortran/ChangeLog:

	PR c/81544
	* f95-lang.c (gfc_attribute_table): Initialize new member of struct
	attribute_spec.

gcc/lto/ChangeLog:

	PR c/81544
	* lto-lang.c (lto_attribute_table): Initialize new member of struct
	attribute_spec.

gcc/ChangeLog:

	PR c/81544
	* attribs.c (empty_attribute_table): Initialize new member of
	struct attribute_spec.
	(decl_attributes): Add argument.  Handle mutually exclusive
	combinations of attributes.
	(selftests::test_attribute_exclusions): New function.
	(selftests::attribute_c_tests): Ditto.
	* attribs.h (decl_attributes): Add default argument.
	* selftest.h (attribute_c_tests): Declare.
	* selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests.
	* tree-core.h (attribute_spec::exclusions, exclude): New type and
	member.
	* doc/extend.texi (Common Function Attributes): Update const and pure.

gcc/testsuite/ChangeLog:

	PR c/81544
	* c-c++-common/Wattributes-2.c: New test.
	* c-c++-common/Wattributes.c: New test.
	* c-c++-common/attributes-3.c: Adjust.
	* gcc.dg/Wattributes-6.c: New test.
	* gcc.dg/Wattributes-7.c: New test.
	* gcc.dg/attr-noinline.c
	* gcc.dg/pr44964.c: Same.
	* gcc.dg/torture/pr42363.c: Same.
	* gcc.dg/tree-ssa/ssa-ccp-2.c: Same.

From-SVN: r255469
2017-12-07 09:32:03 -07:00
Tamar Christina 1d8b0222b1 re PR target/82641 (Unable to enable crc32 for a certain function with target attribute on ARM (aarch32))
2017-12-07  Tamar Christina  <tamar.christina@arm.com>

	PR target/82641
	* config/arm/arm.c (INCLUDE_STRING): Define.
	(arm_last_printed_arch_string, arm_last_printed_fpu_string): New.
	(arm_declare_function_name): Conservatively emit .arch, .arch_extensions
	and .fpu.

gcc/testsuite/
2017-12-07  Tamar Christina  <tamar.christina@arm.com>

	PR target/82641
	* gcc.target/arm/pragma_arch_attribute_2.c: New.
	* gcc.target/arm/pragma_arch_attribute_2.c: New.
	* gcc.target/arm/pragma_arch_attribute_3.c: New.
	* gcc.target/arm/pragma_fpu_attribute.c: New.
	* gcc.target/arm/pragma_fpu_attribute_2.c: New.

From-SVN: r255468
2017-12-07 14:54:22 +00:00
Michael Matz 1cc521f1a8 Add unroll and jam pass
* gimple-loop-jam.c: New file.
	* Makefile.in (OBJS): Add gimple-loop-jam.o.
	* common.opt (funroll-and-jam): New option.
	* opts.c (default_options_table): Add unroll-and-jam at -O3.
	* params.def (PARAM_UNROLL_JAM_MIN_PERCENT): New param.
	(PARAM_UNROLL_JAM_MAX_UNROLL): Ditto.
	* passes.def: Add pass_loop_jam.
	* timevar.def (TV_LOOP_JAM): Add.
	* tree-pass.h (make_pass_loop_jam): Declare.
	* cfgloop.c (flow_loop_tree_node_add): Add AFTER argument.
	* cfgloop.h (flow_loop_tree_node_add): Adjust declaration.
	* cfgloopmanip.c (duplicate_loop): Add AFTER argument, adjust call
	to flow_loop_tree_node_add.
	(duplicate_subloops, copy_loops_to): Append to sibling list.
	* cfgloopmanip.h: (duplicate_loop): Adjust declaration.
	* doc/invoke.texi (-funroll-and-jam): Document new option.
	(unroll-jam-min-percent, unroll-jam-max-unroll): Document new params.

testsuite/
	* gcc.dg/unroll-and-jam.c: New test.

From-SVN: r255467
2017-12-07 14:49:54 +00:00
Richard Biener 5a40ae3c3a re PR tree-optimization/83296 (missing -Wstringop-overflow due to missing range info for MAX_EXPR)
2017-12-07  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/83296
	PR tree-optimization/67769
	* tree-ssa-phiopt.c (conditional_replacement): Do not reset
	flow sensitive info in an unrelated BB.
	(value_replacement): Use reset_flow_sensitive_info.
	(minmax_replacement): Reset flow sensitive info on the def
	we move.  Do not reset flow sensitive info in the whole BB
	we move the stmt to.
	(abs_replacement): Likewise.

	* g++.dg/warn/Wstringop-overflow-1.C: New testcase.

From-SVN: r255466
2017-12-07 13:21:51 +00:00