Commit Graph

176770 Commits

Author SHA1 Message Date
Richard Biener
584a3c080b tree-optimization/92260 - improve fix
This improves the fix for PR92260 changing the number of vector
computation to the canonical one, not needing to look at the
using stmt.

2020-05-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/92260
	* tree-vect-slp.c (vect_get_constant_vectors): Compute
	the number of vector stmts in a canonical way.
2020-05-15 13:54:32 +02:00
Martin Liska
f8e1c0c018
Fix clang [-Wmisleading-indentation] in hsa-gen.c.
* hsa-gen.c (get_symbol_for_decl): Fix misleading indentation
	warning.
2020-05-15 12:34:27 +02:00
Andrew Stubbs
b8db70e1f1 WIP amdgcn: use unsigned extend for lshiftrt
This fixes a wrong-code logic error in a previous patch.
Detected by gcc.c-torture/execute/pr53645-2.c.

2020-05-15  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn-valu.md (v<expander><mode>3): Fix unsignedp.
2020-05-15 11:26:12 +01:00
Andrew Burgess
c9a41202b2 contrib: Handle GDB specific test result types
This commit is for the benefit of GDB, but as the binutils-gdb
repository shares the contrib/ directory with gcc, this commit must
first be applied to gcc then copied back to binutils-gdb.

This commit extends the two scripts contrib/dg-extract-results.{py,sh}
to handle some new, GDB specific test result types.  These test
results types should never appear in GCC, or any other tool that
shares the contrib/ directly, so this change should be harmless.

In this patch series:
  https://sourceware.org/pipermail/gdb-patches/2020-April/167847.html
changes were made in GDB's use of Dejagnu so that two additional
conditions could be detected, these are:

  1. Test names that contain either the build or source paths.  Such
  test names make it difficult to compare the results of two test runs
  of GDB from two different directories, and

  2. Duplicate test names.  Duplicates make it difficult to track down
  exactly which test has failed.

When running Dejagnu on GDB we can now (sometimes) see two additional
test result types matching the above conditions, these are '# of paths
in test names' and '# of duplicate test names'.

If the test is run in parallel mode (make -j...) then these extra test
results will appear in the individual test summary files, but are not
merged into the final summary file.

Additionally, within the summary file there are now two new types of
test summary line, these are 'PATH: ...' and 'DUPLICATE: ...', these
allow users to quickly search the test summary to track down where the
offending test names are.  These lines are similarly not merged into
the unified gdb.sum file after a parallel test run.

This commit extends the dg-extract-results.* scripts to calculate the
totals for the two new result types, and to copy the new test summary
lines into the unified summary file.

contrib/ChangeLog:

	* dg-extract-results.py: Handle GDB specific test types.
	* dg-extract-results.sh: Likewise.
2020-05-15 11:19:15 +01:00
Richard Biener
aaf1ee4831 tree-optimization/95133 - avoid abnormal edges in path splitting
When path splitting tries to detect a CFG diamond make sure it
is composed of normal (non-EH, not abnormal) edges.  Otherwise
CFG manipulation later may fail.

2020-05-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95133
	* gimple-ssa-split-paths.c
	(find_block_to_duplicate_for_splitting_paths): Check for
	normal edges.

	* gcc.dg/pr95133.c: New testcase.
2020-05-15 12:11:37 +02:00
Christophe Lyon
62af27e77b arm: Add support for interrupt routines to reg_needs_saving_p
reg_needs_saving_p is only used when dealing with non-interrupt
routines, but it makes sense to extend it to support that context too,
and make arm_compute_save_reg0_reg12_mask use it.

Save only live registers for non-leaf functions, but assume a callee
could clobber any register.

2020-05-15  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.c (reg_needs_saving_p): Add support for interrupt
	routines.
	(arm_compute_save_reg0_reg12_mask): Use reg_needs_saving_p.
2020-05-15 09:57:57 +00:00
Tobias Burnus
9f0f7da9aa [OpenMP] Fix 'omp exit data' for Fortran arrays (PR 94635)
gcc/
	PR middle-end/94635
	* gimplify.c (gimplify_scan_omp_clauses): For MAP_TO_PSET with
	OMP_TARGET_EXIT_DATA, use 'release:' unless the associated
	item is 'delete:'.

gcc/testsuite
	PR middle-end/94635
	* gfortran.dg/gomp/target-exit-data.f90: New.
2020-05-15 11:54:02 +02:00
Iain Buclaw
3a55774f0b libiberty: Handle @live attribute in D demangler.
Adds support for demangling D functions annotated with the new
ownership/borrowing system attribute.

libiberty/ChangeLog:

	* d-demangle.c (dlang_attributes): Add @live attribute.
	* testsuite/d-demangle-expected: Add new tests.
2020-05-15 10:40:47 +02:00
Uros Bizjak
f8b0665445 i386: Add V2SFmode hadd/hsub instructions [PR95046]
PFACC/PFNACC 3dNow! instructions got their corresponding SSE alternative
in SSE3, so these can't be implemented with TARGET_MMX_WITH_SSE, which
implies SSE2.  These instructions are only generated via builtins, and
since several 3dNow! insns have no corresponding SSE alternative,
we can't avoid MMX registers with 3dNow! builtins anyway.

