Commit Graph

180160 Commits

Author SHA1 Message Date
Martin Liska
508e2d88a4 IPA: fix profile handling in IRA
gcc/ChangeLog:

	PR ipa/97295
	* profile-count.c (profile_count::to_frequency): Move part of
	gcc_assert to STATIC_ASSERT.
	* regs.h (REG_FREQ_FROM_BB): Do not use count.to_frequency for
	a function that does not have count_max initialized.
2020-10-15 09:56:55 +02:00
Jakub Jelinek
a0504b3d7c params: Fix up help.exp testing
This patch fixes:
Running /usr/src/gcc/gcc/testsuite/gcc.misc-tests/help.exp ...
FAIL: compiler driver --help=params option(s): "[^.]$" absent from output: "y"
FAIL: compiler driver --help=param option(s): "^ +-.*[^:.]$" absent from output: "  --param-ipa-jump-function-lookups= Maximum number of statements visited during jump function offset discovery"

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

	* params.opt (-param-ipa-jump-function-lookups=): Add full stop at
	the end of the parameter description.
2020-10-15 09:24:06 +02:00
Kito Cheng
72eb833584 RISC-V: Add support for -mcpu option.
- The behavior of -mcpu basically equal to -march plus -mtune, but it
   has lower priority than -march and -mtune.

 - The behavior and available options has sync with clang except we don't add
   few LLVM specific value, and add more sifive processor to the list.

 - -mtune also accept all available options of -mcpu, and use it setting.

gcc/ChangeLog:

	* common/config/riscv/riscv-common.c (riscv_cpu_tables): New.
	(riscv_arch_str): Return empty string if current_subset_list
	is NULL.
	(riscv_find_cpu): New.
	(riscv_handle_option): Verify option value of -mcpu.
	(riscv_expand_arch): Using std::string.
	(riscv_default_mtune): New.
	(riscv_expand_arch_from_cpu): Ditto.
	* config/riscv/riscv-cores.def: New.
	* config/riscv/riscv-protos.h (riscv_find_cpu): New.
	(riscv_cpu_info): New.
	* config/riscv/riscv.c (riscv_tune_info): Rename ...
	(riscv_tune_param): ... to this.
	(riscv_cpu_info): Rename ...
	(riscv_tune_info): ... to this.
	(tune_info): Rename ...
	(tune_param): ... to this.
	(rocket_tune_info): Update data type name.
	(sifive_7_tune_info): Ditto.
	(optimize_size_tune_info): Ditto.
	(riscv_cpu_info_table): Rename ...
	(riscv_tune_info_table): ... to this.
	(riscv_parse_cpu): Rename ...
	(riscv_parse_tune): ... to this, and translate valid -mcpu option to
	-mtune option.
	(riscv_rtx_costs): Rename tune_info to tune_param.
	(riscv_class_max_nregs): Ditto.
	(riscv_memory_move_cost): Ditto.
	(riscv_init_machine_status): Use value of -mcpu if -mtune is not
	given, and rename tune_info to tune_param.
	* config/riscv/riscv.h (riscv_expand_arch_from_cpu): New.
	(riscv_default_mtune): Ditto.
	(EXTRA_SPEC_FUNCTIONS): Add riscv_expand_arch_from_cpu and
	riscv_default_mtune.
	(OPTION_DEFAULT_SPECS): Handle default value of -march/-mabi.
	(DRIVER_SELF_SPECS): Expand -march from -mcpu if -march is not
	given.
	* config/riscv/riscv.opt (-mcpu): New option.
	* config/riscv/t-riscv ($(common_out_file)): Add
	riscv-cores.def to dependency.
	* doc/invoke.texi (RISC-V Option): Add -mcpu, and update the
	description of default value for -mtune and -march.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/mcpu-1.c: New.
	* gcc.target/riscv/mcpu-2.c: Ditto.
	* gcc.target/riscv/mcpu-3.c: Ditto.
	* gcc.target/riscv/mcpu-4.c: Ditto.
	* gcc.target/riscv/mcpu-5.c: Ditto.
	* gcc.target/riscv/mcpu-6.c: Ditto.
	* gcc.target/riscv/mcpu-7.c: Ditto.
