platform/upstream/gcc.git
3 years agogfortran.dg/PR82376.f90: Avoid matching a file-path
Hans-Peter Nilsson [Wed, 11 Aug 2021 21:33:40 +0000 (23:33 +0200)]
gfortran.dg/PR82376.f90: Avoid matching a file-path

I had a file-path to sources with the substring "new" in it,
and (only) this test regressed compared to results from
another build without "new" in the name.

The test does
 ! { dg-final { scan-tree-dump-times "new" 4 "original" } }
i.e. the contents of the tree-dump-file .original needs to match
the undelimited string "new" exactly four times.  Very brittle.

In the dump-file, there are three lines with calls to new:
     D.908 = new ((integer(kind=4) *) data);
 integer(kind=4) * new (integer(kind=4) & data)
   static integer(kind=4) * new (integer(kind=4) &);

But, there's also a line, which for me and cris-elf looked like:
 _gfortran_runtime_error_at (&"At line 46 of file
  /X/xyzzynewfrob/gcc/testsuite/gfortran.dg/PR82376.f90"[1]{lb: 1 sz: 1},
  &"Pointer actual argument \'new\' is not associated"[1]{lb: 1 sz: 1});
The fourth match is obviously intended to match this line, but only
with *one* match, whereas the path can as above yield another hit.

With Tcl, the regexp for matching the " " *and* the "'"
*and* the "\" gets a bit unsightly, so I suggest just
matching the "new" calls, which according to the comment in
the test is the key point.  You can't have a file-path with
spaces and parentheses in a gcc build.  I'm also making use
of {} rather than "" needing one level of quoting; the "\("
is needed because the matched string is a regexp.

testsuite:
* gfortran.dg/PR82376.f90: Robustify match.

3 years agoi386: Fix up V32HImode permutations with -mno-avx512bw [PR101860]
Jakub Jelinek [Thu, 12 Aug 2021 09:26:57 +0000 (11:26 +0200)]
i386: Fix up V32HImode permutations with -mno-avx512bw [PR101860]

My patch from yesterday apparently broke some V32HImode permutations
as the testcase shows.
The first function assumed it would never be called in d->testing_p mode
and so went right away into emitting the code.
And the second one assumed V32HImode would never reach it, which now
can for the !TARGET_AVX512BW case.  We don't have a instruction
in that case though.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

PR target/101860
* config/i386/i386-expand.c (ix86_expand_vec_one_operand_perm_avx512):
If d->testing_p, return true after performing checks instead of
actually expanding the insn.
(expand_vec_perm_broadcast_1): Handle V32HImode - assert
!TARGET_AVX512BW and return false.

* gcc.target/i386/avx512f-pr101860.c: New test.

3 years agoopenmp: Diagnose syntax mismatches between declare target and end declare target
Jakub Jelinek [Thu, 12 Aug 2021 07:26:27 +0000 (09:26 +0200)]
openmp: Diagnose syntax mismatches between declare target and end declare target

OpenMP 5.1 says:
For any directive that has a paired end directive, including those with a begin
and end pair, both directives must use either the attribute syntax or the
pragma syntax.

The following patch enforces it with the only pair so far recognized in C++
(Fortran has many, but on the other side doesn't have attribute syntax).

While I initially wanted to use vec<bool, va_gc> *member; in there, that
unfortunately doesn't work, one gets linker errors and I guess it is fixable,
but for begin declare target we'll need a struct anyway to store device_type
etc.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

* cp-tree.h (omp_declare_target_attr): New type.
(struct saved_scope): Change type of omp_declare_target_attribute
from int to vec<omp_declare_target_attr, va_gc> * and move it.
* parser.c (cp_parser_omp_declare_target): Instead of
incrementing scope_chain->omp_declare_target_attribute, push
a struct containing parser->lexer->in_omp_attribute_pragma to
the vector.
(cp_parser_omp_end_declare_target): Instead of decrementing
scope_chain->omp_declare_target_attribute, pop a structure
from it.  Diagnose mismatching declare target vs.
end declare target syntax.
* semantics.c (finish_translation_unit): Use vec_safe_length
and vec_safe_truncate on scope_chain->omp_declare_target_attributes.
* decl2.c (cplus_decl_attributes): Use vec_safe_length
on scope_chain->omp_declare_target_attributes.

* g++.dg/gomp/attrs-12.C: New test.

3 years agoopenmp: Diagnose another case of mixing parameter and attribute syntax
Jakub Jelinek [Thu, 12 Aug 2021 07:18:23 +0000 (09:18 +0200)]
openmp: Diagnose another case of mixing parameter and attribute syntax

This patch diagnoses cases like:
  #pragma omp parallel
  [[omp::directive (declare simd)]] int foo ();
or
  #pragma omp taskgroup
  int bar [[omp::directive (declare simd)]] (int);
where the pragma is on the same declaration statement as the declare simd
attribute.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

* parser.c (cp_parser_lambda_body): Add temp overrides
for parser->{omp_declare_simd,oacc_routine,omp_attrs_forbidden_p}.
(cp_parser_statement): Restore parser->omp_attrs_forbidden_p for
cp_parser_declaration_statement.
(cp_parser_default_argument): Add temp override for
parser->omp_attrs_forbidden_p.
(cp_parser_late_parsing_omp_declare_simd): Diagnose declare simd
or declare variant in attribute syntax on a declaration immediately
following an OpenMP construct in pragma syntax.

* g++.dg/gomp/attrs-11.C: Add new tests.

3 years agoc++: Fix ICE on defaulted spaceship with pointer return type [PR94162]
Jakub Jelinek [Thu, 12 Aug 2021 07:16:13 +0000 (09:16 +0200)]
c++: Fix ICE on defaulted spaceship with pointer return type [PR94162]

The spaceship-synth-neg6.C testcase ICEs because we call cat_tag_for
on the explicit return type, but pointer types don't have
TYPE_LINKAGE_IDENTIFIER.  The patch fixes that by checking for
CLASS_TYPE_P only and also adds verification that it is in std
namespace, so we don't return non-cc_last for my_namespace::partial_ordering.

The g++.dg/cpp2a/spaceship-synth11.C testcase is from a PR that has been
fixed with r12-619-gfc178519771db508c03611cff4a1466cf67fce1d (but
not backported to 11).

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
PR c++/94162
* method.c (cat_tag_for): Return cc_last for !CLASS_TYPE_P
or for classes not in std namespace.
gcc/testsuite/
PR c++/99429
* g++.dg/cpp2a/spaceship-synth11.C: New test.

PR c++/94162
* g++.dg/cpp2a/spaceship-synth-neg6.C: New test.

3 years agoopenmp: Diagnose omp::directive/sequence on using-directive
Jakub Jelinek [Thu, 12 Aug 2021 07:10:46 +0000 (09:10 +0200)]
openmp: Diagnose omp::directive/sequence on using-directive

With the using-directive parsing changes, we now emit only a warning
for [[omp::directive (...)]] on using-directive.  While that is right
without -fopenmp/-fopenmp-simd, when OpenMP is enabled, that should
be an error as OpenMP (is going to) disallow such attributes there
as they do not appertain to a statement.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

* name-lookup.c (finish_using_directive): Diagnose omp::directive
or omp::sequence attributes on using-directive.

* g++.dg/gomp/attrs-11.C: Adjust expected diagnostics.

3 years agoc++: Fix up parsing of attributes for using-directive
Jakub Jelinek [Thu, 12 Aug 2021 07:09:39 +0000 (09:09 +0200)]
c++: Fix up parsing of attributes for using-directive

As I've said earlier and added xfails in gen-attrs-76.C test,
https://eel.is/c++draft/namespace.udir#nt:using-directive
has attribute-specifier-seq[opt] at the start, not at the end before ;
as gcc is expecting.
IMHO we should continue parsing at the end the GNU attributes
because using namespace N __attribute__((strong));, while not supported
anymore, used to be supported in the past, but my code searches for
using namespace N [[gnu::strong]]; didn't reveal anything at all.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

* parser.c (cp_parser_block_declaration): Call
cp_parser_using_directive for C++11 attributes followed by
using namespace tokens.
(cp_parser_using_directive): Parse C++11 attributes at the start
of the directive rather than at the end, only parse GNU attributes
at the end.

* g++.dg/lookup/strong-using.C: Add test using [[gnu::strong]]
as well.
* g++.dg/lookup/strong-using2.C: Likewise.
* g++.dg/cpp0x/gen-attrs-58.C: Move alignas(int) before
using namespace.
* g++.dg/cpp0x/gen-attrs-59.C: Move alignas(X) before
using namespace, add tests for alignas before semicolon.
* g++.dg/cpp0x/gen-attrs-76.C: Remove xfails.  Add test for
C++11 attributes on using directive before semicolon.

3 years agoMake -no-pie option work for native Windows
Eric Botcazou [Thu, 12 Aug 2021 07:30:31 +0000 (09:30 +0200)]
Make -no-pie option work for native Windows

Binutils 2.36/2.37 generate PIE executables by default on native Windows
(because --dynamicbase is the default) so it makes sense to have a simple
way to counter that and -no-pie seems appropriate, all the more so that
it is automatically passed when building the compiler itself.

gcc/
* configure.ac (PE linker --disable-dynamicbase support): New check.
* configure: Regenerate.
* config.in: Likewise.
* config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define.
(LINK_SPEC): Use it.
* config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise.
(LINK_SPEC): Likewise.

3 years agoCombine avx_vec_concatv16si and avx512f_zero_extendv16hiv16si2_1 to avx512f_zero_exte...
liuhongt [Wed, 11 Aug 2021 06:00:00 +0000 (14:00 +0800)]
Combine avx_vec_concatv16si and avx512f_zero_extendv16hiv16si2_1 to avx512f_zero_extendv16hiv16si2_2.

Add define_insn_and_split to combine avx_vec_concatv16si/2 and
avx512f_zero_extendv16hiv16si2_1 since the latter already zero_extend
the upper bits, similar for other patterns which are related to
pmovzx{bw,wd,dq}.

It will do optimization like

-       vmovdqa %ymm0, %ymm0    # 7     [c=4 l=6]  avx_vec_concatv16si/2
        vpmovzxwd       %ymm0, %zmm0    # 22    [c=4 l=6]  avx512f_zero_extendv16hiv16si2
        ret             # 25    [c=0 l=1]  simple_return_internal

gcc/ChangeLog:

PR target/101846
* config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_2): New
post_reload define_insn_and_split.
(*avx512bw_zero_extendv32qiv32hi2_2): Ditto.
(*sse4_1_zero_extendv8qiv8hi2_4): Ditto.
(*avx512f_zero_extendv16hiv16si2_2): Ditto.
(*avx2_zero_extendv8hiv8si2_2): Ditto.
(*sse4_1_zero_extendv4hiv4si2_4): Ditto.
(*avx512f_zero_extendv8siv8di2_2): Ditto.
(*avx2_zero_extendv4siv4di2_2): Ditto.
(*sse4_1_zero_extendv2siv2di2_4): Ditto.
(VI248_256, VI248_512, VI148_512, VI148_256, VI148_128): New
mode iterator.

gcc/testsuite/ChangeLog:

PR target/101846
* gcc.target/i386/pr101846-1.c: New test.

3 years agoc++: constexpr std::construct_at on empty field [PR101663]
Patrick Palka [Thu, 12 Aug 2021 00:59:53 +0000 (20:59 -0400)]
c++: constexpr std::construct_at on empty field [PR101663]

Here during constexpr evaluation of

  std::construct_at(&a._M_value)

we find ourselves in cxx_eval_store_expression where the target object
is 'a._M_value' and the initializer is {}.  Since _M_value is an empty
[[no_unique_address]] member we don't create a sub-CONSTRUCTOR for it,
so we end up in the early exit code path for empty stores with mismatched
types and trip over the assert therein

  gcc_assert (is_empty_class (TREE_TYPE (init)) && !lval);