Add SSE3/AVX alternatives to the insn pattern, so compiler will be able
to use XMM registers when available, but don't prevent MMX registers,
since they are needed when SSE3 is not active.

Add additional generic insn patterns, used by the combiner to
synthesize horizontal V2SFmode add/sub instructions.  These patterns
are active for TARGET_MMX_WITH_SSE only, and use only XMM registers.

gcc/ChangeLog:

	PR target/95046
	* config/i386/i386.md (isa): Add sse3_noavx.
	(enabled): Handle sse3_noavx.

	* config/i386/mmx.md (mmx_haddv2sf3): New expander.
	(*mmx_haddv2sf3): Rename from mmx_haddv2sf3.  Add SSE/AVX
	alternatives.  Match commutative vec_select selector operands.
	(*mmx_haddv2sf3_low): New insn pattern.

	(*mmx_hsubv2sf3): Add SSE/AVX alternatives.
	(*mmx_hsubv2sf3_low): New insn pattern.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-8.c: New test.
2020-05-15 10:02:00 +02:00
Uros Bizjak
f4356120ba i386: Add V2SFmode hadd/hsub instructions [PR95046]
PFACC/PFNACC 3dNow! instructions got their corresponding SSE alternative
in SSE3, so these can't be implemented with TARGET_MMX_WITH_SSE, which
implies SSE2.  These instructions are only generated via builtins, and
since several 3dNow! insns have no corresponding SSE alternative,
we can't avoid MMX registers with 3dNow! builtins anyway.

Add SSE3/AVX alternatives to the insn pattern, so compiler will be able
to use XMM registers when available, but don't prevent MMX registers,
since they are needed when SSE3 is not active.

Add additional generic insn patterns, used by the combiner to
synthesize horizontal V2SFmode add/sub instructions.  These patterns
are active for TARGET_MMX_WITH_SSE only, and use only XMM registers.

gcc/ChangeLog:

	PR target/95046
	* config/i386/i386.md (isa): Add sse3_noavx.
	(enabled): Handle sse3_noavx.

	* config/i386/mmx.md (mmx_haddv2sf3): New expander.
	(*mmx_haddv2sf3): Rename from mmx_haddv2sf3.  Add SSE/AVX
	alternatives.  Match commutative vec_select selector operands.
	(*mmx_haddv2sf3_low): New insn pattern.

	(*mmx_hsubv2sf3): Add SSE/AVX alternatives.
	(*mmx_hsubv2sf3_low): New insn pattern.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-8.c: New test.
2020-05-15 09:24:38 +02:00
Richard Biener
84935c9822 tree-optimization/33315 - common stores during sinking
This implements commoning of stores to a common successor in
a simple ad-hoc way.  I've decided to put it into the code sinking
pass since, well, it sinks stores.  It's still separate since
it does not really sink code into less executed places.

It's ad-hoc since it does not perform any dataflow or alias analysis
but simply only considers trailing stores in a block, iteratively
though.  If the stores are from different values a PHI node is
inserted to merge them.  gcc.dg/tree-ssa/split-path-7.c shows
that path splitting will eventually undo this very transform,
I've decided to not bother with it and simply disable sinking for
the particular testcase.

Doing this transform is good for code size when the stores are
from constants, once we have to insert PHIs the situation becomes
less clear but it's a transform we do elsewhere as well
(cselim for one), and reversing the transform should be easy.

2020-05-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/33315
	* tree-ssa-sink.c: Include tree-eh.h.
	(sink_stats): Add commoned member.
	(sink_common_stores_to_bb): New function implementing store
	commoning by sinking to the successor.
	(sink_code_in_bb): Call it, pass down TODO_cleanup_cfg returned.
	(pass_sink_code::execute): Likewise.  Record commoned stores
	in statistics.

	* gcc.dg/tree-ssa/ssa-sink-13.c: New testcase.
	* gcc.dg/tree-ssa/ssa-sink-14.c: Likewise.
	* gcc.dg/tree-ssa/split-path-7.c: Disable sinking.
2020-05-15 08:56:08 +02:00
Xionghu Luo
8a15faa730 Fold (add -1; zero_ext; add +1) operations to zero_ext when not overflow(PR37451, PR61837)
This "subtract/extend/add" existed for a long time and still annoying us
(PR37451, part of PR61837) when converting from 32bits to 64bits, as the ctr
register is used as 64bits on powerpc64, Andraw Pinski had a patch but
caused some issue and reverted by Joseph S. Myers(PR37451, PR37782).

Andraw:
http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01070.html
http://gcc.gnu.org/ml/gcc-patches/2008-10/msg01321.html
Joseph:
https://gcc.gnu.org/legacy-ml/gcc-patches/2011-11/msg02405.html

We still can do the simplification from "subtract/zero_ext/add" to "zero_ext"
when loop iterations is known to be LT than MODE_MAX (only do simplify
when counter+0x1 NOT overflow).

Bootstrap and regression tested pass on Power8-LE.

gcc/ChangeLog

	2020-05-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>

	PR rtl-optimization/37451, part of PR target/61837
	* loop-doloop.c (doloop_simplify_count): New function.  Simplify
	(add -1; zero_ext; add +1) to zero_ext when not wrapping.
	(doloop_modify): Call doloop_simplify_count.

