Age | Commit message (Collapse) | Author | Files | Lines |
|
As documented in the manual, we do not support type punning that toggles
the scalar storage order, so this adds a warning for the case of unions.
gcc/c/
PR c/100653
* c-decl.c (finish_struct): Warn for a union containing an aggregate
field with a differing scalar storage order.
gcc/testsuite/
* gcc.dg/sso-13.c: New test.
|
|
This patch adds support for the reduc_plus_scal optab with MVE, which
maps to the vaddv instruction.
It moves the reduc_plus_scal_<mode> expander from neon.md to
vec-common.md and adds support for MVE to it.
Since vaddv uses a 32-bits accumulator, we have to truncate it's
result.
For instance:
int32_t test__s8x16 (int8_t *a) {
int i;
int8_t result = 0;
for (i=0; i<16; i++) {
result += a[i];
}
return result;
}
is compiled into:
vldrb.8 q3, [r0]
vaddv.s8 r0, q3
sxtb r0, r0
bx lr
If we used uint8_t instead of int8_t, we still use vaddv.s8 r0, q3,
but truncate with uxtb r0, r0.
2021-05-25 Christophe Lyon <christophe.lyon@linaro.org>
gcc/
* config/arm/mve.md (mve_vaddvq_<supf><mode>): Prefix with '@'.
* config/arm/neon.md (reduc_plus_scal_<mode>): Move to ..
* config/arm/vec-common.md: .. here. Add support for MVE.
gcc/testsuite/
* gcc.target/arm/simd/mve-vaddv-1.c: New test.
|
|
This patch removes useless register keywords from several backends and one
spot in the Ada FE.
2021-05-26 Jakub Jelinek <jakub@redhat.com>
gcc/
* config/epiphany/epiphany.c (epiphany_print_operand_address): Remove
register keywords.
* config/microblaze/microblaze.c (microblaze_legitimize_address,
call_internal1,
microblaze_option_override, print_operand): Likewise.
* config/microblaze/microblaze.md (call_internal_plt,
call_value_intern_plt, call_value_intern): Likewise.
* config/arm/aout.h (ASM_OUTPUT_ALIGN): Likewise.
* config/iq2000/iq2000.md (call_internal1, call_value_internal1,
call_value_multiple_internal1): Likewise.
* config/bfin/bfin.c (symbolic_reference_mentioned_p): Likewise.
gcc/ada/
* init.c (__gnat_error_handler): Remove register keyword.
|
|
The "register" keyword was removed in C++17, remove them to get the backend
to build again.
gcc/
* config/arc/arc.c (arc_address_cost, arc_print_operand_address,
arc_ccfsm_advance, symbolic_reference_mentioned_p,
arc_raw_symbolic_reference_mentioned_p): Remove register
keyword.
|
|
In the testcase below, the member initializer b(f()) inside C's default
constructor is encoded as a TARGET_EXPR wrapping the CALL_EXPR f() in
C++17 mode. During massaging of this constexpr constructor,
build_target_expr_with_type called from bot_manip on this initializer
tries to add an extra copy using B's implicitly deleted copy constructor
rather than just preserving the copy elision.
Since it's wrong to introduce an extra copy when initializing a
temporary from a CALL_EXPR, this patch makes build_target_expr_with_type
avoid calling force_rvalue in this case. Additionally, bot_manip should
be copying TARGET_EXPRs in a more oblivious manner, so this patch makes
bot_manip use force_target_expr instead of build_target_expr_with_type.
And since bot_manip is now no longer a caller, we can remove the void
initializer handling in build_target_expr_with_type.
PR c++/100368
gcc/cp/ChangeLog:
* tree.c (build_target_expr_with_type): Don't call force_rvalue
on CALL_EXPR initializer. Simplify now that bot_manip is no
longer a caller.
(bot_manip): Use force_target_expr instead of
build_target_expr_with_type.
gcc/testsuite/ChangeLog:
* g++.dg/cpp1z/elide6.C: New test.
|
|
Here, in C++17 mode, convert_nontype_argument_function is rejecting
binding a non-noexcept function reference template parameter to a
noexcept function (encoded as the template argument '*(int (&) (int)) &f').
The first roadblock to making this work is that the argument is wrapped
an an implicit INDIRECT_REF, so we need to unwrap it before calling
strip_fnptr_conv.
The second roadblock is that the NOP_EXPR cast converts from a function
pointer type to a reference type while simultaneously removing the
noexcept qualification, and fnptr_conv_p doesn't consider this cast to
be a function pointer conversion. This patch fixes this by making
fnptr_conv_p treat REFERENCE_TYPEs and POINTER_TYPEs interchangeably.
Finally, in passing, this patch also simplifies noexcept_conv_p by
removing a bunch of redundant checks already performed by its only
caller fnptr_conv_p.
PR c++/97420
gcc/cp/ChangeLog:
* cvt.c (noexcept_conv_p): Remove redundant checks and simplify.
(fnptr_conv_p): Don't call non_reference. Use INDIRECT_TYPE_P
instead of TYPE_PTR_P.
* pt.c (convert_nontype_argument_function): Look through
implicit INDIRECT_REFs before calling strip_fnptr_conv.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/noexcept68.C: New test.
|
|
OpenMP Nesting of Regions restrictions say:
- If a target update, target data, target enter data, or target exit data
construct is encountered during execution of a target region, the behavior is unspecified.
- If a target construct is encountered during execution of a target region and a device
clause in which the ancestor device-modifier appears is not present on the construct, the
behavior is unspecified.
That wording is about the dynamic (runtime) behavior, not about lexical nesting,
so while it is UB if omp target * is encountered in the target region, we need to make
it compile and link (for lexical nesting of target * inside of target we actually
emit a warning).
To make this work, I had to do multiple changes.
One was to mark .omp_data_{sizes,kinds}.* variables when static as "omp declare target".
Another one was to add stub GOMP_target* entrypoints to nvptx and gcn libgomp.a.
The entrypoint functions shouldn't be called or passed in the offload regions,
otherwise
libgomp: cuLaunchKernel error: too many resources requested for launch
was reported; fixed by changing those arguments of calls to GOMP_target_ext
to NULL.
And we didn't mark the entrypoints "omp target entrypoint" when the caller
has been "omp declare target".
2021-05-26 Jakub Jelinek <jakub@redhat.com>
PR libgomp/100573
gcc/
* omp-low.c: Include omp-offload.h.
(create_omp_child_function): If current_function_decl has
"omp declare target" attribute and is_gimple_omp_offloaded,
remove that attribute from the copy of attribute list and
add "omp target entrypoint" attribute instead.
(lower_omp_target): Mark .omp_data_sizes.* and .omp_data_kinds.*
variables for offloading if in omp_maybe_offloaded_ctx.
* omp-offload.c (pass_omp_target_link::execute): Nullify second
argument to GOMP_target_data_ext in offloaded code.
libgomp/
* config/nvptx/target.c (GOMP_target_ext, GOMP_target_data_ext,
GOMP_target_end_data, GOMP_target_update_ext,
GOMP_target_enter_exit_data): New dummy entrypoints.
* config/gcn/target.c (GOMP_target_ext, GOMP_target_data_ext,
GOMP_target_end_data, GOMP_target_update_ext,
GOMP_target_enter_exit_data): Likewise.
* testsuite/libgomp.c-c++-common/for-3.c (DO_PRAGMA, OMPTEAMS,
OMPFROM, OMPTO): Define.
(main): Remove #pragma omp target teams around all the tests.
* testsuite/libgomp.c-c++-common/target-41.c: New test.
* testsuite/libgomp.c-c++-common/target-42.c: New test.
|
|
gcc/ChangeLog:
* config/csky/csky.c (csky_can_change_mode_class): Delete.
For csky, HF/SF mode use the low bits of VREGS.
|
|
This is only a stopgap fix.
gcc/
* gimplify.c (gimplify_decl_expr): Do not clear TREE_READONLY on a
DECL which is a reference for OMP.
|
|
gcc/ChangeLog:
PR gcov-profile/100751
* doc/gcov.texi: Document that __gcov_dump can be called just
once and that __gcov_reset resets run-time counters.
|
|
gcc/ChangeLog:
* doc/install.texi: Port relevant part from install-old.texi
and re-generate list of CPUs and systems.
|
|
gcc/ChangeLog:
* Makefile.in: Remove it.
* doc/include/fdl.texi: Update next/previous chapters.
* doc/install.texi: Likewise.
* doc/install-old.texi: Removed.
|
|
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.
|
|
definition.
gcc/ChangeLog:
* config/csky/csky.c (TARGET_PROMOTE_PROTOTYPES): Delete.
|
|
gcc/ChangeLog:
* config/csky/csky.md (untyped_call): Emit clobber for return
registers to mark them used.
|
|
gcc/
* config/csky/csky.md (cskyv2_sextend_ldbs): New.
gcc/testsuite/
* gcc.target/csky/ldbs.c: New.
|
|
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.
|
|
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.
|
|
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
gcc/
* gimplify.c (gimplify_decl_expr): Clear TREE_READONLY on the DECL
when really creating an initialization statement for it.
|
|
[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.
|
|
gcc/
* tree-inline.c (setup_one_parameter): Fix thinko in new condition.
|
|
gcc/ChangeLog:
* config/riscv/riscv.h (ASM_SPEC): Pass -mno-relax.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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>
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
|
|
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
|
|
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.
|
|
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.
|
|
[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.
|