Commit Graph

194676 Commits

Author SHA1 Message Date
Aldy Hernandez
e850c98f1f Convert some uses in ranger_cache and DOM to vrange.
Here are a few conversions to type agnostic vrange I found while
working on frange.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-cache.cc (ranger_cache::edge_range): Convert to vrange.
	(ranger_cache::range_from_dom): Same.
	* tree-ssa-dom.cc
	(dom_opt_dom_walker::set_global_ranges_from_unreachable_edges): Same.
2022-07-24 17:00:50 +02:00
Roger Sayle
76d6224b94 PR target/106303: Fix TImode STV related failures on x86.
This patch resolves PR target/106303 (and the related PRs 106347,
106404, 106407) which are ICEs caused by my improvements to x86_64's
128-bit TImode to V1TImode Scalar to Vector (STV) pass.  My apologies
for the breakage.  The issue is that data flow analysis is used to
partition usage of each TImode pseudo into "chains", where each
chain is analyzed and if suitable converted to vector operations.
The problems appears when some chains for a pseudo are converted,
and others aren't as RTL sharing can result in some mode changes
leaking into other instructions that aren't/shouldn't/can't be
converted, which eventually leads to an ICE for mismatched modes.

My first approach to a fix was to unify more of the STV infrastructure,
reasoning that if TImode STV was exhibiting these problems, but DImode
and SImode STV weren't, the issue was likely to be caused/resolved by
these remaining differences.  This appeared to fix some but not all of
the reported PRs.  A better solution was then proposed by H.J. Lu in
Bugzilla, that we need to iterate the removal of candidates in the
function timode_remove_non_convertible_regs until there are no further
changes.  As each chain is removed from consideration, it in turn may
affect whether other insns/chains can safely be converted.

2022-07-24  Roger Sayle  <roger@nextmovesoftware.com>
	    H.J. Lu  <hjl.tools@gmail.com>

gcc/ChangeLog
	PR target/106303
	PR target/106347
	* config/i386/i386-features.cc (make_vector_copies): Move from
	general_scalar_chain to scalar_chain.
	(convert_reg): Likewise.
	(convert_insn_common): New scalar_chain method split out from
	general_scalar_chain convert_insn.
	(convert_registers): Move from general_scalar_chain to
	scalar_chain.
	(scalar_chain::convert): Call convert_insn_common before calling
	convert_insn.
	(timode_remove_non_convertible_regs): Iterate until there are
	no further changes to the candidates.
	* config/i386/i386-features.h (scalar_chain::hash_map): Move
	from general_scalar_chain.
	(scalar_chain::convert_reg): Likewise.
	(scalar_chain::convert_insn_common): New shared method.
	(scalar_chain::make_vector_copies): Move from general_scalar_chain.
	(scalar_chain::convert_registers): Likewise.  No longer virtual.
	(general_scalar_chain::hash_map): Delete.  Moved to scalar_chain.
	(general_scalar_chain::convert_reg): Likewise.
	(general_scalar_chain::make_vector_copies): Likewise.
	(general_scalar_chain::convert_registers): Delete virtual method.
	(timode_scalar_chain::convert_registers): Likewise.

gcc/testsuite/ChangeLog
	PR target/106303
	PR target/106347
	* gcc.target/i386/pr106303.c: New test case.
	* gcc.target/i386/pr106347.c: New test case.
2022-07-24 12:22:22 +01:00
GCC Administrator
0e6fa99730 Daily bump. 2022-07-24 00:16:21 +00:00
Immad Mir
f8e6e2c046 Adding three new function attributes for static analysis of file descriptors
This patch adds three new function attributes to GCC that
are used for static analysis of usage of file descriptors:

1) __attribute__ ((fd_arg(N))): The attributes may be applied to a function that
takes an open file descriptor at refrenced argument N.

It indicates that the passed filedescriptor must not have been closed.
Therefore, when the analyzer is enabled with -fanalyzer, the
analyzer may emit a -Wanalyzer-fd-use-after-close diagnostic
if it detects a code path in which a function with this attribute is
called with a closed file descriptor.

The attribute also indicates that the file descriptor must have been checked for
validity before usage. Therefore, analyzer may emit
-Wanalyzer-fd-use-without-check diagnostic if it detects a code path in
which a function with this attribute is called with a file descriptor that has
not been checked for validity.

2) __attribute__((fd_arg_read(N))): The attribute is identical to
fd_arg, but with the additional requirement that it might read from
the file descriptor, and thus, the file descriptor must not have been opened
as write-only.