gcc/testsuite/ChangeLog

	2020-05-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>

	PR rtl-optimization/37451, part of PR target/61837
	* gcc.target/powerpc/doloop-2.c: New test.
2020-05-14 21:06:50 -05:00
GCC Administrator
98aad12cd2 Daily bump. 2020-05-15 00:16:15 +00:00
H.J. Lu
d2a359fe5d Skip jit tests for targets that don't support -lgccjit
Since libgccjit.so is linked into jit tests, skip jit tests for targets
that don't support -lgccjit.

gcc/

	PR jit/94778
	* doc/sourcebuild.texi: Document effective target lgccjit.

gcc/testsuite/

	PR jit/94778
	* jit.dg/jit.exp: Skip jit tests for targets that don't support
	-lgccjit.
	* lib/target-supports.exp (check_effective_target_lgccjit): New.
2020-05-14 16:35:03 -07:00
Iain Buclaw
3f30a27491 libiberty: Update D symbol demangling for latest ABI spec.
Some small improvements and clarifications have been done in the D ABI
specification to remove all ambiguities found in the current grammar,
this implementation now more closely resembles the spec, whilst
maintaining compatibility with the old ABI.

Three new rules have been added to the ABI.

1. Back references using 'Q', analogous to C++ substitutions, compresses
   repeated identifiers, types, and template symbol and value parameters.

2. Template aliases to externally mangled symbols are prefixed with 'X'.
   This includes any symbol that isn't extern(D), or has its name
   overriden with pragma(mangle).  This fixes an ambiguity where it was
   not clear whether 'V' was an encoded calling convention, or the next
   template value parameter.

3. Alias parameters, templates, and tuple symbols no longer encode the
   symbol length of its subpart.  Tuples are now terminated with 'Z'.
   This fixes another ambiguity where the first character of the mangled
   name can be a digit as well, so the demangler had to figure out where
   to split the two adjacent numbers by trying out each combination.

libiberty/ChangeLog:

	* d-demangle.c (enum dlang_symbol_kinds): Remove enum.
	(struct dlang_info): New struct
	(dlang_decode_backref): New function.
	(dlang_backref): New function.
	(dlang_symbol_backref): New function.
	(dlang_type_backref): New function.
	(dlang_symbol_name_p): New function.
	(dlang_function_type_noreturn): New function.
	(dlang_function_type): Add 'info' parameter.  Decode function type
	with dlang_function_type_noreturn.
	(dlang_function_args): Add 'info' parameter.
	(dlang_type): Add 'info' parameter.  Handle back referenced types.
	(dlang_identifier): Replace 'kind' parameter with 'info'.  Handle back
	referenced symbols.  Split off decoding of plain identifiers to...
	(dlang_lname): ...here.
	(dlang_parse_mangle): Replace 'kind' parameter with 'info'.  Decode
	function type and return with dlang_type.
	(dlang_parse_qualified): Replace 'kind' parameter with 'info', add
	'suffix_modifier' parameter.  Decode function type with
	dlang_function_type_noreturn.
	(dlang_parse_tuple): Add 'info' parameter.
	(dlang_template_symbol_param): New function.
	(dlang_template_args): Add 'info' parameter.  Decode symbol parameter
	with dlang_template_symbol_param.  Handle back referenced values, and
	externally mangled parameters.
	(dlang_parse_template): Add 'info' parameter.
	(dlang_demangle_init_info): New function.
	(dlang_demangle): Initialize and pass 'info' parameter.
	* testsuite/d-demangle-expected: Add new tests.

Co-Authored-By: Rainer Schuetze <r.sagitario@gmx.de>
2020-05-14 23:43:17 +02:00
Jason Merrill
4e1592f8e1 c++: Fix deferred noexcept on constructor [PR93901].
My change in r10-4394 to only update clones when we actually instantiate a
deferred noexcept-spec broke this because deferred parsing updates the
primary function but not the clones.  For GCC 10 I just reverted that
change; this patch adjusts maybe_instantiate_noexcept to update only the
clone passed as the argument.

gcc/cp/ChangeLog
2020-05-14  Jason Merrill  <jason@redhat.com>

	PR c++/93901
	* pt.c (maybe_instantiate_noexcept): Change clone handling.
2020-05-14 16:38:30 -04:00
Ian Lance Taylor
3a36428b5f libgo: only build syscall test with -static on GNU/Linux
For PR go/95061

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/234019
2020-05-14 13:37:12 -07:00
Andrew Stubbs
75d0b3d728 amdgcn: fix vcc clobber in vector load/store
This switches the code that expands scalar addresses to vectors of addresses
from using VCC to using CC_SAVE_REG, for the lo-part to hi-part carry values.
These were fine in code expanded in earlier passes, but addresses expanded
late, such as for stack spills or reloads, could clobber live VCC values,
causing execution failures.

This is the first target-specific testcase for GCN, so the new .exp file is
included.

