180044 Commits

Author SHA1 Message Date
Alexandre Oliva
8f8cba46b8 Rework the condition variables support for VxWorks
This change reworks the condition variables support for VxWorks
to address the very legit points raised by Rasmus in

 https://gcc.gnu.org/pipermail/gcc/2020-May/232524.html

While some of the issues were taken care of by the use of semFlush,
a few others were indeed calling for adjustments.

We first considered resorting to the condvarLib library available
in VxWorks7. Unfortunately, it is vx7 only and we wanted something working
for at least vx 6.9 as well. It also turned out requiring the use of
recursive mutexes for condVarWait, which seemed unnecessarily constraining.

Instead, this change corrects the sequencing logic in a few places and
leverages the semExchange API to ensure the key atomicity requirement on
cond_wait operations.

2020-10-14  Alexandre Oliva  <oliva@adacore.com>

libgcc/
	* config/gthr-vxworks-thread.c: Include stdlib.h.
	(tls_delete_hook): Prototype it.
	(__gthread_cond_signal): Return early if no waiters.  Consume
	signal in case the semaphore got full.  Use semInfoGet instead
	of kernel-mode-only semInfo.
	(__gthread_cond_timedwait): Use semExchange.  Always take the
	mutex again before returning.
	* config/gthr-vxworks-cond.c (__ghtread_cond_wait): Likewise.
2020-10-14 19:24:45 +00:00
Sunil K Pandey
93103603fd x86: Add missing intrinsics [PR95483]
Tested on x86-64.

gcc/ChangeLog:

	PR target/95483
	* config/i386/avx2intrin.h (_mm_broadcastsi128_si256): New intrinsics.
	(_mm_broadcastsd_pd): Ditto.
	* config/i386/avx512bwintrin.h (_mm512_loadu_epi16): New intrinsics.
	(_mm512_storeu_epi16): Ditto.
	(_mm512_loadu_epi8): Ditto.
	(_mm512_storeu_epi8): Ditto.
	* config/i386/avx512dqintrin.h (_mm_reduce_round_sd): New intrinsics.
	(_mm_mask_reduce_round_sd): Ditto.
	(_mm_maskz_reduce_round_sd): Ditto.
	(_mm_reduce_round_ss): Ditto.
	(_mm_mask_reduce_round_ss): Ditto.
	(_mm_maskz_reduce_round_ss): Ditto.
	(_mm512_reduce_round_pd): Ditto.
	(_mm512_mask_reduce_round_pd): Ditto.
	(_mm512_maskz_reduce_round_pd): Ditto.
	(_mm512_reduce_round_ps): Ditto.
	(_mm512_mask_reduce_round_ps): Ditto.
	(_mm512_maskz_reduce_round_ps): Ditto.
	* config/i386/avx512erintrin.h
	(_mm_mask_rcp28_round_sd): New intrinsics.
	(_mm_maskz_rcp28_round_sd): Ditto.
	(_mm_mask_rcp28_round_ss): Ditto.
	(_mm_maskz_rcp28_round_ss): Ditto.
	(_mm_mask_rsqrt28_round_sd): Ditto.
	(_mm_maskz_rsqrt28_round_sd): Ditto.
	(_mm_mask_rsqrt28_round_ss): Ditto.
	(_mm_maskz_rsqrt28_round_ss): Ditto.
	(_mm_mask_rcp28_sd): Ditto.
	(_mm_maskz_rcp28_sd): Ditto.
	(_mm_mask_rcp28_ss): Ditto.
	(_mm_maskz_rcp28_ss): Ditto.
	(_mm_mask_rsqrt28_sd): Ditto.
	(_mm_maskz_rsqrt28_sd): Ditto.
	(_mm_mask_rsqrt28_ss): Ditto.
	(_mm_maskz_rsqrt28_ss): Ditto.
	* config/i386/avx512fintrin.h (_mm_mask_sqrt_sd): New intrinsics.
	(_mm_maskz_sqrt_sd): Ditto.
	(_mm_mask_sqrt_ss): Ditto.
	(_mm_maskz_sqrt_ss): Ditto.
	(_mm_mask_scalef_sd): Ditto.
	(_mm_maskz_scalef_sd): Ditto.
	(_mm_mask_scalef_ss): Ditto.
	(_mm_maskz_scalef_ss): Ditto.
	(_mm_mask_cvt_roundsd_ss): Ditto.
	(_mm_maskz_cvt_roundsd_ss): Ditto.
	(_mm_mask_cvt_roundss_sd): Ditto.
	(_mm_maskz_cvt_roundss_sd): Ditto.
	(_mm_mask_cvtss_sd): Ditto.
	(_mm_maskz_cvtss_sd): Ditto.
	(_mm_mask_cvtsd_ss): Ditto.
	(_mm_maskz_cvtsd_ss): Ditto.
	(_mm512_cvtsi512_si32): Ditto.
	(_mm_cvtsd_i32): Ditto.
	(_mm_cvtss_i32): Ditto.
	(_mm_cvti32_sd): Ditto.
	(_mm_cvti32_ss): Ditto.
	(_mm_cvtsd_i64): Ditto.
	(_mm_cvtss_i64): Ditto.
	(_mm_cvti64_sd): Ditto.
	(_mm_cvti64_ss): Ditto.
	* config/i386/avx512vlbwintrin.h (_mm256_storeu_epi8): New intrinsics.
	(_mm_storeu_epi8): Ditto.
	(_mm256_loadu_epi16): Ditto.
	(_mm_loadu_epi16): Ditto.
	(_mm256_loadu_epi8): Ditto.
	(_mm_loadu_epi8): Ditto.
	(_mm256_storeu_epi16): Ditto.
	(_mm_storeu_epi16): Ditto.
	* config/i386/avx512vlintrin.h (_mm256_load_epi64): New intrinsics.
	(_mm_load_epi64): Ditto.
	(_mm256_load_epi32): Ditto.
	(_mm_load_epi32): Ditto.
	(_mm256_store_epi32): Ditto.
	(_mm_store_epi32): Ditto.
	(_mm256_loadu_epi64): Ditto.
	(_mm_loadu_epi64): Ditto.
	(_mm256_loadu_epi32): Ditto.
	(_mm_loadu_epi32): Ditto.
	(_mm256_mask_cvt_roundps_ph): Ditto.
	(_mm256_maskz_cvt_roundps_ph): Ditto.
	(_mm_mask_cvt_roundps_ph): Ditto.
	(_mm_maskz_cvt_roundps_ph): Ditto.
	* config/i386/avxintrin.h (_mm256_cvtsi256_si32): New intrinsics.
	* config/i386/emmintrin.h (_mm_loadu_si32): New intrinsics.
	(_mm_loadu_si16): Ditto.
	(_mm_storeu_si32): Ditto.
	(_mm_storeu_si16): Ditto.
	* config/i386/i386-builtin-types.def
	(V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT): Add new type.
	(V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT): Ditto.
	(V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT): Ditto.
	(V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT): Ditto.
	* config/i386/i386-builtin.def
	(__builtin_ia32_cvtsd2ss_mask_round): New builtin.
	(__builtin_ia32_cvtss2sd_mask_round): Ditto.
	(__builtin_ia32_rcp28sd_mask_round): Ditto.
	(__builtin_ia32_rcp28ss_mask_round): Ditto.
	(__builtin_ia32_rsqrt28sd_mask_round): Ditto.
	(__builtin_ia32_rsqrt28ss_mask_round): Ditto.
	(__builtin_ia32_reducepd512_mask_round): Ditto.
	(__builtin_ia32_reduceps512_mask_round): Ditto.
	(__builtin_ia32_reducesd_mask_round): Ditto.
	(__builtin_ia32_reducess_mask_round): Ditto.
	* config/i386/i386-expand.c
	(ix86_expand_round_builtin): Expand round builtin for new type.
	(V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT)
	(V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT)
	(V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT)
	(V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT)
	* config/i386/mmintrin.h ()
	Define datatype __m32 and __m16.
	Define datatype __m32_u and __m16_u.
	* config/i386/sse.md: Adjust pattern.
	(<mask_codefor>reducep<mode><mask_name><round_saeonly_name>): Adjust.
	(reduces<mode><mask_scalar_name><round_saeonly_scalar_name>): Ditto.
	(sse2_cvtsd2ss<mask_name><round_name>): Ditto.
	(sse2_cvtss2sd<mask_name><round_saeonly_name>): Ditto.
	(avx512er_vmrcp28<mode><mask_name><round_saeonly_name>): Ditto.
	(avx512er_vmrsqrt28<mode><mask_name><round_saeonly_name>): Ditto.

