Commit Graph

176504 Commits

Author SHA1 Message Date
Eric Botcazou bb1ec4773a Couple of tweaks to help in LTO mode
The first tweak is to remove the TREE_OVERFLOW flag on INTEGER_CSTs
because it prevents them from being uniquized in LTO mode.

The second, unrelated tweak is to canonicalize the packable types made
by gigi so that at most one per type is present in the GENERIC IL.

	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Deal
	with artificial maximally-sized types designed by access types.
	* gcc-interface/utils.c (packable_type_hash): New structure.
	(packable_type_hasher): Likewise.
	(packable_type_hash_table): New hash table.
	(init_gnat_utils): Initialize it.
	(destroy_gnat_utils): Destroy it.
	(packable_type_hasher::equal): New method.
	(hash_packable_type): New static function.
	(canonicalize_packable_type): Likewise.
	(make_packable_type): Make sure not to use too small a type for the
	size of the new fields.  Canonicalize the type if it is named.
2020-05-08 17:24:15 +02:00
Eric Botcazou c900c70049 Fix missing information in exception messages with -gnateE
The information was missing in cases the front-end was able to turn
the range comparison into a simple comparison.

	* gcc-interface/trans.c (Raise_Error_to_gnu): Always compute a lower
	bound and an upper bound for use by the -gnateE switch for range and
	comparison operators.
2020-05-08 17:24:15 +02:00
Eric Botcazou db4062a0cb Small tweak to gnat_to_gnu_param
We mark the type of In parameters in Ada with the const qualifier, but
it is stripped by free_lang_data_in_type so do not do it in LTO mode.

	* gcc-interface/decl.c (gnat_to_gnu_param): Do not make a variant
	of the type in LTO mode.
2020-05-08 17:24:15 +02:00
Richard Biener 2b42509f8b Fix availability compute during VN DOM elimination
This fixes an issue with redundant store elimination in FRE/PRE
which, when invoked by the DOM elimination walk, ends up using
possibly stale availability data from the RPO walk.  It also
fixes a missed optimization during valueization of addresses
by making sure to use get_addr_base_and_unit_offset_1 which can
valueize and adjusting that to also valueize ARRAY_REFs low-bound.

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

	* tree-ssa-sccvn.c (rpo_avail): Change type to
	eliminate_dom_walker *.
	(eliminate_with_rpo_vn): Adjust rpo_avail to make vn_valueize
	use the DOM walker availability.
	(vn_reference_fold_indirect): Use get_addr_base_and_unit_offset_1
	with vn_valueize as valueization callback.
	(vn_reference_maybe_forwprop_address): Likewise.
	* tree-dfa.c (get_addr_base_and_unit_offset_1): Also valueize
	array_ref_low_bound.

	* gnat.dg/opt83.adb: New testcase.