2020-05-14  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn-valu.md (add<mode>3_zext_dup): Change to a
	define_expand, and rename the original to ...
	(add<mode>3_vcc_zext_dup): ... this, and add a custom VCC operand.
	(add<mode>3_zext_dup_exec): Likewise, with ...
	(add<mode>3_vcc_zext_dup_exec): ... this.
	(add<mode>3_zext_dup2): Likewise, with ...
	(add<mode>3_zext_dup_exec): ... this.
	(add<mode>3_zext_dup2_exec): Likewise, with ...
	(add<mode>3_zext_dup2): ... this.
	* config/gcn/gcn.c (gcn_expand_scalar_to_vector_address): Switch
	addv64di3_zext* calls to use addv64di3_vcc_zext*.

	gcc/testsuite/
	* testsuite/gcc.target/gcn/gcn.exp: New file.
	* testsuite/gcc.target/gcn/vcc-clobber.c: New file.
2020-05-14 20:45:09 +01:00
Uros Bizjak
9056cd8035 i386: Add V2DFmode float trunc/extend functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/sse.md (truncv2dfv2df2): New insn pattern.
	(extendv2sfv2df2): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-7.c: New test.
2020-05-14 19:51:40 +02:00
Patrick Palka
098cf31aa2 c++: Missing SFINAE with lookup_fnfields [PR78446]
Here we're failing to do SFINAE in build_op_call when looking up the
class's operator() via lookup_fnfields, which calls lookup_member always
with complain=tf_warning_or_error; from there we would complain
about an ambiguous lookup for operator().

This patch fixes this by adding a tsubst_flags_t parameter to
lookup_fnfields and adjusting all its callers appropriately.

gcc/cp/ChangeLog:

	PR c++/78446
	* call.c (build_op_call): Pass complain to lookup_fnfields.
	(build_special_member_call): Likewise.
	* class.c (type_requires_array_cookie): Pass tf_warning_or_error
	to lookup_fnfields.
	* cp-tree.h (lookup_fnfields): Add tsubst_flags_t parameter.
	* except.c (build_throw): Pass tf_warning_or_error to
	lookup_fnfields.
	* init.c (build_new_1): Pass complain to lookup_fnfields.
	* method.c (locate_fn_flags): Likewise.
	* name-lookup.c (lookup_name_real_1): Pass tf_warning_or_error
	to lookup_fnfields.
	* pt.c (tsubst_baselink): Pass complain to lookup_fnfields.
	* search.c (lookup_fnfields): New 'complain' parameter.  Pass it
	to lookup_member.

gcc/testsuite/ChangeLog:

	PR c++/78446
	* g++.dg/template/sfinae31.C: New test.
2020-05-14 12:56:18 -04:00
Thomas Koenig
d975519ad1 Removed double ChangeLog entries from previous commit. 2020-05-14 18:37:18 +02:00
Thomas Koenig
cdc34b5057 Add early return for invalid STATUS for close.
2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95119
	* io/close.c (close_status): Add CLOSE_INVALID.
	(st_close): Return early on invalid STATUS parameter.

2020-05-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95119
	* testsuite/libgomp.fortran/close_errors_1.f90: New test.
2020-05-14 18:33:24 +02:00
H.J. Lu
8d286dd118 x86: Default CET run-time support to auto
CET has been added since GCC 8.  This patch defaults CET run-time support
to auto.  It enables CET run-time support if asssembler supports CET
instructions and multi-byte NOPs are enabled via SSE2.

config/

	* cet.m4 (GCC_CET_FLAGS): Change default to auto.

gcc/

	* configure: Regenerated.

libatomic/

	* configure: Regenerated.

libbacktrace/

	* configure: Regenerated.

libcc1/

	* configure: Regenerated.

libcpp/

	* configure: Regenerated.

libdecnumber/

	* configure: Regenerated.

libgcc/

	* configure: Regenerated.

libgfortran/

	* configure: Regenerated.

libgomp/

	* configure: Regenerated.

libitm/

	* configure: Regenerated.

libobjc/

	* configure: Regenerated.

libquadmath/

	* configure: Regenerated.

libsanitizer/

	* configure: Regenerated.

libssp/

	* configure: Regenerated.

libstdc++-v3/

	* configure: Regenerated.

libvtv/

	* configure: Regenerated.

zlib/

	* configure: Regenerated.
2020-05-14 09:05:02 -07:00
Christophe Lyon
4036327e4c arm: Factorize several occurrences of the same code into reg_needs_saving_p
The same code pattern occurs in several functions, so it seems cleaner
to move it into a dedicated function.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.c (reg_needs_saving_p): New function.
	(use_return_insn): Use reg_needs_saving_p.
	(arm_get_vfp_saved_size): Likewise.
	(arm_compute_frame_layout): Likewise.
	(arm_save_coproc_regs): Likewise.
	(thumb1_expand_epilogue): Likewise.
	(arm_expand_epilogue_apcs_frame): Likewise.
	(arm_expand_epilogue): Likewise.
2020-05-14 15:38:24 +00:00
Christophe Lyon
f664bd07f0 arm.c: Clarify error message in thumb1_expand_prologue
While running the tests with -march=armv5t -mthumb, I came across this
error message which I think could be clearer.

2020-05-14  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.c (thumb1_expand_prologue): Update error message.
2020-05-14 15:34:30 +00:00
Nathan Sidwell
68f1d74ff9 c++: Missed c++2a->20 change
Jason missed a c++2a mention.  I couldn't resist changing the loop
following to place the initializers inside the fors.

	* parser.c (cp_parser_diagnose_invalid_typename): Mention
	std=c++20 not 2a, reformat dependent binfo inform loops.
