Commit Graph

194549 Commits

Author SHA1 Message Date
Martin Liska
9365b2bf2f analyzer: fix coding style in sm-fd.cc
gcc/analyzer/ChangeLog:

	* sm-fd.cc: Run dos2unix and fix coding style issues.
2022-07-25 19:33:16 +02:00
Roger Sayle
16aafa3194 PR target/91681: zero_extendditi2 pattern for more optimizations on x86.
Technically, PR target/91681 has already been resolved; we now recognize the
highpart multiplication at the tree-level, we no longer use the stack, and
we currently generate the same number of instructions as LLVM.  However, it
is still possible to do better, the current x86_64 code to generate a double
word addition of a zero extended operand, looks like:

        xorl    %r11d, %r11d
        addq    %r10, %rax
        adcq    %r11, %rdx

when it's possible (as LLVM does) to use an immediate constant:

        addq    %r10, %rax
        adcq    $0, %rdx

This is implemented by introducing a zero_extendditi2 pattern,
for zero extension from DImode to TImode on TARGET_64BIT that is
split after reload.  With zero extension now visible to combine,
we add two new define_insn_and_split that add/subtract a zero
extended operand in double word mode.  These apply to both 32-bit
and 64-bit code generation, to produce adc $0 and sbb $0.

One consequence of this is that these new patterns interfere with
the optimization that recognizes DW:DI = (HI:SI<<32)+LO:SI as a pair
of register moves, or more accurately the combine splitter no longer
triggers as we're now converting two instructions into two instructions
(not three instructions into two instructions).  This is easily
repaired (and extended to handle TImode) by changing from a pair
of define_split (that handle operand commutativity) to a set of
four define_insn_and_split (again to handle operand commutativity).

2022-07-25  Roger Sayle  <roger@nextmovesoftware.com>
	    Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog
	PR target/91681
	* config/i386/i386-expand.cc (split_double_concat): A new helper
	function for setting a double word value from two word values.
	* config/i386/i386-protos.h (split_double_concat): Prototype here.
	* config/i386/i386.md (zero_extendditi2): New define_insn_and_split.
	(*add<dwi>3_doubleword_zext): New define_insn_and_split.
	(*sub<dwi>3_doubleword_zext): New define_insn_and_split.
	(*concat<mode><dwi>3_1): New define_insn_and_split replacing
	previous define_split for implementing DST = (HI<<32)|LO as
	pair of move instructions, setting lopart and hipart.
	(*concat<mode><dwi>3_2): Likewise.
	(*concat<mode><dwi>3_3): Likewise, where HI is zero_extended.
	(*concat<mode><dwi>3_4): Likewise, where HI is zero_extended.

gcc/testsuite/ChangeLog
	PR target/91681
	* g++.target/i386/pr91681.C: New test case (from the PR).
	* gcc.target/i386/pr91681-1.c: New int128 test case.
	* gcc.target/i386/pr91681-2.c: Likewise.
	* gcc.target/i386/pr91681-3.c: Likewise, but for ia32.
2022-07-25 17:33:48 +01:00
Aldy Hernandez
ca1e4b26c1 [PR middle-end/106432] Gracefully handle unsupported type in range_on_edge
A cleaner approach to fix this PR has been suggested by Andrew, which
is to just return false on range_on_edge for unsupported range types.

Tested on x86-64 Linux.

	PR middle-end/106432

gcc/ChangeLog:

	* gimple-range.cc (gimple_ranger::range_on_edge): Return false
	when the result range type is unsupported.
2022-07-25 17:31:27 +02:00
Jason Merrill
4c6567b409 c++: -Woverloaded-virtual false positive [PR87729]
My attempt to shortcut unnecessary checking after finding a match was
also wrong for multiple inheritance, so let's give up on it.

	PR c++/87729

gcc/cp/ChangeLog:

	* class.cc (warn_hidden): Remove shortcut.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Woverloaded-virt4.C: New test.
2022-07-25 09:23:46 -04:00
Sebastian Huber
556b816b82 RTEMS: Do not define _GNU_SOURCE by default
gcc/ChangeLog:

	* config/rs6000/rtems.h (CPLUSPLUS_CPP_SPEC): Undef.