The analyzer may emit a -Wanalyzer-access-mode-mismatch
diagnostic if it detects a code path in which a function with this
attribute is called on a file descriptor opened with O_WRONLY.

3) __attribute__((fd_arg_write(N))): The attribute is identical to fd_arg_read
except that the analyzer may emit a -Wanalyzer-access-mode-mismatch diagnostic if
it detects a code path in which a function with this attribute is called on a
file descriptor opened with O_RDONLY.

gcc/analyzer/ChangeLog:
	* sm-fd.cc (fd_param_diagnostic): New diagnostic class.
	(fd_access_mode_mismatch): Change inheritance from fd_diagnostic
	to fd_param_diagnostic. Add new overloaded constructor.
	(fd_use_after_close): Likewise.
	(unchecked_use_of_fd): Likewise and also change name to fd_use_without_check.
	(double_close): Change name to fd_double_close.
	(enum access_directions): New.
	(fd_state_machine::on_stmt): Handle calls to function with the
	new three function attributes.
	(fd_state_machine::check_for_fd_attrs): New.
	(fd_state_machine::on_open): Use the new overloaded constructors
	of diagnostic classes.

gcc/c-family/ChangeLog:
	* c-attribs.cc: (c_common_attribute_table): add three new attributes
	namely: fd_arg, fd_arg_read and fd_arg_write.
	(handle_fd_arg_attribute): New.

gcc/ChangeLog:
	* doc/extend.texi: Add fd_arg, fd_arg_read and fd_arg_write under
	"Common Function Attributes" section.
	* doc/invoke.texi: Add docs to -Wanalyzer-fd-access-mode-mismatch,
	-Wanalyzer-use-after-close, -Wanalyzer-fd-use-without-check that these
	warnings may be emitted through usage of three function attributes used
	for static analysis of file descriptors namely fd_arg, fd_arg_read and
	fd_arg_write.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/fd-5.c: New test.
	* gcc.dg/analyzer/fd-4.c: Remove quotes around 'read-only' and
	'write-only'.
	* c-c++-common/attr-fd.c: New test.

Signed-off-by: Immad Mir <mirimmad17@gmail.com>
2022-07-23 10:46:17 +05:30
GCC Administrator
b563a8dd3f Daily bump. 2022-07-23 00:16:27 +00:00
David Malcolm
6d5194a10d analyzer: fix state explosion on va_arg [PR106413]
Fix state explosion on va_arg when the call to va_start is in the
top-level function of the analysis.

gcc/analyzer/ChangeLog:
	PR analyzer/106413
	* varargs.cc (region_model::impl_call_va_start): Avoid iterating
	through non-existant variadic arguments by initializing the
	impl_region to "UNKNOWN" if the va_start occurs in the top-level
	function to the analysis.

gcc/testsuite/ChangeLog:
	PR analyzer/106413
	* gcc.dg/analyzer/torture/stdarg-4.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-22 19:50:54 -04:00
David Malcolm
0fb35a45a2 analyzer: fix ICE in binding_cluster ctor [PR106401]
gcc/analyzer/ChangeLog:
	PR analyzer/106401
	* store.cc (binding_cluster::binding_cluster): Remove overzealous
	assertion; we're checking for tracked_p in
	store::get_or_create_cluster.

gcc/testsuite/ChangeLog:
	PR analyzer/106401
	* gcc.dg/analyzer/memcpy-2.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-22 19:50:37 -04:00
Patrick Palka
f77bbc8f86 c++: CTAD from initializer list [PR106366]
During CTAD, we currently perform the first phase of overload resolution
from [over.match.list] only if the class template has a list constructor.
But according to [over.match.class.deduct]/4 it should be enough to just
have a guide that looks like a list constructor (which is a more general
criterion in light of user-defined guides).

	PR c++/106366

gcc/cp/ChangeLog:

	* pt.cc (do_class_deduction): Don't consider TYPE_HAS_LIST_CTOR
	when setting try_list_ctor.  Reset args even when try_list_ctor
	is true and there are no list candidates.  Call resolve_args on
	the reset args.  Rename try_list_ctor to try_list_cand.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/class-deduction112.C: New test.
2022-07-22 18:42:02 -04:00
Jason Merrill
b585af38a1 c++: correct ChangeLog PR number 2022-07-22 17:39:24 -04:00
Marek Polacek
27d2c49c41 Fix CL entry 2022-07-22 16:47:34 -04:00
Tim Lange
b4cc945c04 Fix handling of zero capacity regions in -Wanalyzer-allocation-size [PR106394]
This patch unifies the handling of zero capacity regions for structs
and other types in the allocation size checker.
Regression-tested on x86_64 Linux.