gcc/testsuite/ChangeLog:

	PR target/95483
	* gcc.target/i386/avx-1.c: Add test.
	* gcc.target/i386/avx2-vbroadcastsi128-1.c: Ditto.
	* gcc.target/i386/avx2-vbroadcastsi128-2.c: Ditto.
	* gcc.target/i386/avx512bw-vmovdqu16-1.c: Ditto.
	* gcc.target/i386/avx512bw-vmovdqu8-1.c: Ditto.
	* gcc.target/i386/avx512dq-vreducesd-1.c: Ditto.
	* gcc.target/i386/avx512dq-vreducesd-2.c: Ditto.
	* gcc.target/i386/avx512dq-vreducess-1.c: Ditto.
	* gcc.target/i386/avx512dq-vreducess-2.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28sd-1.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28sd-2.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28ss-1.c: Ditto.
	* gcc.target/i386/avx512er-vrcp28ss-2.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28sd-1.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28sd-2.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28ss-1.c: Ditto.
	* gcc.target/i386/avx512er-vrsqrt28ss-2.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsd2ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2sd64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2ss-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtsi2ss64-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2sd-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2si-1.c: Ditto.
	* gcc.target/i386/avx512f-vcvtss2si64-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vscalefss-1.c: Ditto.
	* gcc.target/i386/avx512f-vscalefss-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtsd-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtsd-2.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtss-1.c: Ditto.
	* gcc.target/i386/avx512f-vsqrtss-2.c: Ditto.
	* gcc.target/i386/avx512vl-vmovdqa32-1.c: Ditto.
	* gcc.target/i386/avx512vl-vmovdqa64-1.c: Ditto.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/avx512dq-vreducepd-3.c: New test.
	* gcc.target/i386/avx512dq-vreducepd-4.c: New test.
	* gcc.target/i386/avx512dq-vreduceps-3.c: New test.
	* gcc.target/i386/avx512dq-vreduceps-4.c: New test.
	* gcc.target/i386/avx512f-vcvtsi2sd-1.c: New test.
	* gcc.target/i386/pr95483-1.c: New test.
	* gcc.target/i386/pr95483-2.c: New test.
	* gcc.target/i386/pr95483-3.c: New test.
	* gcc.target/i386/pr95483-4.c: New test.
	* gcc.target/i386/pr95483-5.c: New test.
	* gcc.target/i386/pr95483-6.c: New test.
	* gcc.target/i386/pr95483-7.c: New test.
2020-10-14 11:37:38 -07:00
Olivier Hainque
2fca6a9817 Fix the VX_CPU selection for -mcpu=xscale on arm-vxworks
This fixlet makes sure -mcpu=xscale selects the correct VX_CPU.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/arm/vxworks.h (TARGET_OS_CPP_BUILTINS): Fix
	the VX_CPU selection for -mcpu=xscale on arm-vxworks.
2020-10-14 18:13:54 +00:00
Jonathan Wakely
78198b6021 libstdc++: Fix unspecified comparison to null pointer [PR 97415]
The standard doesn't guarantee that null pointers compare less than
non-null pointers. AddressSanitizer complains about the pptr()> egptr()
comparison in basic_stringbuf::str() when egptr() is null.

libstdc++-v3/ChangeLog:

	PR libstdc++/97415
	* include/std/sstream (basic_stringbuf::str()): Check for
	null egptr() before comparing to non-null pptr().
2020-10-14 18:55:14 +01:00
Olivier Hainque
5b00bcc543 Rework CPP_BUILTINS_SPEC for powerpc-vxworks
This change reworks CPP_BUILTINS_SPEC for powerpc-vxworks to
prepare for the upcoming addition of 32 and 64 bit ports for
VxWorks 7r2.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/rs6000/vxworks.h (TARGET_OS_CPP_BUILTINS): Accommodate
	expectations from different versions of VxWorks, for 32 or 64bit
	configurations.