because lval is true.  The reason it's true is because the INIT_EXPR in
question is the LHS of a COMPOUND_EXPR, and evaluation of the LHS is
always performed with lval=true (to indicate there's no lvalue-to-rvalue
conversion).

This patch makes the code path in question handle the lval=true case
appropriately rather than asserting.  In passing, it also consolidates
the duplicate implementations of std::construct_at/destroy_at in some
of the C++20 constexpr tests into a common header file.

PR c++/101663

gcc/cp/ChangeLog:

* constexpr.c (cxx_eval_store_expression): Handle the lval=true
case in the early exit code path for empty stores with mismatched
types.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/construct_at.h: New convenience header file that
defines minimal implementations of std::construct_at/destroy_at,
split out from ...
* g++.dg/cpp2a/constexpr-new5.C: ... here.
* g++.dg/cpp2a/constexpr-new6.C: Use the header.
* g++.dg/cpp2a/constexpr-new14.C: Likewise.
* g++.dg/cpp2a/constexpr-new20.C: New test.

3 years agoDaily bump.
GCC Administrator [Thu, 12 Aug 2021 00:16:28 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc++: Fix test that fails randomly [PR101866]
Jonathan Wakely [Wed, 11 Aug 2021 21:11:19 +0000 (22:11 +0100)]
libstdc++: Fix test that fails randomly [PR101866]

This test assumes that the same sequence of three values cannot occur,
which is incorect. It's unlikely, but not impossible.

Perform the check in a loop, so that in the unlikely event of an
identical sequence, we retry. If the library code is buggy it will keep
producing the same sequence and the test will time out. If the code is
working correctly then we will usually break out of the loop after one
iteration, or very rarely after two or three.

libstdc++-v3/ChangeLog:

PR libstdc++/101866
* testsuite/experimental/random/randint.cc: Loop and retry if
reseed() produces the same sequence.

3 years agors6000: Add available-everywhere and ancient builtins
Bill Schmidt [Wed, 11 Aug 2021 19:59:17 +0000 (14:59 -0500)]
rs6000: Add available-everywhere and ancient builtins

2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Add always, power5, and
power6 stanzas.

3 years agors6000: Add VSX builtins
Bill Schmidt [Wed, 11 Aug 2021 19:56:26 +0000 (14:56 -0500)]
rs6000: Add VSX builtins

2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Add vsx stanza.

3 years agors6000: Add the rest of the [altivec] stanza to the builtins file
Bill Schmidt [Thu, 10 Jun 2021 16:14:51 +0000 (11:14 -0500)]
rs6000: Add the rest of the [altivec] stanza to the builtins file

2021-06-10  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Finish altivec stanza.
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Move
initialization of pcvoid_type_node here...
(altivec_init_builtins): ...from here.
* config/rs6000/rs6000.h (rs6000_builtin_type_index): Add
RS6000_BTI_const_ptr_void.
(pcvoid_type_node): New macro.

3 years agoc++: parameterized requires-expr as default argument [PR101725]
Patrick Palka [Wed, 11 Aug 2021 20:53:53 +0000 (16:53 -0400)]
c++: parameterized requires-expr as default argument [PR101725]

Here we're rejecting the default template argument

  requires (T t) { x(t); }

because we consider the 't' in the requirement to be a local variable
(according to local_variable_p), and we generally forbid local variables
from appearing inside default arguments.  We can perhaps fix this by
giving special treatment to parameters introduced by requires-expressions,
but DR 2082 relaxed the restriction about local variables appearing within
default arguments to permit them inside unevaluated operands thereof.
So this patch just implements DR 2082 which also fixes this PR since a
requires-expression is an unevaluated context.

PR c++/101725
DR 2082

gcc/cp/ChangeLog:

* cp-tree.h (unevaluated_p): Return true for REQUIRES_EXPR.
* decl.c (local_variable_p_walkfn): Don't walk into unevaluated
operands.
* parser.c (cp_parser_primary_expression) <case CPP_NAME>: Never
reject uses of local variables in unevaluated contexts.
* tree.c (cp_walk_subtrees) <case REQUIRES_EXPR>: Increment
cp_unevaluated_operand.  Use cp_walk_tree directly instead of
WALK_SUBTREE to avoid the goto.  Use REQUIRES_EXPR_REQS instead
of TREE_OPERAND directly.

gcc/testsuite/ChangeLog:

* g++.dg/DRs/dr2082.C: New test.
* g++.dg/cpp2a/concepts-uneval4.C: New test.

3 years agoc++: Optimize constinit thread_local vars [PR101786]
Jakub Jelinek [Wed, 11 Aug 2021 20:00:29 +0000 (22:00 +0200)]
c++: Optimize constinit thread_local vars [PR101786]

The paper that introduced constinit mentioned in rationale that constinit
can be used on externs as well and that it can be used to avoid the
thread_local initialization wrappers, because the standard requires that
if constinit is present on any declaration, it is also present on the
initialization declaration, even if it is in some other TU etc.

There is a small problem though, we use the tls wrappers not just if
the thread_local variable needs dynamic initialization, but also when
it has static initialization, but non-trivial destructor, as the
"dynamic initialization" in that case needs to register the destructor.

So, the following patch optimizes constinit thread_local vars only
if we can prove they will not have non-trivial destructors.  That includes
the case where we have incomplete type where we don't know and need to
conservatively assume the type will have non-trivial destructor at the
initializing declaration side.

2021-08-11  Jakub Jelinek  <jakub@redhat.com>

PR c++/101786
* decl2.c (var_defined_without_dynamic_init): Return true for
DECL_DECLARED_CONSTINIT_P with complete type and trivial destructor.

* g++.dg/cpp2a/constinit16.C: New test.

3 years agoc++: recognize class-scope non-template dguides [PR79501]
Patrick Palka [Wed, 11 Aug 2021 19:59:22 +0000 (15:59 -0400)]
c++: recognize class-scope non-template dguides [PR79501]

It looks like we still don't recognize class-scope non-template
deduction guides even after r12-2260.   This is because deduction guides
are tagged as such in cp_parser_init_declarator after calling
cp_parser_declarator, but in cp_parser_member_declaration we call
cp_parser_declarator directly.

So let's tag them in cp_parser_member_declaration as well.

PR c++/79501

gcc/cp/ChangeLog:

* parser.c (maybe_adjust_declarator_for_dguide): New, split
out from ...
(cp_parser_init_declarator): ... here.
(cp_parser_member_declaration): Use it.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/class-deduction98.C: New test.

3 years agoc++: most vexing parse and braced CTAD [PR89062]
Patrick Palka [Wed, 11 Aug 2021 19:58:30 +0000 (15:58 -0400)]
c++: most vexing parse and braced CTAD [PR89062]

Here grokdeclarator is emitting the error

  error: class template placeholder ‘Foo’ not permitted in this context

during the tentative (and ultimately futile) parse of 'x' as a function
declaration.  This happens because when parsing 'Foo{1}',
cp_parser_parameter_declaration yields a parameter declaration with no
declarator and whose type is a CTAD placeholder, and stops short of
consuming the '{'.  The caller cp_parser_parameter_declaration_list then
calls grokdeclarator on this declarator, hence the error, and soon
thereafter we abort this tentative parse since the next token '{'
doesn't make sense in the context of a parameter list.

Note that we don't have this issue with parenthesized CTAD

  Foo<int> x(Foo(1));

because in this case cp_parser_direct_declarator (called indirectly from
c_p_p_d) consumes the '(' and returns cp_error_declarator instead of a
NULL declarator (and also simulates a parse error), and grokdeclarator
exits early for this declarator without emitting any error.

Since grokdeclarator doesn't take a 'complain' parameter, to fix this we
need to avoid calling grokdeclarator in this situation.  To that end
this patch makes c_p_p_d simulate an error when a construct is a CTAD
expression and definitely not a parameter declaration, so that c_p_p_d_l
can avoid calling grokdeclarator by checking for this simulated error.
Alternatively we could keep all this logic inside c_p_p_d_l and not
touch c_p_p_d at all, but this approach seems slightly less adhoc.

PR c++/89062

gcc/cp/ChangeLog:

* parser.c (cp_parser_parameter_declaration_list): Don't call
grokdeclarator if cp_parser_error_occurred.
(cp_parser_parameter_declaration): Simulate an error if we see
the beginning of a CTAD form, i.e. if we see an opening brace
after the decl-specifier-seq and the type is a CTAD placeholder.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/class-deduction97.C: New test.

3 years agolibstdc++: Define std::is_pointer_interconvertible_base_of for C++20
Jonathan Wakely [Tue, 10 Aug 2021 14:37:23 +0000 (15:37 +0100)]
libstdc++: Define std::is_pointer_interconvertible_base_of for C++20

Implement these traits using the new built-ins that Jakub added
recently.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/std/type_traits (__cpp_lib_is_pointer_interconvertible)
(is_pointer_interconvertible_base_of_v)
(is_pointer_interconvertible_base_of): Define for C++20.
* include/std/version (__cpp_lib_is_pointer_interconvertible):
Define.
* testsuite/23_containers/span/layout_compat.cc: Use correct
feature test macro for std::is_layout_compatible_v.
* testsuite/20_util/is_pointer_interconvertible/value.cc: New test.
* testsuite/20_util/is_pointer_interconvertible/version.cc: New test.

3 years agolibstdc++: Fix missing descriptions in ChangeLog entries
Jonathan Wakely [Wed, 11 Aug 2021 13:05:01 +0000 (14:05 +0100)]
libstdc++: Fix missing descriptions in ChangeLog entries

3 years agoFortran: Fix c_float128 and c_float128_complex definitions.
Sandra Loosemore [Tue, 3 Aug 2021 23:21:16 +0000 (16:21 -0700)]
Fortran: Fix c_float128 and c_float128_complex definitions.

gfc_float128_type_node is only non-NULL on targets that support a
128-bit type that is not long double.  Use float128_type_node instead
when computing the value of the kind constants c_float128 and
c_float128_complex from the ISO_C_BINDING intrinsic module; this also
ensures it actually corresponds to __float128 (the IEEE encoding) and
not some other 128-bit floating-point type.

2021-08-11  Sandra Loosemore  <sandra@codesourcery.com>

gcc/fortran/
* iso-c-binding.def (c_float128, c_float128_complex): Check
float128_type_node instead of gfc_float128_type_node.
* trans-types.c (gfc_init_kinds, gfc_build_real_type):
Update comments re supported 128-bit floating-point types.

3 years agoFix gcc.dg/lto/pr48622_0.c testcase
Richard Biener [Wed, 11 Aug 2021 14:28:33 +0000 (16:28 +0200)]
Fix gcc.dg/lto/pr48622_0.c testcase

This fixes the testcase to not rely on the reference to
ashift_qi_1 being optimized out by RTL optimization via
help of the initregs pass that changes comparisons of
uninitialized data with a comparison that is always false.

2021-08-11  Richard Biener  <rguenther@suse.de>

* gcc.dg/lto/pr48622_1.c: Provide non-LTO definition
of ashift_qi_1.

3 years agotarget/101788 - avoid decomposing hard-register "loads"
Richard Biener [Wed, 11 Aug 2021 12:10:52 +0000 (14:10 +0200)]
target/101788 - avoid decomposing hard-register "loads"

This avoids decomposing hard-register accesses that masquerade as
loads.

2021-08-11  Richard Biener  <rguenther@suse.de>

PR target/101877
* tree-ssa-forwprop.c (pass_forwprop::execute): Do not decompose
hard-register accesses.

3 years agoAdjust volatile handling of the operand scanner
Richard Biener [Mon, 9 Aug 2021 11:12:08 +0000 (13:12 +0200)]
Adjust volatile handling of the operand scanner

The GIMPLE SSA operand scanner handles COMPONENT_REFs that are
not marked TREE_THIS_VOLATILE but have a TREE_THIS_VOLATILE
FIELD_DECL as volatile.  That's inconsistent in how TREE_THIS_VOLATILE
testing on GENERIC refs works which requires operand zero of
component references to mirror TREE_THIS_VOLATILE to the ref
so that testing TREE_THIS_VOLATILE on the outermost reference
is enough to determine the volatileness.

The following patch thus removes FIELD_DECL scanning from
the GIMPLE SSA operand scanner, possibly leaving fewer stmts
marked as gimple_has_volatile_ops.

It shows we miss at least one case in the fortran frontend, though
there's a suspicious amount of COMPONENT_REF creation compared
to little setting of TREE_THIS_VOLATILE.  This fixes the FAIL
of gfortran.dg/volatile11.f90 that would otherwise occur.

Visually inspecting fortran/ reveals a bunch of likely to fix
cases but I don't know the constraints of 'volatile' uses in
the fortran language to assess whether some of these are not
necessary.

2021-08-09  Richard Biener  <rguenther@suse.de>

gcc/
* tree-ssa-operands.c (operands_scanner::get_expr_operands):
Do not look at COMPONENT_REF FIELD_DECLs TREE_THIS_VOLATILE
to determine has_volatile_ops.

gcc/fortran/
* trans-common.c (create_common): Set TREE_THIS_VOLATILE on the
COMPONENT_REF if the field is volatile.

3 years agoSmall tweak to expand_used_vars
Eric Botcazou [Wed, 11 Aug 2021 13:31:32 +0000 (15:31 +0200)]
Small tweak to expand_used_vars

This completes the replacement of DECL_ATTRIBUTES (current_function_decl)
with the attribs local variable.

gcc/
* cfgexpand.c (expand_used_vars): Reuse attribs local variable.

3 years agoFix min_flags handling in mod-ref
Jan Hubicka [Wed, 11 Aug 2021 13:01:39 +0000 (15:01 +0200)]
Fix min_flags handling in mod-ref

gcc/ChangeLog:

2021-08-11  Jan Hubicka  <hubicka@ucw.cz>
    Alexandre Oliva  <oliva@adacore.com>

* ipa-modref.c (modref_lattice::dump): Fix escape_point's min_flags
dumping.
(modref_lattice::merge_deref): Fix handling of indirect scape points.
(update_escape_summary_1): Likewise.
(update_escape_summary): Likewise.
(ipa_merge_modref_summary_after_inlining): Likewise.

gcc/testsuite/ChangeLog:

* c-c++-common/modref-dse.c: New test.

3 years agomiddle-end/101858 - avoid shift of pointer in folding
Richard Biener [Wed, 11 Aug 2021 08:26:18 +0000 (10:26 +0200)]
middle-end/101858 - avoid shift of pointer in folding

This makes sure to not generate a shift of pointer types in
simplification of X < (cast) (1 << Y).

2021-08-11  Richard Biener  <rguenther@suse.de>

PR middle-end/101858
* fold-const.c (fold_binary_loc): Guard simplification
of  X < (cast) (1 << Y) to integer types.

* gcc.dg/pr101858.c: New testcase.

3 years agotree-optimization/101861 - fix gather use for non-gather refs
Richard Biener [Wed, 11 Aug 2021 09:49:10 +0000 (11:49 +0200)]
tree-optimization/101861 - fix gather use for non-gather refs

My previous change broke the usage of gather for strided loads.
The following fixes it.

2021-08-11  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101861
* tree-vect-stmts.c (vectorizable_load): Fix error in
previous change with regard to gather vectorization.

3 years agoarm/66791: Replace builtins for vdup_n and vmov_n intrinsics.
prathamesh.kulkarni [Wed, 11 Aug 2021 10:00:14 +0000 (15:30 +0530)]
arm/66791: Replace builtins for vdup_n and vmov_n intrinsics.

gcc/ChangeLog:

PR target/66791
* config/arm/arm_neon.h (vdup_n_s8): Replace call to builtin
with constructor.
(vdup_n_s16): Likewise.
(vdup_n_s32): Likewise.
(vdup_n_s64): Likewise.
(vdup_n_u8): Likewise.
(vdup_n_u16): Likewise.
(vdup_n_u32): Likewise.
(vdup_n_u64): Likewise.
(vdup_n_p8): Likewise.
(vdup_n_p16): Likewise.
(vdup_n_p64): Likewise.
(vdup_n_f16): Likewise.
(vdup_n_f32): Likewise.
(vdupq_n_s8): Likewise.
(vdupq_n_s16): Likewise.
(vdupq_n_s32): Likewise.
(vdupq_n_s64): Likewise.
(vdupq_n_u8): Likewise.
(vdupq_n_u16): Likewise.
(vdupq_n_u32): Likewise.
(vdupq_n_u64): Likewise.
(vdupq_n_p8): Likewise.
(vdupq_n_p16): Likewise.
(vdupq_n_p64): Likewise.
(vdupq_n_f16): Likewise.
(vdupq_n_f32): Likewise.
(vmov_n_s8): Replace call to builtin with call to corresponding
vdup_n intrinsic.
(vmov_n_s16): Likewise.
(vmov_n_s32): Likewise.
(vmov_n_s64): Likewise.
(vmov_n_u8): Likewise.
(vmov_n_u16): Likewise.
(vmov_n_u32): Likewise.
(vmov_n_u64): Likewise.
(vmov_n_p8): Likewise.
(vmov_n_p16): Likewise.
(vmov_n_f16): Likewise.
(vmov_n_f32): Likewise.
(vmovq_n_s8): Likewise.
(vmovq_n_s16): Likewise.
(vmovq_n_s32): Likewise.
(vmovq_n_s64): Likewise.
(vmovq_n_u8): Likewise.
(vmovq_n_u16): Likewise.
(vmovq_n_u32): Likewise.
(vmovq_n_u64): Likewise.
(vmovq_n_p8): Likewise.
(vmovq_n_p16): Likewise.
(vmovq_n_f16): Likewise.
(vmovq_n_f32): Likewise.
* config/arm/arm_neon_builtins.def: Remove entries for vdup_n.

gcc/testsuite/ChangeLog:

PR target/66791
* gcc.target/arm/pr51534.c: Adjust test.

3 years agosanitizer: Cherry-pick realpath fix
Jakub Jelinek [Wed, 11 Aug 2021 08:23:34 +0000 (10:23 +0200)]
sanitizer: Cherry-pick realpath fix

tsan in some cases starts ignoring interceptors and only calls the
intercepted functions.  But for realpath the behavior for NULL second argument
was only handled in the interceptor and intercepted function was the one
found by dlsym which is often one that doesn't handle NULL as second argument.

Fixed by using dlvsym with "GLIBC_2.3" if possible for intercepted function
and don't emulate behavior in the wrapper.

2021-08-11  Jakub Jelinek  <jakub@redhat.com>

* sanitizer_common/sanitizer_common_interceptors.inc: Cherry-pick
llvm-project revision faef0d042f523357fe5590e7cb6a8391cf0351a8.

3 years agoAda: Remove debug line number for DECL_IGNORED_P functions
Bernd Edlinger [Sat, 24 Jul 2021 10:53:39 +0000 (12:53 +0200)]
Ada: Remove debug line number for DECL_IGNORED_P functions

It was pointed out in PR101598 to be inappropriate, that
ignored Ada decls receive the source line number which was
recorded in the function decl's DECL_SOURCE_LOCATION.
Therefore set all front-end-generated Ada decls with
DECL_IGNORED_P to UNKNOWN_LOCATION.

2021-08-11  Bernd Edlinger  <bernd.edlinger@hotmail.de>

PR debug/101598
* gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the
DECL_SOURCE_LOCATION of DECL_IGNORED_P gnu_subprog_decl to
UNKNOWN_LOCATION.

3 years agocompiler: don't crash on a, b := int(0)
Ian Lance Taylor [Tue, 10 Aug 2021 23:13:01 +0000 (16:13 -0700)]
compiler: don't crash on a, b := int(0)

Fixes PR go/101851

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/341330

3 years agoExtend ldexp{s,d}f3 to vscalefs{s,d} when TARGET_AVX512F and TARGET_SSE_MATH.
liuhongt [Tue, 10 Aug 2021 11:00:18 +0000 (19:00 +0800)]
Extend ldexp{s,d}f3 to vscalefs{s,d} when TARGET_AVX512F and TARGET_SSE_MATH.

gcc/ChangeLog:

PR target/98309
* config/i386/i386.md (ldexp<mode>3): Extend to vscalefs[sd]
when TARGET_AVX512F and TARGET_SSE_MATH.

gcc/testsuite/ChangeLog:

PR target/98309
* gcc.target/i386/pr98309-1.c: New test.
* gcc.target/i386/pr98309-2.c: New test.

3 years agogcc.dg/uninit-pred-9_b.c: Xfail for CRIS too
Hans-Peter Nilsson [Tue, 10 Aug 2021 23:40:12 +0000 (01:40 +0200)]
gcc.dg/uninit-pred-9_b.c: Xfail for CRIS too

Adding to the growing list, for autotester accounting purposes.

FWIW I see this fails for m68k too:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712395.html
and moxie:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712389.html
and pru:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712366.html

testsuite:
PR middle-end/101674
* gcc.dg/uninit-pred-9_b.c: Xfail for cris-*-* too.

3 years agoDaily bump.
GCC Administrator [Wed, 11 Aug 2021 00:16:27 +0000 (00:16 +0000)]
Daily bump.

3 years agoopenmp: Fix up cp/parser.c build with GCC 4.8 to 6
Jakub Jelinek [Tue, 10 Aug 2021 16:01:23 +0000 (18:01 +0200)]
openmp: Fix up cp/parser.c build with GCC 4.8 to 6

Christophe Lyon reported that cp/parser.c no longer compiles with
GCC 4.8.5 after my recent OpenMP changes.
A goto out; there crosses odsd variable declaration, and odsd has
a vec<...> member where vec has = default; default constructor
and gcc before r7-2822-gd0b0fbd9fce2f30a82558bf2308b3a7b56c2f364
treated that as error.

Fixed by moving the declaration earlier before the goto.

Tested on x86_64-linux with GCC 4.8.5 system gcc, committed to trunk
as obvious.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

* parser.c (cp_parser_member_declaration): Move odsd declaration
before cp_parser_using_declaration call to avoid errors with
GCC 4.8 to 6.

3 years agomklog: support '-b c/101343' format.
Martin Liska [Mon, 12 Jul 2021 10:07:19 +0000 (12:07 +0200)]
mklog: support '-b c/101343' format.

contrib/ChangeLog:

* mklog.py: Support additional PRs without PR prefix.

3 years agogfortran: Fix in-build-tree testing [PR101305, PR101660]
Tobias Burnus [Tue, 10 Aug 2021 15:26:32 +0000 (17:26 +0200)]
gfortran: Fix in-build-tree testing [PR101305, PR101660]

ISO_Fortran_binding.h is written in the build dir - hence, a previous commit
added it as include directory for in-build-tree testing.  However,
it turned out that -I$specdir/libgfortran interferes with reading .mod files
as they are then no longer regareded as intrinsic modules.  Solution: Create
an extra include/ directory in the libgfortran build dir and copy
ISO_Fortran_binding.h to that directory.  As -B$specdir/libgfortran already
causes gfortran to read that include subdirectory, the -I flag is no longer
needed.

PR libfortran/101305
PR fortran/101660
PR testsuite/101847

libgfortran/ChangeLog:

* Makefile.am (ISO_Fortran_binding.h): Create include/ in the build dir
and copy the include file to it.
(clean-local): Add for removing the 'include' directory.
* Makefile.in: Regenerate.

gcc/testsuite/ChangeLog:

* lib/gfortran.exp (gfortran_init): Remove -I$specpath/libgfortran
from the string used to set GFORTRAN_UNDER_TEST.

3 years agoEnable gcc.target/i386/pr88531-1a.c for all targets
H.J. Lu [Tue, 10 Aug 2021 12:30:44 +0000 (05:30 -0700)]
Enable gcc.target/i386/pr88531-1a.c for all targets

PR tree-optimization/101809
* gcc.target/i386/pr88531-1a.c: Enable for all targets.

3 years agoi386: Allow some V32HImode and V64QImode permutations even without AVX512BW [PR80355]
Jakub Jelinek [Tue, 10 Aug 2021 10:38:00 +0000 (12:38 +0200)]
i386: Allow some V32HImode and V64QImode permutations even without AVX512BW [PR80355]

When working on the PR, I've noticed we generate terrible code for
V32HImode or V64QImode permutations for -mavx512f -mno-avx512bw.
Generally we can't do much with such permutations, but since PR68655
we can handle at least some, those expressible using V16SImode or V8DImode
permutations, but that wasn't reachable, because ix86_vectorize_vec_perm_const
didn't even try, it said without TARGET_AVX512BW it can't do anything, and
with it can do everything, no d.testing_p attempts.

This patch makes it try it for TARGET_AVX512F && !TARGET_AVX512BW.

The first hunk is to avoid ICE, expand_vec_perm_even_odd_1 asserts d->vmode
isn't V32HImode because expand_vec_perm_1 for AVX512BW handles already
all permutations, but when we let it through without !TARGET_AVX512BW,
expand_vec_perm_1 doesn't handle it.

If we want, that hunk can be dropped if we implement in
expand_vec_perm_even_odd_1 and its helper the even permutation as
vpmovdw + vpmovdw + vinserti64x4 and odd permutation as
vpsrld $16 + vpsrld $16 + vpmovdw + vpmovdw + vinserti64x4.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

PR target/80355
* config/i386/i386-expand.c (expand_vec_perm_even_odd): Return false
for V32HImode if !TARGET_AVX512BW.
(ix86_vectorize_vec_perm_const) <case E_V32HImode, case E_V64QImode>:
If !TARGET_AVX512BW and TARGET_AVX512F and d.testing_p, don't fail
early, but actually check the permutation.

* gcc.target/i386/avx512f-pr80355-2.c: New test.

3 years agotree-optimization/101809 - support emulated gather for double[int]
Richard Biener [Tue, 10 Aug 2021 08:54:58 +0000 (10:54 +0200)]
tree-optimization/101809 - support emulated gather for double[int]

This adds emulated gather support for index vectors with more
elements than the data vector.  The internal function gather
vectorization code doesn't currently handle this (but the builtin
decl code does).  This allows vectorization of double data gather
with int indexes on 32bit platforms where there isn't an implicit
widening to 64bit present.