2022-07-22  Tim Lange  <mail@tim-lange.me>

gcc/analyzer/ChangeLog:

	PR analyzer/106394
	* region-model.cc (capacity_compatible_with_type): Always return true
	if alloc_size is zero.

gcc/testsuite/ChangeLog:

	PR analyzer/106394
	* gcc.dg/analyzer/pr106394.c: New test.
2022-07-22 21:46:51 +02:00
Takayuki 'January June' Suwa
64cb87b238 xtensa: Optimize "bitwise AND NOT with imm" followed by "branch if (not) equal to zero"
The RTL combiner will transform "if ((x & C) == C) goto label;"
into "if ((~x & C) == 0) goto label;" and will try to match it with
the insn patterns.

    /* example */
    void test_0(int a) {
      if ((char)a == 255)
        foo();
    }
    void test_1(int a) {
      if ((unsigned short)a == 0xFFFF)
        foo();
    }
    void test_2(int a) {
      if ((a & 0x00003F80) != 0x00003F80)
        foo();
    }

    ;; before
    test_0:
	extui	a2, a2, 0, 8
	movi	a3, 0xff
	bne	a2, a3, .L1
	j.l	foo, a9
    .L1:
	ret.n
    test_1:
	movi.n	a3, -1
	extui	a2, a2, 0, 16
	extui	a3, a3, 16, 16
	bne	a2, a3, .L3
	j.l	foo, a9
    .L3:
	ret.n
    test_2:
	movi	a3, 0x80
	extui	a2, a2, 7, 7
	addmi	a3, a3, 0x3f00
	slli	a2, a2, 7
	beq	a2, a3, .L5
	j.l	foo, a9
    .L5:
	ret.n

    ;; after
    test_0:
	movi	a3, 0xff
	bnall	a2, a3, .L1
	j.l	foo, a9
    .L1:
	ret.n
    test_1:
	movi.n	a3, -1
	extui	a3, a3, 16, 16
	bnall	a2, a3, .L3
	j.l	foo, a9
    .L3:
	ret.n
    test_2:
	movi	a3, 0x80
	addmi	a3, a3, 0x3f00
	ball	a2, a3, .L5
	j.l	foo, a9
    .L5:
	ret.n

gcc/ChangeLog:

	* config/xtensa/xtensa.md (*masktrue_const_bitcmpl):
	Add a new insn_and_split pattern, and a few split patterns for
	spacial cases.
2022-07-22 12:25:38 -07:00
Ian Lance Taylor
cf17256105 libgo: use POSIX shell arithmetic expansion
Avoid bash-specific ((expression)) syntax.  As the bash syntax
converts a non-zero value to a zero status (and a zero value to a 1
status), and POSIX arithmetic expansion does not, we have to negate
the result.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/419154
2022-07-22 11:57:18 -07:00
Richard Sandiford
41da4070a2 graphds: Fix description of SCC algorithm
graphds_scc says that it uses Tarjan's algorithm, but it looks like
it uses Kosaraju's algorithm instead (dfs one way followed by dfs
the other way).

gcc/
	* graphds.cc (graphds_scc): Fix algorithm attribution.
2022-07-22 15:05:57 +01:00
Martin Liska
18ef76d3a1 Allow space in git commit-mklog args
contrib/ChangeLog:

	* git-commit-mklog.py: Do not parse -b argument.
	Pass mklog_args as json environment variable.
	* mklog.py: Parse GCC_MKLOG_ARGS and append it to sys.argv.
	* prepare-commit-msg: Do not append GCC_MKLOG_ARGS to args.
2022-07-22 13:19:24 +02:00
Rainer Orth
786e51648b libsanitizer: Fix Solaris 11.3 compilation [PR105531]
The libsanitizer build has been broken on Solaris 11.3 by the latest
import.  An upstream patch to fix this has now been committed:

	[sanitizer_common] Support Solaris < 11.4 in GetStaticTlsBoundary
        https://reviews.llvm.org/D120059

I'd like to cherry-pick it into libsanitizer, too.

Bootstrapped without regressions on sparc-sun-solaris2.11,
i386-pc-solaris2.11 (both Solaris 11.3 and 11.4), and
x86_64-pc-linux-gnu.