2020-10-14 17:38:38 +00:00
Olivier Hainque
d00f8b4056 Fallback to default CPP spec for C++ on VxWorks
Arrange to inhibit the effects of CPLUSPLUS_CPP_SPEC in gnu-user.h,
which #defines _GNU_SOURCE, which is invalid for VxWorks (possibly
not providing ::mkstemp, for example).

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/vxworks.h: #undef CPLUSPLUS_CPP_SPEC.
2020-10-14 17:38:38 +00:00
Olivier Hainque
69d6b3f650 Honor $(MULTISUBDIR) in -I directives for libgcc on VxWorks
This is useful to handle ports where we might arrange to use
different sets of fixed headers for different multilibs, typically
for kernel vs rtp modes.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

libgcc/
	* config/t-vxworks (LIBGCC2_INCLUDES): Append
	$(MULTISUBDIR) to the -I path for fixed headers, as we
	arrange to have different sets of such headers for different
	multilibs when they are activated.
	* config/t-vxworks7: Likewise.
2020-10-14 17:38:37 +00:00
Olivier Hainque
e4b887cb76 Add include-fixed to include search paths for libgcc on VxWorks
The special vxworks rules for the compilation of libgcc had
-I.../gcc/include and not .../gcc/include-fixed, causing build
failure of our arm-vxworks7r2 port because of indirect dependencies
on limits.h.

The omission was just an oversight and this change just adds the
missing -I.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

libgcc/
	* config/t-vxworks: Add include-fixed to include search
	paths for libgcc on VxWorks.
	* config/t-vxworks7: Likewise.
2020-10-14 17:38:37 +00:00
Olivier Hainque
b3f1fef1f0 Adjust the VxWorks alternative LIMITS_H guard for glimits.h
This is a minor adjustment to the vxworks specific macro name
used to guard the header file contents, to make it closer to the
original one and easier to search for.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/t-vxworks: Adjust the VxWorks alternative LIMITS_H guard
	for glimits.h, make it both closer to the previous one and easier to
	search for.
2020-10-14 17:38:37 +00:00
Nathan Sidwell
068644a149 c++: DECL_FRIEND_P cleanup
DECL_FRIEND_P's meaning has changed over time.  It now (almost) means
the the friend function decl has not been met via an explicit decl.
This completes that transition, renaming it to DECL_UNIQUE_FRIEND_P,
so one doesn't think it is the sole indicator of friendliness (plenty
of friends do not have the flag set).  This allows reduction in the
complexity of managing the field -- all in duplicate_decls now.

	gcc/cp/
	* cp-tree.h (struct lang_decl_fn): Adjust context comment.
	(DECL_FRIEND_P): Replace with ...
	(DECL_UNIQUE_FRIEND_P): ... this.  Only for FUNCTION_DECLs.
	(DECL_FRIEND_CONTEXT): Adjust.
	* class.c (add_implicitly_declared_members): Detect friendly
	spaceship from context.
	* constraint.cc (remove_constraints): Use a checking assert.
	(maybe_substitute_reqs_for): Use DECL_UNIQUE_FRIEND_P.
	* decl.c (check_no_redeclaration_friend_default_args):
	DECL_UNIQUE_FRIEND_P is signficant, not hiddenness.
	(duplicate_decls): Adjust DECL_UNIQUE_FRIEND_P clearing.
	(redeclaration_error_message): Use DECL_UNIQUE_FRIEND_P.
	(start_preparsed_function): Correct in-class friend processing.
	Refactor some initializers.
	(grokmethod): Directly check friend decl-spec.
	* decl2.c (grokfield): Check DECL_UNIQUE_FRIEND_P.
	* friend.c (do_friend): Set DECL_UNIQUE_FRIEND_P first, remove
	extraneous conditions.  Don't re set it afterwards.
	* name-lookup.c (lookup_elaborated_type_1): Simplify revealing
	code.
	(do_pushtag): Likewise.
	* pt.c (optimize_specialization_lookup_p): Check
	DECL_UNIQUE_FRIEND_P.
	(push_template_decl): Likewise.  Drop unneeded friend setting.
	(type_dependent_expression_p): Check DECL_UNIQUE_FRIEND_P.
	libcc1/
	* libcp1plugin.cc (plugin_add_friend): Set DECL_UNIQUE_FRIEND_P.
2020-10-14 10:04:18 -07:00
Jakub Jelinek
06bec55e80 i386: Improve chaining of _{addcarry,subborrow}_u{32,64} [PR97387]
These builtins have two known issues and this patch fixes one of them.

One issue is that the builtins effectively return two results and
they make the destination addressable until expansion, which means
a stack slot is allocated for them and e.g. with -fstack-protector*
DSE isn't able to optimize that away.  I think for that we want to use
the technique of returning complex value; the patch doesn't handle that
though.  See PR93990 for that.

The other problem is optimization of successive uses of the builtin
e.g. for arbitrary precision arithmetic additions/subtractions.
As shown PR93990, combine is able to optimize the case when the first
argument to these builtins is 0 (the first instance when several are used
together), and also the last one if the last one ignores its result (i.e.
the carry/borrow is dead and thrown away in that case).
As shown in this PR, combiner refuses to optimize the rest, where it sees:
(insn 10 9 11 2 (set (reg:QI 88 [ _31 ])
        (ltu:QI (reg:CCC 17 flags)
            (const_int 0 [0]))) "include/adxintrin.h":69:10 785 {*setcc_qi}
     (expr_list:REG_DEAD (reg:CCC 17 flags)
        (nil)))
- set pseudo 88 to CF from flags, then some uninteresting insns that
don't modify flags, and finally:
(insn 17 15 18 2 (parallel [
            (set (reg:CCC 17 flags)
                (compare:CCC (plus:QI (reg:QI 88 [ _31 ])
                        (const_int -1 [0xffffffffffffffff]))
                    (reg:QI 88 [ _31 ])))
            (clobber (scratch:QI))
        ]) "include/adxintrin.h":69:10 350 {*addqi3_cconly_overflow_1}
     (expr_list:REG_DEAD (reg:QI 88 [ _31 ])
        (nil)))