2020-05-08 13:34:03 +02:00
Jakub Jelinek 1595a1cb7b match.pd: A ^ ((A ^ B) & -(C cmp D)) -> (C cmp D) ? B : A simplification [PR94786]
We already have x - ((x - y) & -(z < w)) and
x + ((y - x) & -(z < w)) simplifications, this one adds
x ^ ((x ^ y) & -(z < w)) (not merged using for because of the
:c that can be present on bit_xor and can't on minus).

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

	PR tree-optimization/94786
	* match.pd (A ^ ((A ^ B) & -(C cmp D)) -> (C cmp D) ? B : A): New
	simplification.

	* gcc.dg/tree-ssa/pr94786.c: New test.
2020-05-08 10:52:47 +02:00
Jakub Jelinek a229f9b373 ix86: Add peephole2 for *add<mode>3_cc_overflow_1 followed by matching memory store [PR94857]
The following peephole2 changes:
-	addl	(%rdi), %esi
+	xorl	%eax, %eax
+	addl	%esi, (%rdi)
 	setc	%al
-	movl	%esi, (%rdi)
-	movzbl	%al, %eax
 	ret
on the testcase.  *add<mode>3_cc_overflow_1, being an add{l,q} insn, is
commutative, so if TARGET_READ_MODIFY_WRITE we can replace
addl (%rdi), %esi; movl %esi, (%rdi)
with
addl %esi, (%rdi)
if %esi is dead after those two insns.

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

	PR target/94857
	* config/i386/i386.md (peephole2 after *add<mode>3_cc_overflow_1): New
	define_peephole2.

	* gcc.target/i386/pr94857.c: New test.
2020-05-08 10:03:56 +02:00
Jakub Jelinek a139bc2b49 tree: Avoid variable sharing in get_narrower [PR94724]
On Thu, May 07, 2020 at 02:45:29PM +0200, Thomas Schwinge wrote:
> >>+      for (tree op = win; TREE_CODE (op) == COMPOUND_EXPR;
>
> ..., and new 'op' variable here.
>
> >>+        op = TREE_OPERAND (op, 1))
> >>+     v.safe_push (op);
> >>+      FOR_EACH_VEC_ELT_REVERSE (v, i, op)
> >>+     ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
> >>+                       TREE_TYPE (win), TREE_OPERAND (op, 0),
> >>+                       ret);
> >>+      return ret;
> >>     }
> >>   while (TREE_CODE (op) == NOP_EXPR)
> >>     {

There is no reason for the shadowing and op at this point acts as a
temporary and will be overwritten in FOR_EACH_VEC_ELT_REVERSE anyway.
So, we can just s/tree // here.

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

	PR middle-end/94724
	* tree.c (get_narrower): Reuse the op temporary instead of
	shadowing it.
2020-05-08 09:37:09 +02:00
Jakub Jelinek a0d732eea2 match.pd: Canonicalize (X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs (X) [PR94783]
The following patch canonicalizes M = X >> (prec - 1); (X + M) ^ M
for signed integral types into ABS_EXPR (X).  For X == min it is already
UB because M is -1 and min + -1 is UB, so we can use ABS_EXPR rather than
say ABSU_EXPR + cast.

The backend might then emit the abs code back using the shift and addition
and xor if it is the best sequence for the target, but could do something
different that is better.

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

	PR tree-optimization/94783
	* match.pd ((X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs (X)):
	New simplification.

	* gcc.dg/tree-ssa/pr94783.c: New test.
2020-05-08 09:35:41 +02:00
Jakub Jelinek df569f7da5 match.pd: Optimize ffs of known non-zero arg into ctz + 1 [PR94956]
The ffs expanders on several targets (x86, ia64, aarch64 at least)
emit a conditional move or similar code to handle the case when the
argument is 0, which makes the code longer.
If we know from VRP that the argument will not be zero, we can (if the
target has also an ctz expander) just use ctz which is undefined at zero
and thus the expander doesn't need to deal with that.

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

	PR tree-optimization/94956
	* match.pd (FFS): Optimize __builtin_ffs* of non-zero argument into
	__builtin_ctz* + 1 if direct IFN_CTZ is supported.

	* gcc.target/i386/pr94956.c: New test.
2020-05-08 09:33:55 +02:00
Jakub Jelinek ff33680165 match.pd: Simplify unsigned A - B - 1 >= A to B >= A [PR94913]
Implemented thusly.  The TYPE_OVERFLOW_WRAPS is there just because the
pattern above it has it too, if you want, I can throw it away from both.

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

	PR tree-optimization/94913
	* match.pd (A - B + -1 >= A to B >= A): New simplification.
	(A - B > A to A < B): Don't test TYPE_OVERFLOW_WRAPS which is always
	true for TYPE_UNSIGNED integral types.

	* gcc.dg/tree-ssa/pr94913.c: New test.
2020-05-08 09:32:20 +02:00
Jakub Jelinek af1634f1b5 csa: Fix --enable-checking=yes,df bootstrap failure in csa [PR94961]
My recent combine-stack-adj.c change broke df checking bootstrap,
while most of the changes are done through validate_change/confirm_changes
which update df info, the removal of REG_EQUAL notes didn't update df info.

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

	PR bootstrap/94961
	PR rtl-optimization/94516
	* rtl.h (remove_reg_equal_equiv_notes): Add a bool argument defaulted
	to false.
	* rtlanal.c (remove_reg_equal_equiv_notes): Add no_rescan argument.
	Call df_notes_rescan if that argument is not true and returning true.
	* combine.c (adjust_for_new_dest): Pass true as second argument to
	remove_reg_equal_equiv_notes.
	* postreload.c (reload_combine_recognize_pattern): Don't call
	df_notes_rescan.
2020-05-08 09:30:54 +02:00
GCC Administrator 88fdafb106 Daily bump. 2020-05-08 00:16:17 +00:00
Segher Boessenkool 74d58ad2c2 rs6000: Tests for setnbc
2020-05-07  Segher Boessenkool  <segher@kernel.crashing.org>

	* gcc.target/powerpc/setnbc.h: New.
	* gcc.target/powerpc/setnbceq.c: New.
	* gcc.target/powerpc/setnbcge.c: New.
	* gcc.target/powerpc/setnbcgt.c: New.
	* gcc.target/powerpc/setnbcle.c: New.
	* gcc.target/powerpc/setnbclt.c: New.
	* gcc.target/powerpc/setnbcne.c: New.
2020-05-07 18:34:11 -05:00
Segher Boessenkool 057e1eedac rs6000: New insns setnbc and setnbcr
setnbc[r] is like setbc[r], but it writes -1 instead of 1 to the GPR.

2020-05-07  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New
	define_insn.
	(*setnbcr_<un>signed_<GPR:mode>): New define_insn.
	(*neg_eq_<mode>): Avoid for TARGET_FUTURE; add missing && 1.
	(*neg_ne_<mode>): Likewise.
2020-05-07 18:31:27 -05:00
Segher Boessenkool e473a6df6d rs6000: Tests for setbc
2020-05-07  Segher Boessenkool  <segher@kernel.crashing.org>

	* gcc.target/powerpc/setbc.h: New.
	* gcc.target/powerpc/setbceq.c: New.
	* gcc.target/powerpc/setbcge.c: New.
	* gcc.target/powerpc/setbcgt.c: New.
	* gcc.target/powerpc/setbcle.c: New.
	* gcc.target/powerpc/setbclt.c: New.
	* gcc.target/powerpc/setbcne.c: New.
2020-05-07 18:28:58 -05:00
Segher Boessenkool 98329e3f5b rs6000: New insns setbc and setbcr
New instructions setbc and setbcr.  setbc sets a GPR to 1 if some
condition register bit is set, and 0 otherwise; setbcr does it the
other way around.

2020-05-07  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.md (setbc_<un>signed_<GPR:mode>): New
	define_insn.
	(*setbcr_<un>signed_<GPR:mode>): Likewise.
	(cstore<mode>4): Use setbc[r] if available.
	(<code><GPR:mode><GPR2:mode>2_isel): Avoid for TARGET_FUTURE.
	(eq<mode>3): Use setbc for TARGET_FUTURE.
	(*eq<mode>3): Avoid for TARGET_FUTURE.
	(ne<mode>3): Replace :P with :GPR; use setbc for TARGET_FUTURE;
	else for non-Pmode, use gen_eq and gen_xor.
	(*ne<mode>3): Avoid for TARGET_FUTURE.
	(*eqsi3_ext<mode>): Avoid for TARGET_FUTURE; fix missing && 1.
2020-05-07 18:25:44 -05:00
Jeff Law f5fb834c96 Move all patterns and expanders out of h8300.md and into other files that are included into h8300.md
* config/h8300/h8300.md: Move expanders and patterns into
	files based on functionality.
	* config/h8300/addsub.md: New file.
	* config/h8300/bitfield.md: New file
	* config/h8300/combiner.md: New file
	* config/h8300/divmod.md: New file
	* config/h8300/extensions.md: New file
	* config/h8300/jumpcall.md: New file
	* config/h8300/logical.md: New file
	* config/h8300/movepush.md: New file
	* config/h8300/multiply.md: New file
	* config/h8300/other.md: New file
	* config/h8300/proepi.md: New file
	* config/h8300/shiftrotate.md: New file
	* config/h8300/testcompare.md: New file

commit da1de1d91088ac506c1bed0fba9b0f04c5b8c876
2020-05-07 18:21:48 -04:00
Jeff Law 8e8b576639 More cleanups. Merging patterns with iterators, split out peepholes, etc.
* config/h8300/h8300.md (adds/subs splitters): Merge into single
	splitter.
	(negation expanders and patterns): Simplify and combine using
	iterators.
	(one_cmpl expanders and patterns): Likewise.
	(tablejump, indirect_jump patterns ): Likewise.
	(shift and rotate expanders and patterns): Likewise.
	(absolute value expander and pattern): Drop expander, rename pattern
	to just "abssf2"
	(peephole2 patterns): Move into...
	* config/h8300/peepholes.md: New file.
2020-05-07 18:15:12 -04:00
Jeff Law 27c1afd533 Drop original H8/300 support. This should generate identical code for the remaining subtargets. Defaults to H8/300H codegen
* config/h8300/constraints.md (L and N): Simplify now that we're not
	longer supporting the original H8/300 chip.
	* config/h8300/elf.h (LINK_SPEC): Likewise.  Default to H8/300H.
	* config/h8300/h8300.c (shift_alg_qi): Drop H8/300 support.
	(shift_alg_hi, shift_alg_si): Similarly.
	(h8300_option_overrides): Similarly.  Default to H8/300H.  If
	compiling for H8/S, then turn off H8/300H.  Do not update the
	shift_alg tables for H8/300 port.
	(h8300_emit_stack_adjustment): Remove support for H8/300.  Simplify
	where possible.
	(push, split_adds_subs, h8300_rtx_costs): Likewise.
	(h8300_print_operand, compute_mov_length): Likewise.
	(output_plussi, compute_plussi_length): Likewise.
	(compute_plussi_cc, output_logical_op): Likewise.
	(compute_logical_op_length, compute_logical_op_cc): Likewise.
	(get_shift_alg, h8300_shift_needs_scratch): Likewise.
	(output_a_shift, compute_a_shift_length): Likewise.
	(output_a_rotate, compute_a_rotate_length): Likewise.
	(output_simode_bld, h8300_hard_regno_mode_ok): Likewise.
	(h8300_modes_tieable_p, h8300_return_in_memory): Likewise.
	* config/h8300/h8300.h (TARGET_CPU_CPP_BUILTINS): Likewise.
	(attr_cpu, TARGET_H8300): Remove.
	(TARGET_DEFAULT): Update.
	(UNITS_PER_WORD, PARM_BOUNDARY): Simplify where possible.
	(BIGGEST_ALIGNMENT, STACK_BOUNDARY): Likewise.
	(CONSTANT_ADDRESS_P, MOVE_MAX, Pmode): Likewise.
	(SIZE_TYPE, POINTER_SIZE, ASM_WORD_OP): Likewise.
	* config/h8300/h8300.md: Simplify patterns throughout.
	* config/h8300/t-h8300: Update multilib configuration.

@@ -82,11 +82,9 @@
2020-05-07 18:00:41 -04:00
Jeff Law b9cb3bb9ad Drop more COFF support from H8 port
* config/h8300/h8300.h (LINK_SPEC): Remove.
	(USER_LABEL_PREFIX): Likewise.
2020-05-07 17:25:45 -04:00
Jeff Law f69785246f Remove remnants of COFF support which was dropped eons ago.
* config/h8300/h8300.c (h8300_asm_named_section): Remove.
	(h8300_option_override): Remove remnants of COFF support.
2020-05-07 17:10:42 -04:00
Jonathan Wakely 91d505491c libstdc++: Fix whitespace in Changelog 2020-05-07 21:47:49 +01:00
Jonathan Wakely 9c24e97a97 libstdc++: Fix some C++20 algorithms to work in parallel mode
Some new algorithms need to use _GLIBCXX_STD_A to refer to the "normal"
version of the algorithm, to workaround the namespace dance done for
parallel mode.

	PR libstdc++/94971 (partial)
	* include/bits/ranges_algo.h (ranges::__sample_fn): Qualify
	std::sample using macro to work in parallel mode.
	(__sort_fn): Likewise for std::sort.
	(ranges::__nth_element_fn): Likewise for std::nth_element.
	* include/bits/stl_algobase.h (lexicographical_compare_three_way):
	Likewise for std::__min_cmp.
	* include/parallel/algobase.h (lexicographical_compare_three_way):
	Add to namespace std::__parallel.
2020-05-07 21:43:49 +01:00
Jonathan Wakely 4cbc9d8b34 libstdc++: Make relational operators work with const guarded iterators (PR 92472)
This is a correct fix for the incorrect cppcheck suggestion to make
these parameters const. In order to that, the dereference operators need
to be const. The conversions to the underlying iterator can be const
too.

	PR c/92472
	* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
	(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
	(_UnguardedIterator::operator _RAIter): Add const qualifier.
	(operator<(_GuardedIterator&, _GuardedIterator&)
	(operator<=(_GuardedIterator&, _GuardedIterator&)
	(operator<(_UnguardedIterator&, _UnguardedIterator&)
	(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
	parameters to const references.
2020-05-07 21:43:49 +01:00
Iain Sandoe c710084383 coroutines: Improve error recovery [PR94817, PR94829].
When we have completely missing key information (e.g. the
coroutine_traits) or a partially transformed function body, we
need to try and balance returning useful information about
failures with the possibility that some part of the diagnostics
machinery or following code will not be able to handle the
state.

The PRs (and revised testcase) point to cases where that processing
has failed.

This revises the process to avoid special handling for the
ramp, and falls back on the same code used for regular function
fails.

There are test-cases (in addition to the ones for the PRs) that now
cover all early exit points [where the transforms are considered
to have failed in a manner that does not allow compilation to
continue].

gcc/cp/ChangeLog:

2020-05-07  Iain Sandoe  <iain@sandoe.co.uk>

	PR c++/94817
	PR c++/94829
	* coroutines.cc (morph_fn_to_coro): Set unformed outline
	functions to error_mark_node.  For early error returns suppress
	warnings about missing ramp return values.  Fix reinstatement
	of the function body on pre-existing initial error.
	* decl.c (finish_function): Use the normal error path for fails
	in the ramp function, do not try to compile the helpers if the
	transform fails.

gcc/testsuite/ChangeLog:

2020-05-07  Iain Sandoe  <iain@sandoe.co.uk>

	PR c++/94817
	PR c++/94829
	* g++.dg/coroutines/coro-missing-final-suspend.C: New test.
	* g++.dg/coroutines/coro-missing-initial-suspend.C: New test.
	* g++.dg/coroutines/coro-missing-promise-yield.C: Check for
	continuation of compilation.
	* g++.dg/coroutines/coro-missing-promise.C: Likewise.
	* g++.dg/coroutines/coro-missing-ret-value.C: Likewise
	* g++.dg/coroutines/coro-missing-ret-void.C: Likewise
	* g++.dg/coroutines/coro-missing-ueh-3.C: Likewise
	* g++.dg/coroutines/pr94817.C: New test.
	* g++.dg/coroutines/pr94829.C: New test.
2020-05-07 21:06:43 +01:00
Marek Polacek f1d9467714 c-family: Add "nonstatic" to badwords.
* c-format.c (badwords): Add "nonstatic".
2020-05-07 14:42:38 -04:00
Marek Polacek 5d5dcc65aa c++: Detect long double -> double narrowing [PR94590]
This PR points out that we don't detect long double -> double narrowing
when long double happens to have the same precision as double; on x86_64
this can be achieved by -mlong-double-64.

[dcl.init.list]#7.2 specifically says "from long double to double or float,
or from double to float", but check_narrowing only checks

  TYPE_PRECISION (type) < TYPE_PRECISION (ftype)

so we need to handle the other cases too, e.g. by same_type_p as in
the following patch.

	PR c++/94590 - Detect long double -> double narrowing.
	* typeck2.c (check_narrowing): Detect long double -> double
	narrowing even when double and long double have the same
	precision.  Make it handle conversions to float too.

	* g++.dg/cpp0x/Wnarrowing18.C: New test.
2020-05-07 14:15:37 -04:00
Marek Polacek 21968d4ae0 c++: Fix crash with template spec in different namespace [PR94255]
This is an ICE on invalid, because we're specializing S::foo in the
wrong namespace.  cp_parser_class_specifier_1 parses S::foo in M
and then it tries to push the nested-name-specifier of foo, which is
S.  By that, we're breaking the assumption of push_inner_scope that
the pushed scope must be a scope nested inside current scope: current
scope is M, but the namespace context of S is N, and N is not nested
in M, so we fell into an infinite loop in push_inner_scope_r.

(cp_parser_class_head called check_specialization_namespace which already
gave a permerror.)

	PR c++/94255
	* parser.c (cp_parser_class_specifier_1): Check that the scope is
	nested inside current scope before pushing it.

	* g++.dg/template/spec41.C: New test.
2020-05-07 14:11:31 -04:00
Alan Modra a5cac223df Fix bogus calls to set_rtx_cost.
* tree-ssa-reassoc.c (optimize_range_tests_to_bit_test): Replace
	set_rtx_cost with set_src_cost.
	* tree-switch-conversion.c (bit_test_cluster::emit): Likewise.
2020-05-07 14:00:18 -04:00
Kewen Lin 3807f286ef Check alignment for no peeling gaps handling
* gcc/tree-vect-stmts.c (vectorizable_load): Check alignment to avoid
        redundant half vector handlings for no peeling gaps.
2020-05-07 13:52:52 -04:00
Giuliano Belinassi 41081235df Wrap global variables in tree-ssa-operands.c into a class.
* tree-ssa-operands.c (operands_scanner): New class.
	(operands_bitmap_obstack): Remove.
	(n_initialized): Remove.
	(build_uses): Move to operands_scanner class.
	(build_vuse): Same as above.
	(build_vdef): Same as above.
	(verify_ssa_operands): Same as above.
	(finalize_ssa_uses): Same as above.
	(cleanup_build_arrays): Same as above.
	(finalize_ssa_stmt_operands): Same as above.
	(start_ssa_stmt_operands): Same as above.
	(append_use): Same as above.
	(append_vdef): Same as above.
	(add_virtual_operand): Same as above.
	(add_stmt_operand): Same as above.
	(get_mem_ref_operands): Same as above.
	(get_tmr_operands): Same as above.
	(maybe_add_call_vops): Same as above.
	(get_asm_stmt_operands): Same as above.
	(get_expr_operands): Same as above.
	(parse_ssa_operands): Same as above.
	(finalize_ssa_defs): Same as above.
	(build_ssa_operands): Same as above, plus create a C-like wrapper.
	(update_stmt_operands): Create an instance of operands_scanner.
2020-05-07 13:45:34 -04:00
Marek Polacek 0ca22d027e c++: Implement P1957R2, T* to bool should be considered narrowing.
This was approved in the Prague 2020 WG21 meeting so let's adjust the
comment.  Since it's supposed to be a DR I think we should no longer
limit it to C++20.

	P1957R2
	* typeck2.c (check_narrowing): Consider T* to bool narrowing
	in C++11 and up.

	* g++.dg/cpp0x/initlist92.C: Don't expect an error in C++20 only.
2020-05-07 13:41:33 -04:00
Richard Biener b9250b3cb9 ipa/94947 - avoid using externally_visible_p ()
externally_visible_p wasn't the correct predicate to use (even if it
worked), instead we should use DECL_EXTERNAL || TREE_PUBLIC.

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

	PR ipa/94947
	* tree-ssa-structalias.c (refered_from_nonlocal_fn): Use
	DECL_EXTERNAL || TREE_PUBLIC instead of externally_visible.
	(refered_from_nonlocal_var): Likewise.
	(ipa_pta_execute): Likewise.
2020-05-07 19:42:22 +02:00
Manfred Schwarb f8a4141bae Fix various dg directives.
* gcc.dg/20050121-1.c: Fix broken dg directives.
	* gcc.dg/analzyer/pr93382.c: Likewise.
	* gcc.dg/autopar/pr68460.c: Likewise.
	* gcc.dg/c90-fordecl-1.c: Likewise.
	* gcc.dg/cpp/trad/funlike-5.c: Likewise.
	* gcc.dg/debug/dwarf2/dwarf-dfp.c: Likewise.
	* gcc.dg/debug/dwarf2/dwarf-float.c: Likewise.
	* gcc.dg/lto/pr52634_0.c: Likewise.
	* gcc.dg/pr32069.c: Likewise.
	* gcc.dg/pr35445.c: Likewise.
	* gcc.dg/pr40172-3.c: Likewise.
	* gcc.dg/pr87347.c: Likewise.
	* gcc.dg/pr88660.c: Likewise.
	* gcc.dg/pr89689.c: Likewise.
	* gcc.dg/sinatan-2.c: Likewise.
	* gcc.dg/sinhatanh-1.c: Likewise.
	* gcc.dg/sinhovercosh-1.c: Likewise.
	* gcc.dg/tls/opt-9.c: Likewise.
	* gcc.dg/torture/builtins-1.c: Likewise.
	* gcc.dg/torture/pr51106-1.c: Likewise.
	* gcc.dg/torture/pr51106-2.c: Likewise.
	* gcc.dg/torture/pr80281.c: Likewise.
	* gcc.dg/torture/pr92252.c: Likewise.
	* gcc.dg/tree-ssa/pr79448-2.c: Likewise.
	* gcc.dg/tree-ssa/pr79448.c: Likewise.
	* gcc.dg/tree-ssa/pr92163.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-28.c: Likewise.
	* gcc.dg/tree-ssa/upcast-1.c: Likewise.
	* gcc.dg/two-types-6.c: Likewise.
	* gcc.dg/ubsan/c-shift-1.c: Likewise.
	* gcc.dg/var-expand3.c: Likewise.
	* gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c: Likewise.
	* gcc.dg/vect/pr71264.c: Likewise.
2020-05-07 13:35:24 -04:00
Marek Polacek d20b71735e c++: Fix spelling of non-static
I was looking at DR 296 and noticed that we say "nonstatic" instead of
"non-static", which is the version the standard uses.  So this patch
fixes the spelling throughout the front end.  Did not check e.g.
non-dependent or any other.

	* decl.c (grok_op_properties): Fix spelling of non-static.
	* typeck.c (build_class_member_access_expr): Likewise.

	* g++.dg/other/operator1.C: Adjust expected message.
	* g++.dg/overload/operator2.C: Likewise.
	* g++.dg/template/error30.C: Likewise.
	* g++.old-deja/g++.jason/operator.C: Likewise.
2020-05-07 13:25:14 -04:00
Erick Ochoa 5438a28a05 Fix minor typos in comments that affected syntax highlighting.
* gcc/tree-ssa-struct-alias.c: Fix comments
2020-05-07 13:19:57 -04:00
Martin Liska ab2952c77d
Fix optindex entries for 2 options.
* doc/invoke.texi: Fix 2 optindex entries.
2020-05-07 15:59:38 +02:00
Richard Biener eb72dc663e extend DECL_GIMPLE_REG_P to all types
This extends DECL_GIMPLE_REG_P to all types so we can clear
TREE_ADDRESSABLE even for integers with partial defs, not just
complex and vector variables.  To make that transition easier
the patch inverts DECL_GIMPLE_REG_P to DECL_NOT_GIMPLE_REG_P
since that makes the default the current state for all other
types besides complex and vectors.

For the testcase in PR94703 we're able to expand the partial
def'ed local integer to a register then, producing a single
movl rather than going through the stack.

On i?86 this execute FAILs gcc.dg/torture/pr71522.c because
we now expand a round-trip through a long double automatic var
to a register fld/fst which normalizes the value.  For that
during RTL expansion we're looking for problematic punnings
of decls and avoid pseudos for those - I chose integer or
BLKmode accesses on decls with modes where precision doesn't
match bitsize which covers the XFmode case.

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

	PR middle-end/94703
	* tree-core.h (tree_decl_common::gimple_reg_flag): Rename ...
	(tree_decl_common::not_gimple_reg_flag): ... to this.
	* tree.h (DECL_GIMPLE_REG_P): Rename ...
	(DECL_NOT_GIMPLE_REG_P): ... to this.
	* gimple-expr.c (copy_var_decl): Copy DECL_NOT_GIMPLE_REG_P.
	(create_tmp_reg): Simplify.
	(create_tmp_reg_fn): Likewise.
	(is_gimple_reg): Check DECL_NOT_GIMPLE_REG_P for all regs.
	* gimplify.c (create_tmp_from_val): Simplify.
	(gimplify_bind_expr): Likewise.
	(gimplify_compound_literal_expr): Likewise.
	(gimplify_function_tree): Likewise.
	(prepare_gimple_addressable): Set DECL_NOT_GIMPLE_REG_P.
	* asan.c (create_odr_indicator): Do not clear DECL_GIMPLE_REG_P.
	(asan_add_global): Copy it.
	* cgraphunit.c (cgraph_node::expand_thunk): Force args
	to be GIMPLE regs.
	* function.c (gimplify_parameters): Copy
	DECL_NOT_GIMPLE_REG_P.
	* ipa-param-manipulation.c
	(ipa_param_body_adjustments::common_initialization): Simplify.
	(ipa_param_body_adjustments::reset_debug_stmts): Copy
	DECL_NOT_GIMPLE_REG_P.
	* omp-low.c (lower_omp_for_scan): Do not set DECL_GIMPLE_REG_P.
	* sanopt.c (sanitize_rewrite_addressable_params): Likewise.
	* tree-cfg.c (make_blocks_1): Simplify.
	(verify_address): Do not verify DECL_GIMPLE_REG_P setting.
	* tree-eh.c (lower_eh_constructs_2): Simplify.
	* tree-inline.c (declare_return_variable): Adjust and
	generalize.
	(copy_decl_to_var): Copy DECL_NOT_GIMPLE_REG_P.
	(copy_result_decl_to_var): Likewise.
	* tree-into-ssa.c (pass_build_ssa::execute): Adjust comment.
	* tree-nested.c (create_tmp_var_for): Simplify.
	* tree-parloops.c (separate_decls_in_region_name): Copy
	DECL_NOT_GIMPLE_REG_P.
	* tree-sra.c (create_access_replacement): Adjust and
	generalize partial def support.
	* tree-ssa-forwprop.c (pass_forwprop::execute): Set
	DECL_NOT_GIMPLE_REG_P on decls we introduce partial defs on.
	* tree-ssa.c (maybe_optimize_var): Handle clearing of
	TREE_ADDRESSABLE and setting/clearing DECL_NOT_GIMPLE_REG_P
	independently.
	* lto-streamer-out.c (hash_tree): Hash DECL_NOT_GIMPLE_REG_P.
	* tree-streamer-out.c (pack_ts_decl_common_value_fields): Stream
	DECL_NOT_GIMPLE_REG_P.
	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Likewise.
	* cfgexpand.c (avoid_type_punning_on_regs): New.
	(discover_nonconstant_array_refs): Call
	avoid_type_punning_on_regs to avoid unsupported mode punning.

	lto/
	* lto-common.c (compare_tree_sccs_1): Compare
	DECL_NOT_GIMPLE_REG_P.

	c/
	* gimple-parser.c (c_parser_parse_ssa_name): Do not set
	DECL_GIMPLE_REG_P.

	cp/
	* optimize.c (update_cloned_parm): Copy DECL_NOT_GIMPLE_REG_P.

	* gcc.dg/tree-ssa/pr94703.c: New testcase.
2020-05-07 15:38:20 +02:00
Jakub Jelinek 1d865b29ab testsuite: Improve g++.dg/ext/attr-parm-1.C testcase [PR94946]
The testcase in the current form doesn't FAIL without the patch on
x86_64-linux unless also testing with -m32; as that the 64-bit testing
on that target is probably way more common, and we can use also attributes
that FAIL without the patch with -m64, the following patch adjusts the
test, so that it FAILs without the patch for both -m64 and -m32 (but not
-mx32) and PASSes with the patch.

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

	PR c++/94946
	* g++.dg/ext/attr-parm-1.C: Enable the test also for lp64 x86, use
	sysv_abi and ms_abi attributes in that case instead of fastcall and
	no attribute.
2020-05-07 14:56:51 +02:00
Jakub Jelinek 9b95bb52b4 c-family: Fix error-recovery ICE on __builtin_speculation_safe_value [PR94968]
If the second argument of __builtin_speculation_safe_value is
error_mark_node (or has such a type), we ICE during
useless_typ_conversion_p.

202-05-07  Jakub Jelinek  <jakub@redhat.com>

	PR c/94968
	* c-common.c (speculation_safe_value_resolve_params): Return false if
	error_operand_p (val2).
	(resolve_overloaded_builtin) <case BUILT_IN_SPECULATION_SAFE_VALUE_N>:
	Remove extraneous semicolon.

	* gcc.dg/pr94968.c: New test.
2020-05-07 14:54:20 +02:00
Alex Coplan 9cd70f3f0f AArch32: fix bootstrap failure
The attached patch fixes a bootstrap failure on AArch32 introduced by
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=308bc496884706af4b3077171cbac684c7a6f7c6

This makes the declaration of arm_add_stmt_cost match the definition, and removes the redundant
class keyword from the definition.

2020-05-07  Alex Coplan  <alex.coplan@arm.com>

        * config/arm/arm.c (arm_add_stmt_cost): Fix declaration, remove class
	from definition.
2020-05-07 11:34:06 +01:00
Richard Biener 283cb9ea62 tree-optimization/57359 - rewrite SM code
This rewrites store-motion to process candidates where we can
ensure order preserving separately and with no need to disambiguate
against all stores.  Those candidates we cannot handle this way
are validated to be independent on all stores (w/o TBAA) and then
processed as "unordered" (all conditionally executed stores are so
as well).

This will necessary cause
  FAIL: gcc.dg/graphite/pr80906.c scan-tree-dump graphite "isl AST to Gimple succeeded"
because the SM previously performed is not valid for exactly the PR57359
reason, we still perform SM of qc for the innermost loop but that's not enough.

There is still room for improvements because we still check some constraints
for the order preserving cases that are only necessary in the current
strict way for the unordered ones.  Leaving that for the furture.

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

	PR tree-optimization/57359
	* tree-ssa-loop-im.c (im_mem_ref::indep_loop): Remove.
	(in_mem_ref::dep_loop): Repurpose.
	(LOOP_DEP_BIT): Remove.
	(enum dep_kind): New.
	(enum dep_state): Likewise.
	(record_loop_dependence): New function to populate the
	dependence cache.
	(query_loop_dependence): New function to query the dependence
	cache.
	(memory_accesses::refs_in_loop): Rename to ...
	(memory_accesses::refs_loaded_in_loop): ... this and change to
	only record loads.
	(outermost_indep_loop): Adjust.
	(mem_ref_alloc): Likewise.
	(gather_mem_refs_stmt): Likewise.
	(mem_refs_may_alias_p): Add tbaa_p parameter and pass it down.
	(struct sm_aux): New.
	(execute_sm): Split code generation on exits, record state
	into new hash-map.
	(enum sm_kind): New.
	(execute_sm_exit): Exit code generation part.
	(sm_seq_push_down): Helper for sm_seq_valid_bb performing
	dependence checking on stores reached from exits.
	(sm_seq_valid_bb): New function gathering SM stores on exits.
	(hoist_memory_references): Re-implement.
	(refs_independent_p): Add tbaa_p parameter and pass it down.
	(record_dep_loop): Remove.
	(ref_indep_loop_p_1): Fold into ...
	(ref_indep_loop_p): ... this and generalize for three kinds
	of dependence queries.
	(can_sm_ref_p): Adjust according to hoist_memory_references
	changes.
	(store_motion_loop): Don't do anything if the set of SM
	candidates is empty.
	(tree_ssa_lim_initialize): Adjust.
	(tree_ssa_lim_finalize): Likewise.

	* gcc.dg/torture/pr57359-1.c: New testcase.
	* gcc.dg/torture/pr57359-1.c: Likewise.
	* gcc.dg/tree-ssa/ssa-lim-14.c: Likewise.
	* gcc.dg/graphite/pr80906.c: XFAIL.
2020-05-07 12:12:12 +02:00
Eric Botcazou 359b19e990 Update the baseline symbols for SPARC64/Linux 2020-05-07 10:56:51 +02:00
Eric Botcazou 834e660ea8 Fix a few DWARF bugs with -fgnat-encodings=minimal
The -fgnat-encodings=minimal switch tells the compiler to generate mostly
pure DWARF for the GNAT compiler and it contains some bugs related to
discriminated record types with variant part.

	* dwarf2out.c (add_data_member_location_attribute): Account for
	the variant part offset in the computation of the data bit offset.
	(add_bit_offset_attribute): Remove CTX parameter.  Pass a new
	context in the call to field_byte_offset.
	(gen_field_die): Adjust call to add_bit_offset_attribute and
	remove confusing assertion.
	(analyze_variant_discr): Deal with boolean subtypes.
2020-05-07 10:54:09 +02:00
Martin Liska b24fc8a692
lto-wrapper: split arguments of getenv ("MAKE").
* lto-wrapper.c: Split arguments of MAKE environment
	variable.
2020-05-07 09:38:16 +02:00
Uros Bizjak 6760cb4784 alpha: Implement the PR94780 fix for alpha.
Essentially the same fix as for x86.

2020-05-07  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	* config/alpha/alpha.c (alpha_atomic_assign_expand_fenv): Use
	TARGET_EXPR instead of MODIFY_EXPR for the first assignments to
	fenv_var and new_fenv_var.
2020-05-07 08:44:38 +02:00
GCC Administrator 4be996072c Daily bump. 2020-05-07 00:16:32 +00:00
Marek Polacek 1e89178889 c++: ICE in value_dependent_expression_p in C++98 mode [PR94938]
Here we ICE with -std=c++98 since the newly added call to uses_template_parms
(r10-6357): we hit
26530             gcc_assert (cxx_dialect >= cxx11
26531                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
and TYPE is a record type.  The problem is that the argument to
value_dependent_expression_p does not satisfy potential_constant_expression
which it must, as the comment explains.  I thought about fixing this in
uses_template_parms -- only call v_d_e_p if p_c_e is true, but in this
case we want to also suppress the warnings if we don't have a constant
expression.  I couldn't simply check TREE_CONSTANT as in
compute_array_index_type_loc, because then we'd stop warning in the new
Wtype-limits3.C test.

Fixed by using type_dependent_expression_p_push instead.  This means
that we won't suppress the warnings for value-dependent expressions that
aren't type-dependent, e.g. sizeof (T).  This only seems to make a
difference for -Wdiv-by-zero, now tested in Wdiv-by-zero-3.C, where I
think it's reasonable to warn.  It could make -Wtautological-compare
warn more, but that warning doesn't trigger when it gets constant arguments.
Wtype-limits4.C is a test reduced from poly-int.h and it tests a scenario
that was missing in our testsuite.

This patch also moves the warning_sentinels after the RECURs -- we mean
to use them for build_x_binary_op purposes only.

	PR c++/94938
	* pt.c (tsubst_copy_and_build): Call type_dependent_expression_p_push
	instead of uses_template_parms.  Move the warning_sentinels after the
	RECURs.

	* g++.dg/warn/Wdiv-by-zero-3.C: New test.
	* g++.dg/warn/Wtype-limits4.C: New test.
	* g++.dg/warn/template-2.C: New test.
	* g++.old-deja/g++.pt/crash10.C: Add dg-warning.
2020-05-06 18:52:44 -04:00
Iain Buclaw 0af711e191 d: Fix ICE in verify_gimple_stmt, at tree-cfg.c:4959
Both array concat and array new expressions wrapped any temporaries
created into a BIND_EXPR.  This does not work if an expression used to
construct the result requires scope destruction, which is represented by
a TARGET_EXPR with a clean-up, and a CLEANUP_POINT_EXPR at the
location where the temporaries logically go out of scope.  The reason
for this not working is because the lowering of cleanup point
expressions does not traverse inside BIND_EXPRs to expand any gimple
cleanup expressions within.

The use of creating BIND_EXPR has been removed at both locations, and
replaced with a normal temporary variable that has initialization
delayed until its address is taken.

gcc/d/ChangeLog:

	PR d/94970
	* d-codegen.cc (force_target_expr): Move create_temporary_var
	implementation inline here.
	(create_temporary_var): Remove.
	(maybe_temporary_var): Remove.
	(bind_expr): Remove.
	* d-convert.cc (d_array_convert): Use build_local_temp to generate
	temporaries, and generate its assignment.
	* d-tree.h (create_temporary_var): Remove.
	(maybe_temporary_var): Remove.
	(d_array_convert): Remove vars argument.
	* expr.cc (ExprVisitor::visit (CatExp *)): Use build_local_temp to
	generate temporaries, don't wrap them in a BIND_EXPR.
	(ExprVisitor::visit (NewExp *)): Likewise.

gcc/testsuite/ChangeLog:

	PR d/94970
	* gdc.dg/pr94970.d: New test.
2020-05-06 23:56:24 +02:00
Jakub Jelinek 46fcef99f4 c++: Avoid strict_aliasing_warning on dependent types or expressions [PR94951]
The following testcase gets a bogus warning during build_base_path,
when cp_build_indirect_ref* calls strict_aliasing_warning with a dependent
expression.  IMHO calling get_alias_set etc. on dependent types feels wrong
to me, we should just defer the warnings in those cases until instantiation
and only handle the cases where neither type nor expr are dependent.

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

	PR c++/94951
	* typeck.c (cp_strict_aliasing_warning): New function.
	(cp_build_indirect_ref_1, build_reinterpret_cast_1): Use
	it instead of strict_aliasing_warning.

	* g++.dg/warn/Wstrict-aliasing-bogus-tmpl.C: New test.
2020-05-06 23:38:13 +02:00