2021-08-10  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101809
* tree-vect-stmts.c (get_load_store_type): Allow emulated
gathers with offset vector nunits being a constant multiple
of the data vector nunits.
(vect_get_gather_scatter_ops): Use the appropriate nunits
for the offset vector defs.
(vectorizable_store): Adjust call to
vect_get_gather_scatter_ops.
(vectorizable_load): Likewise.  Handle the case of less
offset vectors than data vectors.

3 years agoi386: Improve single operand AVX512F permutations [PR80355]
Jakub Jelinek [Tue, 10 Aug 2021 09:34:53 +0000 (11:34 +0200)]
i386: Improve single operand AVX512F permutations [PR80355]

On the following testcase we emit
vmovdqa32 .LC0(%rip), %zmm1
vpermd %zmm0, %zmm1, %zmm0
and
vmovdqa64 .LC1(%rip), %zmm1
vpermq %zmm0, %zmm1, %zmm0
instead of
vshufi32x4 $78, %zmm0, %zmm0, %zmm0
and
vshufi64x2 $78, %zmm0, %zmm0, %zmm0
we can emit with the patch.  We have patterns that match two argument
permutations for vshuf[if]*, but for one argument it doesn't trigger.
Either we can add two patterns for that, or we would need to add another
routine to i386-expand.c that would transform under certain condition
these cases to the two argument vshuf*, doing it in sse.md looked simpler.
We don't need this for 32-byte vectors, we already emit single insn
permutation that doesn't need memory op there.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