2022-07-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	libsanitizer:
	PR sanitizer/105531
	* sanitizer_common/sanitizer_linux_libcdep.cpp,
	sanitizer_common/sanitizer_solaris.h:: Cherry-pick
	llvm-project revision 3776db9a4fd2080d23d6a5f52e405eea44558761.
2022-07-22 13:18:14 +02:00
Martin Liska
03c0b06420 mklog: fill-up subject prefix only for a single PR
contrib/ChangeLog:

	* mklog.py: Use component: [PR xyz] only when one PR is used.
2022-07-22 11:41:15 +02:00
Richard Biener
d85e5aeb76 tree-optimization/106403 - fix ICE with VN of .STORE_LANES
While .STORE_LANES is not supported by the recent VN patch we were
still accessing the stored value and valueizing it - but
internal_fn_stored_value_index does not support .STORE_LANES and
we failed to honor that case.  Fixed by simply moving the affected
code below the check for the actual supported internal functions.

	PR tree-optimization/106403
	* tree-ssa-sccvn.cc (vn_reference_lookup_3): Move stored
	value valueization after check for IFN_MASKED_STORE or
	IFN_LEN_STORE.
2022-07-22 10:15:23 +02:00
Richard Biener
b2e99bb690 tree-optimization/106397 - array prefetch and LC SSA
The following fixes maintaining LC SSA when array prefetch inserts
mfence instructions on loop exits that do not use memory.  It also
fixes the latent issue that it might split exit edges for this
which will break LC SSA for non-virtuals as well.  It should also
make the process cheaper by accumulating the required (LC) SSA
update until the end of the pass.

	PR tree-optimization/106397
	* tree-ssa-loop-prefetch.cc (emit_mfence_after_loop): Do
	not update SSA form here.
	(mark_nontemporal_stores): Return whether we marked any
	non-temporal stores and inserted mfence.
	(loop_prefetch_arrays): Note when we need to update SSA.
	(tree_ssa_prefetch_arrays): Perform required (LC) SSA update
	at the end of the pass.

	* gcc.dg/pr106397.c: New testcase.
2022-07-22 10:06:59 +02:00
Richard Biener
3c4af0f054 tree-optimization/106387 - properly create SSA name for realigned load
The following fixes an oversight triggering after the recent change
to bump_vector_ptr.

	PR tree-optimization/106387
	* tree-vect-stmts.cc (vectorizable_load): Use make_ssa_name
	if ptr is not an SSA name.
2022-07-22 09:33:43 +02:00
Martin Liska
aaf9583d4c remove 'continue' as last statement in loop
PR other/106370

gcc/cp/ChangeLog:

	* init.cc (sort_mem_initializers): Remove continue as last stmt
	in a loop.

libiberty/ChangeLog:

	* _doprnt.c: Remove continue as last stmt
	in a loop.
2022-07-22 09:28:48 +02:00
liuhongt
1cc0e9a46e Adjust testcase.
r13-1762-gf9d4c3b45c5ed5f45c8089c990dbd4e181929c3d lower complex type
move to scalars, but testcase pr23911 is supposed to scan __complex__
constant which is never available, so adjust testcase to scan
IMAGPART/REALPART_EXPR constants separately.

gcc/testsuite/ChangeLog

	PR tree-optimization/106010
	* gcc.dg/pr23911.c: Scan IMAGPART/REALPART_EXPR = ** instead
	of __complex__ since COMPLEX_CST is lower to scalars.
2022-07-22 10:06:42 +08:00
liuhongt
605b64251c Extend 16/32-bit vector bit_op patterns with (m,0,i) alternative.
And split it after reload.

gcc/ChangeLog:

	PR target/106038
	* config/i386/mmx.md (<code><mode>3): New define_expand, it's
	original "<code><mode>3".
	(*<code><mode>3): New define_insn, it's original
	"<code><mode>3" be extended to handle memory and immediate
	operand with ix86_binary_operator_ok. Also adjust define_split
	after it.
	(mmxinsnmode): New mode attribute.
	(*mov<mode>_imm): Refactor with mmxinsnmode.
	* config/i386/predicates.md
	(register_or_x86_64_const_vector_operand): New predicate.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr106038-1.c: New test.
2022-07-22 09:39:16 +08:00
Will Schmidt
45e0683d99 [PATCH, rs6000] Cleanup some vstrir define_expand naming inconsistencies
This cleans up some of the naming around the vstrir and vstril
instruction definitions, with some cosmetic changes for consistency.
No functional changes.
Regtested just in case, no regressions.

