aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2019-12-29re PR target/93078 (Missing fma and round functions auto-vectorization with ↵Jakub Jelinek8-25/+96
x86-64 (sse2)) PR target/93078 * config/i386/i386-builtins.c (ix86_builtin_vectorized_function): Remove CASE_CFN_RINT handling. * config/i386/i386-builtin.def (IX86_BUILTIN_RINTPD, IX86_BUILTIN_RINTPS, IX86_BUILTIN_RINTPD256, IX86_BUILTIN_RINTPS256): Remove. * config/i386/sse.md (nearbyint<mode>2, rint<mode>2): New expanders with VF iterator. * gcc.target/i386/sse4_1-pr93078.c: New test. * gcc.target/i386/avx-pr93078.c: New test. * gcc.target/i386/avx512f-pr93078.c: New test. From-SVN: r279754
2019-12-29Unshare DR_STEP before gimplifying itRichard Sandiford4-2/+19
In this testcase we use an unmasked SVE loop with an Advanced SIMD epilogue (because we don't yet support fully-masked downward loops). The main loop uses a gather load for the strided access while the epilogue loop builds the access from scalars instead. In both cases we gimplify expressions based on the DR_STEP and insert them in the loop preheader. The problem was that the gather load code didn't copy the DR_STEP before gimplifying it, meaning that the epilogue loop tried to reuse a result from the (non-dominating) main loop preheader. It looks at first glance like there could be other instances of this too, but this patch just deals with the gather/scatter case. 2019-12-29 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-stmts.c (vect_get_strided_load_store_ops): Copy DR_STEP before gimplifying it. gcc/testsuite/ * gcc.dg/vect/vect-strided-epilogue-1.c: New test. From-SVN: r279753
2019-12-29Check for a supported comparison when using EXTRACT_LAST_REDUCTIONRichard Sandiford4-0/+34
The EXTRACT_LAST_REDUCTION handling needs to generate a separate comparison instruction that feeds the vector mask argument of the IFN_EXTRACT_LAST call. We weren't checking whether that comparison was supported, leading to an ICE on the testcase. 2019-12-29 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-stmts.c (vectorizable_condition): For extract-last reductions, check that the target supports the required comparison operation. gcc/testsuite/ * gcc.dg/vect/vect-cond-12.c: New test. From-SVN: r279752
2019-12-29Daily bump.GCC Administrator1-1/+1
From-SVN: r279751
2019-12-28Daily bump.GCC Administrator1-1/+1
From-SVN: r279746
2019-12-27[AArch64] Fix typo in V_INT_CONTAINERRichard Sandiford4-1/+22
All VNx2 V_INT_CONTAINER entries should map to VNx2DI. The lower-case version was already correct. 2019-12-27 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/iterators.md (V_INT_CONTAINER): Fix VNx2SF entry. gcc/testsuite/ * gcc.target/aarch64/sve/mixed_size_11.c: New test. From-SVN: r279743
2019-12-27Add missing target check for fully-masked fold-left reductionsRichard Sandiford4-0/+35
The fold-left reduction code has a (rarely-used) fallback that handles cases in which the loop is fully-masked and the target has no native support for the reduction. The fallback includea a VEC_COND_EXPR between the reduction vector and a safe value, so we should check whether that VEC_COND_EXPR is supported. 2019-12-27 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vectorizable_reduction): Check whether the target supports the required VEC_COND_EXPR operation before allowing the fallback handling of masked fold-left reductions. gcc/testsuite/ * gcc.target/aarch64/sve/mixed_size_10.c: New test. From-SVN: r279742
2019-12-27Daily bump.GCC Administrator1-1/+1
From-SVN: r279739
2019-12-26re PR c++/92438 (Function declaration parsed incorrectly with `-std=c++1z`)Jakub Jelinek4-1/+54
PR c++/92438 * parser.c (cp_parser_constructor_declarator_p): If open paren is followed by RID_ATTRIBUTE, skip over the attribute tokens and try to parse type specifier. * g++.dg/ext/attrib61.C: New test. From-SVN: r279736
2019-12-26Daily bump.GCC Administrator1-1/+1
From-SVN: r279735
2019-12-25Daily bump.GCC Administrator1-1/+1
From-SVN: r279730
2019-12-24rs6000: re-enable web and rnreg with -funroll-loopsJiufu Guo2-4/+16
Previously, limited unrolling was enabled at O2 for powerpc in r278034. At that time, -fweb and -frename-registers were not enabled together with -funroll-loops even for -O3. After that, we notice there are some performance degradations on SPEC2006fp which caused by without web and rnreg. This patch enable -fweb and -frename-registers for -funroll-loops to align original behavior before r278034. gcc/ 2019-12-23 Jiufu Guo <guojiufu@linux.ibm.com> * config/rs6000/rs6000.c (rs6000_option_override_internal): Enable -fweb and -frename-registers with -funroll-loops From-SVN: r279725
2019-12-24re PR go/93020 (Final patches to build gcc-10 on GNU/Hurd)Ian Lance Taylor1-1/+1
PR go/93020 libgo: Hurd portability patches By Svante Signell. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/212409 From-SVN: r279724
2019-12-24Daily bump.GCC Administrator1-1/+1
From-SVN: r279723
2019-12-23Restrict 'c-c++-common/goacc/mdc-1.c' to LP64, LLP64Thomas Schwinge2-1/+6
The tree dump scanning has certain expectations. gcc/testsuite/ * c-c++-common/goacc/mdc-1.c: Restrict to LP64, LLP64. From-SVN: r279720
2019-12-23[C++] Make same_type_p return false for gnu_vector_type_p differences (PR 92789)Richard Sandiford6-37/+83
As Jason pointed out in the review of the C++ gnu_vector_type_p patch: https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00173.html the real fix for the XFAILs in acle/general-c++/gnu_vectors_*.C is to make same_type_p return false for two types if one is gnu_vector_type_p and the other isn't. This patch does that and fixes the fallout. Originally I'd tried to make it so that "X *" and "Y *" are interconvertible whenever X and Y are, and similarly for "X &" and "Y &". That doesn't fall out naturally though, and is different from how -flax-vector-conversions works. The patch therefore accepts all the consequences of making X and Y !same_type_p instead of trying to work around them. 2019-12-23 Richard Sandiford <richard.sandiford@arm.com> gcc/cp/ PR c++/92789 * typeck.c (structural_comptypes): Make sure that two vector types agree on gnu_vector_type_p. gcc/testsuite/ PR c++/92789 * g++.dg/ext/sve-sizeless-2.C (statements): Expect pointer difference and comparisons between GNU and non-GNU types to be rejected. Expect __is_same to be false for such pairs. * g++.target/aarch64/sve/acle/general-c++/gnu_vectors_1.C: Remove XFAILs. Expect conversions between SVE vector pointers and GNU vector pointers to be rejected. Test references. * g++.target/aarch64/sve/acle/general-c++/gnu_vectors_2.C: Likewise. From-SVN: r279717
2019-12-23[C++] Fix ICE for binding lax vector conversions to references (PR 93014)Richard Sandiford5-3/+109
This test: typedef unsigned int v4si __attribute__ ((vector_size(16))); typedef unsigned char v16qi __attribute__ ((vector_size(16))); extern v16qi x; v4si &y = x; ICEs with: a.c:4:11: internal compiler error: in convert_like_real, at cp/call.c:7670 This started with r260780, which had the effect of making lvalue_kind look through VIEW_CONVERT_EXPR in all cases, not just for location wrappers. This also means that: typedef unsigned int v4si __attribute__ ((vector_size(16))); typedef unsigned char v16qi __attribute__ ((vector_size(16))); extern v16qi x; v4si &y = reinterpret_cast<v4si>(x); is now valid despite the result of the cast being an rvalue. The patch attempts to fix that by calling rvalue on the input to the conversion, so that the tree looks the same as for: extern v16qi x; v4si &y = (v4si)x; which is already handled correctly. 2019-12-23 Richard Sandiford <richard.sandiford@arm.com> gcc/cp/ * cvt.c (ocp_convert): Apply rvalue to the source of vector conversions. * typeck.c (build_reinterpret_cast_1): Likewise. gcc/testsuite/ * g++.dg/ext/vector39.C: New test. From-SVN: r279716
2019-12-23Daily bump.GCC Administrator1-1/+1
From-SVN: r279715
2019-12-21Restrict some aarch64 testcases to little-endianAndrew Pinski3-2/+12
2019-12-21 Andrew Pinski <apinski@marvell.com> PR testsuite/92998 * gcc.target/aarch64/sve/acle/general/dupq_1.c: Restrict to aarch64_little_endian only. * gcc.target/aarch64/torture/simd-abi-8.c: Likewise. From-SVN: r279709
2019-12-22* doc/invoke.texi (-flto): Use "compile time" as a noun.Gerald Pfeifer2-1/+5
From-SVN: r279707
2019-12-22testsuite: Fix run-time tracking down of `libgcc_s'Maciej W. Rozycki2-14/+36
Fix a catastrophic libgo testsuite failure in cross-compilation where the shared `libgcc_s' library cannot be found by the loader at run time in build-tree testing and consequently all test cases fail the execution stage, giving output (here with the `x86_64-linux-gnu' host and the `riscv64-linux-gnu' target, with RISC-V QEMU in the Linux user emulation mode as the target board) like: spawn qemu-riscv64 -E LD_LIBRARY_PATH=.:.../riscv64-linux-gnu/lib64/lp64d/libgo/.libs ./a.exe ./a.exe: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory FAIL: archive/tar To do so rework `gcc-set-multilib-library-path' so as not to rely on the `rootme' TCL variable to have been preset in testsuite invocation, which only works for the GCC test suites and not for library test suites, and also use `remote_exec host' rather than `exec' to invoke the compiler in determination of `libgcc_s' locations, so that the solution works in remote testing as well while also avoiding the hardcoded limit of the executable's path length imposed by `exec'. This is based on an observation that the multilib root directory can be determined by stripping out the multilib directory in effect as printed with the `-print-multi-directory' option from the path produced by the `-print-file-name=' option. And then individual full multilib paths can be assembled for the other multilibs by appending their respective multilib directories to the multilib root directory. Unlike with the old solution the full multilib paths are not checked for the presence of the shared `libgcc_s' library there, but that is supposed to be harmless. Also the full multilib path for the multilib used with the compiler used for testing will now come first, which should reduce run-time processing in the usual case. With this change in place test output instead looks like: spawn qemu-riscv64 -E LD_LIBRARY_PATH=.:.../riscv64-linux-gnu/lib64/lp64d/libgo/.libs:..././gcc/lib64/lp64d:..././gcc/.:..././gcc/lib32/ilp32:..././gcc/lib32/ilp32d:..././gcc/lib64/lp64 ./a.exe PASS PASS: archive/tar No summary comparison, because the libgo testsuite does not provide one in this configuration for some reason, however this change improves overall results from 0 PASSes and 159 FAILs to 133 PASSes and 26 FAILs. gcc/testsuite/ * lib/gcc-defs.exp (gcc-set-multilib-library-path): Use `-print-file-name=' to determine the multilib root directory. Use `remote_exec host' rather than `exec' to invoke the compiler. From-SVN: r279706
2019-12-22Daily bump.GCC Administrator1-1/+1
From-SVN: r279705
2019-12-22libada: Fix shared library installation with `--disable-libada'Maciej W. Rozycki2-0/+10
Provide a default value of $(toolexeclibdir) for $(ADA_RTL_DSO_DIR), so that in a `--disable-libada' configuration `make install' places shared gnatlib libraries, built with `make -C gcc gnatlib-shared', in their intended version-specific location, fixing a commit r276424 ("libada: Respect `--enable-version-specific-runtime-libs'") regression. gcc/ada/ * gcc-interface/Makefile.in (toolexeclibdir): New variable. From-SVN: r279702
2019-12-21[PR93026, PR92929] Adjust 'gfortran.dg/goacc/finalize-1.f' for r279626 changesThomas Schwinge2-2/+8
gcc/testsuite/ PR fortran/93026 PR middle-end/92929 * gfortran.dg/goacc/finalize-1.f: Adjust. From-SVN: r279700
2019-12-21re PR fortran/91661 (ICE in gfc_conv_intrinsic_dot_product, at ↵Harald Anlauf2-0/+18
fortran/trans-intrinsic.c:4804) 2019-12-21 Harald Anlauf <anlauf@gmx.de> PR fortran/91661 * gfortran.dg/pr91661.f90: New test. From-SVN: r279699
2019-12-21re PR fortran/92990 (INVALID code with NULLIFY – partially misleading ↵Harald Anlauf4-0/+40
error message "If bounds remapping is specified at (1), the pointer target shall not be NULL") 2019-12-21 Harald Anlauf <anlauf@gmx.de> PR fortran/92990 * match.c (gfc_match_nullify): Check for valid pointer object. Reject bounds remapping. PR fortran/92990 * gfortran.dg/pr92990.f90: New test. From-SVN: r279698
2019-12-21re PR fortran/92753 (ICE in gfc_trans_call, at fortran/trans-stmt.c:392)Paul Thomas4-6/+53
2019-12-21  Paul Thomas  <pault@gcc.gnu.org> PR fortran/92753 * expr.c (find_inquiry_ref): Catch INQUIRY_LEN case, where the temporary expression has been converted to a constant and make the new expression accordingly. Correct the error in INQUIRY_RE and INQUIRY_IM cases. The original rather than the resolved expression was being used as the source in mpfr_set. 2019-12-21  Paul Thomas  <pault@gcc.gnu.org> PR fortran/92753 * gfortran.dg/inquiry_type_ref_5.f90 : New test. From-SVN: r279696
2019-12-21Avoid segfault when doing IPA-VRP but not IPA-CP (PR 93015)Martin Jambor4-1/+17
2019-12-21 Martin Jambor <mjambor@suse.cz> PR ipa/93015 * ipa-cp.c (ipcp_store_vr_results): Check that info exists testsuite/ * gcc.dg/lto/pr93015_0.c: New test. From-SVN: r279695
2019-12-21Daily bump.GCC Administrator1-1/+1
From-SVN: r279690
2019-12-21re PR middle-end/91512 (Fortran compile time regression.)Jakub Jelinek3-8/+14
PR middle-end/91512 PR fortran/92738 * lang.opt (-finline-arg-packing): Add trailing dot to help text. From-SVN: r279687
2019-12-20PR c++/92745 - bogus error when initializing array of vectors.Marek Polacek4-8/+39
In r268428 I changed reshape_init_r in such a way that when it sees a nested { } in a CONSTRUCTOR with missing braces, it just returns the initializer: + else if (COMPOUND_LITERAL_P (stripped_init) ... + ++d->cur; + gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init)); + return init; But as this test shows, that's incorrect: if TYPE is an array, we need to proceed to reshape_init_array_1 which will iterate over the array initializers: 6006 /* Loop until there are no more initializers. */ 6007 for (index = 0; 6008 d->cur != d->end && (!sized_array_p || index <= max_index_cst); 6009 ++index) 6010 { and update d.cur accordingly. In other words, when reshape_init gets {{col[0][0], col[1][0], col[2][0], col[3][0]}, {col[0][1], col[1][1], col[2][1], col[3][1]}, {col[0][2], col[1][2], col[2][2], col[3][2]}, {col[0][3], col[1][3], col[2][3], col[3][3]}} we recurse on the first element: {col[0][0], col[1][0], col[2][0], col[3][0]} and we can't just move d.cur to point to {col[0][1], col[1][1], col[2][1], col[3][1]} and return; we need to iterate, so that d.cur ends up being properly updated, and after all initializers have been seen, points to d.end. Currently we skip the loop, wherefore we hit this: 6502 /* Make sure all the element of the constructor were used. Otherwise, 6503 issue an error about exceeding initializers. */ 6504 if (d.cur != d.end) 6505 { 6506 if (complain & tf_error) 6507 error ("too many initializers for %qT", type); 6508 return error_mark_node; 6509 } * decl.c (reshape_init_r): For a nested compound literal, do call reshape_init_{class,array,vector}. * g++.dg/cpp0x/initlist118.C: New test. From-SVN: r279686
2019-12-20PR c++/92974 - bogus location for enum and non-enum in ?: warning.Marek Polacek6-18/+46
build_min_non_dep wasn't setting any location so when we were emitting the warning in the following test while instantiating a template, its location was UNKNOWN_LOCATION. Rather than adding a location_t parameter, let's use the location from the original expression. * tree.c (build_min_non_dep): Use the location of NON_DEP when building the expression. * g++.dg/diagnostic/enum1.C: New test. * g++.dg/gomp/loop-2.C: Adjust dg-error. * g++.dg/gomp/for-21.C: Likewise. From-SVN: r279685
2019-12-21re PR c++/92965 ("note: 'x' is not public" emitted even when no error is ↵Jakub Jelinek4-4/+28
emitted) PR c++/92965 * pt.c (invalid_nontype_parm_type_p): Call structural_type_p with explain=true only if emitting error. * g++.dg/cpp2a/nontype-class27.C: New test. From-SVN: r279684
2019-12-21re PR c++/92966 (Segfault on defaulted operator== with wrong return type)Jakub Jelinek4-1/+16
PR c++/92966 * method.c (early_check_defaulted_comparison): Don't set DECL_MAYBE_DELETED when returning false. * g++.dg/cpp2a/spaceship-eq8.C: New test. From-SVN: r279683
2019-12-21re PR c++/92973 (Silently accepting defaulted comparison operators in C++11 ↵Jakub Jelinek4-0/+19
.. 17) PR c++/92973 * method.c (early_check_defaulted_comparison): For C++17 and earlier diagnose defaulted comparison operators. * g++.dg/cpp0x/spaceship-eq1.C: New test. From-SVN: r279682
2019-12-21re PR c++/92666 (bogus -Wunused-but-set-variable in gcov.c with -Wno-restrict)Jakub Jelinek4-0/+34
PR c++/92666 * call.c (convert_arg_to_ellipsis): For floating point or decltype(nullptr) arguments call mark_rvalue_use. * g++.dg/warn/Wunused-var-36.C: New test. From-SVN: r279681
2019-12-21re PR c++/92992 (Side-effects dropped when decltype(nullptr) typed ↵Jakub Jelinek4-1/+41
expression is passed to ellipsis) PR c++/92992 * call.c (convert_arg_to_ellipsis): For decltype(nullptr) arguments that have side-effects use cp_build_compound_expr. * g++.dg/cpp0x/nullptr45.C: New test. From-SVN: r279680
2019-12-20Rename signed integer 16/34-bit macros.Michael Meissner4-14/+26
2019-12-20 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/predicates.md (cint34_operand): Use SIGNED_INTEGER_34BIT_P macro. * config/rs6000/rs6000.c (num_insns_constant_gpr): Use the SIGNED_INTEGER_16BIT_P and SIGNED_INTEGER_34BIT_P macros. (address_to_insn_form): Use the SIGNED_INTEGER_16BIT_P and SIGNED_INTEGER_34BIT_P macros. * config/rs6000/rs6000.h (SIGNED_INTEGER_NBIT_P): New macro. (SIGNED_INTEGER_16BIT_P): Rename SIGNED_16BIT_OFFSET_P to be SIGNED_INTEGER_34BIT_P. (SIGNED_INTEGER_34BIT_P): Rename SIGNED_34BIT_OFFSET_P to be SIGNED_INTEGER_34BIT_P. From-SVN: r279677
2019-12-20c-ada-spec.h (decl_sloc): Delete.Eric Botcazou7-22/+30
c-family/ * c-ada-spec.h (decl_sloc): Delete. * c-ada-spec.c (decl_sloc): Make static. c/ * c-decl.c (collect_source_ref_cb): Delete. (for_each_global_decl): Rename into... (collect_source_refs): ...this. Call collect_source_ref directly. (c_parse_final_cleanups): Always call collect_source_ref on the main input filename. cp/ * decl2.c (c_parse_final_cleanups): Always call collect_source_ref on the main input filename. From-SVN: r279670
2019-12-20fortran: Fix PR number in comment of testcase for PR 69497Jonathan Wakely2-1/+6
The testcase was originally committed with an incorrect changelog and PR number. The changelog was fixed later, but not the comment in the test. PR fortran/69497 * gfortran.dg/pr69497.f90: Fix PR number in comment. From-SVN: r279657
2019-12-20gcc/testsuite/ChangeLog:Stam Markianos-Wright4-0/+108
2019-12-20 Stam Markianos-Wright <stam.markianos-wright@arm.com> * lib/target-supports.exp (check_effective_target_arm_v8_2a_i8mm_ok_nocache): New. (check_effective_target_arm_v8_2a_i8mm_ok): New. (add_options_for_arm_v8_2a_i8mm): New. (check_effective_target_arm_v8_2a_bf16_neon_ok_nocache): New. (check_effective_target_arm_v8_2a_bf16_neon_ok): New. (add_options_for_arm_v8_2a_bf16_neon): New. gcc/Changelog: 2019-12-20 Stam Markianos-Wright <stam.markianos-wright@arm.com> * doc/sourcebuild.texi (arm_v8_2a_bf16_neon_ok): Document new target supports option. (arm_v8_2a_i8mm_ok): Likewise. From-SVN: r279648
2019-12-20Rename tests to reference the correct PRRoman Zhuykov3-0/+7
2019-12-20 Roman Zhuykov <zhroma@ispras.ru> * gcc.dg/pr92951-1.c: Rename to ... * gcc.dg/pr92591-1.c: ... this. * gcc.dg/pr92951-2.c: Rename to ... * gcc.dg/pr92591-2.c: ... this. From-SVN: r279645
2019-12-20Introduce -finline-arg-packing.Thomas Koenig7-3/+77
2019-12-20 Thomas Koenig <tkoenig@gcc.gnu.org> PR middle-end/91512 PR fortran/92738 * invoke.texi: Document -finline-arg-packing. * lang.opt: Add -finline-arg-packing. * options.c (gfc_post_options): Handle -finline-arg-packing. * trans-array.c (gfc_conv_array_parameter): Use flag_inline_arg_packing instead of checking for optimize and optimize_size. 2019-12-20 Thomas Koenig <tkoenig@gcc.gnu.org> PR middle-end/91512 PR fortran/92738 * gfortran.dg/inline_pack_25.f90: New test. From-SVN: r279639
2019-12-20Fortran] PR 92996 – fix rank resolution EXPR_ARRAYTobias Burnus9-31/+86
PR fortran/92996 gcc/fortran/ * expr.c (simplify_parameter_variable): Call gfc_resolve_ref and gfc_expression_rank; fix location info. * gfortran.h (gfc_resolve_ref, gfc_expression_rank): Declare. * match.c (gfc_match_stopcode): Remove redundant setting of gfc_init_expr_flag; early return if gfc_simplify_expr has an error. * resolve.c (gfc_expression_rank): Renamed from expression_rank; minor cleanup. (gfc_resolve_ref): Removed static and renamed from resolve_ref. (resolve_variable, resolve_typebound_function, resolve_typebound_subroutine, resolve_ppc_call, resolve_expr_ppc, gfc_resolve_expr, resolve_procedure): Update calls. PR fortran/92996 gcc/testsuite/ * gfortran.dg/array_simplify_4.f90: New. * gfortran.dg/pr91565.f90: Update dg-error. * gfortran.dg/pr91801.f90: Likewise. From-SVN: r279638
2019-12-20Improve is-coindexed check for OpenACC/OpenMPTobias Burnus4-3/+51
gcc/fortran/ * openmp.c (resolve_omp_clauses): Move is-coindexed check from here ... (gfc_match_omp_variable_list): ... to here. gcc/testsuite/ * gfortran.dg/goacc/coindexed-1.f90: New. From-SVN: r279637
2019-12-20Fix testsuite-fallout of OpenACC deep-copy patchTobias Burnus2-8/+13
gcc/testsuite/ * gfortran.dg/goacc/data-clauses.f95: Remove now obsolete dg-error. From-SVN: r279634
2019-12-20re PR target/92841 (Optimize -fstack-protector-strong code generation a bit)Jakub Jelinek4-3/+29
PR target/92841 * config/i386/i386.md (*stack_protect_set_3): For pic_32bit_operand always use lea{q}, no matter what value which_alternative has. * gcc.target/i386/pr92841-2.c: New test. From-SVN: r279633
2019-12-20re PR target/93002 (while(i--) optimization)Jakub Jelinek4-0/+63
PR target/93002 * config/i386/i386.md (dec reg; cmp $-1, reg; jne lab): New define_peephole2. * gcc.target/i386/pr93002.c: New test. From-SVN: r279632
2019-12-20Fortran polymorphic class-type support for OpenACCJulian Brown3-19/+63
gcc/fortran/ * openmp.c (resolve_oacc_data_clauses): Don't disallow allocatable polymorphic types for OpenACC. * trans-openmp.c (gfc_trans_omp_clauses): Support polymorphic class types. libgomp/ * testsuite/libgomp.oacc-fortran/class-ptr-param.f95: New test. * testsuite/libgomp.oacc-fortran/classtypes-1.f95: New test. * testsuite/libgomp.oacc-fortran/classtypes-2.f95: New test. From-SVN: r279631
2019-12-20OpenACC 2.6 deep copy: Fortran front-end partsJulian Brown12-235/+613
gcc/fortran/ * gfortran.h (gfc_omp_map_op): Add OMP_MAP_ATTACH, OMP_MAP_DETACH. * openmp.c (gfc_match_omp_variable_list): Add allow_derived parameter. Parse derived-type member accesses if true. (omp_mask2): Add OMP_CLAUSE_ATTACH and OMP_CLAUSE_DETACH. (gfc_match_omp_map_clause): Add allow_derived parameter. Pass to gfc_match_omp_variable_list. (gfc_match_omp_clauses): Support attach and detach. Support derived types for appropriate OpenACC directives. (OACC_PARALLEL_CLAUSES, OACC_SERIAL_CLAUSES, OACC_KERNELS_CLAUSES, OACC_DATA_CLAUSES, OACC_ENTER_DATA_CLAUSES): Add OMP_CLAUSE_ATTACH. (OACC_EXIT_DATA_CLAUSES): Add OMP_CLAUSE_DETACH. (check_symbol_not_pointer): Don't disallow pointer objects of derived type. (resolve_oacc_data_clauses): Don't disallow allocatable derived types. (resolve_omp_clauses): Perform duplicate checking only for non-derived type component accesses (plain variables and arrays or array sections). Support component refs. * trans-expr.c (gfc_conv_component_ref, conv_parent_component_references): Make global. (gfc_maybe_dereference_var): New function, broken out of... (gfc_conv_variable): ...here. Call above function. * trans-openmp.c (gfc_omp_privatize_by_reference): Support component refs. (gfc_trans_omp_array_section): New function, broken out of... (gfc_trans_omp_clauses): ...here. Support component refs/derived types, attach and detach clauses. * trans.h (gfc_conv_component_ref, conv_parent_component_references, gfc_maybe_dereference_var): Add prototypes. gcc/testsuite/ * gfortran.dg/goacc/derived-types.f90: New test. * gfortran.dg/goacc/derived-types-2.f90: New test. * gfortran.dg/goacc/derived-types-3.f90: New test. * gfortran.dg/goacc/data-clauses.f95: Adjust for expected errors. * gfortran.dg/goacc/enter-exit-data.f95: Likewise. From-SVN: r279628