PR target/80355
* config/i386/sse.md (*avx512f_shuf_<shuffletype>64x2_1<mask_name>_1,
*avx512f_shuf_<shuffletype>32x4_1<mask_name>_1): New define_insn
patterns.

* gcc.target/i386/avx512f-pr80355-1.c: New test.

3 years agoopenmp: Add support for declare simd and declare variant in a attribute syntax
Jakub Jelinek [Tue, 10 Aug 2021 09:22:33 +0000 (11:22 +0200)]
openmp: Add support for declare simd and declare variant in a attribute syntax

This patch adds support for declare simd and declare variant in attribute
syntax.  Either in attribute-specifier-seq at the start of declaration, in
that case it has similar restriction to pragma-syntax, that there is a single
function declaration/definition in the declaration, rather than variable
declaration or more than one function declarations or mix of function and
variable declarations.  Or after the declarator id, in that case it applies
just to the single function declaration and the same declaration can have
multiple such attributes.  Or both.

Furthermore, cp_parser_statement has been adjusted so that it doesn't
accept [[omp::directive (parallel)]] etc. before statements that don't
take attributes at all, or where those attributes don't appertain to
the statement but something else (e.g. to label, using directive,
declaration, etc.).

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
* parser.h (struct cp_omp_declare_simd_data): Remove
in_omp_attribute_pragma and clauses members, add loc and attribs.
(struct cp_oacc_routine_data): Remove loc member, add clauses
member.
* parser.c (cp_finalize_omp_declare_simd): New function.
(cp_parser_handle_statement_omp_attributes): Mention in
function comment the function is used also for
attribute-declaration.
(cp_parser_handle_directive_omp_attributes): New function.
(cp_parser_statement): Don't call
cp_parser_handle_statement_omp_attributes if statement doesn't
have attribute-specifier-seq at the beginning at all or if
if those attributes don't appertain to the statement.
(cp_parser_simple_declaration): Call
cp_parser_handle_directive_omp_attributes and
cp_finalize_omp_declare_simd.
(cp_parser_explicit_instantiation): Likewise.
(cp_parser_init_declarator): Initialize prefix_attributes
only after parsing declarators.
(cp_parser_direct_declarator): Call
cp_parser_handle_directive_omp_attributes and
cp_finalize_omp_declare_simd.
(cp_parser_member_declaration): Likewise.
(cp_parser_single_declaration): Likewise.
(cp_parser_omp_declare_simd): Don't initialize
data.in_omp_attribute_pragma, instead initialize
data.attribs[0] and data.attribs[1].
(cp_finish_omp_declare_variant): Remove
in_omp_attribute_pragma argument, instead use
parser->lexer->in_omp_attribute_pragma.
(cp_parser_late_parsing_omp_declare_simd): Adjust
cp_finish_omp_declare_variant caller.  Handle attribute-syntax
declare simd/variant.
gcc/testsuite/
* g++.dg/gomp/attrs-1.C (bar): Add missing semicolon after
[[omp::directive (threadprivate (t2))]].  Add tests with
if/while/switch after parallel in attribute syntax.
(corge): Add missing omp:: before directive.
* g++.dg/gomp/attrs-2.C (bar): Add missing semicolon after
[[omp::directive (threadprivate (t2))]].
* g++.dg/gomp/attrs-10.C: New test.
* g++.dg/gomp/attrs-11.C: New test.

3 years agoi386: Fix typos in amxbf16 runtime test.
Hongyu Wang [Tue, 10 Aug 2021 07:13:25 +0000 (15:13 +0800)]
i386: Fix typos in amxbf16 runtime test.

gcc/testsuite/ChangeLog:

* gcc.target/i386/amxbf16-dpbf16ps-2.c: Fix typos.

3 years agotree-optimization/101801 - rework generic vector vectorization more
Richard Biener [Mon, 9 Aug 2021 09:42:47 +0000 (11:42 +0200)]
tree-optimization/101801 - rework generic vector vectorization more

This builds ontop of the vect_worthwhile_without_simd_p refactoring
done earlier.  It was wrong in dropping the appearant double checks
for operation support since the optab check can happen with an
integer vector emulation mode and thus succeed but vector lowering
might not actually support the operation on word_mode.

The following patch adds a vect_emulated_vector_p helper and
re-instantiates the check where it was previously.  It also adds
appropriate costing of the scalar stmts emitted by vector lowering
to vectorizable_operation which should be the only place such
operations are synthesized.  I've also cared for the case where
the vector mode is supported but the operation is not (though
I think this will be unlikely given we're talking about plus, minus
and negate).

This fixes the observed FAIL of gcc.dg/tree-ssa/gen-vect-11b.c
with -m32 where we end up vectorizing a multiplication that ends up
being teared down to scalars again by vector lowering.

I'm not super happy about all the other places where we're now
and previously feeding scalar modes to optab checks where we
want to know whether we can vectorize sth but well.

2021-09-08  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101801
PR tree-optimization/101819
* tree-vectorizer.h (vect_emulated_vector_p): Declare.
* tree-vect-loop.c (vect_emulated_vector_p): New function.
(vectorizable_reduction): Re-instantiate a check for emulated
operations.
* tree-vect-stmts.c (vectorizable_shift): Likewise.
(vectorizable_operation): Likewise.  Cost emulated vector
operations according to the scalar sequence synthesized by
vector lowering.

3 years agomiddle-end/101824 - properly handle volatiles in nested fn lowering
Richard Biener [Mon, 9 Aug 2021 08:19:10 +0000 (10:19 +0200)]
middle-end/101824 - properly handle volatiles in nested fn lowering

When we build the COMPONENT_REF of a formerly volatile local off
the FRAME decl we have to make sure to mark the COMPONENT_REF
as TREE_THIS_VOLATILE.  While the GIMPLE operand scanner looks
at the FIELD_DECL this is not how volatile GENERIC refs work.

2021-08-09  Richard Biener  <rguenther@suse.de>

PR middle-end/101824
* tree-nested.c (get_frame_field): Mark the COMPONENT_REF as
volatile in case the variable was.

* gcc.dg/tree-ssa/pr101824.c: New testcase.

3 years agoEvaluate arguments of sizeof that are structs of variable size.
Martin Uecker [Tue, 10 Aug 2021 05:42:51 +0000 (07:42 +0200)]
Evaluate arguments of sizeof that are structs of variable size.

Evaluate arguments of sizeof for all types of variable size
and not just for VLAs. This fixes some issues related to
[PR29970] where statement expressions need to be evaluated
so that the size is well defined.

2021-08-10  Martin Uecker  <muecker@gwdg.de>

gcc/c/
PR c/29970
* c-typeck.c (c_expr_sizeof_expr): Evaluate
size expressions for structs of variable size.

gcc/testsuite/
PR c/29970
* gcc.dg/vla-stexp-1.c: New test.

3 years agox86: Optimize load of const FP all bits set vectors
H.J. Lu [Fri, 6 Aug 2021 19:32:01 +0000 (12:32 -0700)]
x86: Optimize load of const FP all bits set vectors

Check float_vector_all_ones_operand for vector floating-point modes to
optimize load of const floating-point all bits set vectors.

gcc/

PR target/101804
* config/i386/constraints.md (BC): Document for integer SSE
constant all bits set operand.
(BF): New constraint for const floating-point all bits set
vectors.
* config/i386/i386.c (standard_sse_constant_p): Likewise.
(standard_sse_constant_opcode): Likewise.
* config/i386/sse.md (sseconstm1): New mode attribute.
(mov<mode>_internal): Replace BC with <sseconstm1>.

gcc/testsuite/

PR target/101804
* gcc.target/i386/avx2-gather-2.c: Pass -march=skylake instead
of "-mavx2 -mtune=skylake".  Scan vpcmpeqd.