[V2] Used 'direct' instead of 'internal', and cosmetically reworked
the changelog.

gcc/
	* config/rs6000/altivec.md:
	(vstrir_code_<mode>): Rename to...
	(vstrir_direct_<mode>): ... this.
	(vstrir_p_code_<mode>): Rename to...
	(vstrir_p_direct_<mode>): ... this.
	(vstril_code_<mode>): Rename to...
	(vstril_direct_<mode>): ... this.
	(vstril_p_code_<mode>): Rename to...
	(vstril_p_direct_<mode>): ... this.
2022-07-21 19:44:06 -05:00
Will Schmidt
75841b0498 [PATCH, rs6000] Additional cleanup of rs6000_builtin_mask
Post the rs6000 builtins rewrite, some of the leftover builtin
code is redundant and can be removed.
  This replaces the usage of bu_mask in rs6000_target_modify_macros
with checks against the rs6000_isa_flags equivalent directly.  Thusly
the bu_mask variable can be removed.  After this update there
are no other uses of rs6000_builtin_mask_calculate, so that function
can also be safely removed.

No functional change, though some output under debug has been removed.

[V2] Per patch review and subsequent investigations, the
rs6000_builtin_mask and x_rs6000_builtin_mask can also be removed, as
well as the entirety of the rs6000_builtin_mask_names table.

gcc/
	* config/rs6000/rs6000-c.cc: Update comments.
	(rs6000_target_modify_macros): Remove bu_mask references.
	(rs6000_define_or_undefine_macro): Replace bu_mask reference
	with a rs6000_cpu value check.
	(rs6000_cpu_cpp_builtins): Remove rs6000_builtin_mask_calculate()
	parameter from call to rs6000_target_modify_macros.
	* config/rs6000/rs6000-protos.h (rs6000_target_modify_macros,
	rs6000_target_modify_macros_ptr): Remove parameter from extern
	for the prototype.
	* config/rs6000/rs6000.cc (rs6000_target_modify_macros_ptr): Remove
	parameter from prototype, update calls to this function.
	(rs6000_print_builtin_options): Remove prototype, call and function.
	(rs6000_builtin_mask_calculate): Remove function.
	(rs6000_debug_reg_global): Remove call to rs6000_print_builtin_options.
	(rs6000_option_override_internal): Remove rs6000_builtin_mask var
	and builtin_mask debug output.
	(rs6000_builtin_mask_names): Remove.
	(rs6000_pragma_target_parse): Remove prev_bumask, cur_bumask,
	diff_bumask references; Update calls to rs6000_target_modify_ptr.
	* config/rs6000/rs6000.opt (rs6000_builtin_mask): Remove.
2022-07-21 19:44:06 -05:00
GCC Administrator
bbb9c03005 Daily bump. 2022-07-22 00:16:33 +00:00
David Malcolm
b852aa7f26 analyzer: fix -Wanalyzer-va-list-exhausted false +ve on va_arg in subroutine [PR106383]
gcc/analyzer/ChangeLog:
	PR analyzer/106383
	* varargs.cc (region_model::impl_call_va_arg): When determining if
	we're doing interprocedural analysis, use the stack depth of the
	frame in which va_start was called, rather than the current stack
	depth.

gcc/testsuite/ChangeLog:
	PR analyzer/106383
	* gcc.dg/analyzer/stdarg-3.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-21 17:29:26 -04:00
Sam Feifer
633e992058 match.pd: Add new abs pattern [PR94920]
This patch is intended to fix a missed optimization in match.pd. It optimizes (x >= 0 ? x : 0) + (x <= 0 ? -x : 0) to just abs(x). Additionally, the pattern (x <= 0 ? -x : 0) now gets optimized to max(-x, 0), which helps with the other simplification rule.

Tests are also included to be added to the testsuite.

Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?

	PR tree-optimization/94920

gcc/ChangeLog:

	* match.pd (x >= 0 ? x : 0) + (x <= 0 ? -x : 0): New simplification.
	           (x <= 0 ? -x : 0): New simplification.

gcc/testsuite/ChangeLog:

	* g++.dg/pr94920-1.C: New test.
	* g++.dg/pr94920.C: New test.
	* gcc.dg/pr94920-2.c: New test.
2022-07-21 17:24:06 -04:00
Jason Merrill
28be481cf4 c++: defaulted friend op== [PR106361]
Now non-member functions can be defaulted, so this assert is wrong.
move_signature_fn_p already checks for ctor or op=.

	PR c++/106361