2020-10-15 11:12:39 +08:00
Hongyu Wang
83927c6389 Enable Intel HRESET Instruction
gcc/

	* common/config/i386/cpuinfo.h (get_available_features):
	Detect HRESET.
	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_HRESET_SET,
	OPTION_MASK_ISA2_HRESET_UNSET): New macros.
	(ix86_handle_option): Handle -mhreset.
	* common/config/i386/i386-cpuinfo.h (enum processor_features):
	Add FEATURE_HRESET.
	* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
	for hreset.
	* config.gcc: Add hresetintrin.h
	* config/i386/hresetintrin.h: New header file.
	* config/i386/x86gprintrin.h: Include hresetintrin.h.
	* config/i386/cpuid.h (bit_HRESET): New.
	* config/i386/i386-builtin.def: Add new builtin.
	* config/i386/i386-expand.c (ix86_expand_builtin):
	Handle new builtin.
	* config/i386/i386-c.c (ix86_target_macros_internal): Define
	__HRESET__.
	* config/i386/i386-options.c (isa2_opts): Add -mhreset.
	(ix86_valid_target_attribute_inner_p): Handle hreset.
	* config/i386/i386.h (TARGET_HRESET, TARGET_HRESET_P,
	PTA_HRESET): New.
	(PTA_ALDERLAKE): Add PTA_HRESET.
	* config/i386/i386.opt: Add option -mhreset.
	* config/i386/i386.md (UNSPECV_HRESET): New unspec.
	(hreset): New define_insn.
	* doc/invoke.texi: Document -mhreset.
	* doc/extend.texi: Document hreset.

gcc/testsuite/

	* gcc.target/i386/hreset-1.c: New test.
	* gcc.target/i386/funcspec-56.inc: Add new target attribute.
	* gcc.target/i386/x86gprintrin-1.c: Add -mhreset.
	* gcc.target/i386/x86gprintrin-2.c: Ditto.
	* gcc.target/i386/x86gprintrin-3.c: Ditto.
	* gcc.target/i386/x86gprintrin-4.c: Add mhreset.
	* gcc.target/i386/x86gprintrin-5.c: Ditto.
2020-10-15 11:07:16 +08:00
liuhongt
299a53d797 Enable gcc support for UINTR
2020-05-20  Hongtao Liu  <hongtao.liu@intel.com>

gcc/
	* common/config/i386/cpuinfo.h (get_available_features):
	Detect UINTR.
	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_UINTR_SET
	OPTION_MASK_ISA2_UINTR_UNSET): New.
	(ix86_handle_option): Handle -muintr.
	* common/config/i386/i386-cpuinfo.h (enum processor_features):
	Add FEATURE_UINTR.
	* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
	for uintr.
	* config.gcc: Add uintrintrin.h to extra_headers.
	* config/i386/uintrintrin.h: New.
	* config/i386/cpuid.h (bit_UINTR): New.
	* config/i386/i386-builtin-types.def: Add new types.
	* config/i386/i386-builtin.def: Add new builtins.
	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins): Add
	__builtin_ia32_testui.
	* config/i386/i386-builtins.h (ix86_builtins): Add
	IX86_BUILTIN_TESTUI.
	* config/i386/i386-c.c (ix86_target_macros_internal): Define
	__UINTR__.
	* config/i386/i386-expand.c (ix86_expand_special_args_builtin):
	Handle UINT8_FTYPE_VOID.
	(ix86_expand_builtin): Handle IX86_BUILTIN_TESTUI.
	* config/i386/i386-options.c (isa2_opts): Add -muintr.
	(ix86_valid_target_attribute_inner_p): Handle UINTR.
	(ix86_option_override_internal): Add TARGET_64BIT check for UINTR.
	* config/i386/i386.h (TARGET_UINTR, TARGET_UINTR_P, PTA_UINTR): New.
	(PTA_SAPPHIRRAPIDS): Add PTA_UINTR.
	* config/i386/i386.opt: Add -muintr.
	* config/i386/i386.md
	(define_int_iterator UINTR_UNSPECV): New.
	(define_int_attr uintr_unspecv): New.
	(uintr_<uintr_unspecv>, uintr_senduipi, testui):
	New define_insn patterns.
	* config/i386/x86gprintrin.h: Include uintrintrin.h
	* doc/invoke.texi: Document -muintr.
	* doc/extend.texi: Document uintr.

