176456 Commits

Author SHA1 Message Date
Dimitar Dimitrov
f886644bd4 PRU: Simplify machine description
Use the new @insn syntax for simpler gen_* invocation.

gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

	* config/pru/pru.c (pru_emit_doloop): Use new gen_doloop_end_internal
	and gen_doloop_begin_internal.
	(pru_reorg_loop): Use gen_pruloop with mode.
	* config/pru/pru.md: Use new @insn syntax.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2020-05-05 20:42:56 +03:00
Dimitar Dimitrov
3d1ca85778 PRU: Fix comment to avoid fall through warning
gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

	* config/pru/pru.c (pru_print_operand): Fix fall through comment.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2020-05-05 20:42:56 +03:00
Michael Meissner
2d7941da28 Patch ieee128-lib-patch009b 2020-05-05 13:39:52 -04:00
Michael Meissner
914ba0448e Patch ieee128-lib-patch008b 2020-05-05 13:38:28 -04:00
Michael Meissner
db23381603 Patch ieee128-lib-patch007b 2020-05-05 13:37:28 -04:00
Michael Meissner
931ab4fd33 Update ChangeLog 2020-05-05 13:36:17 -04:00
Michael Meissner
63f3d98b69 Remove extra newline 2020-05-05 13:35:40 -04:00
Michael Meissner
bee774cecb Patch ieee128-lib-patch006b 2020-05-05 13:35:09 -04:00
Michael Meissner
8f2973cbf7 Patch ieee128-lib-patch005b 2020-05-05 13:33:34 -04:00
Michael Meissner
18c2f7a740 Patch ieee128-lib-patch004b 2020-05-05 13:32:22 -04:00
Michael Meissner
6034b9ca24 Patch ieee128-lib-patch003b 2020-05-05 13:31:03 -04:00
Michael Meissner
9fc1dff119 Patch ieee128-lib-patch002b 2020-05-05 13:30:07 -04:00
Michael Meissner
f1d82734ec Patch ieee128-lib-patch001b 2020-05-05 12:28:48 -04:00
Michael Meissner
438085cc66 setup branch 2020-05-05 12:24:18 -04:00
Uros Bizjak
b1ea0ebd97 i386: Use "clobber (scratch)" in expanders
Use "clobber (scratch:M)" instad of "clobber (match_scratch:M N)" in expanders.

	* config/i386/i386.md (fixuns_trunc<mode>si2): Use
	"clobber (scratch:M)" instad of "clobber (match_scratch:M N)".
	(addqi3_cconly_overflow): Ditto.
	(umulv<mode>4): Ditto.
	(<s>mul<mode>3_highpart): Ditto.
	(tls_global_dynamic_32): Ditto.
	(tls_local_dynamic_base_32): Ditto.
	(atanxf2): Ditto.
	(asinxf2): Ditto.
	(acosxf2): Ditto.
	(logxf2): Ditto.
	(log10xf2): Ditto.
	(log2xf2): Ditto.
	(*adddi_4): Remove "m" constraint from scratch operand.
	(*add<mode>_4): Ditto.
2020-05-05 18:01:06 +02:00
Stefan Schulze Frielinghaus
b776bdca93 c-attribs.c: Fix warning about use of uninitialized variable nunits
In function handle_vector_size_attribute local variable nunits is
supposed to be initialized by function type_valid_for_vector_size.
However, in case ARGS is null the function may return with a non-null
value and leave nunits uninitialized.  This results in warning/error:

