Martin Liska [Mon, 17 May 2021 10:57:08 +0000 (12:57 +0200)]
Remove install-old.texi
gcc/ChangeLog:
* Makefile.in: Remove it.
* doc/include/fdl.texi: Update next/previous chapters.
* doc/install.texi: Likewise.
* doc/install-old.texi: Removed.
Geng Qi [Wed, 26 May 2021 03:29:19 +0000 (11:29 +0800)]
C-SKY: Support fldrd/fstrd for fpuv2 and fldr.64/fstr.64 for fpuv3.
gcc/ChangeLog:
* config/csky/csky.c (ck810_legitimate_index_p): Support
"base + index" with DF mode.
* config/csky/constraints.md ("Y"): New constraint for memory operands
without index register.
* config/csky/csky_insn_fpuv2.md (fpuv3_movdf): Use "Y" instead of "m"
when mov between memory and general registers, and lower their priority.
* config/csky/csky_insn_fpuv3.md (fpuv2_movdf): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/csky/fldrd_fstrd.c: New.
* gcc.target/csky/fpuv3/fldr64_fstr64.c: New.
Geng Qi [Fri, 30 Apr 2021 13:03:33 +0000 (21:03 +0800)]
C-SKY: Delete definition TARGET_PROMOTE_PROTOTYPES, just use the default definition.
gcc/ChangeLog:
* config/csky/csky.c (TARGET_PROMOTE_PROTOTYPES): Delete.
Geng Qi [Fri, 30 Apr 2021 13:02:37 +0000 (21:02 +0800)]
C-SKY: Fix FAIL of gcc.dg/torture/stackalign/builtin-return-2.c.
gcc/ChangeLog:
* config/csky/csky.md (untyped_call): Emit clobber for return
registers to mark them used.
Geng Qi [Tue, 25 May 2021 10:45:25 +0000 (18:45 +0800)]
C-SKY: Add instruction "ld.bs".
gcc/
* config/csky/csky.md (cskyv2_sextend_ldbs): New.
gcc/testsuite/
* gcc.target/csky/ldbs.c: New.
Andrew Pinski [Sat, 22 May 2021 19:49:50 +0000 (19:49 +0000)]
Optimize x < 0 ? ~y : y to (x >> 31) ^ y in match.pd
This copies the optimization that is done in phiopt for
"x < 0 ? ~y : y to (x >> 31) ^ y" into match.pd. The code
for phiopt is kept around until phiopt uses match.pd (which
I am working towards).
Note the original testcase is now optimized early on and I added a
new testcase to optimize during phiopt.
OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
Thanks,
Andrew Pinski
Differences from v1:
V2: Add check for integeral type to make sure vector types are not done.
gcc:
* match.pd (x < 0 ? ~y : y): New patterns.
gcc/testsuite:
* gcc.dg/tree-ssa/pr96928.c: Update test for slightly different IR.
* gcc.dg/tree-ssa/pr96928-1.c: New testcase.
Andrew Pinski [Sun, 16 May 2021 20:07:06 +0000 (13:07 -0700)]
Add a couple of A?CST1:CST2 match and simplify optimizations
Instead of some of the more manual optimizations inside phi-opt,
it would be good idea to do a lot of the heavy lifting inside match
and simplify instead. In the process, this moves the three simple
A?CST1:CST2 (where CST1 or CST2 is zero) simplifications.
OK? Boostrapped and tested on x86_64-linux-gnu with no regressions.
Differences from V1:
* Use bit_xor 1 instead of bit_not to fix the problem with boolean types
which are not 1 bit precision.
Thanks,
Andrew Pinski
gcc:
* match.pd (A?CST1:CST2): Add simplifcations for A?0:+-1, A?+-1:0,
A?POW2:0 and A?0:POW2.
GCC Administrator [Wed, 26 May 2021 00:16:41 +0000 (00:16 +0000)]
Daily bump.
Andrew MacLeod [Tue, 25 May 2021 18:59:54 +0000 (14:59 -0400)]
Remove the logical stmt cache for now.
With the depth limiting, we are not currently using the logical stmt cache.
* gimple-range-gori.cc (class logical_stmt_cache): Delete
(logical_stmt_cache::logical_stmt_cache ): Delete.
(logical_stmt_cache::~logical_stmt_cache): Delete.
(logical_stmt_cache::cache_entry::dump): Delete.
(logical_stmt_cache::get_range): Delete.
(logical_stmt_cache::cached_name ): Delete.
(logical_stmt_cache::same_cached_name): Delete.
(logical_stmt_cache::cacheable_p): Delete.
(logical_stmt_cache::slot_diagnostics ): Delete.
(logical_stmt_cache::dump): Delete.
(gori_compute_cache::gori_compute_cache): Delete.
(gori_compute_cache::~gori_compute_cache): Delete.
(gori_compute_cache::compute_operand_range): Delete.
(gori_compute_cache::cache_stmt): Delete.
* gimple-range-gori.h (gori_compute::compute_operand_range): Remove
virtual.
(class gori_compute_cache): Delete.
Andrew MacLeod [Tue, 25 May 2021 18:55:04 +0000 (14:55 -0400)]
Adjust fur_source internal api to use gori_compute not ranger_cache.
In order to access the dependencies, the FoldUsingRange source API class
stored a range_cache.. THis is now contained in the base gori_compute class,
so use that now.
* gimple-range.cc (fold_using_range::range_of_range_op): Use m_gori
intead of m_cache.
(fold_using_range::range_of_address): Adjust.
(fold_using_range::range_of_phi): Adjust.
* gimple-range.h (class fur_source): Adjust.
(fur_source::fur_source): Adjust.
Andrew MacLeod [Tue, 25 May 2021 18:49:40 +0000 (14:49 -0400)]
Make expr_range_in_bb stmt based rather than block based.
prerequisite to moving to a range_query model, make it stmt based.
* gimple-range-gori.cc (gori_compute::expr_range_at_stmt): Rename
from expr_range_in_bb and adjust.
(gori_compute::compute_name_range_op): Adjust.
(gori_compute::optimize_logical_operands): Adjust.
(gori_compute::compute_logical_operands_in_chain): Adjust.
(gori_compute::compute_operand1_range): Adjust.
(gori_compute::compute_operand2_range): Adjust.
(ori_compute_cache::cache_stmt): Adjust.
* gimple-range-gori.h (gori_compute): Rename prototype.
Andrew MacLeod [Tue, 25 May 2021 18:41:16 +0000 (14:41 -0400)]
Tweak location of non-null calls. revamp ranger debug output.
range_on_entry shouldnt be checking non-null, but we sometimes should
after calling it.
change the debug output a bit.
* gimple-range.cc (gimple_ranger::range_of_expr): Non-null should be
checked only after range_of_stmt, not range_on_entry.
(gimple_ranger::range_on_entry): Check for non-null in any
predecessor block, if it is not already non-null.
(gimple_ranger::range_on_exit): DOnt check for non-null after
range on entry call.
(gimple_ranger::dump_bb): New. Split from dump.
(gimple_ranger::dump): Adjust.
* gimple-range.h (class gimple_ranger): Adjust.
Andrew MacLeod [Tue, 25 May 2021 18:34:06 +0000 (14:34 -0400)]
Unify temporal cache with gori dependencies.
Move the temporal cache to strictly be a timestamp, and query GORI for
the dependencies rather than trying to register and maintain them.
* gimple-range-cache.cc (struct range_timestamp): Delete.
(class temporal_cache): Adjust.
(temporal_cache::get_timestamp): Delete.
(temporal_cache::set_dependency): Delete.
(temporal_cache::temporal_value): Adjust.
(temporal_cache::current_p): Take dependencies as params.
(temporal_cache::set_timestamp): Adjust.
(temporal_cache::set_always_current): Adjust.
(ranger_cache::get_non_stale_global_range): Adjust.
(ranger_cache::register_dependency): Delete.
* gimple-range-cache.h (class range_cache): Adjust.
Andrew MacLeod [Tue, 25 May 2021 18:15:50 +0000 (14:15 -0400)]
Add imports and strengthen the export definition in range_def and gori_map.
All add up to 2 direct dependencies for each ssa-name.
Add gori import/export iterators.
* gimple-range-gori.cc (range_def_chain::range_def_chain): init
bitmap obstack.
(range_def_chain::~range_def_chain): Dispose of obstack rather than
each individual bitmap.
(range_def_chain::set_import): New.
(range_def_chain::get_imports): New.
(range_def_chain::chain_import_p): New.
(range_def_chain::register_dependency): Rename from build_def_chain
and set imports.
(range_def_chain::def_chain_in_bitmap_p): New.
(range_def_chain::add_def_chain_to_bitmap): New.
(range_def_chain::has_def_chain): Just check first depenedence.
(range_def_chain::get_def_chain): Process imports, use generic
register_dependency routine.
(range_def_chain::dump): New.
(gori_map::gori_map): Allocate import list.
(gori_map::~gori_map): Release imports.
(gori_map::exports): Check for past allocated block size.
(gori_map::imports): New.
(gori_map::def_chain_in_export_p): Delete.
(gori_map::is_import_p): New.
(gori_map::maybe_add_gori): Handle imports.
(gori_map::dump): Adjust output, add imports.
(gori_compute::has_edge_range_p): Remove def_chain_in_export call.
(gori_export_iterator::gori_export_iterator): New.
(gori_export_iterator::next): New.
(gori_export_iterator::get_name): New.
* gimple-range-gori.h (range_def_chain): Add imports and direct
dependecies via struct rdc.
(range_def_chain::depend1): New.
(range_def_chain::depend2): New.
(class gori_map): Adjust.
(FOR_EACH_GORI_IMPORT_NAME): New.
(FOR_EACH_GORI_EXPORT_NAME): New.
(class gori_export_iterator): New.
Andrew MacLeod [Tue, 25 May 2021 17:53:25 +0000 (13:53 -0400)]
fully populate the export list from range_cache, not gori_compute.
Ranger wants to prepopulate all the export blocks so that it has an initial
invariant set of names. GORI consumers shouldn't be penalized for ranger
requirements. This way any gori client remains lightweight.
* gimple-range-cache.cc (ranger_cache::ranger_cache): Move initial
export cache filling to here.
* gimple-range-gori.cc (gori_compute::gori_compute) : From Here.
Andrew MacLeod [Tue, 25 May 2021 17:45:43 +0000 (13:45 -0400)]
Change gori_compute to inherit from gori_map instead of having a gori-map.
Move the classes to the header file and inherit instead of instantiating.
* gimple-range-gori.cc (range_def_chain): Move to gimple-range-gori.h.
(gori_map): Move to gimple-range-gori.h.
(gori_compute::gori_compute): Adjust.
(gori_compute::~gori_compute): Delete.
(gori_compute::compute_operand_range_switch): Adjust.
(gori_compute::compute_operand_range): Adjust.
(gori_compute::compute_logical_operands): Adjust.
(gori_compute::has_edge_range_p ): Adjust.
(gori_compute::set_range_invariant): Delete.
(gori_compute::dump): Adjust.
(gori_compute::outgoing_edge_range_p): Adjust.
* gimple-range-gori.h (class range_def_chain): Relocate here.
(class gori_map): Relocate here.
(class gori_compute): Inherit from gori_map, and adjust.
Aldy Hernandez [Tue, 25 May 2021 06:36:44 +0000 (08:36 +0200)]
Fix selftest for targets where short and int are the same size.
avr-elf seems to use HImode for both integer_type_node and
signed_char_type_node, which is causing the check for different sized
VARYING ranges to fail.
gcc/ChangeLog:
* value-range.cc (range_tests_legacy): Use
build_nonstandard_integer_type instead of int and short.
Eric Botcazou [Tue, 25 May 2021 16:30:29 +0000 (18:30 +0200)]
Remove stalled TREE_READONLY flag on automatic variable
gcc/
* gimplify.c (gimplify_decl_expr): Clear TREE_READONLY on the DECL
when really creating an initialization statement for it.
Jakub Jelinek [Tue, 25 May 2021 15:24:38 +0000 (17:24 +0200)]
c++: Avoid -Wunused-value false positives on nullptr passed to ellipsis [PR100666]
When passing expressions with decltype(nullptr) type with side-effects to
ellipsis, we pass (void *)0 instead, but for the side-effects evaluate them
on the lhs of a COMPOUND_EXPR. Unfortunately that means we warn about it
if the expression is a call to nodiscard marked function, even when the
result is really used, just needs to be transformed.
Fixed by adding a warning_sentinel.
2021-05-25 Jakub Jelinek <jakub@redhat.com>
PR c++/100666
* call.c (convert_arg_to_ellipsis): For expressions with NULLPTR_TYPE
and side-effects, temporarily disable -Wunused-result warning when
building COMPOUND_EXPR.
* g++.dg/cpp1z/nodiscard8.C: New test.
* g++.dg/cpp1z/nodiscard9.C: New test.
Eric Botcazou [Tue, 25 May 2021 14:51:05 +0000 (16:51 +0200)]
Fix thinko in latest change to setup_one_parameter
gcc/
* tree-inline.c (setup_one_parameter): Fix thinko in new condition.
Jakub Jelinek [Tue, 25 May 2021 14:44:35 +0000 (16:44 +0200)]
c++tools: Include <cstdlib> for exit [PR100731]
This TU uses exit, but doesn't include <stdlib.h> or <cstdlib> and relies
on some other header to include it indirectly, which apparently doesn't
happen on reporter's host.
The other <c*> headers aren't guarded either and we rely on a compiler
capable of C++11, so maybe we can rely on <cstdlib> being around
unconditionally.
2021-05-25 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/100731
* server.cc: Include <cstdlib>.
Kito Cheng [Tue, 25 May 2021 13:26:12 +0000 (21:26 +0800)]
RISC-V: Pass -mno-relax to assembler
gcc/ChangeLog:
* config/riscv/riscv.h (ASM_SPEC): Pass -mno-relax.
Martin Liska [Wed, 10 Mar 2021 14:12:31 +0000 (15:12 +0100)]
Improve global state for options.
gcc/c-family/ChangeLog:
PR tree-optimization/92860
PR target/99592
* c-attribs.c (handle_optimize_attribute): Save target node
before calling parse_optimize_options and save it in case
it changes.
* c-pragma.c (handle_pragma_target): Similarly for pragma.
(handle_pragma_pop_options): Likewise here.
gcc/ChangeLog:
PR tree-optimization/92860
PR target/99592
* optc-save-gen.awk: Remove exceptions.
Martin Liska [Thu, 20 May 2021 07:32:29 +0000 (09:32 +0200)]
Add no_sanitize_coverage attribute.
gcc/ChangeLog:
* asan.h (sanitize_coverage_p): New function.
* doc/extend.texi: Document it.
* fold-const.c (fold_range_test): Use sanitize_flags_p
instead of flag_sanitize_coverage.
(fold_truth_andor): Likewise.
* sancov.c: Likewise.
* tree-ssa-ifcombine.c (ifcombine_ifandif): Likewise.
* ipa-inline.c (sanitize_attrs_match_for_inline_p): Handle
-fsanitize-coverage when inlining.
gcc/c-family/ChangeLog:
* c-attribs.c (handle_no_sanitize_coverage_attribute): New.
gcc/testsuite/ChangeLog:
* gcc.dg/sancov/attribute.c: New test.
Cooper Qu [Tue, 25 May 2021 12:03:48 +0000 (20:03 +0800)]
C-SKY: Fix copyright of csky-modes.def.
The incorrect copyright comment format causes build error:
builddir/source//gcc/gcc/config/csky/csky-modes.def: In function ‘void create_modes()’:
builddir/source//gcc/gcc/config/csky/csky-modes.def:1:4: error: ‘C’ was not declared in this scope
;; C-SKY extra machine modes.
^
builddir/source//gcc/gcc/config/csky/csky-modes.def:1:6: error: ‘SKY’ was not declared in this scope
;; C-SKY extra machine modes.
^
builddir/source//gcc/gcc/config/csky/csky-modes.def:2:16: error: ‘Copyright’ was not declared in this scope
;; Copyright (C) 2018-2021 Free Software Foundation, Inc.
^
builddir/source//gcc/gcc/config/csky/csky-modes.def:3:4: error: ‘Contributed’ was not declared in this scope
;; Contributed by C-SKY Microsystems and Mentor Graphics.
^
gcc/ChangeLog:
* config/csky/csky-modes.def : Fix copyright.
Eric Botcazou [Tue, 25 May 2021 10:12:08 +0000 (12:12 +0200)]
Fix typo and weird syntax in configure script
c++tools/
* configure.ac (--enable-maintainer-mode): Fix typo and weird syntax.
* configure: Regenerate.
Cooper Qu [Tue, 25 May 2021 08:56:58 +0000 (16:56 +0800)]
C-SKY: Amend copyrights of recently added files.
gcc/ChangeLog:
* config/csky/csky-modes.def : Amend copyright.
* config/csky/csky_insn_fpuv2.md : Likewise.
* config/csky/csky_insn_fpuv3.md : Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/csky/fpuv3/fpuv3.exp : Amend copyright.
Richard Biener [Tue, 25 May 2021 09:11:27 +0000 (11:11 +0200)]
libgomp/100747 - fix permission of configure scripts
Added executable bits.
2021-05-25 Richard Biener <rguenther@suse.de>
PR libgomp/100747
liboffloadmic/
* configure: Make executable.
* plugin/configure: Likewise.
Jakub Jelinek [Tue, 25 May 2021 09:11:02 +0000 (11:11 +0200)]
Update copyright years in c++tools
While looking at PR100731, I have noticed the copyright years are 2020-ish
only. This patch adds it to update-copyright.py and updates those.
2021-05-25 Jakub Jelinek <jakub@redhat.com>
contrib/
* update-copyright.py: Add c++tools.
c++tools/
* Makefile.in: Update copyright year.
* configure.ac: Likewise.
* resolver.cc: Likewise.
* resolver.h: Likewise.
* server.cc: Likewise.
(print_version): Update copyright notice date.
Richard Biener [Tue, 25 May 2021 08:21:41 +0000 (10:21 +0200)]
middle-end/100727 - fix call expansion with WITH_SIZE_EXPR arg
call expansion used the result of get_base_address to switch between
ABIs - with get_base_address now never returning NULL we have to
re-instantiate the check in a more explicit way. This also adjusts
mark_addressable to skip WITH_SIZE_EXPRs, consistent with how
build_fold_addr_expr handles it.
2021-05-25 Richard Biener <rguenther@suse.de>
PR middle-end/100727
* calls.c (initialize_argument_information): Explicitely test
for WITH_SIZE_EXPR.
* gimple-expr.c (mark_addressable): Skip outer WITH_SIZE_EXPR.
Jakub Jelinek [Tue, 25 May 2021 09:07:01 +0000 (11:07 +0200)]
openmp: Fix reduction clause handling on teams distribute simd [PR99928]
When a directive isn't combined with worksharing-loop, it takes much
simpler clause splitting path for reduction, and that one was missing
handling of teams when combined with simd.
2021-05-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/99928
gcc/c-family/
* c-omp.c (c_omp_split_clauses): Copy reduction to teams when teams is
combined with simd and not with taskloop or for.
gcc/testsuite/
* c-c++-common/gomp/pr99928-8.c: Remove xfails from omp teams r21 and
r28 checks.
* c-c++-common/gomp/pr99928-9.c: Likewise.
* c-c++-common/gomp/pr99928-10.c: Likewise.
libgomp/
* testsuite/libgomp.c-c++-common/reduction-17.c: New test.
Martin Liska [Tue, 25 May 2021 08:37:28 +0000 (10:37 +0200)]
Fix sphinx-build warning.
RemovedInSphinx40Warning: app.add_lexer() API changed; Please give lexer class instead of instance
gcc/ada/ChangeLog:
* doc/share/conf.py: Fix Sphinx 4.0.x error.
Geng Qi [Fri, 30 Apr 2021 13:01:31 +0000 (21:01 +0800)]
C-SKY: Add cases for csky fpuv3 instructions.
gcc/testsuite/ChangeLog:
* gcc.target/csky/fpuv3/fpuv3.exp: New.
* gcc.target/csky/fpuv3/fpv3_div.c: New.
* gcc.target/csky/fpuv3/fpv3_fadd.c: New.
* gcc.target/csky/fpuv3/fpv3_fdtos.c: New.
* gcc.target/csky/fpuv3/fpv3_fftoi_rm.c: New.
* gcc.target/csky/fpuv3/fpv3_fftoi_rz.c: New.
* gcc.target/csky/fpuv3/fpv3_fhtos.c: New.
* gcc.target/csky/fpuv3/fpv3_fitof.c: New.
* gcc.target/csky/fpuv3/fpv3_fmov.c: New.
* gcc.target/csky/fpuv3/fpv3_fmovi.c: New.
* gcc.target/csky/fpuv3/fpv3_fmula.c: New.
* gcc.target/csky/fpuv3/fpv3_fmuls.c: New.
* gcc.target/csky/fpuv3/fpv3_fneg.c: New.
* gcc.target/csky/fpuv3/fpv3_fnmula.c: New.
* gcc.target/csky/fpuv3/fpv3_fnmuls.c: New.
* gcc.target/csky/fpuv3/fpv3_fstod.c: New.
* gcc.target/csky/fpuv3/fpv3_fstoh.c: New.
* gcc.target/csky/fpuv3/fpv3_fsub.c: New.
* gcc.target/csky/fpuv3/fpv3_fxtof.c: New.
* gcc.target/csky/fpuv3/fpv3_h.c: New.
* gcc.target/csky/fpuv3/fpv3_hs.c: New.
* gcc.target/csky/fpuv3/fpv3_hsz.c: New.
* gcc.target/csky/fpuv3/fpv3_hz.c: New.
* gcc.target/csky/fpuv3/fpv3_ls.c: New.
* gcc.target/csky/fpuv3/fpv3_lsz.c: New.
* gcc.target/csky/fpuv3/fpv3_lt.c: New.
* gcc.target/csky/fpuv3/fpv3_ltz.c: New.
* gcc.target/csky/fpuv3/fpv3_max.c: New.
* gcc.target/csky/fpuv3/fpv3_min.c: New.
* gcc.target/csky/fpuv3/fpv3_mul.c: New.
* gcc.target/csky/fpuv3/fpv3_mula.c: New.
* gcc.target/csky/fpuv3/fpv3_muls.c: New.
* gcc.target/csky/fpuv3/fpv3_ne.c: New.
* gcc.target/csky/fpuv3/fpv3_nez.c: New.
* gcc.target/csky/fpuv3/fpv3_recip.c: New.
* gcc.target/csky/fpuv3/fpv3_sqrt.c: New.
* gcc.target/csky/fpuv3/fpv3_unordered.c: New.
Tobias Burnus [Tue, 25 May 2021 07:17:07 +0000 (09:17 +0200)]
fortran/intrinsic.texi: Fix copy'n'paste errors and typos
gcc/fortran/ChangeLog:
* intrinsic.texi (GERROR, GETARGS, GETLOG, NORM2, PARITY, RANDOM_INIT,
RANDOM_NUMBER): Fix typos and copy'n'paste errors.
Co-Authored-By: Johannes Nendwich <a08727063@unet.univie.ac.at>
Geng Qi [Mon, 24 May 2021 12:22:55 +0000 (20:22 +0800)]
C-SKY: Separate FRAME_POINTER_REGNUM into FRAME_POINTER_REGNUM and HARD_FRAME_POINTER_REGNUM.
gcc/ChangeLog:
* config/csky/csky.h (FRAME_POINTER_REGNUM): Use
HARD_FRAME_POINTER_REGNUM and FRAME_POINTER_REGNUM instead of
the signle definition. The signle definition may not work well
at simplify_subreg_regno().
(HARD_FRAME_POINTER_REGNUM): New.
(ELIMINABLE_REGS): Add for HARD_FRAME_POINTER_REGNUM.
* config/csky/csky.c (get_csky_live_regs, csky_can_eliminate,
csky_initial_elimination_offset, csky_expand_prologue,
csky_expand_epilogue): Add for HARD_FRAME_POINTER_REGNUM.
Geng Qi [Mon, 24 May 2021 12:22:54 +0000 (20:22 +0800)]
C-SKY: Bug fix for bad setting of TARGET_DSP and TARGET_DIV.
gcc/ChangeLog:
* config/csky/csky.c (csky_option_override):
Init csky_arch_isa_features[] in advance, so TARGET_DSP
and TARGET_DIV can be set well.
Geng Qi [Mon, 24 May 2021 12:22:53 +0000 (20:22 +0800)]
C-SKY: Delete LO_REGS and HI_REGS, use HILO_REGS instead.
gcc/ChangeLog:
* config/csky/constraints.md ("l", "h"): Delete.
* config/csky/csky.h (reg_class, REG_CLASS_NAMES,
REG_CLASS_CONTENTS): Delete LO_REGS and HI_REGS.
* config/csky/csky.c (regno_reg_classm,
csky_secondary_reload, csky_register_move_cost):
Use HILO_REGS instead of LO_REGS and HI_REGS.
Geng Qi [Mon, 24 May 2021 12:22:52 +0000 (20:22 +0800)]
C-SKY: Add fpuv3 instructions and CK860 arch.
gcc/ChangeLog:
* config/csky/constraints.md ("W"): New constriant for mem operand
with base reg, index register.
("Q"): Renamed and modified "csky_valid_fpuv2_mem_operand" to
"csky_valid_mem_constraint_operand" to deal with both "Q" and "W"
constraint.
("Dv"): New constraint for const double value that can be used at
fmovi instruction.
* config/csky/csky-modes.def (HFmode): New mode.
* config/csky/csky-protos.h (csky_valid_fpuv2_mem_operand): Rename
to "csky_valid_mem_constraint_operand" and support new constraint
"W".
(csky_get_movedouble_length): New.
(fpuv3_output_move): New.
(fpuv3_const_double): New.
* config/csky/csky.c (csky_option_override): New arch CK860 with fpv3.
(decompose_csky_address): Refine.
(csky_print_operand): New "CONST_DOUBLE" operand.
(csky_output_move): Support fpv3 instructions.
(csky_get_movedouble_length): New.
(fpuv3_output_move): New.
(fpuv3_const_double): New.
(csky_emit_compare): Cover float comparsion.
(csky_emit_compare_float): Refine.
(csky_vaild_fpuv2_mem_operand): Rename to
"csky_valid_mem_constraint_operand" and support new constraint "W".
(ck860_rtx_costs): New.
(csky_rtx_costs): Add the cost calculation of CK860.
(regno_reg_class): New vregs for fpuv3.
(csky_dbx_regno): Likewise.
(csky_cpu_cpp_builtins): New builtin macro for fpuv3.
(csky_conditional_register_usage): Suporrot fpuv3.
(csky_dwarf_register_span): Suporrot fpuv3.
(csky_init_builtins, csky_mangle_type): Support "__fp16" type.
(ck810_legitimate_index_p): Support fp16.
* config/csky/csky.h (TARGET_TLS): ADD CK860.
(CSKY_VREG_P, CSKY_VREG_LO_P, CSKY_VREG_HI_P): Support fpuv3.
(TARGET_SINGLE_FPU): Support fpuv3.
(TARGET_SUPPORT_FPV3): New.
(FIRST_PSEUDO_REGISTER): Change to 202 to hold the new fpuv3 registers.
(FIXED_REGISTERS, CALL_REALLY_USED_REGISTERS, REGISTER_NAMES,
REG_CLASS_CONTENTS): Support fpuv3.
* config/csky/csky.md (movsf): Move to cksy_insn_fpu.md and refine.
(csky_movsf_fpv2): Likewise.
(ck801_movsf): Likewise.
(csky_movsf): Likewise.
(movdf): Likewise.
(csky_movdf_fpv2): Likewise.
(ck801_movdf): Likewise.
(csky_movdf): Likewise.
(movsicc): Refine. Use "comparison_operatior" instead of
"ordered_comparison_operatior".
(addsicc): Likewise.
(CSKY_FIRST_VFP3_REGNUM, CSKY_LAST_VFP3_REGNUM): New constant.
(call_value_internal_vh): New.
* config/csky/csky_cores.def (CK860): New arch and cpu.
(fpv3_hf): New.
(fpv3_hsf): New.
(fpv3_sdf): New.
(fpv3): New.
* config/csky/csky_insn_fpu.md: Refactor. Separate all float patterns
into emit-patterns and match-patterns, remain the emit-patterns here,
and move the match-patterns to csky_insn_fpuv2.md or
csky_insn_fpuv3.md.
* config/csky/csky_insn_fpuv2.md: New file for fpuv2 instructions.
* config/csky/csky_insn_fpuv3.md: New file and new patterns for fpuv3
isntructions.
* config/csky/csky_isa.def (fcr): New.
(fpv3_hi): New.
(fpv3_hf): New.
(fpv3_sf): New.
(fpv3_df): New.
(CK860): New definition for ck860.
* config/csky/csky_tables.opt (ck860): New processors ck860,
ck860f. And new arch ck860.
(fpv3_hf): New.
(fpv3_hsf): New.
(fpv3_hdf): New.
(fpv3): New.
* config/csky/predicates.md (csky_float_comparsion_operator): Delete
"geu", "gtu", "leu", "ltu", which will never appear at float comparison.
* config/csky/t-csky-elf: Support 860.
* config/csky/t-csky-linux: Likewise.
* doc/md.texi: Add "Q" and "W" constraints for C-SKY.
GCC Administrator [Tue, 25 May 2021 00:16:53 +0000 (00:16 +0000)]
Daily bump.
Ian Lance Taylor [Sun, 23 May 2021 02:19:13 +0000 (19:19 -0700)]
compiler: mark global variables whose address is taken
To implement this, change the backend to use flag bits for variables.
Fixes https://gcc.gnu.org/PR100537
PR go/100537
* go-gcc.cc (class Gcc_backend): Update methods that create
variables to take a flags parameter.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/322129
François Dumont [Tue, 25 Aug 2020 19:31:23 +0000 (21:31 +0200)]
libstdc++: Limit allocation on iterator insertion in Hashtable [PR 96088]
When inserting into unordered_multiset or unordered_multimap first instantiate
the node to store and compute the hash code from it to avoid a potential
intermediate key_type instantiation.
When inserting into unordered_set or unordered_map check if invoking the hash
functor with container key_type is noexcept and invoking the same hash functor
with key part of the iterator value_type can throw. In this case create a
temporary key_type instance at Hashtable level and use it to compute the hash
code. This temporary instance is moved to the final storage location if needed.
libstdc++-v3/ChangeLog:
PR libstdc++/96088
* include/bits/hashtable_policy.h (_Select2nd): New.
(_NodeBuilder<>): New.
(_ReuseOrAllocNode<>::operator()): Use variadic template args.
(_AllocNode<>::operator()): Likewise.
* include/bits/hashtable.h
(_Hashtable<>::__node_builder_t): New.
(_Hashtable<>::_M_insert_unique<>(_Kt&&, _Arg&&, const _NodeGenerator&)):
New.
(_Hashtable<>::_S_forward_key): New.
(_Hashtable<>::_M_insert): Use latter.
(_Hashtable<>::_M_insert(const_iterator, _Arg&&, const _NodeGenerator&, false_type)):
Instantiate node first, compute hash code second.
* testsuite/23_containers/unordered_map/96088.cc: New test.
* testsuite/23_containers/unordered_multimap/96088.cc: New test.
* testsuite/23_containers/unordered_multiset/96088.cc: New test.
* testsuite/23_containers/unordered_set/96088.cc: New test.
* testsuite/util/replacement_memory_operators.h
(counter::_M_increment): New.
(counter::_M_decrement): New.
(counter::reset()): New.
Aaron Sawdey [Wed, 3 Mar 2021 00:06:37 +0000 (18:06 -0600)]
Fusion patterns for add-logical/logical-add
This patch modifies the function in genfusion.pl for generating
the logical-logical patterns so that it can also generate the
add-logical and logical-add patterns which are very similar.
gcc/ChangeLog:
* config/rs6000/genfusion.pl (gen_logical_addsubf): Refactor to
add generation of logical-add and add-logical fusion pairs.
* config/rs6000/rs6000-cpus.def: Add new fusion to ISA 3.1 mask
and powerpc mask.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Turn on
logical-add and add-logical fusion by default.
* config/rs6000/rs6000.opt: Add -mpower10-fusion-logical-add and
-mpower10-fusion-add-logical options.
* config/rs6000/fusion.md: Regenerate file.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/fusion-p10-logadd.c: New file.
Aldy Hernandez [Mon, 24 May 2021 17:57:29 +0000 (19:57 +0200)]
VARYING ranges of different sizes should not be equal.
VARYING ranges are just normal ranges that span the entire domain. Such
ranges have had end-points for a few releases now, and the fact that the
legacy code was still treating all VR_VARYING the same was an oversight.
This patch fixes the oversight to match the multi-range behavior.
gcc/ChangeLog:
* value-range.cc (irange::legacy_equal_p): Check type when
comparing VR_VARYING types.
(range_tests_legacy): Test comparing VARYING ranges of different
sizes.
Patrick Palka [Mon, 24 May 2021 19:24:44 +0000 (15:24 -0400)]
libstdc++: Fix iterator caching inside range adaptors [PR100479]
This fixes two issues with our iterator caching as described in detail
in the PR. Since we recently added the __non_propagating_cache class
template as part of r12-336 for P2328, this patch just rewrites the
problematic _CachedPosition partial specialization in terms of this
class template.
For the offset partial specialization, it's safe to propagate the cached
offset on copy/move, but we should still invalidate the cached offset in
the source object on move.
libstdc++-v3/ChangeLog:
PR libstdc++/100479
* include/std/ranges (__detail::__non_propagating_cache): Move
definition up to before that of _CachedPosition. Make base
class _Optional_base protected instead of private. Add const
overload for operator*.
(__detail::_CachedPosition): Rewrite the partial specialization
for forward ranges as a derived class of __non_propagating_cache.
Remove the size constraint on the partial specialization for
random access ranges. Add copy/move/copy-assignment/move-assignment
members to the offset partial specialization for random
access ranges that propagate the cached value but additionally
invalidate it in the source object on move.
* testsuite/std/ranges/adaptors/100479.cc: New test.
Jonathan Wakely [Mon, 24 May 2021 17:42:09 +0000 (18:42 +0100)]
libstdc++: Qualify functions used in tests
These tests rely on ADL for some functions, probably unintentionally.
The calls only work because the iterator wrappers derive from
std::iterator and so namespace std is an associated namespace.
libstdc++-v3/ChangeLog:
* testsuite/25_algorithms/inplace_merge/constrained.cc: Qualify
call to ranges::next.
* testsuite/25_algorithms/is_sorted/constrained.cc: Likewise.
* testsuite/25_algorithms/is_sorted_until/constrained.cc:
Likewise.
* testsuite/25_algorithms/swap_ranges/1.cc: Qualify call to
swap_ranges.
Tobias Burnus [Mon, 24 May 2021 14:50:51 +0000 (16:50 +0200)]
OpenMP/Fortran: Handle polymorphic scalars in data-sharing FIRSTPRIVATE [PR86470]
gcc/fortran/ChangeLog:
PR fortran/86470
* trans-expr.c (gfc_copy_class_to_class): Add unshare_expr.
* trans-openmp.c (gfc_is_polymorphic_nonptr,
gfc_is_unlimited_polymorphic_nonptr): New.
(gfc_omp_clause_copy_ctor, gfc_omp_clause_dtor): Handle
polymorphic scalars.
libgomp/ChangeLog:
PR fortran/86470
* testsuite/libgomp.fortran/class-firstprivate-1.f90: New test.
* testsuite/libgomp.fortran/class-firstprivate-2.f90: New test.
* testsuite/libgomp.fortran/class-firstprivate-3.f90: New test.
gcc/testsuite/ChangeLog:
PR fortran/86470
* gfortran.dg/gomp/class-firstprivate-1.f90: New test.
* gfortran.dg/gomp/class-firstprivate-2.f90: New test.
* gfortran.dg/gomp/class-firstprivate-3.f90: New test.
* gfortran.dg/gomp/class-firstprivate-4.f90: New test.
Wilco Dijkstra [Mon, 24 May 2021 13:31:37 +0000 (14:31 +0100)]
AArch64: Enable fast shifts on Neoverse N1
Enable the fast shift feature in Neoverse N1 tuning - this means additions with
a shift left by 1-4 are as fast as addition. This improves multiply by constant
expansions, eg. x * 25 is now emitted using shifts rather than a multiply:
add w0, w0, w0, lsl 2
add w0, w0, w0, lsl 2
ChangeLog:
2020-09-11 Wilco Dijkstra <wdijkstr@arm.com>
* config/aarch64/aarch64.c (neoversen1_tunings):
Enable AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND.
Wilco Dijkstra [Mon, 24 May 2021 13:23:50 +0000 (14:23 +0100)]
AArch64: Cleanup aarch64_classify_symbol
Use a GOT indirection for extern weak symbols instead of a literal - this is
the same as PIC/PIE and mirrors LLVM behaviour. Ensure PIC/PIE use the same
offset limits for symbols that don't use the GOT.
Passes bootstrap and regress.
ChangeLog:
2021-04-27 Wilco Dijkstra <wdijkstr@arm.com>
* config/aarch64/aarch64.c (aarch64_classify_symbol): Use GOT for
extern weak symbols. Limit symbol offsets for non-GOT symbols with
PIC/PIE.
Christophe Lyon [Thu, 11 Mar 2021 11:08:49 +0000 (11:08 +0000)]
arm: Auto-vectorization for MVE: vld4/vst4
This patch enables MVE vld4/vst4 instructions for auto-vectorization.
We move the existing expanders from neon.md and enable them for MVE,
calling the respective emitter.
2021-03-12 Christophe Lyon <christophe.lyon@linaro.org>
gcc/
* config/arm/neon.md (vec_load_lanesxi<mode>)
(vec_store_lanexoi<mode>): Move ...
* config/arm/vec-common.md: here.
gcc/testsuite/
* gcc.target/arm/simd/mve-vld4.c: New test, derived from
slp-perm-3.c
Christophe Lyon [Mon, 8 Mar 2021 12:23:49 +0000 (12:23 +0000)]
arm: Auto-vectorization for MVE: vld2/vst2
This patch enables MVE vld2/vst2 instructions for auto-vectorization.
We move the existing expanders from neon.md and enable them for MVE,
calling the respective emitter.
2021-03-12 Christophe Lyon <christophe.lyon@linaro.org>
gcc/
* config/arm/neon.md (vec_load_lanesoi<mode>)
(vec_store_lanesoi<mode>): Move ...
* config/arm/vec-common.md: here.
gcc/testsuite/
* gcc.target/arm/simd/mve-vld2.c: New test, derived from
slp-perm-2.c
Wang Liushuai [Mon, 24 May 2021 08:09:29 +0000 (10:09 +0200)]
Do not load the thunk symbols.
gcc/lto/ChangeLog:
* lto-dump.c (get_size): Fix the NPD error about the thunk symbol.
Martin Liska [Mon, 24 May 2021 07:16:01 +0000 (09:16 +0200)]
gcc-changelog: Add note about ChangeLog entries
contrib/ChangeLog:
* gcc-changelog/git_commit.py: Add note that ChangeLog entries
are added automatically.
* gcc-changelog/test_email.py: Update test.
liuhongt [Thu, 20 May 2021 01:59:36 +0000 (09:59 +0800)]
Fix ICE when lhs is NULL.
gcc/ChangeLog:
PR target/100660
* config/i386/i386.c (ix86_gimple_fold_builtin): Replacing
stmt with GIMPLE_NOP when lhs doesn't exist.
gcc/testsuite/ChangeLog:
PR target/100660
* gcc.target/i386/pr100660.c: New test.
Andrew Pinski [Sun, 23 May 2021 17:35:40 +0000 (17:35 +0000)]
Fix two testcases for ssa names which are more than 1 digit
phi-opt-10.c and phi-opt-7.c both depend on currently that some ssa name
versions are one digit long which is not always correct. This fixes the
problem by detecting digits rather than just using '.'.
Committed as obvious after a bootstrap/test.
Thanks,
Andrew Pinski
gcc/testsuite/ChangeLog
* gcc.dg/tree-ssa/phi-opt-10.c: Use "\[0-9\]*" instead of '.'
when matching ssa name version.
* gcc.dg/tree-ssa/phi-opt-7.c: Likewise.
GCC Administrator [Mon, 24 May 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.
Uros Bizjak [Sun, 23 May 2021 20:14:21 +0000 (22:14 +0200)]
i386: Add push insns for 4-byte vectors [PR100722]
2021-05-23 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/100722
* config/i386/mmx.md (*push<VI_32:mode>2_rex64):
New instruction pattern.
(*push<VI_32:mode>2): Ditto.
(push splitter for SSE registers): New splitter.
gcc/testsuite/
PR target/100722
* gcc.target/i386/pr100722.c: New test.
Harald Anlauf [Sun, 23 May 2021 18:51:14 +0000 (20:51 +0200)]
Fortran: fix passing return value to class(*) dummy argument
gcc/fortran/ChangeLog:
PR fortran/100551
* trans-expr.c (gfc_conv_procedure_call): Adjust check for
implicit conversion of actual argument to an unlimited polymorphic
procedure argument.
gcc/testsuite/ChangeLog:
PR fortran/100551
* gfortran.dg/pr100551.f90: New test.
Martin Liska [Sun, 23 May 2021 12:19:08 +0000 (14:19 +0200)]
Revert "Add ChangeLogs for the previous commit."
This reverts commit
1160d9c1e482ea1dc524c056aa8eeaff6b1a591e.
Martin Liska [Sun, 23 May 2021 12:08:08 +0000 (14:08 +0200)]
Revert "PR98301 Add missing changelog entries."
This reverts commit
c4771b3438a8cd9afcef1762957b763f8df3fa6e.
Tobias Burnus [Sun, 23 May 2021 09:56:39 +0000 (11:56 +0200)]
fortran/intrinsic.texi: Use proper variable name
gcc/fortran/ChangeLog:
* intrinsic.texi (ATOMIC_ADD, ATOMIC_FETCH_ADD): Use the
proper variable name in the description.
Andrew Pinski [Sun, 23 May 2021 08:11:06 +0000 (08:11 +0000)]
Add ChangeLogs for the previous commit.
Andrew Pinski [Sun, 16 May 2021 17:40:16 +0000 (10:40 -0700)]
Don't simplify (A & C) != 0 ? D : 0 for pointer types.
While rewriting part of PHI-OPT to use match-and-simplify,
I ran into a bug where this pattern in match.pd would hit
and would produce invalid gimple; a shift of a pointer type.
This just disables this simplification for pointer types similarly
to what is already done in PHI-OPT for the generic A ? D : 0 case.
OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
Thanks,
Andrew Pinski
2021-5-23 Andrew Pinski <apinski@marvell.com>
gcc/
* match.pd ((A & C) != 0 ? D : 0): Limit to non pointer types.
gcc/testsuite/
* gcc.dg/gimplefe-45.c: New test.
GCC Administrator [Sun, 23 May 2021 00:16:24 +0000 (00:16 +0000)]
Daily bump.
Andre Vehreschild [Sat, 22 May 2021 11:36:31 +0000 (13:36 +0200)]
PR98301 Add missing changelog entries.
Andre Vehreschild [Sat, 22 May 2021 11:27:42 +0000 (13:27 +0200)]
Steve Kargl <kargl@gcc.gnu.org>
PR fortran/98301 - random_init() is broken
Correct implementation of random_init() when -fcoarray=lib is given.
gcc/fortran/ChangeLog:
PR fortran/98301
* trans-decl.c (gfc_build_builtin_function_decls): Move decl.
* trans-intrinsic.c (conv_intrinsic_random_init): Use bool for
lib-call of caf_random_init instead of logical (4-byte).
* trans.h: Add tree var for random_init.
libgfortran/ChangeLog:
PR fortran/98301
* caf/libcaf.h (_gfortran_caf_random_init): New function.
* caf/single.c (_gfortran_caf_random_init): New function.
* gfortran.map: Added fndecl.
* intrinsics/random_init.f90: Implement random_init.
Thomas Schwinge [Sat, 22 May 2021 08:28:34 +0000 (10:28 +0200)]
[OpenACC privatization] Prune uninteresting/varying diagnostics in 'libgomp.oacc-fortran/privatized-ref-2.f90'
Minor fix-up for my recent commit
11b8286a83289f5b54e813f14ff56d730c3f3185
"[OpenACC privatization] Largely extend diagnostics and corresponding testsuite
coverage [PR90115]".
libgomp/
PR testsuite/90115
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Prune
uninteresting/varying diagnostics.
Reported-by: Sunil K Pandey <skpandey@sc.intel.com>
Aaron Sawdey [Sat, 22 May 2021 02:59:39 +0000 (21:59 -0500)]
Fix rs6000 p10 fusion patterns with old attr type names
Somehow I managed to check in a version of genfusion.pl this
afternoon that was not updated to the new insn attr type names.
Committing as obvious and to make the code match what was posted
and reviewed.
gcc/
* config/rs6000/genfusion.pl (gen_addadd): Fix incorrect attr types.
* config/rs6000/fusion.md: Regenerate file.
GCC Administrator [Sat, 22 May 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.
Aaron Sawdey [Tue, 26 Jan 2021 03:11:52 +0000 (21:11 -0600)]
combine patterns for add-add fusion
This patch adds a function to genfusion.pl to add a couple
more patterns so combine can do fusion of pairs of add and
vaddudm instructions.
gcc/ChangeLog:
* config/rs6000/genfusion.pl (gen_addadd): New function.
* config/rs6000/fusion.md: Regenerate file.
* config/rs6000/rs6000-cpus.def: Add
OPTION_MASK_P10_FUSION_2ADD to masks.
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Handle default value of OPTION_MASK_P10_FUSION_2ADD.
* config/rs6000/rs6000.opt: Add -mpower10-fusion-2add.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/fusion-p10-addadd.c: New file.
Aaron Sawdey [Fri, 11 Dec 2020 19:47:12 +0000 (13:47 -0600)]
Test cases for p10 fusion patterns
This adds some test cases to make sure that the combine patterns for p10
fusion are working.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/fusion-p10-ldcmpi.c: New file.
* gcc.target/powerpc/fusion-p10-2logical.c: New file.
Jakub Jelinek [Fri, 21 May 2021 19:16:21 +0000 (21:16 +0200)]
openmp: Fix up firstprivate+lastprivate clause handling [PR99928]
The C/C++ clause splitting happens very early during construct parsing,
but only the FEs later on handle possible instantiations, non-static
member handling and array section lowering.
In the OpenMP 5.0/5.1 rules, whether firstprivate is added to combined
target depends on whether it isn't also mentioned in lastprivate or map
clauses, but unfortunately I think such checks are much better done only
when the FEs perform all the above mentioned changes.
So, this patch arranges for the firstprivate clause to be copied or moved
to combined target construct (as before), but sets flags on that clause,
which tell the FE *finish_omp_clauses and the gimplifier it has been added
only conditionally and let the FEs and gimplifier DTRT for these.
2021-05-21 Jakub Jelinek <jakub@redhat.com>
PR middle-end/99928
gcc/
* tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET): Define.
* gimplify.c (enum gimplify_omp_var_data): Fix up
GOVD_MAP_HAS_ATTACHMENTS value, add GOVD_FIRSTPRIVATE_IMPLICIT.
(omp_lastprivate_for_combined_outer_constructs): If combined target
has GOVD_FIRSTPRIVATE_IMPLICIT set for the decl, change it to
GOVD_MAP | GOVD_SEEN.
(gimplify_scan_omp_clauses): Set GOVD_FIRSTPRIVATE_IMPLICIT for
firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT.
(gimplify_adjust_omp_clauses): For firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT either clear that bit and
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET too, or remove it and
let it be replaced by implicit map clause.
gcc/c-family/
* c-omp.c (c_omp_split_clauses): Set OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT
on firstprivate clause copy going to target construct, and for
target simd set also OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET bit.
gcc/c/
* c-typeck.c (c_finish_omp_clauses): Move firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain. Don't error
if a decl is mentioned both in map clause and in such firstprivate
clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set.
gcc/cp/
* semantics.c (finish_omp_clauses): Move firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain. Don't error
if a decl is mentioned both in map clause and in such firstprivate
clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set.
gcc/testsuite/
* c-c++-common/gomp/pr99928-3.c: Remove all xfails.
* c-c++-common/gomp/pr99928-15.c: New test.
Jakub Jelinek [Fri, 21 May 2021 19:13:06 +0000 (21:13 +0200)]
openmp: Fix up handling of implicit lastprivate on outer constructs for implicit linear and lastprivate IVs [PR99928]
This patch fixes the handling of lastprivate propagation to outer combined/composite
leaf constructs from implicit linear or lastprivate clauses on simd IVs and adds missing
testsuite coverage for explicit and implicit lastprivate on simd IVs.
2021-05-21 Jakub Jelinek <jakub@redhat.com>
PR middle-end/99928
* gimplify.c (omp_lastprivate_for_combined_outer_constructs): New
function.
(gimplify_scan_omp_clauses) <case OMP_CLAUSE_LASTPRIVATE>: Use it.
(gimplify_omp_for): Likewise.
* c-c++-common/gomp/pr99928-6.c: Remove all xfails.
* c-c++-common/gomp/pr99928-13.c: New test.
* c-c++-common/gomp/pr99928-14.c: New test.
Thomas Schwinge [Fri, 21 May 2021 06:51:47 +0000 (08:51 +0200)]
[OpenACC privatization] Reject 'static', 'external' in blocks [PR90115]
gcc/
PR middle-end/90115
* omp-low.c (oacc_privatization_candidate_p): Reject 'static',
'external' in blocks.
gcc/testsuite/
PR middle-end/90115
* c-c++-common/goacc/privatization-1-compute-loop.c: Update.
* c-c++-common/goacc/privatization-1-compute.c: Likewise.
* c-c++-common/goacc/privatization-1-routine_gang-loop.c:
Likewise.
* c-c++-common/goacc/privatization-1-routine_gang.c: Likewise.
libgomp/
PR middle-end/90115
* testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Update.
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
Thomas Schwinge [Thu, 20 May 2021 14:11:37 +0000 (16:11 +0200)]
[OpenACC privatization] Largely extend diagnostics and corresponding testsuite coverage [PR90115]
gcc/
PR middle-end/90115
* flag-types.h (enum openacc_privatization): New.
* params.opt (-param=openacc-privatization): New.
* doc/invoke.texi (openacc-privatization): Document it.
* omp-general.h (get_openacc_privatization_dump_flags): New
function.
* omp-low.c (oacc_privatization_candidate_p): Add diagnostics.
* omp-offload.c (execute_oacc_device_lower)
<IFN_UNIQUE_OACC_PRIVATE>: Re-work diagnostics.
* target.def (goacc.adjust_private_decl): Add 'location_t'
parameter.
* doc/tm.texi: Regenerate.
* config/gcn/gcn-protos.h (gcn_goacc_adjust_private_decl): Adjust.
* config/gcn/gcn-tree.c (gcn_goacc_adjust_private_decl): Likewise.
* config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl):
Likewise. Preserve it for...
(nvptx_goacc_expand_var_decl): ... use here.
gcc/testsuite/
PR middle-end/90115
* c-c++-common/goacc/privatization-1-compute-loop.c: New file.
* c-c++-common/goacc/privatization-1-compute.c: Likewise.
* c-c++-common/goacc/privatization-1-routine_gang-loop.c:
Likewise.
* c-c++-common/goacc/privatization-1-routine_gang.c: Likewise.
* gfortran.dg/goacc/privatization-1-compute-loop.f90: Likewise.
* gfortran.dg/goacc/privatization-1-compute.f90: Likewise.
* gfortran.dg/goacc/privatization-1-routine_gang-loop.f90:
Likewise.
* gfortran.dg/goacc/privatization-1-routine_gang.f90: Likewise.
* c-c++-common/goacc-gomp/nesting-1.c: Update.
* c-c++-common/goacc/private-reduction-1.c: Likewise.
* gfortran.dg/goacc/private-3.f95: Likewise.
libgomp/
PR middle-end/90115
* testsuite/libgomp.oacc-fortran/private-atomic-1-vector.f90: New
file.
* testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Update.
* testsuite/libgomp.oacc-c-c++-common/host_data-7.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-4.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-5.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-4.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-5.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-6.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-4.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-5.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-6.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-7.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-g-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-g-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-gwv-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-v-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-atomic-1-gang.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-atomic-1.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-variables.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-4.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/static-variable-1.c:
Likewise.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Likewise.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Likewise.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Likewise.
* testsuite/libgomp.oacc-fortran/declare-1.f90: Likewise.
* testsuite/libgomp.oacc-fortran/host_data-5.F90: Likewise.
* testsuite/libgomp.oacc-fortran/if-1.f90: Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-1.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-2.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-3.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-1.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-2.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-1.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-2.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-3.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-4.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-5.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-6.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-7.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise.
* testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise.
* testsuite/libgomp.oacc-fortran/private-atomic-1-gang.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise.
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
* testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise.
Thomas Schwinge [Tue, 18 May 2021 15:30:34 +0000 (17:30 +0200)]
Add '__OPTIMIZE__' DejaGnu selector
gcc/testsuite/
* lib/target-supports.exp (check_effective_target___OPTIMIZE__):
New proc.
* gcc.c-torture/compile/ssa-unused-1.c: New file.
gcc/
* doc/sourcebuild.texi (Other attributes): Document '__OPTIMIZE__'
DejaGnu selector.
Thomas Schwinge [Thu, 20 May 2021 13:55:18 +0000 (15:55 +0200)]
[OpenACC privatization] Explain OpenACC privatization candidate selection [PR90115]
gcc/
PR middle-end/90115
* omp-low.c (oacc_privatization_candidate_p): New function.
(oacc_privatization_scan_clause_chain)
(oacc_privatization_scan_decl_chain): Use it. Also
'gcc_checking_assert' that we're not seeing duplicates.
Thomas Schwinge [Thu, 20 May 2021 13:45:06 +0000 (15:45 +0200)]
[OpenACC privatization] Skip processing if no work to be done [PR90115]
gcc/
PR middle-end/90115
* omp-offload.c (execute_oacc_device_lower): Skip processing if no
work to be done.
Thomas Schwinge [Thu, 20 May 2021 13:44:09 +0000 (15:44 +0200)]
[OpenACC privatization] Explain two different configurations [PR90115]
gcc/
PR middle-end/90115
* omp-offload.c (execute_oacc_device_lower): Explain.
Thomas Schwinge [Thu, 20 May 2021 13:37:07 +0000 (15:37 +0200)]
[OpenACC privatization] Don't let unhandled 'IFN_UNIQUE_OACC_PRIVATE' linger [PR90115]
Make sure they're all handled in 'execute_oacc_device_lower'. Why we at all
can have 'level == -1' cases is a separate bug to be fixed.
gcc/
PR middle-end/90115
* omp-offload.c (execute_oacc_device_lower)
<IFN_UNIQUE_OACC_PRIVATE>: Diagnose and handle for 'level == -1'
case, too.
* internal-fn.c (expand_UNIQUE): Don't expect
'IFN_UNIQUE_OACC_PRIVATE'.
Thomas Schwinge [Thu, 20 May 2021 13:22:24 +0000 (15:22 +0200)]
[OpenACC privatization] Don't evaluate OpenMP 'for' clauses [PR90115]
gcc/
PR middle-end/90115
* omp-low.c (lower_omp_for): Don't evaluate OpenMP 'for' clauses.
Thomas Schwinge [Thu, 20 May 2021 13:08:38 +0000 (15:08 +0200)]
[OpenACC privatization, nvptx] Tighten some aspects [PR90115]
No functional change.
gcc/
PR middle-end/90115
* config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl)
(nvptx_goacc_expand_var_decl): Tighten.
Julian Brown [Fri, 26 Feb 2021 12:34:49 +0000 (04:34 -0800)]
openacc: Add support for gang local storage allocation in shared memory [PR90115]
This patch implements a method to track the "private-ness" of
OpenACC variables declared in offload regions in gang-partitioned,
worker-partitioned or vector-partitioned modes. Variables declared
implicitly in scoped blocks and those declared "private" on enclosing
directives (e.g. "acc parallel") are both handled. Variables that are
e.g. gang-private can then be adjusted so they reside in GPU shared
memory.
The reason for doing this is twofold: correct implementation of OpenACC
semantics, and optimisation, since shared memory might be faster than
the main memory on a GPU. Handling of private variables is intimately
tied to the execution model for gangs/workers/vectors implemented by
a particular target: for current targets, we use (or on mainline, will
soon use) a broadcasting/neutering scheme.
That is sufficient for code that e.g. sets a variable in worker-single
mode and expects to use the value in worker-partitioned mode. The
difficulty (semantics-wise) comes when the user wants to do something like
an atomic operation in worker-partitioned mode and expects a worker-single
(gang private) variable to be shared across each partitioned worker.
Forcing use of shared memory for such variables makes that work properly.
In terms of implementation, the parallelism level of a given loop is
not fixed until the oaccdevlow pass in the offload compiler, so the
patch delays fixing the parallelism level of variables declared on or
within such loops until the same point. This is done by adding a new
internal UNIQUE function (OACC_PRIVATE) that lists (the address of) each
private variable as an argument, and other arguments set so as to be able
to determine the correct parallelism level to use for the listed
variables. This new internal function fits into the existing scheme for
demarcating OpenACC loops, as described in comments in the patch.
Two new target hooks are introduced: TARGET_GOACC_ADJUST_PRIVATE_DECL and
TARGET_GOACC_EXPAND_VAR_DECL. The first can tweak a variable declaration
at oaccdevlow time, and the second at expand time. The first or both
of these target hooks can be used by a given offload target, depending
on its strategy for implementing private variables.
This patch updates the TARGET_GOACC_ADJUST_PRIVATE_DECL target hook in
the AMD GCN backend to the current name and prototype. (An earlier
version of the hook was already present, but dormant.)
gcc/
PR middle-end/90115
* doc/tm.texi.in (TARGET_GOACC_EXPAND_VAR_DECL)
(TARGET_GOACC_ADJUST_PRIVATE_DECL): Add documentation hooks.
* doc/tm.texi: Regenerate.
* expr.c (expand_expr_real_1): Expand decls using the
expand_var_decl OpenACC hook if defined.
* internal-fn.c (expand_UNIQUE): Handle IFN_UNIQUE_OACC_PRIVATE.
* internal-fn.h (IFN_UNIQUE_CODES): Add OACC_PRIVATE.
* omp-low.c (omp_context): Add oacc_privatization_candidates
field.
(lower_oacc_reductions): Add PRIVATE_MARKER parameter. Insert
before fork.
(lower_oacc_head_tail): Add PRIVATE_MARKER parameter. Modify
private marker's gimple call arguments, and pass it to
lower_oacc_reductions.
(oacc_privatization_scan_clause_chain)
(oacc_privatization_scan_decl_chain, lower_oacc_private_marker):
New functions.
(lower_omp_for, lower_omp_target, lower_omp_1): Use these.
* omp-offload.c (convert.h): Include.
(oacc_loop_xform_head_tail): Treat private-variable markers like
fork/join when transforming head/tail sequences.
(struct var_decl_rewrite_info): Add struct.
(oacc_rewrite_var_decl, is_sync_builtin_call): New functions.
(execute_oacc_device_lower): Support rewriting gang-private
variables using target hook, and fix up addr_expr and var_decl
nodes afterwards.
* target.def (adjust_private_decl, expand_var_decl): New hooks.
* config/gcn/gcn-protos.h (gcn_goacc_adjust_gangprivate_decl):
Rename to...
(gcn_goacc_adjust_private_decl): ...this.
* config/gcn/gcn-tree.c (gcn_goacc_adjust_gangprivate_decl):
Rename to...
(gcn_goacc_adjust_private_decl): ...this. Add LEVEL parameter.
* config/gcn/gcn.c (TARGET_GOACC_ADJUST_GANGPRIVATE_DECL): Rename
definition using gcn_goacc_adjust_gangprivate_decl...
(TARGET_GOACC_ADJUST_PRIVATE_DECL): ...to this, using
gcn_goacc_adjust_private_decl.
* config/nvptx/nvptx.c (tree-pretty-print.h): Include.
(gang_private_shared_size): New global variable.
(gang_private_shared_align): Likewise.
(gang_private_shared_sym): Likewise.
(gang_private_shared_hmap): Likewise.
(nvptx_option_override): Initialize these.
(nvptx_file_end): Output gang_private_shared_sym.
(nvptx_goacc_adjust_private_decl, nvptx_goacc_expand_var_decl):
New functions.
(nvptx_set_current_function): Clear gang_private_shared_hmap.
(TARGET_GOACC_ADJUST_PRIVATE_DECL): Define hook.
(TARGET_GOACC_EXPAND_VAR_DECL): Likewise.
libgomp/
PR middle-end/90115
* testsuite/libgomp.oacc-c-c++-common/private-atomic-1-gang.c: New
test.
* testsuite/libgomp.oacc-fortran/private-atomic-1-gang.f90:
Likewise.
* testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90:
Likewise.
Co-Authored-By: Chung-Lin Tang <cltang@codesourcery.com>
Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
H.J. Lu [Fri, 21 May 2021 12:52:11 +0000 (05:52 -0700)]
x86: Remove MAX_BITSIZE_MODE_ANY_INT
It is only defined for i386 and everyone uses the default:
#define MAX_BITSIZE_MODE_ANY_INT (64*BITS_PER_UNIT)
Whatever problems we had before, they have been fixed now.
* config/i386/i386-modes.def (MAX_BITSIZE_MODE_ANY_INT): Removed.
H.J. Lu [Fri, 21 May 2021 12:16:20 +0000 (05:16 -0700)]
Elide expand_constructor if move by pieces is preferred
Elide expand_constructor when the constructor is static storage and not
mostly zeros and we can move it by pieces prefer to do so since that's
usually more efficient than performing a series of stores from immediates.
2021-05-21 Richard Biener <rguenther@suse.de>
H.J. Lu <hjl.tools@gmail.com>
gcc/
PR middle-end/90773
* expr.c (expand_constructor): Elide expand_constructor if
move by pieces is preferred.
gcc/testsuite/
* gcc.target/i386/pr90773-24.c: New test.
* gcc.target/i386/pr90773-25.c: Likewise.
Thomas Schwinge [Fri, 21 May 2021 07:03:43 +0000 (09:03 +0200)]
Don't skip 'libgomp.oacc-fortran/privatized-ref-2.f90' for nvptx offloading
libgomp/
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Don't skip
for nvptx offloading.
Tobias Burnus [Wed, 3 Jun 2020 13:35:12 +0000 (15:35 +0200)]
Add 'libgomp.oacc-fortran/privatized-ref-2.f90'
libgomp/
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: New.
Kyrylo Tkachov [Fri, 21 May 2021 13:46:00 +0000 (14:46 +0100)]
aarch64: Add attributes for builtins specified in aarch64-builtins.c
Besides the builtins in aarch64-simd-builtins.def there are a number of builtins defined in aarch64-builtins.c itself.
They could also benefit from the attributes generated by aarch64_get_attributes.
However aarch64_get_attributes and its helpers are only set up to handle a aarch64_simd_builtin_datum.
This patch changes these functions to instead take a flag and mode value that are extracted from
aarch64_simd_builtin_datum.flags and aarch64_simd_builtin_datum.mode anyway.
Then the various builtin init functions in aarch64-builtins.c can pass down their own FLAG_* flags
that they want to derive attributes from.
gcc/ChangeLog:
* config/aarch64/aarch64-builtins.c (aarch64_call_properties):
Take a flag and mode value as arguments.
(aarch64_modifies_global_state_p): Likewise.
(aarch64_reads_global_state_p): Likewise.
(aarch64_could_trap_p): Likewise.
(aarch64_get_attributes): Likewise.
(aarch64_init_simd_builtins): Adjust callsite of above.
(aarch64_init_fcmla_laneq_builtins): Use aarch64_get_attributes to get
function attributes to apply to builtins.
(aarch64_init_crc32_builtins): Likewise.
(aarch64_init_builtin_rsqrt): Likewise.
Aaron Sawdey [Tue, 2 Mar 2021 23:50:52 +0000 (17:50 -0600)]
Add insn types for fusion pairs
This adds new values for insn attr type for p10 fusion. The genfusion.pl
script is modified to use them, and fusion.md regenerated to capture
the new patterns. There are also some formatting only changes to
fusion.md that apparently weren't captured after a previous commit
of genfusion.pl.
gcc/
* config/rs6000/rs6000.md (define_attr "type"): Add types for fusion.
* config/rs6000/genfusion.pl (gen_ld_cmpi_p10): Use new fusion types.
(gen_2logical): Use new fusion types.
* config/rs6000/fusion.md: Regenerate.
Uros Bizjak [Fri, 21 May 2021 11:03:04 +0000 (13:03 +0200)]
i386: Add comparisons for 4-byte vectors [PR100637]
2021-05-21 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_sse_movcc):
Handle V4QI and V2HI modes.
(ix86_expand_sse_movcc): Ditto.
* config/i386/mmx.md (*<sat_plusminus:insn><VI_32:mode>3):
New instruction pattern.
(*eq<VI_32:mode>3): Ditto.
(*gt<VI_32:mode>3): Ditto.
(*xop_pcmov_<VI_32:mode>): Ditto.
(mmx_pblendvb32): Ditto.
(mmx_pblendvb64): Rename from mmx_pblendvb.
(vec_cmp<VI_32:mode><VI_32:mode>): New expander.
(vec_cmpu<VI_32:mode><VI_32:mode>): Ditto.
(vcond<VI_32:mode><VI_32:mode>): Ditto.
(vcondu<VI_32:mode><VI_32:mode>): Ditto.
(vcond_mask_<VI_32:mode><VI_32:mode>): Ditto.
gcc/testsuite/
PR target/100637
* g++.target/i386/pr100637-1b.C: New test.
* g++.target/i386/pr100637-1w.C: Ditto.
* gcc.target/i386/pr100637-2b.c: Ditto.
* gcc.target/i386/pr100637-2w.c: Ditto.
Piotr Trojanek [Fri, 21 May 2021 09:30:26 +0000 (11:30 +0200)]
Detect illegal conditions in Raise_xxx_Error nodes
Enforce comment from sinfo.ads about the Condition field in N_Raise_xxx_Error
nodes. Only an extra sanity check; the behaviour is not affected.
gcc/ada/
* gcc-interface/trans.c (Raise_Error_to_gnu): Add an assertion.
Tamar Christina [Fri, 21 May 2021 09:30:59 +0000 (10:30 +0100)]
libsanitizer: Remove cyclades from libsanitizer
The Linux kernel has removed the interface to cyclades from
the latest kernel headers[1] due to them being orphaned for the
past 13 years.
libsanitizer uses this header when compiling against glibc, but
glibcs itself doesn't seem to have any references to cyclades.
Further more it seems that the driver is broken in the kernel and
the firmware doesn't seem to be available anymore.
As such since this is breaking the build of libsanitizer (and so the
GCC bootstrap[2]) I propose to remove this.
[1] https://lkml.org/lkml/2021/3/2/153
[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100379
(cherry picked from commit
f7c5351552387bd43f6ca3631016d7f0dfe0f135)
libsanitizer/ChangeLog:
PR sanitizer/100379
* sanitizer_common/sanitizer_common_interceptors_ioctl.inc: Cherry-pick
llvm-project revision
f7c5351552387bd43f6ca3631016d7f0dfe0f135.
* sanitizer_common/sanitizer_platform_limits_posix.cpp: Likewise.
* sanitizer_common/sanitizer_platform_limits_posix.h: Likewise.
Eric Botcazou [Fri, 21 May 2021 09:25:53 +0000 (11:25 +0200)]
Remove discriminant checks in gigi
gcc/ada/
* gcc-interface/utils.c (gnat_pushdecl): Fix typo in comment.
* gcc-interface/utils2.c (build_simple_component_ref): Build NULL_EXPR
if the offset of the field has overflowed.
(build_component_ref): Add gigi checking assertion that the reference
has been built and replace the discriminant check by a Program_Error.
Eric Botcazou [Fri, 21 May 2021 09:19:32 +0000 (11:19 +0200)]
Consistently generate debug info for elaboration variables
This makes sure that debug info is generated for elaboration variables,
even if the variables are not generated exclusively for this purpose.
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Named_Integer>: Do
not pass default value in call to create_var_decl.
<E_Variable>: Likewise.
<E_Record_Subtype>: Both pass true for const_flag and false for
const_decl_allowed_p in call to create_var_decl.
Small tweaks in the generic record type case.
(elaborate_expression): Rename need_debug into need_for_debug and
adjust throughout.
(elaborate_expression_1): Likewise. Pass Needs_Debug_Info instead
of need_for_debug in call to create_var_decl.
(elaborate_expression_2): Likewise.
* gcc-interface/utils.c (maybe_pad_type): Pass false for
const_decl_allowed_p in call to create_var_decl.
Ghjuvan Lacambre [Fri, 21 May 2021 09:14:13 +0000 (11:14 +0200)]
Replace ? with ?? in warning messages
The former has been deprecated in favor of the latter.
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity): Replace ? with ??.
(gnat_to_gnu_param): Likewise.
(gnat_to_gnu_subprog_type): Likewise.
(warn_on_field_placement): Likewise.
(intrin_arglists_compatible_p): Likewise.
* gcc-interface/trans.c (Pragma_to_gnu): Likewise.
(gnat_to_gnu): Likewise.
(validate_unchecked_conversion): Likewise.
* gcc-interface/utils.c (maybe_pad_type): Likewise.
Eric Botcazou [Fri, 21 May 2021 08:57:02 +0000 (10:57 +0200)]
Fix internal error on locally derived bit-packed array type
This is a regression present on the mainline, 11 and 10 branches,
in the form of an ICE on a locally derived bit-packed array type.
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Process
the implementation type of a packed type implemented specially.
gcc/testsuite/
* gnat.dg/derived_type7.adb, gnat.dg/derived_type7.ads: New test.
Eric Botcazou [Fri, 21 May 2021 08:45:21 +0000 (10:45 +0200)]
Always translate Is_Pure flag into pure in C sense
Gigi has historically translated the Is_Pure flag of the front-end into
the "const" attribute of GNU C. That's correct for subprograms of pure
Ada units, but not fully exact according to the semantics of the flag.
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_subprog_type): Always translate
the Is_Pure flag into the "pure" attribute of GNU C.
Eric Botcazou [Fri, 21 May 2021 08:40:41 +0000 (10:40 +0200)]
Fix segfault at run time on strict-alignment platforms
This fixes a regression present on the mainline and 11 branch by
restricting the problematic change dealing with bitfields whose
nomimal subtype is self-referential to the cases where the size
is really lower.
gcc/ada/
* gcc-interface/trans.c (Call_to_gnu): Restrict previous change
to bitfields whose size is not equal to the type size.
(gnat_to_gnu): Likewise.
Jakub Jelinek [Fri, 21 May 2021 08:39:50 +0000 (10:39 +0200)]
tree-optimization: Improve spaceship_replacement [PR94589]
On Wed, May 19, 2021 at 01:30:31PM -0400, Jason Merrill via Gcc-patches wrote:
> Here, when genericizing lexicographical_compare_three_way, we haven't yet
> walked the operands, so (a == a) still sees ADDR_EXPR <a>, but this is after
> we've changed the type of a to REFERENCE_TYPE. When we try to fold (a == a)
> by constexpr evaluation, the constexpr code doesn't understand trying to
> take the address of a reference, and we end up crashing.
>
> Fixed by avoiding constexpr evaluation in genericize_spaceship, by using
> fold_build2 instead of build_new_op on scalar operands. Class operands
> should have been expanded during parsing.
Unfortunately this slightly changed the IL and spaceship_replacement no
longer pattern matches it.
Here are 3 improvements that make it match:
1) as mentioned in the comment above spaceship_replacement, for
strong_ordering, we are pattern matching something like:
x == y ? 0 : x < y ? -1 : 1;
and for partial_ordering
x == y ? 0 : x < y ? -1 : x > y ? 1 : 2;
but given the == comparison done first and the other comparisons only
if == was false, we actually don't care if the other comparisons
are < vs. <= (or > vs. >=), provided the operands of the comparison
are the same; we know == is false when doing those and < vs. <= or
> vs. >= have the same behavior for NaNs too
2) when y is an integral constant, we should treat x < 5 equivalently
to x <= 4 etc.
3) the code punted if cond2_phi_edge wasn't a EDGE_TRUE_VALUE edge, but
as the new IL shows, that isn't really needed; given 1) that
> and >= are equivalent in the code, any of swapping the comparison
operands, changing L[TE]_EXPR to G[TE]_EXPR or vice versa or
swapping the EDGE_TRUE_VALUE / EDGE_FALSE_VALUE bits on the edges
reverses one of the two comparisons
2021-05-21 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94589
* tree-ssa-phiopt.c (spaceship_replacement): For integral rhs1 and
rhs2, treat x <= 4 equivalently to x < 5 etc. In cmp1 and cmp2 (if
not the same as cmp3) treat <= the same as < and >= the same as >.
Don't require that cond2_phi_edge is true edge, instead take
false/true edges into account based on cmp1/cmp2 comparison kinds.
Eric Botcazou [Fri, 21 May 2021 08:34:00 +0000 (10:34 +0200)]
Fix spurious No_Elaboration violation for Size attribute
We optimize the associated range check but nevertheless flag a violation.
gcc/ada/
* gcc-interface/trans.c (Call_to_gnu): Minor tweaks.
(gnat_to_gnu_external): Likewise.
(Raise_Error_to_gnu): Return an empty statement list if there is a
condition and it is always false.
(gnat_to_gnu): Do not check for elaboration code a priori during the
translation but a posteriori instead.
Eric Botcazou [Fri, 21 May 2021 08:26:50 +0000 (10:26 +0200)]
Fix incorrect SLOC on instruction
This puts the missing SLOC on a statement generated by a return.
gcc/ada/
* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
Put a SLOC on the assignment from the return value to the return
object in the copy-in/copy-out case.