gcc/testsuite/

	* gcc.target/i386/funcspec-56.inc: Add new target attribute.
	* gcc.target/i386/uintr-1.c: New test.
	* gcc.target/i386/uintr-2.c: Ditto.
	* gcc.target/i386/uintr-3.c: Ditto.
	* gcc.target/i386/uintr-4.c: Ditto.
	* gcc.target/i386/uintr-5.c: Ditto.
	* gcc.target/i386/x86gprintrin-1.c: Add -muintr for 64bit target.
	* gcc.target/i386/x86gprintrin-2.c: Ditto.
	* gcc.target/i386/x86gprintrin-3.c: Ditto.
	* gcc.target/i386/x86gprintrin-4.c: Add muintr for 64bit target.
	* gcc.target/i386/x86gprintrin-5.c: Ditto.
2020-10-15 11:02:49 +08:00
GCC Administrator
b2698c21f2 Daily bump. 2020-10-15 00:16:34 +00:00
Nikhil Benesch
28774a6015 libgo: print reason code if throwing unwind exception fails
Calls to _Unwind_RaiseException and friends *can* return due to bugs in
libgo or memory corruption. When this occurs, print a message to stderr
with the reason code before aborting to aid debugging.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261257
2020-10-14 17:00:02 -07:00
Martin Sebor
14d83c6f58 PR middle-end/97391 - bogus -Warray-bounds accessing a multidimensional array parameter
gcc/ChangeLog:

	PR middle-end/97391
	* builtins.c (gimple_parm_array_size): Peel off one less layer
	of array types.

gcc/testsuite/ChangeLog:

	PR middle-end/97391
	* gcc.dg/Warray-bounds-68.c: New test.
2020-10-14 15:36:24 -06:00
Martin Sebor
34efa5c2a8 PR c/97413 - bogus error on function declaration with many VLA arguments
gcc/ChangeLog:

	PR c/97413
	* attribs.c (init_attr_rdwr_indices): Unwrap extra list layer.

gcc/c-family/ChangeLog:

	PR c/97413
	* c-attribs.c (build_attr_access_from_parms): Wrap chain of VLA
	bounds in an extra list.

gcc/testsuite/ChangeLog:

	PR c/97413
	* gcc.dg/Wvla-parameter-8.c: New test.
2020-10-14 15:18:19 -06:00
Tom de Vries
30d06b7d30 [testsuite] Don't overwrite compiler_flags in check_compile
Consider the test-case gcc.c-torture/compile/pr42717.c, which has:
...
/* { dg-xfail-if "ptxas crashes" { nvptx-*-* } { "-O0" } { "" } } */
...

When running make check-gcc, I get:
...
XPASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...
but when forcing to run only that test-case using
RUNTESTFLAGS=compile.exp=pr42717.c I get instead:
...
PASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...

Using RUNTESTFLAGS="-v -v -v" we can see what happens:
...
check_cached_effective_target exceptions_enabled: \
  returning 1 for nvptx-none-run
Limited to targets: *-*-*
Will search for options  "-O0"
Will exclude for options  ""
Compiler flags are: exceptions_enabled9848.cc -fdiagnostics-plain-output \
  --sysroot=/home/vries/nvptx/trunk/install/nvptx-none -S  -isystem \
  /home/vries/nvptx/trunk/build-gcc/nvptx-none/./newlib/targ-include \
  -isystem /home/vries/nvptx/trunk/source-gcc/newlib/libc/include \
  -o exceptions_enabled9848.s
Checking "*-*-*" against "nvptx-unknown-none"
Looking for -O0 to include in the compiler flags
Looking for  to exclude in the compiler flags
This is not a conditional match
PASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...