2020-05-14 08:06:35 -07:00
Nathan Sidwell
f497e36ae5 c++: Simplify tsubst_template_decl
tsubst_template_decl's control flow was also confusing.  This reorders
and flattens some of the conditionals.

	* pt.c (tsubst_template_decl): Reorder and commonize some control
	paths.
2020-05-14 07:33:13 -07:00
Nathan Sidwell
ddbaab134c c++: Simplify tsubst_friend_function
tsubst_friend_function's control flow was a little complicated.  This
simplifies it, primarily by using more RAII.

	* pt.c (tsubst_friend_function): Simplify control flow.
2020-05-14 07:22:54 -07:00
Nathan Sidwell
ea5a33d453 c++: simplify lookup_template_class_1
We were checking TYPE_NAME and then copying it if not null.  Just copy
it, and then see if we got null.

	* pt.c (lookup_template_class_1): Remove unnecessary else by
	simply grabbing TYPE_NAME earlier.
2020-05-14 07:20:35 -07:00
Nathan Sidwell
5adbd09075 c++: Adjust push_template_decl_real
Push_template_decl_real's friend-pushing logic was confusing me.  This
is more understandable.  Fix a latent type bug I disovered.

	* pt.c (push_template_decl_real): Adjust friend pushing logic.
	Reinit template type.
2020-05-14 07:18:04 -07:00
Nathan Sidwell
c4bff4c230 c++: Improve build_template_decl
I discovered all the users of build_template_decl were explicitly
setting the RESULT and TYPE fields of the built decl.  Let's just have
build_template_decl do that in the first place.

	* pt.c (build_template_decl): Init DECL_TEMPLATE_RESULT &
	TREE_TYPE here ...
	(process_partial_specialization): ... not here ...
	(push_template_decl_real, add_inherited_template_parms)
	(build_deduction_guide): ... or here.
2020-05-14 06:39:29 -07:00
Martin Liska
941c947470
Add tests for gcc-changelog.
* gcc-changelog/test_email.py: New file.
	* gcc-changelog/test_patches.txt: New file.
2020-05-14 13:59:36 +02:00
Uros Bizjak
365e3cde49 i386: Add V2DFmode conversion functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/sse.md (sse2_cvtpi2pd): Add memory to alternative 1.

	(floatv2siv2df2): New expander.
	(floatunsv2siv2df2): New insn pattern.

	(fix_truncv2dfv2si2): New expander.
	(fixuns_truncv2dfv2si2): New insn pattern.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-6.c: New test.
2020-05-14 13:47:33 +02:00
Richard Sandiford
2c814af65e aarch64: Fix arm_sve_vector_bits on typedefs [PR95105]
Compiling this testcase with -march=armv8.2-a+sve
-msve-vector-bits=512:

----------------------------------------------------------
typedef __SVFloat32_t foo;
typedef foo bar __attribute__((arm_sve_vector_bits(512)));
template<typename T> struct s { T x; };
extern s<bar> a;
bar &b = a.x;
----------------------------------------------------------

gave the bogus error:

  cannot bind non-const lvalue reference of type ‘bar&’ to an rvalue
  of type ‘bar’

The testcase works if the attribute is applied directly
to __SVFloat32_t instead of via foo.

This shows a more general problem with the way that we were handling
the arm_sve_vector_bits attribute: we started by building a distinct
copy of the type to which the attribute was applied, instead of starting
with its main variant.  This new type then became its own main variant,
meaning that the relationship between types that have the attribute
could be different from the relationship between types that don't have
the attribute.

This patch instead copies the main variant of the original type and then
reapplies all the differences.

2020-05-14  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR target/95105
	* config/aarch64/aarch64-sve-builtins.cc
	(handle_arm_sve_vector_bits_attribute): Create a copy of the
	original type's TYPE_MAIN_VARIANT, then reapply all the differences
	between the original type and its main variant.

gcc/testsuite/
	PR target/95105
	* gcc.target/aarch64/sve/acle/general/attributes_8.c: New test.
	* g++.target/aarch64/sve/acle/general-c++/attributes_1.C: Likewise.
2020-05-14 12:20:32 +01:00
Richard Biener
0d1ccfd0cc testsuite/94703 - skip gcc.dg/tree-ssa/pr94703.c on strict-align targets
The specific dump scanning doesn't work on strict-align targets,
the following simply skips the testcase for those.

2020-05-14  Richard Biener  <rguenther@suse.de>

	PR testsuite/94703
	* gcc.dg/tree-ssa/pr94703.c: Skip for strict-align targets.
2020-05-14 11:58:10 +02:00
Richard Biener
568c985113 middle-end/95118 - fix printing of denormal zero
This fixes printing a REAL_CST generated from value-numbering
punning some bits to a real which turns out as zero with big
negative exponent.  This causes the loop in real_to_decimal_for_mode to
never terminate.

2020-05-14  Richard Biener  <rguenther@suse.de>

	PR middle-end/95118
	* real.c (real_to_decimal_for_mode): Make sure we handle
	a zero with nonzero exponent.

	* gcc.dg/pr95118.c: New testcase.