3 years agoSupport cond_ashr/lshr/ashl for vector integer modes under AVX512.
liuhongt [Thu, 5 Aug 2021 09:51:48 +0000 (17:51 +0800)]
Support cond_ashr/lshr/ashl for vector integer modes under AVX512.

gcc/ChangeLog:

* config/i386/sse.md (cond_<insn><mode>): New expander.
(VI248_AVX512VLBW): New mode iterator.
* config/i386/predicates.md
(nonimmediate_or_const_vec_dup_operand): New predicate.

gcc/testsuite/ChangeLog:

* gcc.target/i386/cond_op_shift_d-1.c: New test.
* gcc.target/i386/cond_op_shift_d-2.c: New test.
* gcc.target/i386/cond_op_shift_q-1.c: New test.
* gcc.target/i386/cond_op_shift_q-2.c: New test.
* gcc.target/i386/cond_op_shift_ud-1.c: New test.
* gcc.target/i386/cond_op_shift_ud-2.c: New test.
* gcc.target/i386/cond_op_shift_uq-1.c: New test.
* gcc.target/i386/cond_op_shift_uq-2.c: New test.
* gcc.target/i386/cond_op_shift_uw-1.c: New test.
* gcc.target/i386/cond_op_shift_uw-2.c: New test.
* gcc.target/i386/cond_op_shift_w-1.c: New test.
* gcc.target/i386/cond_op_shift_w-2.c: New test.

3 years agoDaily bump.
GCC Administrator [Tue, 10 Aug 2021 00:16:28 +0000 (00:16 +0000)]
Daily bump.

3 years agoEnsure toupper and tolower follow the expected pattern.
Andrew MacLeod [Mon, 9 Aug 2021 19:53:42 +0000 (15:53 -0400)]
Ensure toupper and tolower follow the expected pattern.

If the parameter is not compatible with the LHS, assume this is not really a
builtin function to avoid a trap.

gcc/
PR tree-optimization/101741
* gimple-range-fold.cc (fold_using_range::range_of_builtin_call): Check
type of parameter for toupper/tolower.

gcc/testsuite/
* gcc.dg/pr101741.c: New.

3 years agolibstdc++: Reduce use of debug containers in <regex>
Jonathan Wakely [Mon, 9 Aug 2021 10:49:09 +0000 (11:49 +0100)]
libstdc++: Reduce use of debug containers in <regex>

The std::regex code uses std::map and std::vector, which means that when
_GLIBCXX_DEBUG is defined it uses the debug versions of those
containers. That no longer compiles, because I changed <regex> to
include <bits/stl_map.h> and <bits/stl_vector.h> instead of <map> and
<vector>, so the debug versions aren't defined, and std::map doesn't
compile. There is also a use of std::stack, which defaults to std::deque
which is the debug deque when _GLIBCXX_DEBUG is defined.

Using std::map, std::vector, and std::deque is probably a mistake, and
we should qualify them with _GLIBCXX_STD_C instead so that the debug
versions aren't used. We do not need the overhead of checking our own
uses of those containers, which should be correct anyway. The exception
is the vector base class of std::match_results, which exposes iterators
to users, so can benefit from debug mode checks for its iterators. For
other accesses to the vector elements, match_results already does its
own checks, so can access the _GLIBCXX_STD_C::vector base class
directly.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex.h (basic_regex::transform_primary): Use
_GLIBCXX_STD_C::vector for local variable.
* include/bits/regex.tcc (__regex_algo_impl): Use reference to
_GLIBCXX_STD_C::vector base class of match_results.
* include/bits/regex_automaton.tcc (_StateSeq:_M_clone): Use
_GLIBCXX_STD_C::map and _GLIBCXX_STD_C::deque for local
variables.
* include/bits/regex_compiler.h (_BracketMatcher): Use
_GLIBCXX_STD_C::vector for data members.
* include/bits/regex_executor.h (_Executor): Likewise.
* include/std/regex [_GLIBCXX_DEBUG]: Include <debug/vector>.

3 years agolibstdc++: [_GLIBCXX_DEBUG] Avoid allocator operator== when always equal
François Dumont [Mon, 9 Aug 2021 09:55:43 +0000 (11:55 +0200)]
libstdc++: [_GLIBCXX_DEBUG] Avoid allocator operator== when always equal

Use std::allocator_traits::is_always_equal to find out if we need to compare
allocator instances on safe container allocator aware move constructor.

libstdc++-v3/ChangeLog:

* include/debug/safe_container.h
(_Safe_container(_Safe_container&&, const _Alloc&, std::true_type)): New.
(_Safe_container(_Safe_container&&, const _Alloc&, std::false_type)): New.
(_Safe_container(_Safe_container&&, const _Alloc&)): Use latters.

3 years agoipa: Fix testsuite/gcc.dg/ipa/remref-6.c
Martin Jambor [Mon, 9 Aug 2021 15:35:39 +0000 (17:35 +0200)]
ipa: Fix testsuite/gcc.dg/ipa/remref-6.c

I forgot to add -fdump-ipa-inline to options of
testsuite/gcc.dg/ipa/remref-6.c and so the dump scan test were not
PASSing but ended up as UNRESOLVED.  Fixing that revealed that the one
of the dumps it was looking for had a double space, so I removed it
too.

gcc/ChangeLog:

2021-08-09  Martin Jambor  <mjambor@suse.cz>

PR testsuite/101654
* ipa-prop.c (propagate_controlled_uses): Removed a spurious space.

gcc/testsuite/ChangeLog:

2021-08-09  Martin Jambor  <mjambor@suse.cz>

PR testsuite/101654
* gcc.dg/ipa/remref-6.c: Added missing -fdump-ipa-inline option.

3 years agoVerify destination[source] of a load[store] instruction is a register.
Pat Haugen [Mon, 9 Aug 2021 15:05:49 +0000 (10:05 -0500)]
Verify destination[source] of a load[store] instruction is a register.

gcc/ChangeLog:

* config/rs6000/rs6000.c (is_load_insn1): Verify destination is a
register.
(is_store_insn1): Verify source is a register.

3 years agoi386: Name V2SF logic insns [PR101812]
Uros Bizjak [Mon, 9 Aug 2021 14:38:54 +0000 (16:38 +0200)]
i386: Name V2SF logic insns [PR101812]

Name V2SF logic insns, so expand_simple_binop works with V2SF modes.

2021-08-09  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/101812
* config/i386/mmx.md (<any_logic:code>v2sf3):
Rename from *mmx_<any_logic:code>v2sf3

gcc/testsuite/
PR target/101812
* gcc.target/i386/pr101812.c: New test.

3 years agoCross-reference parts adapted in 'gcc/omp-oacc-neuter-broadcast.cc'
Thomas Schwinge [Mon, 9 Aug 2021 10:21:43 +0000 (12:21 +0200)]
Cross-reference parts adapted in 'gcc/omp-oacc-neuter-broadcast.cc'

gcc/
* config/nvptx/nvptx.c: Cross-reference parts adapted in
'gcc/omp-oacc-neuter-broadcast.cc'.
* omp-low.c: Likewise.
* omp-oacc-neuter-broadcast.cc: Cross-reference parts adapted from
the above files.

3 years agoamdgcn: Enable OpenACC worker partitioning for AMD GCN
Julian Brown [Tue, 2 Mar 2021 12:20:13 +0000 (04:20 -0800)]
amdgcn: Enable OpenACC worker partitioning for AMD GCN

gcc/
* config/gcn/gcn.c (gcn_init_builtins): Override decls for
BUILT_IN_GOACC_SINGLE_START, BUILT_IN_GOACC_SINGLE_COPY_START,
BUILT_IN_GOACC_SINGLE_COPY_END and BUILT_IN_GOACC_BARRIER.
(gcn_goacc_validate_dims): Turn on worker partitioning unconditionally.
(gcn_fork_join): Update comment.
* config/gcn/gcn.opt (flag_worker_partitioning): Remove.
(macc_experimental_workers): Remove unused option.
libgomp/
* plugin/plugin-gcn.c (gcn_exec): Change default number of workers to
16.
* testsuite/libgomp.oacc-c-c++-common/acc_prof-kernels-1.c
[acc_device_radeon]: Update.
* testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
[ACC_DEVICE_TYPE_radeon]: Likewise.
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
[acc_device_radeon]: Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c
[ACC_DEVICE_TYPE_radeon]: Likewise.
* testsuite/libgomp.oacc-fortran/optional-reduction.f90: XFAIL for
'openacc_radeon_accel_selected' and '-O0'.
* testsuite/libgomp.oacc-fortran/reduction-7.f90: Likewise.

Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
3 years agoopenacc: Middle-end worker-partitioning support
Julian Brown [Tue, 2 Mar 2021 12:20:11 +0000 (04:20 -0800)]
openacc: Middle-end worker-partitioning support

This patch implements worker-partitioning support in the middle end,
by rewriting gimple. The OpenACC execution model requires that code
can run in either "worker single" mode where only a single worker per
gang is active, or "worker partitioned" mode, where multiple workers
per gang are active. This means we need to do something equivalent
to spawning additional workers when transitioning from worker-single
to worker-partitioned mode. However, GPUs typically fix the number of
threads of invoked kernels at launch time, so we need to do something
with the "extra" threads when they are not wanted.

The scheme used is to conditionalise each basic block that executes
in "worker single" mode for worker 0 only. Conditional branches
are handled specially so "idle" (non-0) workers follow along with
worker 0. On transitioning to "worker partitioned" mode, any variables
modified by worker 0 are propagated to the other workers via GPU shared
memory. Special care is taken for routine calls, writes through pointers,
and so forth, as follows:

  - There are two types of function calls to consider in worker-single
    mode: "normal" calls to maths library routines, etc. are called from
    worker 0 only. OpenACC routines may contain worker-partitioned loops
    themselves, so are called from all workers, including "idle" ones.

  - SSA names set in worker-single mode, but used in worker-partitioned
    mode, are copied to shared memory in worker 0. Other workers retrieve
    the value from the appropriate shared-memory location after a barrier,
    and new phi nodes are introduced at the convergence point to resolve
    the worker 0/other worker copies of the value.

  - Local scalar variables (on the stack) also need special handling. We
    broadcast any variables that are written in the current worker-single
    block, and that are read in any worker-partitioned block.  (This is
    believed to be safe, and is flow-insensitive to ease analysis.)

  - Local aggregates (arrays and composites) on the stack are *not*
    broadcast. Instead we force gimple stmts modifying elements/fields of
    local aggregates into fully-partitioned mode. The RHS of the
    assignment is a scalar, and is thus subject to broadcasting as above.

  - Writes through pointers may affect any local variable that has
    its address taken. We use points-to analysis to determine the set
    of potentially-affected variables for a given pointer indirection.
    We broadcast any such variable which is used in worker-partitioned
    mode, on a per-block basis for any block containing a write through
    a pointer.

Some slides about the implementation (from 2018) are available at:

  https://jtb20.github.io/gcnworkers.pdf

gcc/
* Makefile.in (OBJS): Add omp-oacc-neuter-broadcast.o.
* doc/tm.texi.in (TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD):
Add documentation hook.
* doc/tm.texi: Regenerate.
* omp-oacc-neuter-broadcast.cc: New file.
* omp-builtins.def (BUILT_IN_GOACC_BARRIER)
(BUILT_IN_GOACC_SINGLE_START, BUILT_IN_GOACC_SINGLE_COPY_START)
(BUILT_IN_GOACC_SINGLE_COPY_END): New builtins.
* passes.def (pass_omp_oacc_neuter_broadcast): Add pass.
* target.def (goacc.create_worker_broadcast_record): Add target
hook.
* tree-pass.h (make_pass_omp_oacc_neuter_broadcast): Add
prototype.
* config/gcn/gcn-protos.h (gcn_goacc_adjust_propagation_record):
Rename prototype to...
(gcn_goacc_create_worker_broadcast_record): ... this.
* config/gcn/gcn-tree.c (gcn_goacc_adjust_propagation_record): Rename
function to...
(gcn_goacc_create_worker_broadcast_record): ... this.
* config/gcn/gcn.c (TARGET_GOACC_ADJUST_PROPAGATION_RECORD):
Rename to...
(TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD): ... this.