to set CF in flags back to what we saved earlier.  The combiner just punts
trying to combine the 10, 17 and following addcarrydi (etc.) instruction,
because
  if (i1 && !can_combine_p (i1, i3, i0, NULL, i2, NULL, &i1dest, &i1src))
    {
      if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "Can't combine i1 into i3\n");
      undo_all ();
      return 0;
    }
fails - the 3 insns aren't all adjacent and
      || (! all_adjacent
          && (((!MEM_P (src)
                || ! find_reg_note (insn, REG_EQUIV, src))
               && modified_between_p (src, insn, i3))
src (flags hard register) is modified between the first and third insn - in
the second insn.

The following patch optimizes this by optimizing just the two insns,
10 and 17 above, i.e. save CF into pseudo, set CF from that pseudo, into
a nop.  The new define_insn_and_split matches how combine simplifies those
two together (except without the ix86_cc_mode change it was choosing CCmode
for the destination instead of CCCmode, so had to change that function too,
and also adjust costs so that combiner understand it is beneficial).

With this, all the testcases are optimized, so that the:
        setc    %dl
...
        addb    $-1, %dl
insns in between the ad[dc][lq] or s[ub]b[lq] instructions are all optimized
away (sure, if something would clobber flags in between they wouldn't, but
there is nothing that can be done about that).

2020-10-14  Jakub Jelinek  <jakub@redhat.com>

	PR target/97387
	* config/i386/i386.md (CC_CCC): New mode iterator.
	(*setcc_qi_addqi3_cconly_overflow_1_<mode>): New
	define_insn_and_split.
	* config/i386/i386.c (ix86_cc_mode): Return CCCmode
	for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern operands.
	(ix86_rtx_costs): Return true and *total = 0;
	for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern.  Use op0 and
	op1 temporaries to simplify COMPARE checks.

	* gcc.target/i386/pr97387-1.c: New test.
	* gcc.target/i386/pr97387-2.c: New test.
2020-10-14 17:29:36 +02:00
Jonathan Wakely
2b9c09a78b libstdc++: Fix tests that fail with old std::string ABI
These two tests have started to fail with the old std::string ABI. The
scan-assembler-not checks fail because they match debug info, not code.

Adding -g0 to the test flags fixes them.

libstdc++-v3/ChangeLog:

	* testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc:
	Do not generate debug info.
	* testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc:
	Likewise.
2020-10-14 16:15:49 +01:00
Aldy Hernandez
a121715bca Do not call range_of_ssa_name_with_loop_info with the loop tree root.
gcc/ChangeLog:

	PR tree-optimization/97396
	* gimple-range.cc (gimple_ranger::range_of_phi): Do not call
	range_of_ssa_name_with_loop_info with the loop tree root.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr97396.c: New test.
2020-10-14 10:57:37 -04:00
Richard Biener
ea9535e75e More vect_get_and_check_slp_defs refactoring
This is another tiny piece in some bigger refactoring of
vect_get_and_check_slp_defs.  Split out a test that has nothing
to do with def types or commutation.

2020-10-14  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_get_and_check_slp_defs): Split out
	test for compatible operand types.
2020-10-14 16:27:03 +02:00
Olivier Hainque
c602426cc7 Tigthen flag_pic processing in vxworks_override_options
This fixes spurious complaints about PIC mode not supported
from "gcc --help=...", on VxWorks without -mrtp. The spurious message
is emitted by vxworks_override_options, called with flag_pic == -1
when we're running for --help.

The change simply adjusts the check testing for "we're generating pic code"
to "flag_pic > 0" instead of just "flag_pic". We're not generating code at
all when reaching here with -1.

gcc/ChangeLog:

2020-10-14  Olivier Hainque  <hainque@adacore.com>

	* config/vxworks.c (vxworks_override_options): Guard pic checks with
	flag_pic > 0 instead of just flag_pic.
2020-10-14 14:18:58 +00:00
Jan Hubicka
1433846862 Turn offset_map to HOST_WIDE_INT
gcc/ChangeLog:

2020-10-14  Jan Hubicka  <hubicka@ucw.cz>

	* ipa-fnsummary.c (remap_edge_summaries): Make offset_map HOST_WIDE_INT.
	(remap_freqcounting_predicate): Likewise.
	(ipa_merge_fn_summary_after_inlining): Likewise.
	* ipa-predicate.c (predicate::remap_after_inlining): Likewise
	* ipa-predicate.h (remap_after_inlining): Update.
2020-10-14 16:07:07 +02:00
Jan Hubicka
4d90edb96e Handle POINTER_PLUS_EXPR in jump functions in ipa-modref.
gcc/ChangeLog:

	* ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in
	PASSTHROUGH.

gcc/testsuite/ChangeLog:

	* gcc.dg/ipa/modref-1.c: New test.
	* gcc.dg/tree-ssa/modref-4.c: New test.
2020-10-14 16:01:39 +02:00
Tobias Burnus
4aa9742252 Fortran: Fix line-truncation warning for !$acc and !gcc$
gcc/fortran/ChangeLog:

	PR fortran/97390
	* scanner.c (load_line): Fix line-truncation warning for !$acc
	and !gcc$ in free-form source code.

gcc/testsuite/ChangeLog:

	PR fortran/97390
	* gfortran.dg/goacc/warn_truncated.f90: New test.
2020-10-14 15:48:22 +02:00
Richard Biener
ec5e646709 adjust BB SLP build from scalars heuristics
We can end up with { _1, 1.0 } * { 3.0, _2 } which isn't really
profitable.  The following adjusts things so we reject more than
one possibly expensive (non-constant and not uniform) vector CTOR
and instead build a CTOR for the scalar operation results.

This also moves a check in vect_get_and_check_slp_defs to a better
place.

2020-10-14  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_get_and_check_slp_defs): Move
	check for duplicate/interleave of variable size constants
	to a place done once and early.
	(vect_build_slp_tree_2): Adjust heuristics when to build
	a BB SLP node from scalars.
2020-10-14 15:07:17 +02:00
Tom de Vries
17d5739a6b [gimple] Move can_duplicate_bb_p to gimple_can_duplicate_bb_p
The function gimple_can_duplicate_bb_p currently always returns true.