gcc/poly-int.h: In function 'tree_node* handle_vector_size_attribute(tree_node**, tree, tree, int, bool*)':
gcc/poly-int.h:330:3: error: 'nunits' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  330 |   ((void) (&(RES).coeffs[0] == (C *) 0), \
      |   ^
gcc/c-family/c-attribs.c:3695:26: note: 'nunits' was declared here
 3695 |   unsigned HOST_WIDE_INT nunits;
      |

Added attribute nonnull for argument args in order to silence warning
and added an assert statement in order to check the invariant candidate.

gcc/c-family/ChangeLog:

2020-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>

	* c-attribs.c (handle_vector_size_attribute): Add attribute
	nonnull for argument args in order to silence warning of
	uninitialized variable usage.  Since this is local to the
	compilation unit and thus cannot be checked at call sides by the
	compiler, added an assert statement in order to verify this.
2020-05-05 17:33:54 +02:00
Nathan Sidwell
733195e367 c++: Avoid inconsistency in lambda fn's this pointer name [pr94807]
* coroutines.cc (morph_fn_to_coro): Just check for
	closure_identifier.
	* pt.c (tsubst_function_decl): Update lambda fn's this_ptr name.
2020-05-05 07:48:35 -07:00
Jakub Jelinek
d44f14ccef csa, postreload: Improve csa after recent cselib changes [PR94516]
This patch addresses a missed optimization caused by the cselib changes.
Already in the past postreload could replace sp = sp + const_int with
sp = regxy if regxy already has the right value, but with the cselib
changes it happens several times more often.  It can result in smaller
code, so it seems undesirable to prevent such optimizations, but
unfortunately it can get into the way of stack adjustment coalescing,
where e.g. if we used to have sp = sp + 32; sp = sp - 8;, previously
we'd turn that into sp = sp + 24;, but now postreload optimizes
into sp = r12; sp = sp - 8; and csa gives up.

The patch just adds a REG_EQUAL note when changing sp = sp + const into
sp = reg, where we remember it was actually a stack adjustment by certain
constant, and the combine-stack-adj changes than make use of those REG_EQUAL
notes, together with LR tracking (csa did enable the note problem, just
didn't simulate each insn) so that we can add the needed clobbers etc.
(taken from the other stack adjustment insn).

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

	PR rtl-optimization/94516
	* postreload.c (reload_cse_simplify): When replacing sp = sp + const
	with sp = reg, add REG_EQUAL note with sp + const.
	* combine-stack-adj.c (try_apply_stack_adjustment): Change return
	type from int to bool.  Add LIVE and OTHER_INSN arguments.  Undo
	postreload sp = sp + const to sp = reg optimization if needed and
	possible.
	(combine_stack_adjustments_for_block): Add LIVE argument.  Handle
	reg = sp insn with sp + const REG_EQUAL note.  Adjust
	try_apply_stack_adjustment caller, call
	df_simulate_initialize_forwards and df_simulate_one_insn_forwards.
	(combine_stack_adjustments): Allocate and free LIVE bitmap,
	adjust combine_stack_adjustments_for_block caller.
2020-05-05 16:34:51 +02:00
Marek Polacek
ef3479afc5 c++: Member template function lookup failure [PR94799]
Whew, this took a while.  We fail to parse "p->template A<T>::a()"
(where p is of type A<T> *) because since r249752 we treat the RHS of the ->
as dependent and avoid a lookup in the enclosing context: since that rev
cp_parser_template_name checks parser->context->object_type too, which
here is unknown_type_node, signalling a type-dependent object:

 7756   if (dependent_p)
 7757     /* Tell cp_parser_lookup_name that there was an object, even though it's
 7758        type-dependent.  */
 7759     parser->context->object_type = unknown_type_node;

with which cp_parser_template_name returns identifier 'A', cp_parser_class_name
then creates a TEMPLATE_ID_EXPR A<T>, but then

23735       decl = make_typename_type (scope, decl, tag_type, tf_error);

in cp_parser_class_name fails because scope is NULL.  Then we return
error_mark_node and parse errors ensue.

I've tried various approaches, e.g. keeping TEMPLATE_ID_EXPR around
instead of calling make_typename_type, which didn't work, whereupon I
realized that since we don't want to perform name lookup if we've seen
the template keyword and the scope is dependent, we can adjust
parser->context->object_type and use the type of the object expression
as the scope, even if it's type-dependent.  This should be in line with
[basic.lookup.classref]p4.  If the postfix expression doesn't have a type,
use typeof to carry its type.  This typeof will be processed in
tsubst/TYPENAME_TYPE.

	PR c++/94799
	* parser.c (cp_parser_postfix_dot_deref_expression): If we have
	a type-dependent object of class type, stash it to
	parser->context->object_type.  If the postfix expression doesn't have
	a type, use typeof.
	(cp_parser_class_name): Consider object scope too.
	(cp_parser_lookup_name): Remove code dealing with the case when
	object_type is unknown_type_node.

	* g++.dg/lookup/this1.C: Adjust dg-error.
	* g++.dg/template/lookup12.C: New test.
	* g++.dg/template/lookup13.C: New test.
	* g++.dg/template/lookup14.C: New test.
	* g++.dg/template/lookup15.C: New test.
2020-05-05 10:19:09 -04:00
Martin Liska
811b7636cb
Remove __gcov_flush.
PR gcov-profile/93623
	* tree-cfg.c (stmt_can_terminate_bb_p): Update comment to reflect
	reality.
	PR gcov-profile/93623
	* Makefile.in: Remove __gcov_flush.
	* gcov.h (__gcov_flush): Remove.
	* libgcov-interface.c (__gcov_flush): Remove.
	(init_mx): Use renamed mutex.
	(__gcov_lock): Likewise.
	(__gcov_unlock): Likewise.
	(__gcov_fork): Likewise.
	(__gcov_flush): Remove.
2020-05-05 16:15:47 +02:00
Martin Liska
c0532db47d
Use __gcov_dump and __gcov_reset in execv and fork context.
PR gcov-profile/93623
	* libgcov-interface.c (__gcov_fork): Do not flush
	and reset only in child process.
	(__gcov_execl): Dump counters only and reset them
	only if exec* fails.
	(__gcov_execlp): Likewise.
	(__gcov_execle): Likewise.
	(__gcov_execv): Likewise.
	(__gcov_execvp): Likewise.
	(__gcov_execve): Likewise.
2020-05-05 16:15:46 +02:00
Martin Liska
d39f7dc8d5
Do locking for __gcov_dump and __gcov_reset as well.
PR gcov-profile/93623
	* Makefile.in: Add _gcov_lock_unlock to LIBGCOV_INTERFACE.
	* libgcov-interface.c (ALIAS_void_fn): Remove.
	(__gcov_lock): New.
	(__gcov_unlock): New.
	(__gcov_flush): Use __gcov_lock and __gcov_unlock.
	(__gcov_reset): Likewise.
	(__gcov_dump): Likewise.
	* libgcov.h (__gcov_lock): New declaration.
	(__gcov_unlock): Likewise.
2020-05-05 16:15:45 +02:00
Martin Liska
2d8a60a63c
optgen: make more sanity checks for enums.
* opt-functions.awk (opt_args_non_empty): New function.
	* opt-read.awk: Use the function for various option arguments.
2020-05-05 16:13:46 +02:00
Martin Liska
0f62caf58b
Provide warning for missing jobserver.
PR driver/94330
	* lto-wrapper.c (run_gcc): When using -flto=jobserver,
	report warning when the jobserver is not detected.
2020-05-05 16:11:33 +02:00
Martin Liska
af2311abf8
Add missing ChangeLog entries. 2020-05-05 16:10:13 +02:00
Martin Liska
ab37baa60e
gcov: print total_lines summary for all files.
gcc/ChangeLog:

2020-04-17  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/94636
	* gcov.c (main): Print total lines summary at the end.
	(generate_results): Expect file_name always being non-null.
	Print newline after intermediate file is printed in order to align with
	what we do for normal files.
2020-05-05 16:04:32 +02:00
Martin Liska
48c041033e
Provide hint for misspelled -fdump-foo options.
gcc/ChangeLog:

2020-03-19  Martin Liska  <mliska@suse.cz>

	* dumpfile.c (dump_switch_p): Change return type
	and print option suggestion.
	* dumpfile.h: Change return type.
	* opts-global.c (handle_common_deferred_options):
	Move error into dump_switch_p function.

gcc/testsuite/ChangeLog:

2020-03-19  Martin Liska  <mliska@suse.cz>

	* gcc.dg/spellcheck-options-22.c: New test.
2020-05-05 16:02:06 +02:00
Martin Liska
d214842416
Merge dg-options and dg-additional-options if len <= 120 chars.
gcc/testsuite/ChangeLog:

2020-04-15  Martin Liska  <mliska@suse.cz>

	* g++.dg/concepts/diagnostic1.C: Merge dg-options and
	dg-additional-options if len <= 120 chars.
	* g++.dg/cpp1y/new1.C: Likewise.
	* g++.dg/cpp1y/new2.C: Likewise.
	* g++.dg/debug/dwarf2/pr61433.C: Likewise.
	* g++.dg/init/new18.C: Likewise.
	* g++.dg/ipa/devirt-19.C: Likewise.
	* g++.dg/ipa/devirt-52.C: Likewise.
	* g++.dg/ipa/pr44372.C: Likewise.
	* g++.dg/ipa/pr58371.C: Likewise.
	* g++.dg/ipa/pr63587-2.C: Likewise.
	* g++.dg/ipa/pr78211.C: Likewise.
	* g++.dg/opt/dump1.C: Likewise.
	* g++.dg/opt/pr44919.C: Likewise.
	* g++.dg/opt/pr47615.C: Likewise.
	* g++.dg/opt/pr82159-2.C: Likewise.
	* g++.dg/other/pr52048.C: Likewise.
	* g++.dg/pr57662.C: Likewise.
	* g++.dg/pr59510.C: Likewise.
	* g++.dg/pr67989.C: Likewise.
	* g++.dg/pr81194.C: Likewise.
	* g++.dg/template/canon-type-8.C: Likewise.
	* g++.dg/template/crash107.C: Likewise.
	* g++.dg/template/show-template-tree-3.C: Likewise.
	* g++.dg/tm/cgraph_edge.C: Likewise.
	* g++.dg/torture/20141013.C: Likewise.
	* g++.dg/torture/pr34641.C: Likewise.
	* g++.dg/torture/pr34850.C: Likewise.
	* g++.dg/torture/pr36745.C: Likewise.
	* g++.dg/torture/pr40991.C: Likewise.
	* g++.dg/torture/pr48271.C: Likewise.
	* g++.dg/torture/pr53602.C: Likewise.
	* g++.dg/torture/pr53752.C: Likewise.
	* g++.dg/torture/pr54838.C: Likewise.
	* g++.dg/torture/pr58252.C: Likewise.
	* g++.dg/tree-ssa/pr22444.C: Likewise.
	* g++.dg/tree-ssa/pr24351-3.C: Likewise.
	* g++.dg/tree-ssa/pr27283.C: Likewise.
	* g++.dg/tree-ssa/pr27291.C: Likewise.
	* g++.dg/tree-ssa/pr27548.C: Likewise.
	* g++.dg/tree-ssa/pr42337.C: Likewise.
	* g++.dg/ubsan/pr65583.C: Likewise.
	* g++.old-deja/g++.robertl/eb27.C: Likewise.
	* gcc.dg/tree-ssa/dse-points-to.c: Likewise.
	* gcc.target/arm/simd/vmmla_1.c: Likewise.
	* gcc.target/i386/vect-pr67800.c: Likewise.
	* gcc.target/mips/cfgcleanup-jalr2.c: Likewise.
	* gcc.target/mips/cfgcleanup-jalr3.c: Likewise.
2020-05-05 16:01:36 +02:00
Martin Liska
03f9754665
Use const for template argument.
libstdc++-v3/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

	PR c/92472
	* include/parallel/multiway_merge.h:
	Use const for _Compare template argument.
2020-05-05 15:54:58 +02:00
Martin Liska
98f7381d17
Put index check before use.
liboffloadmic/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

	PR other/89860
	* runtime/offload_target.cpp: Put index check
	before its use.
2020-05-05 15:54:57 +02:00
Martin Liska
d73d45f191
Use const for some function arguments.
gcc/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

	PR c/92472
	* alloc-pool.h: Use const for some arguments.
	* bitmap.h: Likewise.
	* mem-stats.h: Likewise.
	* sese.h (get_entry_bb): Likewise.
	(get_exit_bb): Likewise.
2020-05-05 15:54:57 +02:00
Martin Liska
8b33430b53
Remove 2 dead variables in bid_internal.h.
libgcc/config/libbid/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

	PR libgcc/92565
	* bid_internal.h (handle_UF_128_rem): Remove unused variable.
	(handle_UF_128): Likewise.
2020-05-05 15:54:56 +02:00
Richard Biener
fae545fb03 rewrite hybrid SLP detection
This rewrites hybrid SLP detection to be simpler and cope with
group size changes in the SLP graph.  In particular detection
works starting from non-SLP stmts following use->def chains
rather than walking the SLP graph and following def->use chains.

It's all temporary of course since non-SLP and thus hybrid SLP
will go away.

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

	* tree-vect-slp.c (struct vdhs_data): New.
	(vect_detect_hybrid_slp): New walker.
	(vect_detect_hybrid_slp): Rewrite.
2020-05-05 15:46:06 +02:00
Richard Biener
3fbf43b9bc testsuite/92177 - adjust expected patterns for gcc.dg/vect/bb-slp-22.c
We now always vectorize two BBs, adjust the selector to also scan
for integer multiplication vectorization explicitely.

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

	PR testsuite/92177
	* gcc.dg/vect/bb-slp-22.c: Adjust.
2020-05-05 15:40:49 +02:00
Richard Biener
f9b5db750b ipa/94947 - fix test for externally visible variables for IPA PTA
This fixes lack of an escape point of externally declared variables.

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

	PR ipa/94947
	* tree-ssa-structalias.c (ipa_pta_execute): Use
	varpool_node::externally_visible_p ().
	(refered_from_nonlocal_var): Likewise.

	* gcc.dg/torture/pr94947-1.c: New testcase.
	* gcc.dg/torture/pr94947-2.c: Likewise.
2020-05-05 14:41:15 +02:00
Eric Botcazou
5269b24605 Silence warning in LTO mode on VxWorks
The link phase is always partial (-r) for VxWorks in kernel mode, which
means that it uses incremental LTO linking by default (-flinker-output=rel).
But in this mode the LTO plugin outputs a warning if one of the object files
involved in the link does not contain LTO bytecode, before switching to
nolto-rel mode.  We do not do repeated incremental linking for VxWorks so
silence the warning.

lto-plugin/
	* lto-plugin.c: Document -linker-output-auto-notlo-rel option.
	(linker_output_set): Change type to bool.
	(linker_output_known): Likewise.
	(linker_output_auto_nolto_rel): New variable.
	(all_symbols_read_handler): Take it into account.
	<LDPO_REL>: Do not issue the warning if it is set.
	(process_option): Process -linker-output-auto-notlo-rel.
	(cleanup_handler): Remove unused variable.
	(onload) <LDPT_LINKER_OUTPUT>: Adjust to above type change.
gcc/
	* gcc.c (LTO_PLUGIN_SPEC): Define if not already.
	(LINK_PLUGIN_SPEC): Execute LTO_PLUGIN_SPEC.
	* config/vxworks.h (LTO_PLUGIN_SPEC): Define.
2020-05-05 12:42:22 +02:00
Eric Botcazou
2badc98853 Do not put incomplete CONSTRUCTORs into static memory
The CONSTRUCTOR_NO_CLEARING flag was invented to avoid generating a memset
for  CONSTRUCTORS that lack elements, but it turns out that the gimplifier
can generate a memcpy for them instead, which is worse performance-wise,
so this prevents it from doing that for them.

	* gimplify.c (gimplify_init_constructor): Do not put the constructor
	into static memory if it is not complete.
2020-05-05 12:39:09 +02:00
Richard Biener
0424a5ece5 tree-optimization/94949 - fix load eliding in SM
This fixes the case of not using the multithreaded model when
only conditionally storing to the destination.  We cannot elide
the load in this case.

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

	PR tree-optimization/94949
	* tree-ssa-loop-im.c (execute_sm): Check whether we use
	the multithreaded model or always compute the stored value
	before eliding a load.

	* gcc.dg/torture/pr94949.c: New testcase.
2020-05-05 12:35:05 +02:00
Alex Coplan
1bd3a8af85 aarch64: eliminate redundant zero extend after bitwise negation
The attached patch eliminates a redundant zero extend from the AArch64 backend. Given the following C code:

unsigned long long foo(unsigned a)
{
    return ~a;
}

prior to this patch, AArch64 GCC at -O2 generates:

foo:
        mvn     w0, w0
        uxtw    x0, w0
        ret

but the uxtw is redundant, since the mvn clears the upper half of the x0 register. After applying this patch, GCC at -O2 gives:

foo:
        mvn     w0, w0
        ret

Testing:
    Added regression test which passes after applying the change to aarch64.md.
    Full bootstrap and regression on aarch64-linux with no additional failures.

        * config/aarch64/aarch64.md (*one_cmpl_zero_extend): New.
        * gcc.target/aarch64/mvn_zero_ext.c: New test.
2020-05-05 10:40:24 +01:00
Jakub Jelinek
144aee70b8 match.pd: Canonicalize (x + (x << cst)) into (x * cst2) [PR94800]
The popcount* testcases show yet another creative way to write popcount,
but rather than adjusting the popcount matcher to deal with it, I think
we just should canonicalize those (X + (X << C) to X * (1 + (1 << C))
and (X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2)), because for
multiplication we already have simplification rules that can handle nested
multiplication (X * CST1 * CST2), while the the shifts and adds we have
nothing like that.  And user could have written the multiplication anyway,
so if we don't emit the fastest or smallest code for the multiplication by
constant, we should improve that.  At least on the testcases seems the
emitted code is reasonable according to cost, except that perhaps we could
in some cases try to improve expansion of vector multiplication by
uniform constant.

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

	PR tree-optimization/94800
	* match.pd (X + (X << C) to X * (1 + (1 << C)),
	(X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2))): New
	canonicalizations.

	* gcc.dg/tree-ssa/pr94800.c: New test.
	* gcc.dg/tree-ssa/popcount5.c: New test.
	* gcc.dg/tree-ssa/popcount5l.c: New test.
	* gcc.dg/tree-ssa/popcount5ll.c: New test.
2020-05-05 11:36:47 +02:00
Jakub Jelinek
7f916201ac x86: Fix *vec_dupv4hi constraints [PR94942]
This insn and split splits into HI->V?HImode broadcast for avx2 and later,
but either the operands need to be %xmm0-%xmm15 (i.e. VEX encoded insn), or
the insn needs both AVX512BW and AVX512VL.
Now, Yv constraint is v for AVX512VL and x otherwise, so for -mavx512vl -mno-avx512bw
we ICE if we end up with a %xmm16+ register from RA.
Yw constraint is v for AVX512VL and AVX512BW and nothing otherwise, so
in this pattern we actually need xYw.

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

	PR target/94942
	* config/i386/mmx.md (*vec_dupv4hi): Use xYw constraints instead of Yv.

	* gcc.target/i386/pr94942.c: New test.
2020-05-05 11:34:45 +02:00
Jakub Jelinek
6d938a5d77 match.pd: Optimize (((type)A * B) >> prec) != 0 into __imag__ .MUL_OVERFLOW [PR94914]
On x86 (the only target with umulv4_optab) one can use mull; seto to check
for overflow instead of performing wider multiplication and performing
comparison on the high bits.

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

	PR tree-optimization/94914
	* match.pd ((((type)A * B) >> prec) != 0 to .MUL_OVERFLOW(A, B) != 0):
	New simplification.

	* gcc.target/i386/pr94914.c: New test.
2020-05-05 11:34:45 +02:00
Uros Bizjak
59e4474a22 i386: Use int_nonimmediate_operand more
Pattern explosing and manual mode checks can be avoided by using
int_nonimmediate_operand special predicate.

While there, rewrite *x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode>
to a combine pass splitter.

	* config/i386/i386.md (*testqi_ext_3): Use
	int_nonimmediate_operand instead of manual mode checks.
	(*x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode>):
	Use int_nonimmediate_operand predicate.  Rewrite
	define_insn_and_split pattern to a combine pass splitter.
2020-05-05 11:33:55 +02:00
Richard Biener
cfbbceed1d fix build of targets not implementing add_stmt_cost
C++ makes mismatched prototype and implementation OK.

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

	* targhooks.h (default_add_stmt_cost): Add vec_info * parameter.
2020-05-05 11:30:06 +02:00
Rainer Orth
700d457295 build: Fix 32-bit TLS detection with 64-bit-default gas on Solaris/x86
I've recently tested i386-pc-solaris2.11 bootstrap on Solaris 11/x86
with only the bundled tools (using /usr/gnu/bin/as from binutils 2.30 in
this case).  It failed compiling libgo/runtime/proc.c, creating invalid
assembly:

proc.s: Assembler messages:
proc.s:2092: Error: junk at end of line, first unrecognized character is `*'

        .globl  __emutls_v.*runtime.g

and several more errors.  This is completely unexpected since Solaris
does support TLS.  It turned out that 32-bit TLS detection in
gcc/configure had failed:

configure:25145: checking assembler for thread-local storage support
configure:25158: /usr/gnu/bin/as   --fatal-warnings -o conftest.o conftest.s >&5
conftest.s: Assembler messages:
conftest.s:6: Error: relocated field and relocation type differ in signedness
conftest.s:7: Error: @TLSLDM reloc is not supported with 64-bit output format
conftest.s:7: Error: junk `@tlsldm' after expression

which isn't unexpected given that the bundled gas has been configured
for x86_64-pc-solaris2.11, i.e. 64-bit-default.

This is easily fixed by explicitly passing --32 for the 32-bit case,
matching what is done for the 64-bit test.

Tested on i386-pc-solaris2.11 with 32-bit-default and 64-bit-default gas
as well as with /usr/bin/as, always correctly detecting TLS support.

	* configure.ac <i[34567]86-*-*>: Add --32 to tls_as_opt on Solaris.
	* configure: Regenerate.
2020-05-05 10:42:23 +02:00
Richard Biener
308bc49688 add vec_info * parameters where needed
Soonish we'll get SLP nodes which have no corresponding scalar
stmt and thus not stmt_vec_info and thus no way to get back to
the associated vec_info.  This patch makes the vec_info available
as part of the APIs instead of putting in that back-pointer into
the leaf data structures.

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

	* tree-vectorizer.h (_stmt_vec_info::vinfo): Remove.
	(STMT_VINFO_LOOP_VINFO): Likewise.
	(STMT_VINFO_BB_VINFO): Likewise.
	* tree-vect-data-refs.c: Adjust for the above, adding vec_info *
	parameters and adjusting calls.
	* tree-vect-loop-manip.c: Likewise.
	* tree-vect-loop.c: Likewise.
	* tree-vect-patterns.c: Likewise.
	* tree-vect-slp.c: Likewise.
	* tree-vect-stmts.c: Likewise.
	* tree-vectorizer.c: Likewise.

	* target.def (add_stmt_cost): Add vec_info * parameter.
	* target.h (stmt_in_inner_loop_p): Likewise.
	* targhooks.c (default_add_stmt_cost): Adjust.
	* doc/tm.texi: Re-generate.

	* config/aarch64/aarch64.c (aarch64_extending_load_p): Add
	vec_info * parameter and adjust.
	(aarch64_sve_adjust_stmt_cost): Likewise.
	(aarch64_add_stmt_cost): Likewise.
	* config/arm/arm.c (arm_add_stmt_cost): Likewise.
	* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
	* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.
2020-05-05 09:48:03 +02:00
Jakub Jelinek
228646a64f i386: Simplify {,v}ph{add,sub{,s}{w,d} insn patterns [PR94460]
As mentioned in the previous PR94460 patch, the RTL patterns look too
large/complicated, we can simplify them by just performing two 2 arg
permutations to move the arguments into the right spots and then just
doing the plus/minus (or signed saturation version thereof).

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

	PR target/94460
	* config/i386/sse.md (avx2_ph<plusminus_mnemonic>wv16hi3,
	ssse3_ph<plusminus_mnemonic>wv8hi3, ssse3_ph<plusminus_mnemonic>wv4hi3,
	avx2_ph<plusminus_mnemonic>dv8si3, ssse3_ph<plusminus_mnemonic>dv4si3,
	ssse3_ph<plusminus_mnemonic>dv2si3): Simplify RTL patterns.
2020-05-05 09:01:37 +02:00
GCC Administrator
ba84e01d81 Daily bump. 2020-05-05 00:16:17 +00:00
Patrick Palka
a700b4a9f1 c++: Avoid unnecessary copying in cp_fold [PR94038]
When folding a CALL_EXPR, we can avoid copying it until folding changes
one of its arguments.  And when folding a TREE_VEC, we can avoid using
an intermediate releasing_vec by copying the TREE_VEC as soon as folding
changes one of its arguments, like we do in the CALL_EXPR case.

Incidentally, the CALL_EXPR change also fixes the testcase in PR94038.
The reason is that the call to maybe_constant_value from cp_fold on
the call 'bar<int>()' now reuses the result of the earlier call to
maybe_constant_value from fold_for_warn, via the cv_cache.  This earlier
call passes uid_sensitive=true, whereas the call from cp_fold passes
uid_sensitive=false, and so by reusing the cached result of the earlier
call we now avoid instantiating bar<int> at all.

gcc/cp/ChangeLog:

	PR c++/94038
	* cp-gimplify.c (cp_fold) <case CALL_EXPR>: Move some variable
	declarations closer to their uses.  Copy the CALL_EXPR only
	when one of its arguments has changed.
	<case TREE_VEC>: Instead of first collecting the folded
	arguments into a releasing_vec, just make a copy of the TREE_VEC
	as soon as folding changes one of its arguments.

gcc/testsuite/ChangeLog:

	PR c++/94038
	* g++.dg/warn/pr94038.C: New test.
2020-05-04 18:30:32 -04:00
Fangrui Song
1405ed4334 libstdc++: Fix the return type of __cxa_finalize
This should return void according to the Itanium C++ ABI.

2020-05-04  Fangrui Song  <maskray@google.com>

	* libsupc++/cxxabi.h (__cxa_finalize): Fix return type.
2020-05-04 23:07:19 +01:00