2020-05-14 10:50:05 +02:00
Jakub Jelinek
7a50e70875 openmp: cgraph support for late declare variant resolution
This is a new version of the
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-11/msg01493.html
patch.  Unlike the previous version, this one actually works properly
except for LTO, bootstrapped/regtested on x86_64-linux and i686-linux
too.

In short, #pragma omp declare variant is a directive which allows
redirection of direct calls to certain function to other calls with a
scoring system and some of those decisions need to be deferred until after
IPA.  The patch represents them with calls to an artificial FUNCTION_DECL
with declare_variant_alt in the cgraph_node set.

For LTO, the patch only saves/restores the two cgraph_node bits added in the
patch, but doesn't yet stream out and back in the on the side info for the
declare_variant_alt.  For the LTO partitioning, I believe those artificial
FUNCTION_DECLs with declare_variant_alt need to go into partition together
with anything that calls them (possibly duplicated), any way how to achieve
that?  Say if declare variant artificial fn foobar is directly
called from all of foo, bar and baz and not from qux and we want 4
partitions, one for each of foo, bar, baz, qux, then foobar is needed in the
first 3 partitions, and the IPA_REF_ADDRs recorded for foobar that right
after IPA the foobar call will be replaced with calls to foobar1, foobar2,
foobar3 or foobar (non-artificial) can of course stay in different
partitions if needed.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	* Makefile.in (GTFILES): Add omp-general.c.
	* cgraph.h (struct cgraph_node): Add declare_variant_alt and
	calls_declare_variant_alt members and initialize them in the
	ctor.
	* ipa.c (symbol_table::remove_unreachable_nodes): Handle direct
	calls to declare_variant_alt nodes.
	* lto-cgraph.c (lto_output_node): Write declare_variant_alt
	and calls_declare_variant_alt.
	(input_overwrite_node): Read them back.
	* omp-simd-clone.c (simd_clone_create): Copy calls_declare_variant_alt
	bit.
	* tree-inline.c (expand_call_inline): Or in calls_declare_variant_alt
	bit.
	(tree_function_versioning): Copy calls_declare_variant_alt bit.
	* omp-offload.c (execute_omp_device_lower): Call
	omp_resolve_declare_variant on direct function calls.
	(pass_omp_device_lower::gate): Also enable for
	calls_declare_variant_alt functions.
	* omp-general.c (omp_maybe_offloaded): Return false after inlining.
	(omp_context_selector_matches): Handle the case when
	cfun->curr_properties has PROP_gimple_any bit set.
	(struct omp_declare_variant_entry): New type.
	(struct omp_declare_variant_base_entry): New type.
	(struct omp_declare_variant_hasher): New type.
	(omp_declare_variant_hasher::hash, omp_declare_variant_hasher::equal):
	New methods.
	(omp_declare_variants): New variable.
	(struct omp_declare_variant_alt_hasher): New type.
	(omp_declare_variant_alt_hasher::hash,
	omp_declare_variant_alt_hasher::equal): New methods.
	(omp_declare_variant_alt): New variables.
	(omp_resolve_late_declare_variant): New function.
	(omp_resolve_declare_variant): Call omp_resolve_late_declare_variant
	when called late.  Create a magic declare_variant_alt fndecl and
	cgraph node and return that if decision needs to be deferred until
	after gimplification.
	* cgraph.c (symbol_table::create_edge): Or in calls_declare_variant_alt
	bit.

	* c-c++-common/gomp/declare-variant-14.c: New test.
2020-05-14 09:58:53 +02:00
Jakub Jelinek
d0fb9ffc1b openmp: Fix placement of 2nd+ preparation statement for PHIs in simd clone lowering [PR95108]
For normal stmts, preparation statements are inserted before the stmt, so if we need multiple,
they are in the correct order, but for PHIs we emit them after labels in the entry successor
bb, and we used to emit them in the reverse order that way.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/95108
	* omp-simd-clone.c (struct modify_stmt_info): Add after_stmt member.
	(ipa_simd_modify_stmt_ops): For PHIs, only add before first stmt in
	entry block if info->after_stmt is NULL, otherwise add after that stmt
	and update it after adding each stmt.
	(ipa_simd_modify_function_body): Initialize info.after_stmt.

	* gcc.dg/gomp/pr95108.c: New test.
2020-05-14 09:51:05 +02:00
Jakub Jelinek
49ddde69fc openmp: Also implicitly mark as declare target to functions mentioned in target regions
OpenMP 5.0 also specifies that functions referenced from target regions
(except for target regions with device(ancestor:)) are also implicitly declare target to.

This patch implements that.

2020-05-14  Jakub Jelinek  <jakub@redhat.com>

	* function.h (struct function): Add has_omp_target bit.
	* omp-offload.c (omp_discover_declare_target_fn_r): New function,
	old renamed to ...
	(omp_discover_declare_target_tgt_fn_r): ... this.
	(omp_discover_declare_target_var_r): Call
	omp_discover_declare_target_tgt_fn_r instead of
	omp_discover_declare_target_fn_r.
	(omp_discover_implicit_declare_target): Also queue functions with
	has_omp_target bit set, for those walk with
	omp_discover_declare_target_fn_r, for declare target to functions
	walk with omp_discover_declare_target_tgt_fn_r.