The effective target exceptions_enabled is tested from gcc-dg-prune, but
the calculation overwrites $compiler_flags, which is subsequently tested for
-O0.

Fix this by saving and restoring $compiler_flags when calling
${tool}_target_compile in check_compile.

Tested on nvptx.

gcc/testsuite/ChangeLog:

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

	* lib/target-supports.exp (check_compile): Save and restore
	$compiler_flags when calling ${tool}_target_compile.
2020-10-14 23:08:42 +02:00
Nikhil Benesch
dc570700be libgo: export NetBSD-specific types in mksysinfo.sh
The syscall package depends on many NetBSD-specific types on NetBSD.
Teach mksysinfo.sh to export these types.

This alone is not sufficient to get the syscall package to compile on
NetBSD, but it's a start.

Note that the IfMsgHdr type is recapitalized to IfMsghdr, which requires
changes in the AIX port. The new capitalization is what's used by
upstream in existing NetBSD-specific code and is more consistent with
the capitalization of other C structs with the "hdr" suffix.

Updates golang/go#38538.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261739
2020-10-14 13:56:01 -07:00
Nikhil Benesch
ca56d57624 runtime: correct semaphore implementation on netbsd
NetBSD's semaphores use the underlying lighweight process mechanism
(LWP) on NetBSD, rather than pthreads. This means the m.prodcid needs
to be set to the LWP ID rather than the pthread ID in order for unpark
notifications to get sent to the right place.

Introduce a new getProcID() method that selects the correct ID for the
platform.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261742
2020-10-14 13:56:01 -07:00
David Malcolm
61a43de58c analyzer: fix ICE on globals with unknown size [PR93388]
This patch fixes an ICE seen when attempting to build various existing
tests in our testsuite with -fanalyzer, including
gcc.c-torture/compile/980816-1.c.

gcc/analyzer/ChangeLog:
	PR analyzer/93388
	* region-model.cc (region_model::get_initial_value_for_global):
	Fall back to returning an initial_svalue if
	decl_region::get_svalue_for_initializer fails.
	* region.cc (decl_region::get_svalue_for_initializer): Don't
	attempt to create a compound_svalue if the region has an unknown
	size.

gcc/testsuite/ChangeLog:
	PR analyzer/93388
	* gcc.dg/analyzer/data-model-21.c: New test.
2020-10-14 16:38:25 -04:00
David Malcolm
12b267cc60 analyzer: fix build with ada [PR93723]
gcc/analyzer/ChangeLog:
	PR analyzer/93723
	* store.cc (binding_map::apply_ctor_to_region): Remove redundant
	assertion.
2020-10-14 16:37:36 -04:00
David Malcolm
974e3975c5 analyzer: don't use <setjmp.h> in tests [PR97394]
PR analyzer/97394 reports issues with analyzer setjmp results
when testing against MUSL.  This patch fixes up gcc.dg/analyzer
so that it doesn't use <setjmp.h>.

gcc/testsuite/ChangeLog:
	PR analyzer/97394
	* gcc.dg/analyzer/setjmp-pr93378.c: Use test-setjmp.h rather than
	<setjmp.h>.
	* gcc.dg/analyzer/sigsetjmp-5.c: Likewise.
	* gcc.dg/analyzer/sigsetjmp-6.c: Likewise.
	* gcc.dg/analyzer/test-setjmp.h: Don't include <setjmp.h>.
	Provide decls of jmp_buf, sigjmp_buf, setjmp, sigsetjmp,
	longjmp, and siglongjmp.
2020-10-14 16:36:25 -04:00
Jason Merrill
270c5a982c c++: Diagnose bogus variadic lambda. [PR97358]
If the lambda has a capture pack, it cannot be used unexpanded within the
body of the lambda.  If you want to expand the pack across multiple lambdas,
don't capture the whole pack.

gcc/cp/ChangeLog:

	PR c++/97358
	* pt.c (check_for_bare_parameter_packs): Diagnose use of
	capture pack.

gcc/testsuite/ChangeLog:

	PR c++/97358
	* g++.dg/cpp0x/lambda/lambda-variadic11.C: New test.
2020-10-14 15:44:29 -04:00
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