The presence of can_duplicate_bb_p in tracer.c however suggests that
there are cases when bb's indeed cannot be duplicated.

Move the implementation of can_duplicate_bb_p to gimple_can_duplicate_bb_p.

Bootstrapped and reg-tested on x86_64-linux.

Build x86_64-linux with nvptx accelerator and tested libgomp.

No issues found.

As corner-case check, bootstrapped and reg-tested a patch that makes
gimple_can_duplicate_bb_p always return false, resulting in
PR97333 - "[gimple_can_duplicate_bb_p == false, tree-ssa-threadupdate]
ICE in duplicate_block, at cfghooks.c:1093".

gcc/ChangeLog:

2020-10-09  Tom de Vries  <tdevries@suse.de>

	* tracer.c (cached_can_duplicate_bb_p, analyze_bb): Use
	can_duplicate_block_p.
	(can_duplicate_insn_p, can_duplicate_bb_no_insn_iter_p)
	(can_duplicate_bb_p): Move and merge ...
	* tree-cfg.c (gimple_can_duplicate_bb_p): ... here.
2020-10-14 14:37:03 +02:00
Nathan Sidwell
9068711f21 c++: Instantiation with local extern [PR97395]
It turns out that pushdecl_with_scope has somewhat strange behaviour,
which probably made more sense way back.  Unfortunately making it
somewhat saner turned into a rathole.  Instead use a
push_nested_namespace around pushing the alias -- this is similar to
some of the friend handling we already have.

	gcc/cp/
	* name-lookup.c (push_local_extern_decl_alias): Push into alias's
	namespace and use pushdecl.
	(do_pushdecl_with_scope): Clarify behaviour.
	gcc/testsuite/
	* g++.dg/lookup/extern-redecl2.C: New.