gcc/c/
	* c-parser.c (c_parser_omp_target): Set cfun->has_omp_target.
gcc/cp/
	* cp-gimplify.c (cp_genericize_r): Set cfun->has_omp_target.
gcc/fortran/
	* trans-openmp.c: Include function.h.
	(gfc_trans_omp_target): Set cfun->has_omp_target.
libgomp/
	* testsuite/libgomp.c-c++-common/target-40.c: New test.
2020-05-14 09:48:32 +02:00
Uros Bizjak
42ef8a5e66 i386: Add V2SFmode conversion functions [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (mmx_fix_truncv2sfv2si2): rename from mmx_pf2id.
	Add SSE/AVX alternative.  Change operand predicates from
	nonimmediate_operand to register_mmxmem_operand.
	Enable instruction pattern for TARGET_MMX_WITH_SSE.
	(fix_truncv2sfv2si2): New expander.
	(fixuns_truncv2sfv2si2): Ditto.

	(mmx_floatv2siv2sf2): rename from mmx_floatv2si2.
	Add SSE/AVX alternative.  Change operand predicates from
	nonimmediate_operand to register_mmxmem_operand.
	Enable instruction pattern for TARGET_MMX_WITH_SSE.
	(floatv2siv2sf2): New expander.
	(floatunsv2siv2sf2): Ditto.

	* config/i386/i386-builtin.def (IX86_BUILTIN_PF2ID):
	Update for rename.
	(IX86_BUILTIN_PI2FD): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-5.c: New test.
2020-05-14 09:15:23 +02:00
Andreas Krebbel
0473885be8 IBM Z: Define probe_stack expander
Probes emitted by the common code routines still use a store.  Define
the "probe_stack" pattern to use a compare instead.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.c (s390_emit_stack_probe): Call the probe_stack
	expander.
	* config/s390/s390.md ("@probe_stack2<mode>", "probe_stack"): New
	expanders.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-2.c: New test.
2020-05-14 08:16:27 +02:00
Andreas Krebbel
868d351e23 IBM Z: stack clash prot: add missing updates of last_probe_offset
After emitting probes in a loop last_probe_offset needs to be updated.
Not doing this usually assumes a too low distance to the last access
when emitting the remainder leading to stack probes being omitted.

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.c (allocate_stack_space): Add missing updates
	of last_probe_offset.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-1.c: New test.
2020-05-14 08:16:27 +02:00
Andreas Krebbel
d3e5bae174 Make anti_adjust_stack_and_probe_stack_clash extern and use it for Z
When compiling with -mbackchain -fstack-clash-protection currently no
probes are emitted.  This patch adjusts the "allocate_stack" expander
to call anti_adjust_stack_and_probe_stack_clash when needed. In order
to do this I had to export that function from explow.c.

Ok for mainline?

gcc/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.md ("allocate_stack"): Call
	anti_adjust_stack_and_probe_stack_clash when stack clash
	protection is enabled.
	* explow.c (anti_adjust_stack_and_probe_stack_clash): Remove
	prototype. Remove static.
	* explow.h (anti_adjust_stack_and_probe_stack_clash): Add
	prototype.

gcc/testsuite/ChangeLog:

2020-05-14  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/stack-clash-3.c: New test.
2020-05-14 08:16:27 +02:00
GCC Administrator
f806a768e1 Daily bump. 2020-05-14 00:16:22 +00:00
Kelvin Nilsen
c21d2b6661 rs6000: Add vec_extracth and vec_extractl
Add new insns vextdu[bhw]vlx, vextddvlx, vextdu[bhw]vhx, and
vextddvhx, along with built-in access and overloaded built-in
access to these insns.

[gcc]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/altivec.h (vec_extractl): New #define.
	(vec_extracth): Likewise.
	* config/rs6000/altivec.md (UNSPEC_EXTRACTL): New constant.
	(UNSPEC_EXTRACTR): Likewise.
	(vextractl<mode>): New expansion.
	(vextractl<mode>_internal): New insn.
	(vextractr<mode>): New expansion.
	(vextractr<mode>_internal): New insn.
	* config/rs6000/rs6000-builtin.def (__builtin_altivec_vextdubvlx):
	New built-in function.
	(__builtin_altivec_vextduhvlx): Likewise.
	(__builtin_altivec_vextduwvlx): Likewise.
	(__builtin_altivec_vextddvlx): Likewise.
	(__builtin_altivec_vextdubvhx): Likewise.
	(__builtin_altivec_vextduhvhx): Likewise.
	(__builtin_altivec_vextduwvhx): Likewise.
	(__builtin_altivec_vextddvhx): Likewise.
	(__builtin_vec_extractl): New overloaded built-in function.
	(__builtin_vec_extracth): Likewise.
	* config/rs6000/rs6000-call.c (altivec_overloaded_builtins):
	Define overloaded forms of __builtin_vec_extractl and
	__builtin_vec_extracth.
	(builtin_function_type): Add cases to mark arguments of new
	built-in functions as unsigned.
	(rs6000_common_init_builtins): Add
	opaque_ftype_opaque_opaque_opaque_opaque.
	* config/rs6000/rs6000.md (du_or_d): New mode attribute.
	* doc/extend.texi (PowerPC AltiVec Built-in Functions Available
	for a Future Architecture): Add description of vec_extractl and
	vec_extractr built-in functions.

[gcc/testsuite]

2020-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/vec-extracth-0.c: New.
	* gcc.target/powerpc/vec-extracth-1.c: New.
	* gcc.target/powerpc/vec-extracth-2.c: New.
	* gcc.target/powerpc/vec-extracth-3.c: New.
	* gcc.target/powerpc/vec-extracth-4.c: New.
	* gcc.target/powerpc/vec-extracth-5.c: New.
	* gcc.target/powerpc/vec-extracth-6.c: New.
	* gcc.target/powerpc/vec-extracth-7.c: New.
	* gcc.target/powerpc/vec-extracth-be-0.c: New.
	* gcc.target/powerpc/vec-extracth-be-1.c: New.
	* gcc.target/powerpc/vec-extracth-be-2.c: New.
	* gcc.target/powerpc/vec-extracth-be-3.c: New.
	* gcc.target/powerpc/vec-extractl-0.c: New.
	* gcc.target/powerpc/vec-extractl-1.c: New.
	* gcc.target/powerpc/vec-extractl-2.c: New.
	* gcc.target/powerpc/vec-extractl-3.c: New.
	* gcc.target/powerpc/vec-extractl-4.c: New.
	* gcc.target/powerpc/vec-extractl-5.c: New.
	* gcc.target/powerpc/vec-extractl-6.c: New.
	* gcc.target/powerpc/vec-extractl-7.c: New.
	* gcc.target/powerpc/vec-extractl-be-0.c: New.
	* gcc.target/powerpc/vec-extractl-be-1.c: New.
	* gcc.target/powerpc/vec-extractl-be-2.c: New.
	* gcc.target/powerpc/vec-extractl-be-3.c: New.
2020-05-13 16:09:17 -05:00
Patrick Palka
4924293a62 c++: SFINAE for invalid delete-expression [PR79706]
This fixes SFINAE when substitution yields an invalid delete-expression
due to the pertinent deallocation function being marked deleted or
otherwise inaccessible.

We need to check for an erroneous result from build_op_delete_call and
exit early in that case, so that we don't build a COND_EXPR around the
erroneous result which finish_decltype_type would then quietly accept.

gcc/cp/ChangeLog:

	PR c++/79706
	* init.c (build_vec_delete_1): Just return error_mark_node if
	deallocate_expr is error_mark_node.
	(build_delete): Just return error_mark_node if do_delete is
	error_mark_node.

gcc/testsuite/ChangeLog:

	PR c++/79706
	* g++.dg/template/sfinae30.C: New test.
2020-05-13 16:40:23 -04:00
Patrick Palka
7e52f8b1e0 c++: premature requires-expression folding [PR95020]
In the testcase below we're prematurely folding away the
requires-expression to 'true' after substituting in the function's
template arguments, but before substituting in the lambda's deduced
template arguments.

This patch removes the uses_template_parms check when deciding in
tsubst_requires_expr whether to keep around a new requires-expression.
Regardless of whether the template arguments are dependent, there still
might be more template parameters to later substitute in (as in the
below testcase) and even if not, tsubst_expr doesn't perform full
semantic processing unless !processing_template_decl, so we should still
wait until then to fold away the requires-expression.

gcc/cp/ChangeLog:

	PR c++/95020
	* constraint.c (tsubst_requires_expr): Produce a new
	requires-expression when processing_template_decl, even if
	template arguments are not dependent.

gcc/testsuite/ChangeLog:

	PR c++/95020
	* g++/cpp2a/concepts-lambda7.C: New test.
2020-05-13 16:40:10 -04:00
Marek Polacek
661232da72 c++: explicit(bool) malfunction with dependent expression [PR95066]
I forgot to set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P when merging two
function declarations and as a sad consequence, we never tsubsted
the dependent explicit-specifier in tsubst_function_decl, leading to
disregarding the explicit-specifier altogether, and wrongly accepting
this test.

	PR c++/95066
	* decl.c (duplicate_decls): Set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.

	* g++.dg/cpp2a/explicit16.C: New test.
2020-05-13 16:25:39 -04:00
Nathan Sidwell
7040894c44 c++: Template arg comparison
When fixing up the template specialization hasher I was confused by
the control flow through template_args_equal.  This reorders the
category checking, so it is clearer as to what kind of node can reach
which point.

	* pt.c (template_args_equal): Reorder category checking for
	clarity.
2020-05-13 13:22:02 -07:00
Nathan Sidwell
2bb30de62f c++: Simplify typedef access checking
I discovered that the template typedef access check was rather more
expensive than needed.  The call of get_types_needed_access_check in
the FOR_EACH_VEC_SAFE_ELT is the moral equivalent of 'for (size_t pos
= 0; pos != strlen (string); pos++)'.  Let's not do that.

	* pt.c (perform_typedefs_access_check): Cache expensively
	calculated object references.
	(check_auto_in_tmpl_args): Just assert we do not get unexpected
	nodes, rather than silently do nothing.
	(append_type_to_template_for_access): Likewise, cache expensie
	object reference.
2020-05-13 13:17:25 -07:00