Co-Authored-By: Nathan Sidwell <nathan@codesourcery.com> (via 'gcc/config/nvptx/nvptx.c' master)
Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
3 years agoPR101609: Use the correct iterator for AArch64 vector right shift pattern
Tejas Belagod [Mon, 9 Aug 2021 10:33:30 +0000 (11:33 +0100)]
PR101609: Use the correct iterator for AArch64 vector right shift pattern

Loops containing long long shifts fail to vectorize due to the vectorizer
not being able to recognize long long right shifts. This is due to a bug
in the iterator used for the vashr and vlshr patterns in aarch64-simd.md.

2021-08-09  Tejas Belagod  <tejas.belagod@arm.com>

gcc/ChangeLog
PR target/101609
* config/aarch64/aarch64-simd.md (vlshr<mode>3, vashr<mode>3): Use
the right iterator.

gcc/testsuite/ChangeLog
* gcc.target/aarch64/vect-shr-reg.c: New testcase.
* gcc.target/aarch64/vect-shr-reg-run.c: Likewise.

3 years agoRemove 'gcc/omp-offload.c' from 'GTFILES'
Thomas Schwinge [Wed, 4 Aug 2021 11:41:22 +0000 (13:41 +0200)]
Remove 'gcc/omp-offload.c' from 'GTFILES'

Given that it doesn't contain any 'GTY' markers, no 'gcc/gt-omp-offload.h' file
gets generated (and '#include'd anywhere).

Small fix-up for r243673 (Git commit 629b3d75c8c5a244d891a9c292bca6912d4b0dd9)
"Split omp-low into multiple files".

gcc/
* Makefile.in (GTFILES): Remove '$(srcdir)/omp-offload.c'.

3 years agoDon't consider '-foffload-abi' in 'DEF_GOACC_BUILTIN', 'DEF_GOMP_BUILTIN'
Thomas Schwinge [Mon, 2 Aug 2021 16:33:50 +0000 (18:33 +0200)]
Don't consider '-foffload-abi' in 'DEF_GOACC_BUILTIN', 'DEF_GOMP_BUILTIN'

Since Tom's PR64707 commit r220037 (Git commit
1506ae0e1e865fb7a42fc37a47f1799b71f21c53) "Make fopenmp an LTO option" as well
as PR64672 commit r220038 (Git commit a0c88d0629a33161add8d5bc083f1e59f3f756f7)
"Make fopenacc an LTO option", we're now actually passing
'-fopenacc'/'-fopenmp' to the 'mkoffload's, which will pass these on to the
offload compilers.

gcc/
* builtins.def (DEF_GOACC_BUILTIN, DEF_GOMP_BUILTIN): Don't
consider '-foffload-abi'.
* common.opt (-foffload-abi): Remove 'Var', 'Init'.
* opts.c (common_handle_option) <-foffload-abi> [ACCEL_COMPILER]:
Ignore.

3 years agoSanity check that 'Init' doesn't appear without 'Var' in '*.opt' files
Thomas Schwinge [Tue, 3 Aug 2021 12:59:56 +0000 (14:59 +0200)]
Sanity check that 'Init' doesn't appear without 'Var' in '*.opt' files

... as that doesn't make sense.

    @item Init(@var{value})
    The variable specified by the @code{Var} property should be statically
    initialized to @var{value}.  [...]

gcc/
* optc-gen.awk: Sanity check that 'Init' doesn't appear without
'Var'.

3 years ago[OpenACC] Clean up unused 'BUILT_IN_ACC_GET_DEVICE_TYPE'
Thomas Schwinge [Mon, 2 Aug 2021 16:34:47 +0000 (18:34 +0200)]
[OpenACC] Clean up unused 'BUILT_IN_ACC_GET_DEVICE_TYPE'

Unused as of r229767 (Git commit e50146711b7200e8f822c6d8239430c682b76e4f)
"OpenACC reductions".

gcc/
* omp-builtins.def (BUILT_IN_ACC_GET_DEVICE_TYPE): Remove.

3 years ago[documentation] No need anymore to "mention ['gt-*.h' file] as a dependency in the...
Thomas Schwinge [Wed, 4 Aug 2021 11:52:58 +0000 (13:52 +0200)]
[documentation] No need anymore to "mention ['gt-*.h' file] as a dependency in the 'Makefile'"

... as of r202907 (Git commit b6541edc52ed57b6e47150396356d3080ba81034)
"remove explicit dependencies".

gcc/
* doc/gty.texi (Files): Update.

3 years ago[documentation] Fix GTY header file example
Thomas Schwinge [Wed, 4 Aug 2021 12:01:56 +0000 (14:01 +0200)]
[documentation] Fix GTY header file example

Fix-up for CVS 'gcc/doc/gty.texi' r1.6 (Subversion r55857, Git
commit cba57c9d40057fa78efc9a404ab4ae7101a59dcb) "Minor doc updates"

gcc/
* doc/gty.texi (Files): Fix GTY header file example.

3 years agoImprove handling of unknown sign bit in CCP.
Roger Sayle [Mon, 9 Aug 2021 11:02:53 +0000 (12:02 +0100)]
Improve handling of unknown sign bit in CCP.

This middle-end patch implements several related improvements to
tree-ssa's conditional (bit) constant propagation pass.  The current
code handling ordered comparisons contains the comment "If the
most significant bits are not known we know nothing" which is not
entirely true [this test even prevents this pass understanding these
comparisons always have a zero or one result].  This patch introduces
a new value_mask_to_min_max helper function, that understands the
different semantics of the most significant bit on signed vs.
unsigned values.  This allows us to generalize ordered comparisons,
GE_EXPR, GT_EXPR, LE_EXPR and LT_EXPR, where to code is tweaked to
correctly handle the potential equal cases.  Then finally support
is added for the related tree codes MIN_EXPR, MAX_EXPR, ABS_EXPR
and ABSU_EXPR.

Regression testing revealed three test cases in the testsuite that
were checking for specific optimizations that are now being performed
earlier than expected.  These tests can continue to check their
original transformations by explicitly adding -fno-tree-ccp to their
dg-options (some already specify -fno-ipa-vrp or -fno-tree-forwprop
for the same reason).

2021-08-09  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* tree-ssa-ccp.c (value_mask_to_min_max): Helper function to
determine the upper and lower bounds from a mask-value pair.
(bit_value_unop) [ABS_EXPR, ABSU_EXPR]: Add support for
absolute value and unsigned absolute value expressions.
(bit_value_binop):  Initialize *VAL's precision.
[LT_EXPR, LE_EXPR]: Use value_mask_to_min_max to determine
upper and lower bounds of operands.  Add LE_EXPR/GE_EXPR
support when the operands are unknown but potentially equal.
[MIN_EXPR, MAX_EXPR]: Support minimum/maximum expressions.

gcc/testsuite/ChangeLog
* gcc.dg/pr68217.c: Add -fno-tree-ccp option.
* gcc.dg/tree-ssa/vrp24.c: Add -fno-tree-ccp option.
* g++.dg/ipa/pure-const-3.C: Add -fno-tree-ccp option.

3 years agolibstdc++: Make allocator equality comparable in tests
Jonathan Wakely [Mon, 9 Aug 2021 10:36:07 +0000 (11:36 +0100)]
libstdc++: Make allocator equality comparable in tests

libstdc++-v3/ChangeLog:

* testsuite/23_containers/unordered_map/cons/default.cc: Add
equality comparison operators to allocator.
* testsuite/23_containers/unordered_set/cons/default.cc:
Likewise.

3 years agotestsuite/lib/gfortran.exp: Add -I for ISO*.h [PR101305, PR101660]
Tobias Burnus [Mon, 9 Aug 2021 10:35:23 +0000 (12:35 +0200)]
testsuite/lib/gfortran.exp: Add -I for ISO*.h [PR101305, PR101660]

This patch adds -I$specdir/libgfortran to GFORTRAN_UNDER_TEST, when
set by proc gfortran_init. As the $specdir depends on the multilib
setting, it has to be re-set for a different multilib; hence, we track
whether a previous call to gfortran_init set that var or whether it
was set differently.

gcc/testsuite/
PR libfortran/101305
PR fortran/101660

* lib/gfortran.exp (gfortran_init): Add -I $specdir/libgfortran to
GFORTRAN_UNDER_TEST; update it when set by previous gfortran_init call.
* gfortran.dg/ISO_Fortran_binding_1.c: Use <...> not "..." for
ISO_Fortran_binding.h's #include.
* gfortran.dg/ISO_Fortran_binding_10.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_11.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_12.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_15.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_16.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_17.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_18.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_3.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_5.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_6.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_7.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_8.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_9.c: Likewise.
* gfortran.dg/PR94327.c: Likewise.
* gfortran.dg/PR94331.c: Likewise.
* gfortran.dg/bind_c_array_params_3_aux.c: Likewise.
* gfortran.dg/iso_fortran_binding_uint8_array_driver.c: Likewise.
* gfortran.dg/pr93524.c: Likewise.

3 years agoaarch64: Expand %<w> correctly according to mode iterator
Bin Cheng [Mon, 9 Aug 2021 09:21:03 +0000 (17:21 +0800)]
aarch64: Expand %<w> correctly according to mode iterator

Pattern "*extend<SHORT:mode><GPI:mode>2_aarch64" is duplicated
from the corresponding zero_extend pattern, however %<w> needs
to be expanded according to its mode iterator because the smov
instruction is different to umov.

2021-08-09  Bin Cheng  <bin.cheng@linux.alibaba.com>

gcc/
* config/aarch64/aarch64.md
(*extend<SHORT:mode><GPI:mode>2_aarch64): Use %<GPI:w>0.

3 years agotestsuite: aarch64: Fix invalid SVE tests
Jonathan Wright [Fri, 6 Aug 2021 14:37:34 +0000 (15:37 +0100)]
testsuite: aarch64: Fix invalid SVE tests

Some scan-assembler tests for SVE code generation were erroneously
split over multiple lines - meaning they became invalid. This patch
gets the tests working again by putting each test on a single line.

The extract_[1234].c tests are corrected to expect that extracted
32-bit values are moved into 'w' registers rather than 'x' registers.

gcc/testsuite/ChangeLog:

2021-08-06  Jonathan Wright  <jonathan.wright@arm.com>

* gcc.target/aarch64/sve/dup_lane_1.c: Don't split
scan-assembler tests over multiple lines. Expect 32-bit
result values in 'w' registers.
* gcc.target/aarch64/sve/extract_1.c: Likewise.
* gcc.target/aarch64/sve/extract_2.c: Likewise.
* gcc.target/aarch64/sve/extract_3.c: Likewise.
* gcc.target/aarch64/sve/extract_4.c: Likewise.

3 years agotestsuite: aarch64: Fix failing vector structure tests on big-endian
Jonathan Wright [Wed, 4 Aug 2021 08:18:52 +0000 (09:18 +0100)]
testsuite: aarch64: Fix failing vector structure tests on big-endian

Recent refactoring of the arm_neon.h header enabled better code
generation for intrinsics that manipulate vector structures. New
tests were also added to verify the benefit of these changes. It now
transpires that the code generation improvements are observed only on
little-endian systems. This patch restricts the code generation tests
to little-endian targets.

gcc/testsuite/ChangeLog:

2021-08-04  Jonathan Wright  <jonathan.wright@arm.com>

* gcc.target/aarch64/vector_structure_intrinsics.c: Restrict
tests to little-endian targets.

3 years agoMAINTAINERS: Add myself for write after approval
Hongyu Wang [Mon, 9 Aug 2021 01:57:21 +0000 (09:57 +0800)]
MAINTAINERS: Add myself for write after approval