2022-07-25 14:57:06 +02:00
Richard Biener
613e3b8695 middle-end/106414 - fix mistake in ~(x ^ y) -> x == y pattern
When compares are integer typed the inversion with ~ isn't properly
preserved by the equality comparison even when converting the
result properly.  The following fixes this by restricting the
input precisions accordingly.

	PR middle-end/106414
	* match.pd (~(x ^ y) -> x == y): Restrict to single bit
	precision types.

	* gcc.dg/torture/pr106414-1.c: New testcase.
	* gcc.dg/torture/pr106414-2.c: Likewise.
2022-07-25 13:24:47 +02:00
Andre Simoes Dias Vieira
eb966d393d aarch64: Implement ACLE Data Intrinsics
This patch adds support for the ACLE Data Intrinsics to the AArch64 port.

gcc/ChangeLog:

2022-07-25  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* config/aarch64/aarch64.md (rbit<mode>2): Rename this ...
	(@aarch64_rbit<mode>): ... to this and change it in...
	(ffs<mode>2,ctz<mode>2): ... here.
	(@aarch64_rev16<mode>): New.
	* config/aarch64/aarch64-builtins.cc: (aarch64_builtins):
	Define the following enum AARCH64_REV16, AARCH64_REV16L,
	AARCH64_REV16LL, AARCH64_RBIT, AARCH64_RBITL, AARCH64_RBITLL.
	(aarch64_init_data_intrinsics): New.
	(aarch64_general_init_builtins): Add call to
	aarch64_init_data_intrinsics.
	(aarch64_expand_builtin_data_intrinsic): New.
	(aarch64_general_expand_builtin): Add call to
	aarch64_expand_builtin_data_intrinsic.
	* config/aarch64/arm_acle.h (__clz, __clzl, __clzll, __cls, __clsl,
	__clsll, __rbit, __rbitl, __rbitll, __rev, __revl, __revll, __rev16,
	__rev16l, __rev16ll, __ror, __rorl, __rorll, __revsh): New.

gcc/testsuite/ChangeLog:

2022-07-25  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* gcc.target/aarch64/acle/data-intrinsics.c: New test.
2022-07-25 10:27:13 +01:00
Martin Liska
718cf8d0bd docs: remove recently added trailing whitespaces
gcc/ChangeLog:

	* doc/extend.texi: Remove trailing whitespaces.
	* doc/invoke.texi: Likewise.
2022-07-25 09:00:30 +02:00
Aldy Hernandez
1a10bd84a5 frange class to represent floating point ranges
This implements a basic frange class to represent floating point
ranges.  Although it is meant to be a base for further development, it
is enough to handle relations and propagate NAN and other properties.

For ranger clients to become floating point aware, we still need the
range-op entries, which I will submit later this week.  Since those
entries require specialized FP knowledge, I will ask for a review from
the FP experts before committing.

Once range-op entries come live, all ranger clients that have been
converted to the type agnostic vrange API will become FP aware: evrp,
DOM, the threaders, loop-ch, etc.  (Still missing is loop unswitching,
as a lot of the int_range* temporaries should be Value_Range.  I don't
have enough cycles to convert loop unswitching, but could gladly give
guidance.  It should be straightforward for those familiar with the
code ;-)).

Samples things we handle:

* We can set the FP properties (!NAN, !INF, etc) at assignment from
  constants (and propagate them throughout the CFG):

  float z = 0.0;
  if (__builtin_isnan (z))
    link_error ();

* The relation oracle works in tandem with the FP ranges:

      if (x > y)
       ;
      else if (!__builtin_isnan (x) && !__builtin_isnan (y))
       {
         // If x and y are not NAN, the x <= y relationship holds, and the
         // following conditional can be folded away.
         if (x <= y)
           bar ();
       }

* We know the true side of all ordered conditionals (except !=)
  implies !NAN:

  if (x > y)
    {
      if (__builtin_isnan (x) || __builtin_isnan (y))
        link_error ();
    }

Range-ops also works correctly with -ffinite-math-only, and avoids
checking for NANs, etc.