gcc/cp/ChangeLog:

	* decl.cc (move_fn_p): Remove assert.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/spaceship-eq14.C: New test.
2022-07-21 17:21:22 -04:00
Jason Merrill
df118d7ba1 c++: defaulted ctor with DMI in union [PR94823]
CWG2084 clarifies that a variant member with a non-trivial constructor does
not make the union's defaulted default constructor deleted if another
variant member has a default member initializer.

	DR 2084
	PR c++/94823

gcc/cp/ChangeLog:

	* method.cc (walk_field_subobs): Fix DMI in union case.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/nsdmi-union7.C: New test.
2022-07-21 17:21:17 -04:00
Sam Feifer
142e6af695 MAINTAINERS: Add myself to Write After Approval
ChangeLog:

	* MAINTAINERS (Write After Approval): Add myself.
2022-07-21 15:52:05 -04:00
Martin Liska
24eae97625 docs: remove trailing dots for 2 Fortran fns
gcc/fortran/ChangeLog:

	* intrinsic.texi: Remove trailing dots for 2 Fortran fns.
2022-07-21 16:11:23 +02:00
Prathamesh Kulkarni
9a52d6871a Revert "forwprop: Use lhs type instead of arg0 in folding VEC_PERM_EXPR."
This reverts commit 4c32313025.

gcc/ChangeLog:
	Revert:
	* tree-ssa-forwprop.cc (simplify_permutation): Use lhs type
	instead of TREE_TYPE (arg0) as result type in folding VEC_PERM_EXPR.
2022-07-21 17:11:06 +05:30
Richard Biener
375668e050 tree-optimization/106379 - add missing ~(a ^ b) folding for _Bool
The following makes sure to fold ~(a ^ b) to a == b for truth
values (but not vectors, we'd have to check for vector support of
equality).  That turns the PR106379 testcase into a ranger one.

Note that while we arrive at ~(a ^ b) in a convoluted way from
original !a == !b one can eventually write the expression this
way directly as well.

	PR tree-optimization/106379
	* match.pd (~(a ^ b) -> a == b): New pattern.

	* gcc.dg/pr106379-1.c: New testcase.
2022-07-21 13:20:47 +02:00
Richard Biener
dc477ffb4a tree-optimization/106378 - DSE of LEN_STORE and MASK_STORE
The following enhances DSE to handle LEN_STORE (optimally) and
MASK_STORE (conservatively).

	PR tree-optimization/106378
	* tree-ssa-dse.cc (initialize_ao_ref_for_dse): Handle
	LEN_STORE, add mode to initialize a may-def and handle
	MASK_STORE that way.
	(dse_optimize_stmt): Query may-defs.  Handle internal
	functions LEN_STORE and MASK_STORE similar to how
	we handle memory builtins but without byte tracking.
2022-07-21 13:06:18 +02:00
Richard Biener
bd9837bc3c Teach VN about masked/len stores
The following teaches VN to handle reads from .MASK_STORE and
.LEN_STORE.  For this push_partial_def is extended first for
convenience so we don't have to handle the full def case in the
caller (possibly other paths can be simplified then).  Also
the partial definition stored value can have an offset applied
so we don't have to build a fake RHS when we register the pieces
of an existing store.

	PR tree-optimization/106365
	* tree-ssa-sccvn.cc (pd_data::rhs_off): New field determining
	the offset to start encoding of RHS from.
	(vn_walk_cb_data::vn_walk_cb_data): Initialize it.
	(vn_walk_cb_data::push_partial_def): Allow the first partial
	definition to be fully providing the def.  Offset RHS
	before encoding if requested.
	(vn_reference_lookup_3): Initialize def_rhs everywhere.
	Add support for .MASK_STORE and .LEN_STORE (partial) definitions.

	* gcc.target/i386/vec-maskstore-vn.c: New testcase.
2022-07-21 13:05:42 +02:00
Marc Poulhiès
f4ed610d02 MAINTAINERS: Add myself as Ada front end co-maintainer
Add myself as Ada front end co-maintainer.

ChangeLog:
	* MAINTAINERS: Add myself as Ada front end co-maintainer.
2022-07-21 11:05:17 +02:00
Richard Biener
6877993c4d Add alias disambiguation for vectorizer load/store IFNs
The following adds support for MASK_STORE, MASK_LOAD and friends
to call_may_clobber_ref_p and ref_maybe_used_by_call_p.  Since
they all use a special argument to specify TBAA they are not really
suited for fnspec handling thus the manual support.

	* tree-ssa-alias.cc (ref_maybe_used_by_call_p_1): Special-case
	store internal functions and IFN_MASK_LOAD, IFN_LEN_LOAD
	and IFN_MASK_LOAD_LANES.
	(call_may_clobber_ref_p_1): Special-case IFN_MASK_STORE,
	IFN_LEN_STORE and IFN_MASK_STORE_LANES.