ChangeLog:

* MAINTAINERS (Write After Approval): Add myself.

3 years agoDaily bump.
GCC Administrator [Mon, 9 Aug 2021 00:16:32 +0000 (00:16 +0000)]
Daily bump.

3 years agolra: Fix s/otput/output/ typo in debug output
Sergei Trofimovich [Sun, 8 Aug 2021 20:35:12 +0000 (21:35 +0100)]
lra: Fix s/otput/output/ typo in debug output

gcc/
* lra-constraints.c: Fix s/otput/output/ typo.

3 years agolibstdc++: Fix dg-prune-output assertion message
François Dumont [Sun, 8 Aug 2021 16:52:19 +0000 (18:52 +0200)]
libstdc++: Fix dg-prune-output assertion message

Since __glibcxx_assert changes in r6b42b5a the generated assertion message
has changed.

libstdc++-v3/ChangeLog:

* testsuite/25_algorithms/copy/debug/constexpr_neg.cc: Replace 'failed_assertion'
dg-prune-output reason with 'builtin_unreachable'.
* testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc: Likewise.
* testsuite/25_algorithms/equal/debug/constexpr_neg.cc: Likewise.
* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc: Likewise.
* testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc: Likewise.
* testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc: Likewise.
* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc: Likewise.
* testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc: Likewise.
* testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc: Likewise.

3 years agoFix c6x test compromised by recent improvements to bswap & rotates
Jeff Law [Sun, 8 Aug 2021 15:20:41 +0000 (11:20 -0400)]
Fix c6x test compromised by recent improvements to bswap & rotates

gcc/testsuite
* gcc.target/tic6x/rotdi16-scan.c: Pull rotate into its own function.

3 years agolibstdc++: Tweak timeout for testsuite/std/ranges/iota/max_size_type.cc
Hans-Peter Nilsson [Sun, 8 Aug 2021 02:16:48 +0000 (04:16 +0200)]
libstdc++: Tweak timeout for testsuite/std/ranges/iota/max_size_type.cc

A simulator can easily spend more than 10 minutes running
this test-case, and the default timeout is at 5 minutes.
Better allow even slower machines; use 4 as the factor.

Regarding relative runtime numbers (very local; mmixware simulator for
mmix-knuth-mmixware): test01 and test05 finish momentarily; test02 at
about 2 minutes, and test03 about 2m30, but test04 itself runs for
more than 6 minues and so times out.

Not sure if it's better to split up this test, as the excessive
runtime may be unintended, but this seemed simplest.

libstdc++-v3:
* testsuite/std/ranges/iota/max_size_type.cc: Set
dg-timeout-factor to 4.

3 years agoDaily bump.
GCC Administrator [Sun, 8 Aug 2021 00:16:32 +0000 (00:16 +0000)]
Daily bump.

3 years agocompiler: support export/import of unsafe.Add/Slice
Ian Lance Taylor [Fri, 6 Aug 2021 19:01:04 +0000 (12:01 -0700)]
compiler: support export/import of unsafe.Add/Slice

For golang/go#19367
For golang/go#40481

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/340549

3 years agoFortran: ICE with automatic character object, save, and various options
Harald Anlauf [Sat, 7 Aug 2021 18:30:32 +0000 (20:30 +0200)]
Fortran: ICE with automatic character object, save, and various options

gcc/fortran/ChangeLog:

PR fortran/68568
* primary.c (gfc_expr_attr): Variable attribute can only be
inquired when symtree is non-NULL.

3 years agoAdd tests for PR tree-optimization/88531
H.J. Lu [Sat, 7 Aug 2021 14:29:04 +0000 (07:29 -0700)]
Add tests for PR tree-optimization/88531

PR tree-optimization/88531
* gcc.target/i386/pr88531-1a.c: New test.
* gcc.target/i386/pr88531-1b.c: Likewise.
* gcc.target/i386/pr88531-1c.c: Likewise.
* gcc.target/i386/pr88531-2a.c: Likewise.
* gcc.target/i386/pr88531-2b.c: Likewise.
* gcc.target/i386/pr88531-2c.c: Likewise.

3 years agoDaily bump.
GCC Administrator [Sat, 7 Aug 2021 00:16:39 +0000 (00:16 +0000)]
Daily bump.

3 years agoMove more code to new gimple-ssa-warn-access pass.
Martin Sebor [Fri, 6 Aug 2021 21:29:33 +0000 (15:29 -0600)]
Move more code to new gimple-ssa-warn-access pass.

gcc/ChangeLog:

* builtins.c (expand_builtin_memchr): Move to gimple-ssa-warn-access.cc.
(expand_builtin_strcat): Same.
(expand_builtin_stpncpy): Same.
(expand_builtin_strncat): Same.
(check_read_access): Same.
(check_memop_access): Same.
(expand_builtin_strlen): Move checks to gimple-ssa-warn-access.cc.
(expand_builtin_strnlen): Same.
(expand_builtin_memcpy): Same.
(expand_builtin_memmove): Same.
(expand_builtin_mempcpy): Same.
(expand_builtin_strcpy): Same.
(expand_builtin_strcpy_args): Same.
(expand_builtin_stpcpy_1): Same.
(expand_builtin_strncpy): Same.
(expand_builtin_memset): Same.
(expand_builtin_bzero): Same.
(expand_builtin_strcmp): Same.
(expand_builtin_strncmp): Same.
(expand_builtin): Remove handlers.
(fold_builtin_strlen): Add a comment.
* builtins.h (check_access): Move to gimple-ssa-warn-access.cc.
* calls.c (maybe_warn_nonstring_arg): Same.
* diagnostic-spec.c (nowarn_spec_t::nowarn_spec_t): Add warning option.
* gimple-fold.c (gimple_fold_builtin_strcpy): Pass argument to callee.
(gimple_fold_builtin_stpcpy): Same.
* gimple-ssa-warn-access.cc (has_location): New function.
(get_location): Same.
(get_callee_fndecl): Same.
(call_nargs): Same.
(call_arg): Same.
(warn_string_no_nul): Define.
(unterminated_array): Same.
(check_nul_terminated_array): Same.
(maybe_warn_nonstring_arg): Same.
(maybe_warn_for_bound): Same.
(warn_for_access): Same.
(check_access): Same.
(check_memop_access): Same.
(check_read_access): Same.
(warn_dealloc_offset): Use helper functions.
(maybe_emit_free_warning): Same.
(class pass_waccess): Add members.
(check_strcat): New function.
(check_strncat): New function.
(check_stxcpy): New function.
(check_stxncpy): New function.
(check_strncmp): New function.
(pass_waccess::check_builtin): New function.
(pass_waccess::check): Call it.
* gimple-ssa-warn-access.h (warn_string_no_nul): Move here from
builtins.h.
(maybe_warn_for_bound): Same.
(check_access): Same.
(check_memop_access): Same.
(check_read_access): Same.
* pointer-query.h (struct access_data): Define a ctor overload.

gcc/testsuite/ChangeLog:

* c-c++-common/Wsizeof-pointer-memaccess1.c: Also disable
-Wstringop-overread.
* c-c++-common/attr-nonstring-3.c: Adjust pattern of expected message.
* gcc.dg/Warray-bounds-39.c: Add an xfail due to a known bug.
* gcc.dg/Wstring-compare-3.c: Also disable -Wstringop-overread.
* gcc.dg/attr-nonstring-2.c: Adjust pattern of expected message.
* gcc.dg/attr-nonstring-4.c: Same.
* gcc.dg/Wstringop-overread-6.c: New test.
* gcc.dg/sso-14.c: Fix typos to avoid buffer overflow.

3 years agocompiler: make escape analysis more strict about runtime calls
Cherry Mui [Fri, 6 Aug 2021 15:03:47 +0000 (11:03 -0400)]
compiler: make escape analysis more strict about runtime calls

Following the previous CL, in the escape analysis list all the
expected runtime calls, and fail if an unexpected one is seen.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/340397

3 years agoarm: Fix pr69245.c testcase for reorder assembler architecture directives [PR101723]
Christophe Lyon [Fri, 6 Aug 2021 14:25:47 +0000 (14:25 +0000)]
arm: Fix pr69245.c testcase for reorder assembler architecture directives [PR101723]

In gcc.target/arm/pr69245.c, to have a .fpu neon-vfpv4 directive, make
sure code for fn1() is emitted, by removing the static keyword.

Fix a typo in gcc.target/arm/pr69245.c, where \s should be \\s.

2021-08-06  Christophe Lyon  <christophe.lyon@foss.st.com>

gcc/testsuite/

PR target/101723
* gcc.target/arm/pr69245.c: Make sure to emit code for fn1, fix
typo.

3 years agoarm: Fix typos for reorder assembler architecture directives [PR101723]
Christophe Lyon [Fri, 6 Aug 2021 14:06:44 +0000 (14:06 +0000)]
arm: Fix typos for reorder assembler architecture directives [PR101723]

Two tests had typos preventing them from passing, committed as obvious.

2021-08-06  Christophe Lyon  <christophe.lyon@foss.st.com>

gcc/testsuite/
PR target/101723
* gcc.target/arm/attr-neon3.c: Fix typo.
* gcc.target/arm/pragma_fpu_attribute_2.c: Fix typo.

3 years agotree-optimization/101801 - remove vect_worthwhile_without_simd_p
Richard Biener [Fri, 6 Aug 2021 12:39:05 +0000 (14:39 +0200)]
tree-optimization/101801 - remove vect_worthwhile_without_simd_p

This removes the cost part of vect_worthwhile_without_simd_p, retaining
only the correctness bits.  The reason is that the cost heuristic
do not properly account for SLP plus the check whether "without simd"
applies misfires for AVX512 mask vectors at the moment, leading to
missed vectorizations there.

Any costing decision should take place in the cost modeling, no
single stmt is to disable all vectorization on its own.

2021-08-06  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101801
* tree-vectorizer.h (vect_worthwhile_without_simd_p): Rename...
(vect_can_vectorize_without_simd_p): ... to this.
* tree-vect-loop.c (vect_worthwhile_without_simd_p): Rename...
(vect_can_vectorize_without_simd_p): ... to this and fold
in vect_min_worthwhile_factor.
(vect_min_worthwhile_factor): Remove.
(vectorizable_reduction): Adjust and remove the cost part.
* tree-vect-stmts.c (vectorizable_shift): Likewise.
(vectorizable_operation): Likewise.

3 years agolibstdc++: Also move the [[nodiscard]] attributes in <compare>
Jonathan Wakely [Fri, 6 Aug 2021 12:43:26 +0000 (13:43 +0100)]
libstdc++: Also move the [[nodiscard]] attributes in <compare>

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* libsupc++/compare (compare_three_way, strong_order)
(weak_order, partial_order, compare_strong_order_fallback)
(compare_weak_order_fallback, compare_partial_order_fallback):
Move nodiscard attributes to correct location.

3 years agoi386: Fix conditional move reg-to-reg move elimination peepholes [PR101797]
Uros Bizjak [Fri, 6 Aug 2021 12:21:27 +0000 (14:21 +0200)]
i386: Fix conditional move reg-to-reg move elimination peepholes [PR101797]

Add missing operand predicate, otherwise any RTX will match.

2021-08-06  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/101797
* config/i386/i386.md (cmove reg-to-reg move elimination peephole2s):
Add general_gr_operand predicate to operand 3.

gcc/testsuite/
PR target/101797
* gcc.target/i386/pr101797.c: New test.

3 years agoUse CFN_BUILT_IN_CLRSB instead of BUILT_IN_CLRSB in switch.
Roger Sayle [Fri, 6 Aug 2021 11:30:53 +0000 (12:30 +0100)]
Use CFN_BUILT_IN_CLRSB instead of BUILT_IN_CLRSB in switch.