I believe this is enough to get a fully fleshed out floating point
support for evrp and friends, but doing so is beyond my limited FP
knowledge.  For example, frange could be enhanced to track constant
endpoints, and we could track other FP properties aside from NAN.
Further discussion is gladly welcome.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-range-pretty-print.cc (vrange_printer::visit): New.
	(vrange_printer::print_frange_prop): New.
	* value-range-pretty-print.h (class vrange_printer): Add visit and
	print_frange_prop.
	* value-range-storage.h (vrange_allocator::alloc_vrange): Handle frange.
	(vrange_allocator::alloc_frange): New.
	* value-range.cc (vrange::operator=): Handle frange.
	(vrange::operator==): Same.
	(frange::accept): New.
	(frange::set): New.
	(frange::normalize_kind): New.
	(frange::union_): New.
	(frange::intersect): New.
	(frange::operator=): New.
	(frange::operator==): New.
	(frange::supports_type_p): New.
	(frange::verify_range): New.
	* value-range.h (enum value_range_discriminator): Handle frange.
	(class fp_prop): New.
	(FP_PROP_ACCESSOR): New.
	(class frange_props): New.
	(FRANGE_PROP_ACCESSOR): New.
	(class frange): New.
	(Value_Range::init): Handle frange.
	(Value_Range::operator=): Same.
	(Value_Range::supports_type_p): Same.
	(frange_props::operator==): New.
	(frange_props::union_): New.
	(frange_props::intersect): New
	(frange::frange): New.
	(frange::type): New.
	(frange::set_varying): New.
	(frange::set_undefined): New.
2022-07-25 08:45:21 +02:00
Peter Bergner
75d20d6c84 rs6000: Adjust -mdejagnu-cpu to filter out -mtune [PR106345]
As PR106345 shows, when configuring compiler with an explicit
option --with-tune=<value>, it would cause some test cases to
fail if their test points are sensitive to tune setting, such
as: group_ending_nop, loop align etc.  It doesn't help that
even to specify one explicit -mcpu=.

This patch is to adjust the behavior of -mdejagnu-cpu by
filtering out all -mcpu= and -mtune= options, then test cases
would use <cpu> as tune as the one specified by -mdejagnu-cpu.

2022-07-25  Peter Bergner  <bergner@linux.ibm.com>
	    Kewen Lin  <linkw@linux.ibm.com>

	PR testsuite/106345

gcc/ChangeLog:

	* config/rs6000/rs6000.h (DRIVER_SELF_SPECS): Adjust -mdejagnu-cpu
	to filter out all -mtune options.
2022-07-25 00:51:44 -05:00
Jason Merrill
45f6ced9b8 c++: correct testcase PR number
gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/nsdmi-union7.C: Fix PR number.
2022-07-24 23:02:37 -04:00
GCC Administrator
6078e013e3 Daily bump. 2022-07-25 00:16:29 +00:00
Aldy Hernandez
8b8103dcd2 Minor fixes to vr_values to not die on non integral types.
The legacy code in vr_values mostly works on integral types (with few
exceptions such as some conversions from float).  This patch makes
vr_values::range_of_expr not die when asked for a range of an
unsupported type.  It also keeps the min/max simplification code from
being called on non integrals, similarly to what many of the other
assignment code is doing.

This is all a nop on the current code, but will keep us from
misbehaving when VRP starts working on non-integrals.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-query.cc (range_query::get_value_range): Add assert.
	* vr-values.cc (vr_values::range_of_expr): Make sure we don't ICE
	on unsupported types in vr_values.
	(simplify_using_ranges::simplify): Same.
2022-07-24 17:00:51 +02:00
Aldy Hernandez
164758b02c Tweaks to global ranges.
The global get_nonzero_bits was previously returning -1 for
unsupported types.  I dropped this in the conversion to global ranges
and it's causing a problem in the frange work, where CCP is asking for
the nonzero bits of non-integral types.  CCP may require further
tweaks, but for now, restore the original behavior.

Also, I'm removing old checks for precision that no longer hold, now
that we handle various types for global ranges.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* tree-ssanames.cc (get_nonzero_bits): Return -1 for unsupported
	types.
	* value-query.cc (get_ssa_name_range_info): Remove precision check.
2022-07-24 17:00:50 +02:00
Aldy Hernandez
4a36b4e1fe Allow registering same SSA name relations in oracle.
Similarly to what we did for the relation oracle, but for the path
oracle.  This was found while working on frange, where we can test for
x == x while checking for NANness.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-relation.cc (value_relation::set_relation): Remove assert.
	(path_oracle::register_relation): Exit when trying to register
	same SSA name relations.
2022-07-24 17:00:50 +02:00
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