Currently, when a new thread needs to use the RANDOM_NUMBER intrinsic,
the per-thread PRNG state is initialized by copying the master state
and then jumping forwards N*2**128 entries in the stream so that the
PRNG streams for different threads don't alias each other, where N is
the number of threads that have so far initialized the PRNG.
With this patch the master state itself is jumped forwards once each
time a new thread initializes the PRNG, thus obviating the need to
jump through all the N-1 previous streams. Effectively turning an O(N)
algorithm into an O(1) one.
Regtested on x86_64-pc-linux-gnu.
libgfortran/ChangeLog:
2019-09-05 Janne Blomqvist <jb@gcc.gnu.org>
* intrinsics/random.c (master_init): Replace with
master_state.init.
(njumps): Remove variable.
(master_state): Make instance of struct prng_state.
(init_rand_state): When jumping, update the master_state once
instead of keeping track of how many jumps need to be done.
(SZU64): Modify to handle new master_state.
(SZ): Likewise.
(random_seed_i4): Likewise.
(random_seed_i8): Likewise.
From-SVN: r275397
2019-09-04 Steven G. Kargl <kargl@gcvc.gnu.org>
PR fortran/91650
* io.c (match_io_element): An output IO list item cannot be a BOZ.
2019-09-04 Steven G. Kargl <kargl@gcvc.gnu.org>
PR fortran/91650
* gfortran.dg/pr91650_1.f90: New test.
* gfortran.dg/pr91650_2.f90: Ditto.
From-SVN: r275391
The pthread_cond_clockwait function is available in glibc since the 2.30
release. If this function is available in the C library it can be used
to fix PR libstdc++/41861 by supporting std::chrono::steady_clock
properly with std::condition_variable.
This means that code using std::condition_variable::wait_for or
std::condition_variable::wait_until with std::chrono::steady_clock is no
longer subject to timing out early or potentially waiting for much
longer if the system clock is warped at an inopportune moment.
If pthread_cond_clockwait is available then std::chrono::steady_clock is
deemed to be the "best" clock available which means that it is used for
the relative wait_for calls and absolute wait_until calls using
user-defined clocks. Calls explicitly using std::chrono::system_clock
continue to use CLOCK_REALTIME via __gthread_cond_timedwait.
If pthread_cond_clockwait is not available then
std::chrono::system_clock is deemed to be the "best" clock available
which means that the previous suboptimal behaviour remains.
2019-09-04 Mike Crowe <mac@mcrowe.com>
PR libstdc++/41861
* acinclude.m4 (GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT): Check for new
pthread_cond_clockwait function.
* configure.ac: Use GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT.
* configure: Regenerate.
* config.h.in: Regenerate.
* include/std/condition_variable: (condition_variable): Rename
__steady_clock_t typedef and add system_clock. Change __clock_t to be
a typedef for the preferred clock to convert arbitrary other clocks to.
[_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT] (wait_until): Add a steady_clock
overload.
(wait_until): Change __clock_t overload to use system_clock.
[_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT] (__wait_until_impl): Add
steady_clock overload that calls pthread_cond_clockwait.
(__wait_until_impl): Change __clock_t overload to use system_clock.
(condition_variable_any) [_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT]: Use
steady_clock for __clock_t if pthread_cond_clockwait is available.
From-SVN: r275390
2019-09-04 Mike Crowe <mac@mcrowe.com>
* testsuite/30_threads/condition_variable/members/2.cc (test01):
Parameterise so that test can be run against an arbitrary clock.
(main): Test using std::chrono::steady_clock and a user-defined
clock in addition to the previous std::chrono::system_clock.
* testsuite/30_threads/condition_variable_any/members/2.cc: Likewise.
From-SVN: r275389
Vtable verification currently does not work properly with
link time optimization. Until this can be fixed users should
not be allowed to specify both options together.
2019-09-04 Caroline Tice <cmtice@google.com>
* opts.c (finish_options): Disallow -fvtable-verify and -flto to be
specified together.
From-SVN: r275388
PR target/32413
* config/i386/i386.c (inline_secondary_memory_needed): Return true
for QI and HImode moves between SSE and general registers.
From-SVN: r275377
The patch enables warning with Wextra due to PR91593 and warnings with
allmodconfig kernel build. Once these issues are resolved, we could
consider promoting it to Wall.
2019-09-04 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR c/78736
* doc/invoke.texi: Document -Wenum-conversion.
c-family
* c.opt (Wenum-conversion): New option.
c/
* c-typeck.c (convert_for_assignment): Handle Wenum-conversion.
testsuite/
* gcc.dg/Wenum-conversion.c: New test-case.
From-SVN: r275376
2019-09-04 Richard Biener <rguenther@suse.de>
PR rtl-optimization/36262
* postreload-gcse.c: Include intl.h and gcse.h.
(insert_expr_in_table): Insert at the head of cur_expr->avail_occr
to avoid linear list walk.
(record_last_mem_set_info): Gate off if not computing transparentness.
(get_bb_avail_insn): If transparentness isn't computed give up
early.
(gcse_after_reload_main): Skip compute_transp and extended PRE
if gcse_or_cprop_is_too_expensive says so.
From-SVN: r275365
2019-09-03 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.texi: Update documentation to catch up with BOZ changes.
* invoke.texi: Fix English from previous BOZ changes commit.
From-SVN: r275364
If we dot-import a package, we should only add an imported variable to
the package bindings if the variable is in the package being imported.
A test case for this is the 1.13 os package, in which ErrClosed and
friends are defined both locally and in the imported internal/oserror package.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/192718
From-SVN: r275358
2019-09-03 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.c (msp430_init_sections): Remove handling of the
noinit section.
(msp430_select_section): Handle decls with the "noinit" attribute with
default_elf_select_section.
Handle SECCAT_RODATA_MERGE_* section types with
default_elf_select_section.
Add comments about handling of unsupported section types.
(msp430_section_type_flags): Remove handling of the noinit section.
From-SVN: r275357
gcc/ChangeLog:
2019-09-03 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.c (msp430_attr): Remove warnings about
conflicting msp430-specific attributes.
(msp430_section_attr): Likewise.
Add warnings about conflicts with generic "noinit" and "section"
attributes.
Fix grammar in -mlarge error message.
(msp430_data_attr): Rename to msp430_persist_attr.
Add warnings about conflicts with generic "noinit" and "section"
attributes.
Add warning for when variable is not initialized.
Chain conditionals which prevent the attribute being added.
(ATTR_EXCL): New helper.
(attr_reent_exclusions): New exclusion table.
(attr_naked_exclusions): Likewise.
(attr_crit_exclusions): Likewise.
(attr_lower_exclusions): Likewise.
(attr_upper_exclusions): Likewise.
(attr_either_exclusions): Likewise.
(attr_persist_exclusions): Likewise.
(msp430_attribute_table): Update with exclusion rules.
(msp430_output_aligned_decl_common): Don't output common symbol if decl
has a section.
gcc/testsuite/ChangeLog:
2019-09-03 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* gcc.target/msp430/data-attributes-2.c: New test.
* gcc.target/msp430/function-attributes-4.c: Update dg-warning
strings.
* gcc.target/msp430/region-attribute-misuse.c: Likewise.
From-SVN: r275356
PR target/91604
* config/i386/i386-expand.c (split_double_mode): If there is more than
one MEM operand and they are rtx_equal_p, reuse lo_half/hi_half from
already split matching MEM operand instead of calling adjust_address
again.
* gcc.target/i386/pr91604.c: New test.
From-SVN: r275344
2019-09-03 Chung-Lin Tang <cltang@codesourcery.com>
libatomic/
PR other/79543
* acinclude.m4 (LIBAT_CHECK_LINKER_FEATURES): Fix GNU ld --version
scanning to conform to the GNU Coding Standards.
* configure: Regenerate.
libffi/
PR other/79543
* acinclude.m4 (LIBAT_CHECK_LINKER_FEATURES): Fix GNU ld --version
scanning to conform to the GNU Coding Standards.
* configure: Regenerate.
libgomp/
PR other/79543
* acinclude.m4 (LIBGOMP_CHECK_LINKER_FEATURES): Fix GNU ld --version
scanning to conform to the GNU Coding Standards.
* configure: Regenerate.
libitm/
PR other/79543
* acinclude.m4 (LIBITM_CHECK_LINKER_FEATURES): Fix GNU ld --version
scanning to conform to the GNU Coding Standards.
* configure: Regenerate.
libstdc++-v3/
PR other/79543
* acinclude.m4 (GLIBCXX_CHECK_LINKER_FEATURES): Fix GNU ld --version
scanning to conform to the GNU Coding Standards.
* configure: Regenerate.
From-SVN: r275341
The new sigfpe-eh.c fails with
internal compiler error: RTL check: expected elt 0 type 'e' or 'u', have 'w' (rtx const_int)
This is most likely due to a typo: XEXP (*op1, 0) was used, when
XEXP (*op0, 1) was intended. This did not cause any user-visible
problems, because reversed_comparison_code_parts ignores the
respective argument, and the release compiler is built without RTL
checks.
gcc/ChangeLog:
2019-09-03 Ilya Leoshkevich <iii@linux.ibm.com>
* config/s390/s390.c (s390_canonicalize_comparison): Use XEXP
(*op0, 1) instead of XEXP (*op1, 0).
gcc/testsuite/ChangeLog:
2019-09-03 Ilya Leoshkevich <iii@linux.ibm.com>
* gcc.target/s390/sigfpe-eh.c: New test.
From-SVN: r275336
This patch implements the __jcvt ACLE intrinsic [1] that maps down to the FJCVTZS [2] instruction from Armv8.3-a.
No fancy mode iterators or nothing. Just a single builtin, UNSPEC and define_insn and the associate plumbing.
This patch also defines __ARM_FEATURE_JCVT to indicate when the intrinsic is available.
[1] https://developer.arm.com/docs/101028/latest/data-processing-intrinsics
[2] https://developer.arm.com/docs/ddi0596/latest/simd-and-floating-point-instructions-alphabetic-order/fjcvtzs-floating-point-javascript-convert-to-signed-fixed-point-rounding-toward-zero
* config/aarch64/aarch64.md (UNSPEC_FJCVTZS): Define.
(aarch64_fjcvtzs): New define_insn.
* config/aarch64/aarch64.h (TARGET_JSCVT): Define.
* config/aarch64/aarch64-builtins.c (aarch64_builtins):
Add AARCH64_JSCVT.
(aarch64_init_builtins): Initialize __builtin_aarch64_jcvtzs.
(aarch64_expand_builtin): Handle AARCH64_JSCVT.
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
__ARM_FEATURE_JCVT where appropriate.
* config/aarch64/arm_acle.h (__jcvt): Define.
* gcc.target/aarch64/acle/jcvt_1.c: New test.
From-SVN: r275335
This patch adds '-mcpu' options for following CPUs:
Cortex-A77, Cortex-A76AE, Cortex-A65, Cortex-A65AE, and Cortex-A34.
Related specifications are as following:
https://developer.arm.com/ip-products/processors/cortex-a
Bootstraped/regtested for aarch64-none-linux-gnu.
2019-09-03 Dennis Zhang <dennis.zhang@arm.com>
* config/aarch64/aarch64-cores.def (AARCH64_CORE): New entries
for Cortex-A77, Cortex-A76AE, Cortex-A65, Cortex-A65AE, and
Cortex-A34.
* config/aarch64/aarch64-tune.md: Regenerated.
* doc/invoke.texi: Document the new processors.
From-SVN: r275333
This patch adds feature strings for some of the extensions. This string is what is read from /proc/cpuinfo on Linux systems
and used during -march=native detection.
The strings are taken from the kernel source tree at:
https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/cpuinfo.c#L45
* config/aarch64/aarch64-option-extensions.def (sb): Add feature
string.
(ssbs): Likewise.
(sve2): Likewise.
(sve2-sm4): Likewise.
(sveaes): Likewise.
(svesha3): Likewise.
(svebitperm): Likewise.
From-SVN: r275331
PR tree-optimization/91597
* tree-vrp.c (extract_range_from_binary_expr): Remove unsafe
BIT_AND_EXPR optimization for pointers, even if both operand
ranges don't include NULL, the result can be NULL.
* gcc.c-torture/execute/pr91597.c: New test.
Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r275330
This test uses a call-saved register as a global variable. It
attempts to preserve its value across main, but only the lower int
part is preserved, which is not good enough for x86_64, when the
runtime that calls main() happens to hold something in the chosen
register that is not a zero-extension from the 32-bit value, and
rightfully expects the full register to remain unchanged when main()
returns.
for gcc/testsuite/ChangeLog
* gcc.target/i386/20020616-1.c: Preserve full register across
main.
From-SVN: r275329
2019-09-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91589
* primary.c (gfc_match_varspec): Return MATCH_NO on an apparent
component ref, when the primary type is intrinsic.
2019-09-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91589
* gfortran.dg/pr91589.f90 : New test.
From-SVN: r275324
2019-09-02 Steven G. Kargl <kargl@gc.gnu.org>
PR fortran/91552
* array.c (walk_array_constructor): New function.
(gfc_match_array_constructor): Use it.
2019-09-02 Steven G. Kargl <kargl@gc.gnu.org>
PR fortran/91552
* gfortran.dg/pr91552.f90: New test.
From-SVN: r275322
* vim-gcc-dev/syntax/gcc-match.vim: Do not override 'tabstop' here.
* vimrc: Set preferred values for 'tabstop', 'softtabstop',
'shiftwidth', 'noexpandtab', 'textwidth', 'formatoptions' for all
files, not just C-like files.
From-SVN: r275316
* gimple-ssa-strength-reduction.c (valid_mem_ref_cand_p): New function.
(replace_ref): Do not replace a chain of only two candidates which are
valid memory references.
From-SVN: r275297