2020-10-14 05:08:36 -07:00
Jonathan Wakely
252c9967ba libstdc++: Define some std::string constructors inline
There are a lot of very simple constructors for the old string which are
not defined inline. I don't see any reason for this and it probably
makes them less likely to be optimized away. Move the definitions into
the class body.

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (basic_string(const Alloc&))
	(basic_string(const basic_string&)
	(basic_string(const CharT*, size_type, const Alloc&))
	(basic_string(const CharT*, const Alloc&))
	(basic_string(size_type, CharT, const Alloc&))
	(basic_string(initializer_list<CharT>, const Alloc&))
	(basic_string(InputIterator, InputIterator, const Alloc&)):
	Define inline in class body.
	* include/bits/basic_string.tcc (basic_string(const Alloc&))
	(basic_string(const basic_string&)
	(basic_string(const CharT*, size_type, const Alloc&))
	(basic_string(const CharT*, const Alloc&))
	(basic_string(size_type, CharT, const Alloc&))
	(basic_string(initializer_list<CharT>, const Alloc&))
	(basic_string(InputIterator, InputIterator, const Alloc&)):
	Move definitions into class body.
2020-10-14 12:52:47 +01:00
Jonathan Wakely
a1b6b01361 libstdc++: Improve comments for check_effective_target_cxx11-abi
libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp (check_effective_target_cxx11-abi):
	Add comments about which test flags get used by the check.
2020-10-14 12:52:47 +01:00
Jonathan Wakely
5e961dba46 libstdc++: Improve comments in std::string tests
The COW std::string does support some features of C++11 allocators, just
not propagation. Change some comments in the tests to be more precise
about that.

libstdc++-v3/ChangeLog:

	* testsuite/21_strings/basic_string/allocator/char/copy.cc: Make
	comment more precise about what isn't supported by COW strings.
	* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/move.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/noexcept.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/operator_plus.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/swap.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
	Likewise.
2020-10-14 12:52:47 +01:00
Jonathan Wakely
5ae9ddd480 libstdc++: Enable tests that incorrectly require cxx11-abi
These tests were not being run when -D_GLIBCXX_USE_CXX11_ABI=0 was added
to the test flags, but they actually work OK with the old string.

libstdc++-v3/ChangeLog:

	* testsuite/21_strings/basic_string/allocator/char/minimal.cc:
	Do not require cxx11-abi effective target.
	* testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
	Likewise.
	* testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
2020-10-14 12:52:46 +01:00
Jonathan Wakely
dc38e25524 libstdc++: Implement LWG 3706 for COW strings
The basic_string deduction guides are defined for the old ABI, but the
tests are currently disabled. This is because a single case fails when
using the old ABI, which is just because LWG 3706 isn't implemented for
the old ABI. That can be done easily, and the tests can be enabled.

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI]
	(basic_string(const _CharT*, const _Alloc&)): Constrain to
	require an allocator-like type to fix CTAD ambiguity (LWG 3706).
	* testsuite/21_strings/basic_string/cons/char/deduction.cc:
	Remove dg-skip-if.
	* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
	Likewise.
2020-10-14 12:51:40 +01:00
Mark Eggleston
4d2a56a0f7 Fortran : ICE in build_field PR95614
Local identifiers can not be the same as a module name.  Original
patch by Steve Kargl resulted in name clashes between common block
names and local identifiers.  A local identifier can be the same as
a global identier if that identifier is not a module or a program.
The original patch was modified to reject global identifiers that
represent a module or a program.

2020-10-14  Steven G. Kargl  <kargl@gcc.gnu.org>
	    Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/ChangeLog:

	PR fortran/95614
	* decl.c (gfc_get_common): Use gfc_match_common_name instead
	of match_common_name.
	* decl.c (gfc_bind_idents): Use gfc_match_common_name instead
	of match_common_name.
	* match.c : Rename match_common_name to gfc_match_common_name.
	* match.c (gfc_match_common): Use gfc_match_common_name instead
	of match_common_name.
	* match.h : Rename match_common_name to gfc_match_common_name.
	* resolve.c (resolve_common_vars): Check each symbol in a
	common block has a global symbol.  If there is a global symbol
	issue an error if the symbol type is a module or a program.

2020-10-14  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/ChangeLog:

	PR fortran/95614
	* gfortran.dg/pr95614_1.f90: New test.
	* gfortran.dg/pr95614_2.f90: New test.
	* gfortran.dg/pr95614_3.f90: New test.
	* gfortran.dg/pr95614_4.f90: New test.
2020-10-14 11:08:09 +01:00
Jan Hubicka
c7b6a7587f Support ofsetted parameters in local modref
2020-10-14  Jan Hubicka  <hubicka@ucw.cz>

	* doc/invoke.texi: (ipa-jump-function-lookups): Document param.
	* ipa-modref.c (merge_call_side_effects): Use
	unadjusted_ptr_and_unit_offset.
	* ipa-prop.c (unadjusted_ptr_and_unit_offset): New function.
	* ipa-prop.h (unadjusted_ptr_and_unit_offset): Declare.
	* params.opt: (-param-ipa-jump-function-lookups): New.
2020-10-14 11:44:30 +02:00
Jan Hubicka
87d75a11a5 Fix SCC discovery in ipa-modref
this patch fixes SCC discovery in ipa-modref which is causing misoptimization
of gnat bootstrapped with LTO, PGO and -O3.

I also improved debug info and spotted wrong parameter to ignore_stores_p
(which is probably quite harmless since we only inline matching functions, but
it is better to be consistent).

	PR bootstrap/97350
	* ipa-modref.c (ignore_edge): Do not ignore inlined edes.
	(ipa_merge_modref_summary_after_inlining): Improve debug output and
	fix parameter of ignore_stores_p.
2020-10-14 10:54:00 +02:00
Jakub Jelinek
2fa5f5c42b libgomp: Fix a typo in documentation
2020-10-14  Jakub Jelinek  <jakub@redhat.com>

	* libgomp.texi (omp_get_supported_active_levels): Fix a typo.
2020-10-14 10:17:11 +02:00
Nikhil Benesch
7e5aeda340 runtime: populate signal PC on NetBSD
The NetBSD libc provides an architecture-independent macro that can
extract the PC from a ucontext struct.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261740
2020-10-13 22:21:53 -07:00
Nikhil Benesch
7355c1df55 syscall: port fix for netbsd unix sockets from upstream
NetBSD does not include the null terminator when in its reported socket
length. Port the upstream bugfix for the issue (#6627).

This was likely missed during the usual upstream merge because the gc
and gccgo socket implementations have diverged quite a bit.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741
2020-10-13 22:19:35 -07:00
Kito Cheng
78fbe731a8 PR target/96759 - Handle global variable assignment from misaligned structure/PARALLEL return values.
In g:70cdb21e579191fe9f0f1d45e328908e59c0179e, DECL/global variable has handled
misaligned stores, but it didn't handle PARALLEL values, and I refer the
other part of this function, I found the PARALLEL need handled by
emit_group_* functions, so I add a check, and using emit_group_store if
storing a PARALLEL value, also checked this change didn't break the
testcase(gcc.target/arm/unaligned-argument-3.c) added by the orginal changes.

For riscv64 target, struct S {int a; double b;} will pack into a parallel
value to return and it has TImode when misaligned access is supported,
however TImode required 16-byte align, but it only 8-byte align, so it go to
the misaligned stores handling, then it will try to generate move
instruction from a PARALLEL value.

Tested on following target without introduced new reguression:
  - riscv32/riscv64 elf
  - x86_64-linux
  - arm-eabi

v2 changes:
  - Use maybe_emit_group_store instead of emit_group_store.
  - Remove push_temp_slots/pop_temp_slots, emit_group_store only require
    stack temp slot when dst is CONCAT or PARALLEL, however
    maybe_emit_group_store will always use REG for dst if needed.

gcc/ChangeLog:

	PR target/96759
	* expr.c (expand_assignment): Handle misaligned stores with PARALLEL
	value.

gcc/testsuite/ChangeLog:

	PR target/96759
	* g++.target/riscv/pr96759.C: New.
	* gcc.target/riscv/pr96759.c: New.
2020-10-14 11:47:33 +08:00
Clément Chigot
72b3833822 reflect: ensure uniqueness of type descriptors on AIX.
On AIX, duplication of type descriptors can occur if one is
declared in the libgo and one in the Go program being compiled.
The AIX linker isn't able to merge them together as Linux one does.
One solution is to always load libgo first but that needs a huge mechanism in
gcc core. Thus, this patch ensures that the duplication isn't visible
for the end user.

In reflect and internal/reflectlite, the comparison of rtypes is made on their
name and not only on their addresses.

In reflect, toType() function is using a canonicalization map to force rtypes
having the same rtype.String() to return the same Type. This can't be made in
internal/reflectlite as it needs sync package. But, for now, it doesn't matter
as internal/reflectlite is not widely used.

Fixes golang/go#39276

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260158
2020-10-13 17:54:37 -07:00
GCC Administrator
bdd74cc20c Daily bump. 2020-10-14 00:16:24 +00:00
Kwok Cheung Yeung
8949b985db openmp: Add support for the omp_get_supported_active_levels runtime library routine
This patch implements the omp_get_supported_active_levels runtime routine
from the OpenMP 5.0 specification, which returns the maximum number of
active nested parallel regions supported by this implementation.  The
current maximum (set using the omp_set_max_active_levels routine or the
OMP_MAX_ACTIVE_LEVELS environment variable) cannot exceed this number.

2020-10-13  Kwok Cheung Yeung  <kcy@codesourcery.com>

	libgomp/
	* env.c (gomp_max_active_levels_var): Initialize to
	gomp_supported_active_levels.
	(initialize_env): Limit gomp_max_active_levels_var to be at most
	equal to gomp_supported_active_levels.
	* fortran.c (omp_get_supported_active_levels): Add ialias_redirect.
	(omp_get_supported_active_levels_): New.
	* icv.c (omp_set_max_active_levels): Limit gomp_max_active_levels_var
	to at most equal to gomp_supported_active_levels.
	(omp_get_supported_active_levels): New.
	* libgomp.h (gomp_supported_active_levels): New.
	* libgomp.map (OMP_5.0.1): Add omp_get_supported_active_levels and
	omp_get_supported_active_levels_.
	* libgomp.texi (omp_get_supported_active_levels): New.
	(omp_set_max_active_levels): Update.  Add reference to
	omp_get_supported_active_levels.
	* omp.h.in (omp_get_supported_active_levels): New.
	* omp_lib.f90.in (omp_get_supported_active_levels): New.
	* omp_lib.h.in (omp_get_supported_active_levels): New.
	* testsuite/libgomp.c/lib-2.c (main): Check omp_get_max_active_levels
	against omp_get_supported_active_levels.
	* testsuite/libgomp.fortran/lib4.f90 (lib4): Likewise.
2020-10-13 13:21:02 -07:00
Nuno Lopes
5204cc561a libstdc++: Fix doxygen comment for std::any_of
libstdc++-v3/ChangeLog:

	* include/bits/stl_algo.h (any_of): Fix incorrect description
	in comment.
2020-10-13 20:21:55 +01:00
Jakub Jelinek
f76949cee9 combine: Fix up simplify_shift_const_1 for nested ROTATEs [PR97386]
The following testcases are miscompiled (the first one since my improvements
to rotate discovery on GIMPLE, the other one for many years) because
combiner optimizes nested ROTATEs with narrowing SUBREG in between (i.e.
the outer rotate is performed in shorter precision than the inner one) to
just one ROTATE of the rotated constant.  While that (under certain
conditions) can work for shifts, it can't work for rotates where we can only
do that with rotates of the same precision.

2020-10-13  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/97386
	* combine.c (simplify_shift_const_1): Don't optimize nested ROTATEs if
	they have different modes.

	* gcc.c-torture/execute/pr97386-1.c: New test.
	* gcc.c-torture/execute/pr97386-2.c: New test.
2020-10-13 19:13:26 +02:00
Jonathan Wakely
0e0beddd7f libstdc++: Update C++20 status documentation
libstdc++-v3/ChangeLog:

	* doc/xml/manual/evolution.xml: Document some API changes
	and deprecations.
	* doc/xml/manual/intro.xml: Document LWG 2499.
	* doc/xml/manual/status_cxx2020.xml: Update status.
	* doc/html/*: Regenerate.
2020-10-13 17:40:43 +01:00
Jonathan Wakely
16d0b033ca libstdc++: Remove trailing whitespace from XML docs
libstdc++-v3/ChangeLog:

	* doc/xml/book.txml: Remove trailing whitespace.
	* doc/xml/chapter.txml: Likewise.
	* doc/xml/class.txml: Likewise.
	* doc/xml/gnu/fdl-1.3.xml: Likewise.
	* doc/xml/gnu/gpl-3.0.xml: Likewise.
	* doc/xml/manual/abi.xml: Likewise.
	* doc/xml/manual/algorithms.xml: Likewise.
	* doc/xml/manual/allocator.xml: Likewise.
	* doc/xml/manual/appendix_contributing.xml: Likewise.
	* doc/xml/manual/appendix_free.xml: Likewise.
	* doc/xml/manual/appendix_porting.xml: Likewise.
	* doc/xml/manual/atomics.xml: Likewise.
	* doc/xml/manual/auto_ptr.xml: Likewise.
	* doc/xml/manual/backwards_compatibility.xml: Likewise.
	* doc/xml/manual/bitmap_allocator.xml: Likewise.
	* doc/xml/manual/build_hacking.xml: Likewise.
	* doc/xml/manual/codecvt.xml: Likewise.
	* doc/xml/manual/concurrency.xml: Likewise.
	* doc/xml/manual/concurrency_extensions.xml: Likewise.
	* doc/xml/manual/configure.xml: Likewise.
	* doc/xml/manual/containers.xml: Likewise.
	* doc/xml/manual/ctype.xml: Likewise.
	* doc/xml/manual/debug.xml: Likewise.
	* doc/xml/manual/debug_mode.xml: Likewise.
	* doc/xml/manual/diagnostics.xml: Likewise.
	* doc/xml/manual/documentation_hacking.xml: Likewise.
	* doc/xml/manual/evolution.xml: Likewise.
	* doc/xml/manual/internals.xml: Likewise.
	* doc/xml/manual/intro.xml: Likewise.
	* doc/xml/manual/io.xml: Likewise.
	* doc/xml/manual/iterators.xml: Likewise.
	* doc/xml/manual/locale.xml: Likewise.
	* doc/xml/manual/localization.xml: Likewise.
	* doc/xml/manual/messages.xml: Likewise.
	* doc/xml/manual/mt_allocator.xml: Likewise.
	* doc/xml/manual/numerics.xml: Likewise.
	* doc/xml/manual/parallel_mode.xml: Likewise.
	* doc/xml/manual/policy_data_structures.xml: Likewise.
	* doc/xml/manual/prerequisites.xml: Likewise.
	* doc/xml/manual/shared_ptr.xml: Likewise.
	* doc/xml/manual/spine.xml: Likewise.
	* doc/xml/manual/status_cxxtr1.xml: Likewise.
	* doc/xml/manual/status_cxxtr24733.xml: Likewise.
	* doc/xml/manual/strings.xml: Likewise.
	* doc/xml/manual/support.xml: Likewise.
	* doc/xml/manual/test.xml: Likewise.
	* doc/xml/manual/test_policy_data_structures.xml: Likewise.
	* doc/xml/manual/using.xml: Likewise.
	* doc/xml/manual/using_exceptions.xml: Likewise.
	* doc/xml/manual/utilities.xml: Likewise.
	* doc/html/*: Regenerate.
2020-10-13 16:50:41 +01:00
Aldy Hernandez
739526a19d Do not save hash slots across calls to hash_table::get_or_insert.
There's a read of a freed block while accessing the default_slot in
calc_switch_ranges.

      default_slot->intersect (def_range);

It seems the default_slot got swiped from under us, and the valgrind
dump indicates the free came from the get_or_insert in the same
function:

      irange *&slot = m_edge_table->get_or_insert (e, &existed);

So it looks like the get_or_insert is actually freeing the value of
the previously allocated default_slot.  Looking down the chain
from get_or_insert, we see it calls hash_table<>::expand, which
actually does a free while doing a resize of sorts:

  if (!m_ggc)
    Allocator <value_type> ::data_free (oentries);
  else
    ggc_free (oentries);

This patch avoids keeping a pointer to the default_slot across multiple
calls to get_or_insert in the loop.

gcc/ChangeLog:

	PR tree-optimization/97379
	* gimple-range-edge.cc (outgoing_range::calc_switch_ranges): Do
	not save hash slot across calls to hash_table<>::get_or_insert.
2020-10-13 11:02:18 -04:00
Tobias Burnus
8311899edd lto-wrapper: Use nontemp filename with -save-temps
gcc/ChangeLog:

	* lto-wrapper.c (find_crtoffloadtable): Fix last commit
	by adding NULL as last argument to concat.
2020-10-13 15:56:58 +02:00
Richard Sandiford
f694a0d2ed [arm] Use -Os for stack-protector-[56].c tests
Using -O2 made the tests subject to LDRD vs. LDM tuning.
The simplest fix seems to be to use -Os, so that LDM is
unequivocally a win.

gcc/testsuite/
	* gcc.target/arm/stack-protector-5.c: Use -Os rather than -O2.
	* gcc.target/arm/stack-protector-6.c: Likewise.
2020-10-13 14:50:24 +01:00
Kyrylo Tkachov
25095d1ef8 AArch64: Add Neoverse N2 tuning model
This patch adds a tuning structure for Neoverse N2 to allow for further
tuning.
For now it's just a deduplication of the Neoverse N1 struct that it was
reusing but with the SVE width set to 128.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/
	* config/aarch64/aarch64.c (neoversen2_tunings): Define.
	* config/aarch64/aarch64-cores.def (neoverse-n2): Use it.
2020-10-13 14:41:27 +01:00
Tobias Burnus
7287cf184e lto-wrapper: Use nontemp filename with -save-temps
gcc/ChangeLog:

	* lto-wrapper.c (find_crtoffloadtable): With -save-temps,
	use non-temp file name utilizing the dump prefix.
	(run_gcc): Update call.
2020-10-13 15:19:51 +02:00
Richard Biener
a673744dee Remove STMT_VINFO_SAME_ALIGN_REFS
This makes the only consumer of STMT_VINFO_SAME_ALIGN_REFS, the
loop peeling for alignment code, use locally computed data and
then removes STMT_VINFO_SAME_ALIGN_REFS and its computation.

It also adjusts the auto_vec<> move CTOR/assignment so you
can write

  auto_vec<..> foo = bar.copy ();

and have foo own the generated copy.

2020-10-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97382
	* tree-vectorizer.h (_stmt_vec_info::same_align_refs): Remove.
	(STMT_VINFO_SAME_ALIGN_REFS): Likewise.
	* tree-vectorizer.c (vec_info::new_stmt_vec_info): Do not
	allocate STMT_VINFO_SAME_ALIGN_REFS.
	(vec_info::free_stmt_vec_info): Do not release
	STMT_VINFO_SAME_ALIGN_REFS.
	* tree-vect-data-refs.c (vect_analyze_data_ref_dependences):
	Do not compute self and read-read dependences.
	(vect_dr_aligned_if_related_peeled_dr_is): New helper.
	(vect_dr_aligned_if_peeled_dr_is): Likewise.
	(vect_update_misalignment_for_peel): Use it instead of
	iterating over STMT_VINFO_SAME_ALIGN_REFS.
	(dr_align_group_sort_cmp): New function.
	(vect_enhance_data_refs_alignment): Count the number of
	same aligned refs here and elide uses of STMT_VINFO_SAME_ALIGN_REFS.
	(vect_find_same_alignment_drs): Remove.
	(vect_analyze_data_refs_alignment): Do not call it.
	* vec.h (auto_vec<T, 0>::auto_vec): Adjust CTOR to take
	a vec<>&&, assert it isn't using auto storage.
	(auto_vec& operator=): Apply a similar change.

	* gcc.dg/vect/no-vfa-vect-dv-2.c: Remove same align dump
	scanning.
	* gcc.dg/vect/vect-103.c: Likewise.
	* gcc.dg/vect/vect-91.c: Likewise.
	* gfortran.dg/vect/vect-4.f90: Likewise.
2020-10-13 13:35:11 +02:00
Tobias Burnus
35103c6d8e nvptx/mkoffload.c: Add missing fclose
gcc/ChangeLog:

	* config/nvptx/mkoffload.c (main): Add missing fclose (in).
2020-10-13 11:55:27 +02:00
Martin Liska
8e0e9417cc ASAN: disable -Wno-stringop-overflow for 2 tests
gcc/testsuite/ChangeLog:

	PR middle-end/97392
	* g++.dg/asan/asan_test.C: Disable -Wstringop-overflow.
	* gcc.dg/asan/pr80166.c: Likewise.
2020-10-13 10:45:21 +02:00
zhengnannan
ca4938fa8e AArch64: Add FLAG for mul/mla/mls intrinsics [PR94442]
2020-10-13  Zhiheng Xie  <xiezhiheng@huawei.com>
	    Nannan Zheng  <zhengnannan@huawei.com>

gcc/ChangeLog:

	* config/aarch64/aarch64-simd-builtins.def: Add proper FLAG
	for mul/mla/mls intrinsics.
2020-10-13 09:05:52 +01:00
Jakub Jelinek
14707c896a openmp: Improve composite triangular loop lowering and expansion
This propagates needed values from the point where number of iterations
is calculated on composite loops to the places where that information
is needed to use the more efficient square root discovery to compute
the starting iterator values from the logical iteration number.

2020-10-13  Jakub Jelinek  <jakub@redhat.com>

	* omp-low.c (add_taskreg_looptemp_clauses): For triangular loops
	with non-constant number of iterations add another 4 _looptemp_
	clauses before the (optional) one for lastprivate.
	(lower_omp_for_lastprivate): Skip those clauses when looking for
	the lastprivate clause.
	(lower_omp_for): For triangular loops with non-constant number of
	iterations add another 4 _looptemp_ clauses.
	* omp-expand.c (expand_omp_for_init_counts): For triangular loops
	with non-constant number of iterations set counts[0],
	fd->first_inner_iterations, fd->factor and fd->adjn1 from the newly
	added _looptemp_ clauses.
	(expand_omp_for_init_vars): Initialize the newly added _looptemp_
	clauses.
	(find_lastprivate_looptemp): New function.
	(expand_omp_for_static_nochunk, expand_omp_for_static_chunk,
	expand_omp_taskloop_for_outer): Use it instead of manually skipping
	_looptemp_ clauses.
2020-10-13 09:30:47 +02:00