2022-07-21 08:59:37 +02:00
David Malcolm
742377ed0f analyzer: bulletproof taint warnings against NULL m_arg
gcc/analyzer/ChangeLog:
	* sm-taint.cc (tainted_array_index::emit): Bulletproof against
	NULL m_arg.
	(tainted_array_index::describe_final_event): Likewise.
	(tainted_size::emit): Likewise.
	(tainted_size::describe_final_event): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-20 21:34:17 -04:00
David Malcolm
a6c192e80a analyzer: fix ICE on untracked decl_regions [PR106374]
gcc/analyzer/ChangeLog:
	PR analyzer/106374
	* region.cc (decl_region::get_svalue_for_initializer): Bail out on
	untracked regions.

gcc/testsuite/ChangeLog:
	PR analyzer/106374
	* gcc.dg/analyzer/untracked-2.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-20 21:34:03 -04:00
GCC Administrator
e7dfd87445 Daily bump. 2022-07-21 00:16:34 +00:00
Jonathan Wakely
87a9bfe86d libstdc++: Fix std::common_iterator triviality [PR100823]
This fixes the remaining problem reported in the PR, that the special
members should be trivial.  This can be done by constraining the
non-trivial versions and adding defaulted overloads that will be used
when the union members are trivial.

Making these members trivial alters the argument passing ABI and so
isn't suitable for backporting to release branches.

libstdc++-v3/ChangeLog:

	PR libstdc++/100823
	* include/bits/stl_iterator.h (common_iterator): Define
	destructor, copy constructor and move constructor as trivial
	when the underlying types allow.
	* testsuite/24_iterators/common_iterator/100823.cc: Check
	triviality of special members.
2022-07-20 23:38:48 +01:00
Jonathan Wakely
56c999860b libstdc++: Fix std::common_iterator assignment [PR100823]
This fixes the following conformance problems reported in the PR:

- Move constructor and move assignment should be defined.
- Copy assignment from a valueless object should be allowed.

Assignment is completely rewritten by this patch, as the previous
version had a number of problems. The converting assignment failed to
handle the case of assigning a new value to a valueless object, which
should work. It only accepted lvalue arguments, so wasn't usable to
implement the move assignment operator. Finally, it enforced the
precondition that the argument is not valueless, which is correct for
the converting assignment but not for the copy assignment.

A new _M_assign member is added to handle all cases of assignment
(copying from an lvalue, moving from an rvalue, and converting from a
different type). The not valueless precondition is checked in the
converting assignment before calling _M_assign, so isn't enforced for
copy and move assignment. The new function no longer uses a switch, so
handles valueless objects as the LHS or RHS of the assignment.

libstdc++-v3/ChangeLog:

	PR libstdc++/100823
	* include/bits/stl_iterator.h (common_iterator): Define move
	constructor and move assignment operator.
	(common_iterator::_M_assign): New function implementing
	assignment.
	(common_iterator::operator=): Use _M_assign.
	(common_iterator::_S_valueless): New constant.
	* testsuite/24_iterators/common_iterator/100823.cc: New test.
2022-07-20 23:38:37 +01:00
Jonathan Wakely
3b5567c3ec libstdc++: Fix minor bugs in std::common_iterator
The noexcept-specifier for some std::common_iterator constructors was
incorrectly using an rvalue as the first argument of
std::is_nothrow_assignable_v. This gave the wrong answer for some types,
e.g. std::common_iterator<int*, S>, because an rvalue of scalar type
cannot be assigned to.

Also fix the friend declaration to use the same constraints as on the
definition of the class template. G++ fails to diagnose this error, due
to PR c++/96830.

Finally, the copy constructor was using std::move for its argument
in some cases, which should be removed.

libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h (common_iterator): Fix incorrect
	uses of is_nothrow_assignable_v. Fix inconsistent constraints on
	friend declaration. Do not move argument in copy constructor.
	* testsuite/24_iterators/common_iterator/1.cc: Check for
	noexcept constructibnle/assignable.