This patch replaces the use of BUILT_IN_CLRSB with CFN_BUILT_IN_CLRSB
in my recent patch to tree-ssa-phiopt.c.  Both of these have identical
values, so there's no change in behavior, but consistent use of the same
enumeration avoids warnings when using clang (or static analysis tools).

2021-08-06  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* tree-ssa-phiopt.c (cond_removal_in_builtin_zero_pattern): Use
CFN_BUILT_IN_CLRSB* instead of BUILT_IN_CLRSB* for consistency.

3 years agomiddle-end/AArch64: Fix bootstrap after vec changes
Tamar Christina [Fri, 6 Aug 2021 11:21:05 +0000 (12:21 +0100)]
middle-end/AArch64: Fix bootstrap after vec changes

The build is broken since a3d3e8c362c2 since it's deleted the ability to pass
vec<> by value and now must be past by reference.

However some language hooks used by AArch64 were not updated and breaks the
build on AArch64.  This patch updates these hooks.

gcc/c/ChangeLog:

* c-decl.c (c_simulate_enum_decl): Pass vec<> by pointer.
* c-tree.h (c_simulate_enum_decl): Likewise.

gcc/ChangeLog:

* config/aarch64/aarch64-sve-builtins.cc (register_svpattern,
register_svprfop): Pass vec<> by pointer.
* langhooks-def.h (lhd_simulate_enum_decl): Likewise.
* langhooks.c (lhd_simulate_enum_decl): Likewise.
* langhooks.h (struct lang_hooks_for_types): Likewise.

gcc/cp/ChangeLog:

* cp-objcp-common.h (cxx_simulate_enum_decl): Pass vec<> by pointer.
* decl.c (cxx_simulate_enum_decl): Likewise.

3 years agogcov: Remove <stdint.h> from libgcov-driver.c
Sebastian Huber [Fri, 6 Aug 2021 07:57:43 +0000 (09:57 +0200)]
gcov: Remove <stdint.h> from libgcov-driver.c

In the patch to add __gcov_info_to_gcda(), the include of <stdint.h> was added
to libgcov-driver.c even if inhibit_libc is defined.  It turned out that this
header file is not always available.  Remove the include of <stdint.h> and
replace the intptr_t with the compiler provided __INTPTR_TYPE__.

libgcc/

* libgcov-driver.c (#include <stdint.h>): Remove.
(write_topn_counters): Use __INTPTR_TYPE__ instead of intptr_t.

3 years agoaarch64: Use memcpy to copy structures in bfloat vst* intrinsics
Jonathan Wright [Fri, 30 Jul 2021 14:30:19 +0000 (15:30 +0100)]
aarch64: Use memcpy to copy structures in bfloat vst* intrinsics

Use __builtin_memcpy to copy vector structures instead of using a
union - or constructing a new opaque structure one vector at a time -
in each of the vst[234][q] and vst1[q]_x[234] bfloat Neon intrinsics
in arm_neon.h.

Add new code generation tests to verify that superfluous move
instructions are not generated for the vst[234]q or vst1q_x[234]
bfloat intrinsics.

gcc/ChangeLog:

2021-07-30  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/arm_neon.h (vst1_bf16_x2): Use
__builtin_memcpy instead of constructing an additional
__builtin_aarch64_simd_oi one vector at a time.
(vst1q_bf16_x2): Likewise.
(vst1_bf16_x3): Use __builtin_memcpy instead of constructing
an additional __builtin_aarch64_simd_ci one vector at a time.
(vst1q_bf16_x3): Likewise.
(vst1_bf16_x4): Use __builtin_memcpy instead of a union.
(vst1q_bf16_x4): Likewise.
(vst2_bf16): Use __builtin_memcpy instead of constructing an
additional __builtin_aarch64_simd_oi one vector at a time.
(vst2q_bf16): Likewise.
(vst3_bf16): Use __builtin_memcpy instead of constructing an
additional __builtin_aarch64_simd_ci mode one vector at a
time.
(vst3q_bf16): Likewise.
(vst4_bf16): Use __builtin_memcpy instead of constructing an
additional __builtin_aarch64_simd_xi one vector at a time.
(vst4q_bf16): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/vector_structure_intrinsics.c: Add new
tests.

3 years agoaarch64: Use memcpy to copy structures in vst2[q]_lane intrinsics
Jonathan Wright [Fri, 30 Jul 2021 10:29:45 +0000 (11:29 +0100)]
aarch64: Use memcpy to copy structures in vst2[q]_lane intrinsics

Use __builtin_memcpy to copy vector structures instead of using a
union - or constructing a new opaque structure one vector at a time -
in each of the vst2[q]_lane Neon intrinsics in arm_neon.h.

Add new code generation tests to verify that superfluous move
instructions are not generated for the vst2q_lane intrinsics.

gcc/ChangeLog:

2021-07-30  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/arm_neon.h (__ST2_LANE_FUNC): Delete.
(__ST2Q_LANE_FUNC): Delete.
(vst2_lane_f16): Use __builtin_memcpy to copy vector
structure instead of constructing __builtin_aarch64_simd_oi
one vector at a time.
(vst2_lane_f32): Likewise.
(vst2_lane_f64): Likewise.
(vst2_lane_p8): Likewise.
(vst2_lane_p16): Likewise.
(vst2_lane_p64): Likewise.
(vst2_lane_s8): Likewise.
(vst2_lane_s16): Likewise.
(vst2_lane_s32): Likewise.
(vst2_lane_s64): Likewise.
(vst2_lane_u8): Likewise.
(vst2_lane_u16): Likewise.
(vst2_lane_u32): Likewise.
(vst2_lane_u64): Likewise.
(vst2_lane_bf16): Likewise.
(vst2q_lane_f16): Use __builtin_memcpy to copy vector
structure instead of using a union.
(vst2q_lane_f32): Likewise.
(vst2q_lane_f64): Likewise.
(vst2q_lane_p8): Likewise.
(vst2q_lane_p16): Likewise.
(vst2q_lane_p64): Likewise.
(vst2q_lane_s8): Likewise.
(vst2q_lane_s16): Likewise.
(vst2q_lane_s32): Likewise.
(vst2q_lane_s64): Likewise.
(vst2q_lane_u8): Likewise.
(vst2q_lane_u16): Likewise.
(vst2q_lane_u32): Likewise.
(vst2q_lane_u64): Likewise.
(vst2q_lane_bf16): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/vector_structure_intrinsics.c: Add new
tests.

3 years agoaarch64: Use memcpy to copy structures in vst3[q]_lane intrinsics
Jonathan Wright [Fri, 30 Jul 2021 09:33:08 +0000 (10:33 +0100)]
aarch64: Use memcpy to copy structures in vst3[q]_lane intrinsics

Use __builtin_memcpy to copy vector structures instead of using a
union - or constructing a new opaque structure one vector at a time -
in each of the vst3[q]_lane Neon intrinsics in arm_neon.h.

Add new code generation tests to verify that superfluous move
instructions are not generated for the vst3q_lane intrinsics.

gcc/ChangeLog:

2021-07-30  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/arm_neon.h (__ST3_LANE_FUNC): Delete.
(__ST3Q_LANE_FUNC): Delete.
(vst3_lane_f16): Use __builtin_memcpy to copy vector
structure instead of constructing __builtin_aarch64_simd_ci
one vector at a time.
(vst3_lane_f32): Likewise.
(vst3_lane_f64): Likewise.
(vst3_lane_p8): Likewise.
(vst3_lane_p16): Likewise.
(vst3_lane_p64): Likewise.
(vst3_lane_s8): Likewise.
(vst3_lane_s16): Likewise.
(vst3_lane_s32): Likewise.
(vst3_lane_s64): Likewise.
(vst3_lane_u8): Likewise.
(vst3_lane_u16): Likewise.
(vst3_lane_u32): Likewise.
(vst3_lane_u64): Likewise.
(vst3_lane_bf16): Likewise.
(vst3q_lane_f16): Use __builtin_memcpy to copy vector
structure instead of using a union.
(vst3q_lane_f32): Likewise.
(vst3q_lane_f64): Likewise.
(vst3q_lane_p8): Likewise.
(vst3q_lane_p16): Likewise.
(vst3q_lane_p64): Likewise.
(vst3q_lane_s8): Likewise.
(vst3q_lane_s16): Likewise.
(vst3q_lane_s32): Likewise.
(vst3q_lane_s64): Likewise.
(vst3q_lane_u8): Likewise.
(vst3q_lane_u16): Likewise.
(vst3q_lane_u32): Likewise.
(vst3q_lane_u64): Likewise.
(vst3q_lane_bf16): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/vector_structure_intrinsics.c: Add new
tests.

3 years agoaarch64: Use memcpy to copy structures in vst4[q]_lane intrinsics
Jonathan Wright [Thu, 29 Jul 2021 11:24:17 +0000 (12:24 +0100)]
aarch64: Use memcpy to copy structures in vst4[q]_lane intrinsics

Use __builtin_memcpy to copy vector structures instead of using a
union - or constructing a new opaque structure one vector at a time -
in each of the vst4[q]_lane Neon intrinsics in arm_neon.h.

Add new code generation tests to verify that superfluous move
instructions are not generated for the vst4q_lane intrinsics.

gcc/ChangeLog:

2021-07-29  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/arm_neon.h (__ST4_LANE_FUNC): Delete.
(__ST4Q_LANE_FUNC): Delete.
(vst4_lane_f16): Use __builtin_memcpy to copy vector
structure instead of constructing __builtin_aarch64_simd_xi
one vector at a time.
(vst4_lane_f32): Likewise.
(vst4_lane_f64): Likewise.
(vst4_lane_p8): Likewise.
(vst4_lane_p16): Likewise.
(vst4_lane_p64): Likewise.
(vst4_lane_s8): Likewise.
(vst4_lane_s16): Likewise.
(vst4_lane_s32): Likewise.
(vst4_lane_s64): Likewise.
(vst4_lane_u8): Likewise.
(vst4_lane_u16): Likewise.
(vst4_lane_u32): Likewise.
(vst4_lane_u64): Likewise.
(vst4_lane_bf16): Likewise.
(vst4q_lane_f16): Use __builtin_memcpy to copy vector
structure instead of using a union.
(vst4q_lane_f32): Likewise.
(vst4q_lane_f64): Likewise.
(vst4q_lane_p8): Likewise.
(vst4q_lane_p16): Likewise.
(vst4q_lane_p64): Likewise.
(vst4q_lane_s8): Likewise.
(vst4q_lane_s16): Likewise.
(vst4q_lane_s32): Likewise.
(vst4q_lane_s64): Likewise.
(vst4q_lane_u8): Likewise.
(vst4q_lane_u16): Likewise.
(vst4q_lane_u32): Likewise.
(vst4q_lane_u64): Likewise.
(vst4q_lane_bf16): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/vector_structure_intrinsics.c: Add new
tests.

3 years agors6000: Fix restored rs6000_long_double_type_size
Martin Liska [Tue, 1 Jun 2021 13:39:14 +0000 (15:39 +0200)]
rs6000: Fix restored rs6000_long_double_type_size

As mentioned in the "Fallout: save/restore target options in handle_optimize_attribute"
thread, we need to support target option restore
of rs6000_long_double_type_size == FLOAT_PRECISION_TFmode.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_option_override_internal): When
a target option is restored, it can have
rs6000_long_double_type_size set to FLOAT_PRECISION_TFmode
and error should not be emitted.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pragma-optimize.c: New test.

3 years agoFixup gfortran.dg/vect/vect-8.f90 for aarch64
Richard Biener [Fri, 6 Aug 2021 06:42:43 +0000 (08:42 +0200)]
Fixup gfortran.dg/vect/vect-8.f90 for aarch64

With the emulated gather changes we now consistently vectorize
for aarch64 and we can remove the SVE special-casing.

2021-08-06  Richard Biener  <rguenther@suse.de>

* gfortran.dg/vect/vect-8.f90: Simplify aarch64 scanning.