2022-07-20 23:34:20 +01:00
David Malcolm
5e830693dd analyzer: update "tainted" state of RHS in comparisons [PR106373]
Doing so fixes various false positives from
-Wanalyzer-tainted-array-index at -O1 and above (e.g. seen on the
Linux kernel)

gcc/analyzer/ChangeLog:
	PR analyzer/106373
	* sm-taint.cc (taint_state_machine::on_condition): Potentially
	update the state of the RHS as well as the LHS.

gcc/testsuite/ChangeLog:
	PR analyzer/106373
	* gcc.dg/analyzer/torture/taint-read-index-3.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-20 17:25:35 -04:00
Harald Anlauf
26bbe78f77 Fortran: fix parsing of omp task affinity iterator clause [PR101330]
gcc/fortran/ChangeLog:

	PR fortran/101330
	* openmp.cc (gfc_match_iterator): Remove left-over code from
	development that could lead to a crash on invalid input.

gcc/testsuite/ChangeLog:

	PR fortran/101330
	* gfortran.dg/gomp/affinity-clause-7.f90: New test.
2022-07-20 20:40:23 +02:00
Alexander Monakov
daa36cfc2f Avoid registering __builtin_setjmp_receiver label twice [PR101347]
The testcase in the PR demonstrates how it is possible for one
__builtin_setjmp_receiver label to appear in
nonlocal_goto_handler_labels list twice (after the block with
__builtin_setjmp_setup referring to it was duplicated).

remove_node_from_insn_list did not account for this possibility and
removed only the first copy from the list. Add an assert verifying that
duplicates are not present.

To avoid adding a label to the list twice, move registration of the
label from __builtin_setjmp_setup handling to __builtin_setjmp_receiver.

gcc/ChangeLog:

	PR rtl-optimization/101347
	* builtins.cc (expand_builtin) [BUILT_IN_SETJMP_SETUP]: Move
	population of nonlocal_goto_handler_labels from here ...
	(expand_builtin) [BUILT_IN_SETJMP_RECEIVER]: ... to here.
	* rtlanal.cc (remove_node_from_insn_list): Verify that a
	duplicate is not present in the remainder of the list.
2022-07-20 16:12:34 +03:00
Alexander Monakov
8694390e2b Remove unused remove_node_from_expr_list
This function remains unused since remove_node_from_insn_list was cloned
from it.

gcc/ChangeLog:

	* rtl.h (remove_node_from_expr_list): Remove declaration.
	* rtlanal.cc (remove_node_from_expr_list): Remove (no uses).
2022-07-20 16:10:29 +03:00
Richard Biener
5f59d0f2d9 Improve SLP codegen, avoiding unnecessary TREE_ADDRESSABLE
The following adjusts vectorizer code generation to avoid splitting
out address increments for invariant addresses which causes objects
to get TREE_ADDRESSABLE when not necessary.

	* tree-vect-data-refs.cc (bump_vector_ptr): Return an
	invariant updated address when the input was invariant.
2022-07-20 14:05:07 +02:00
liuhongt
78d5e125c0 Move pass_cse_sincos after vectorizer.
__builtin_cexpi can't be vectorized since there's gap between it and
vectorized sincos version(In libmvec, it passes a double and two
double pointer and returns nothing.) And it will lose some
vectorization opportunity if sin & cos are optimized to cexpi before
vectorizer.

I'm trying to add vect_recog_cexpi_pattern to split cexpi to sin and
cos, but it failed vectorizable_simd_clone_call since NULL is returned
by cgraph_node::get (fndecl).  So alternatively, the patch try to move
pass_cse_sincos after vectorizer, just before pas_cse_reciprocals.

Also original pass_cse_sincos additionaly expands pow&cabs, this patch
split that part into a separate pass named pass_expand_powcabs which
remains the old pass position.

gcc/ChangeLog:

	* passes.def: (Split pass_cse_sincos to pass_expand_powcabs
	and pass_cse_sincos, and move pass_cse_sincos after vectorizer).
	* timevar.def (TV_TREE_POWCABS): New timevar.
	* tree-pass.h (make_pass_expand_powcabs): Split from pass_cse_sincos.
	* tree-ssa-math-opts.cc (gimple_expand_builtin_cabs): Ditto.
	(class pass_expand_powcabs): Ditto.
	(pass_expand_powcabs::execute): Ditto.
	(make_pass_expand_powcabs): Ditto.
	(pass_cse_sincos::execute): Remove pow/cabs expand part.
	(make_pass_cse_sincos): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.dg/pow-sqrt-synth-1.c: Adjust testcase.
2022-07-20 16:11:21 +08:00