aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-10-19[Ada] Wrong freezing for expression function with contracts in a genericArnaud Charlet2-2/+2
gcc/ada/ * contracts.adb (Process_Preconditions_For): Do not exclude instances. * sem_ch4.adb (Analyze_Quantified_Expression): Disable spurious warning on internally generated variables.
2020-10-19[Ada] Implement initialization of CUDA runtimeGhjuvan Lacambre8-2/+731
gcc/ada/ * debug.adb: Document -gnatd_c flag as being used for CUDA. * gnat_cuda.ads: New file. * gnat_cuda.adb: New file. * rtsfind.ads: Add Interfaces_C_Strings package and RE_Fatbin_Wrapper, RE_Register_Fat_Binary, RE_Register_Fat_Binary_End, RE_Register_Function, RE_Chars_Ptr, RE_New_Char_Array entities. * rtsfind.adb: Create new Interfaces_C_Descendant subtype, handle it. * sem_ch7.adb (Analyze_Package_Body_Helper): Call CUDA init procedure. * sem_prag.adb (Analyze_Pragma): Call Add_Cuda_Kernel procedure. * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add gnat_cuda.o.
2020-10-19[Ada] Expanded names in ghost assignmentsBob Duff10-202/+246
gcc/ada/ * ghost.adb (Whole_Object_Ref): New function to compute the name of the whole object. (Mark_And_Set_Ghost_Assignment): Rewrite to use Whole_Object_Ref. We need to partly analyze the left-hand side in order to distinguish expanded names and record components. * lib-xref.ads, lib-xref.adb (Deferred_References): Move table to body, and add Defer_Reference to update the table, avoiding duplicates. (Generate_Reference): Avoid duplicates. * sem_ch8.ads, sem_ch8.adb (Find_Direct_Name): Remove _OK parameters, which are no longer needed. Ignore errors in Ignore_Errors mode. * sem_util.ads, sem_util.adb (Preanalyze_Without_Errors): Make this public, so we can call it from Ghost. * errout.ads, scng.adb, sem_prag.adb: Minor.
2020-10-19[Ada] Do not replace bounds for packed arrays that depend on discriminantsGhjuvan Lacambre1-1/+5
gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Check if type depends on discriminant.
2020-10-19[Ada] Ada2020: AI12-0304 Put_Image attrs of lang-def typesBob Duff2-10/+16
gcc/ada/ * libgnat/a-coinve.adb, libgnat/a-cidlli.adb (Put_Image): Call Iterate.
2020-10-19[Ada] ACATS 4.1R - Exception missedArnaud Charlet2-7/+19
gcc/ada/ * sem_aggr.adb (Resolve_Record_Aggregate): Properly apply subtype constraints when using a Default_Value. * freeze.adb: Fix typo.
2020-10-19[Ada] Reject use of Relaxed_Initialization on scalar/access param or resultYannick Moy1-0/+23
gcc/ada/ * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix bug where a call to Error_Msg_N leads to crash due to Error_Msg_Name_1 being removed by the call, while a subsequent call to Error_Msg_N tries to use it. The variable Error_Msg_Name_1 should be restored prior to the next call. Also add checking for the new rules.
2020-10-19[Ada] No range check on fixed point to integer conversionArnaud Charlet4-36/+55
gcc/ada/ * checks.adb (Apply_Type_Conversion_Checks): Minor code clean up. * exp_ch4.adb (Discrete_Range_Check): Optimize range checks. Update comments. (Expand_N_Type_Conversion): Generate range check when rewriting a type conversion if needed. Add assertion. * exp_ch6.adb (Expand_Simple_Function_Return): Minor code clean up. * sem_res.adb (Resolve_Type_Conversion): Apply range check when needed. Update comments.
2020-10-19[Ada] Clarify protection offered by preconditions on Ada.Text_IO unitsYannick Moy1-2/+3
gcc/ada/ * libgnat/a-textio.ads: Update top-level comment.
2020-10-19[Ada] Fix typo in error message about contract casesPiotr Trojanek1-1/+1
gcc/ada/ * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Fix typo.
2020-10-19[Ada] Simplify detection of by-copy typesPiotr Trojanek1-3/+1
gcc/ada/ * exp_ch6.adb (Expand_Actuals): Simplify condition for by-copy types.
2020-10-19[Ada] Clarify current design of Errout wrt global variable usageYannick Moy1-0/+9
gcc/ada/ * errout.ads: Add comment regarding lack of preservation of Errout state across successive calls to the API.
2020-10-19[Ada] Ada2020: AI12-0304 Put_Image attrs of lang-def typesBob Duff61-43/+904
gcc/ada/ * exp_put_image.adb (Build_Elementary_Put_Image_Call): Use the base type to recognize various cases of access types. * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, libgnat/a-cbhama.adb, libgnat/a-cbhama.ads, libgnat/a-cbhase.adb, libgnat/a-cbhase.ads, libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads, libgnat/a-cborma.adb, libgnat/a-cborma.ads, libgnat/a-cborse.adb, libgnat/a-cborse.ads, libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, libgnat/a-cidlli.adb, libgnat/a-cidlli.ads, libgnat/a-cihama.adb, libgnat/a-cihama.ads, libgnat/a-cihase.adb, libgnat/a-cihase.ads, libgnat/a-cimutr.adb, libgnat/a-cimutr.ads, libgnat/a-ciorma.adb, libgnat/a-ciorma.ads, libgnat/a-ciormu.adb, libgnat/a-ciormu.ads, libgnat/a-ciorse.adb, libgnat/a-ciorse.ads, libgnat/a-coboho.adb, libgnat/a-coboho.ads, libgnat/a-cobove.adb, libgnat/a-cobove.ads, libgnat/a-cohama.adb, libgnat/a-cohama.ads, libgnat/a-cohase.adb, libgnat/a-cohase.ads, libgnat/a-coinho.adb, libgnat/a-coinho.ads, libgnat/a-coinho__shared.adb, libgnat/a-coinho__shared.ads, libgnat/a-coinve.adb, libgnat/a-coinve.ads, libgnat/a-comutr.adb, libgnat/a-comutr.ads, libgnat/a-coorma.adb, libgnat/a-coorma.ads, libgnat/a-coormu.adb, libgnat/a-coormu.ads, libgnat/a-coorse.adb, libgnat/a-coorse.ads, libgnat/a-strunb.adb, libgnat/a-strunb.ads, libgnat/a-strunb__shared.adb, libgnat/a-strunb__shared.ads: Implement Put_Image attibute. * libgnat/a-stteou.ads, libgnat/s-putima.ads, libgnat/a-stouut.ads, libgnat/a-stoubu.adb: Make Ada.Strings.Text_Output, Ada.Strings.Text_Output.Utils, and System.Put_Images Pure, so they can be with'ed by Pure units that should have Put_Image defined. * libgnat/a-stouut.adb: Add missing column adjustments, and remove a redundant one. * libgnat/s-putima.adb (Put_Arrow): New routine to print an arrow. Avoids adding a with clause to some containers.
2020-10-19[Ada] Ada2020: matching parentheses and bracketsBob Duff3-13/+34
gcc/ada/ * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Require matching parens or brackets. * par.adb, par-tchk.adb (T_Right_Bracket): New procedure to give an error on missing ].
2020-10-19[Ada] Crash in expression function defined in protected objectJavier Miranda1-0/+17
gcc/ada/ * sem_ch8.adb (Find_Direct_Name): Do not trust in the decoration of the Entity attribute in constants associated with discriminals of protected types.
2020-10-19[Ada] AI12-0170: Abstract subprogram calls in class-wide precond exprsGary Dismukes1-2/+6
gcc/ada/ * sem_disp.adb (Check_Dispatching_Context): When the enclosing subprogram is abstract, bypass early return if the call is tag-indeterminate, to continue with the later error checking.
2020-10-19[Ada] Private type unexpectedly visibleJavier Miranda1-0/+19
gcc/ada/ * sem_ch7.adb (Uninstall_Declarations): Uninstall the declaration of a subtype declaration defined in the private part of a package.
2020-10-19[Ada] Clean up support of square bracketsArnaud Charlet2-4/+9
gcc/ada/ * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify code since we are always under -gnatX if we encounter a Tok_Left_Bracket. * scng.adb (Scan): [] is an aggregate under -gnatX and a wide character otherwise.
2020-10-19[Ada] Remove useless initialization and refine type of a local variablePiotr Trojanek1-1/+1
gcc/ada/ * exp_ch6.adb (Expand_Call_Helper): Cleanup.
2020-10-19[Ada] Refine type of a local variablePiotr Trojanek1-1/+1
gcc/ada/ * exp_ch6.adb (Is_Direct_Deep_Call): Refine type from Node_Id to Entity_Id.
2020-10-19[Ada] Simplify membership test for operatorsPiotr Trojanek1-3/+1
gcc/ada/ * exp_ch6.adb (May_Fold): Detect all operators, i.e. both binary and unary ones.
2020-10-19[Ada] Simplify repeated calls with membership testPiotr Trojanek1-2/+2
gcc/ada/ * inline.adb (Expand_Inlined_Call): Simplify repeated calls to Nkind.
2020-10-19Handle right shifts by zero in range-ops.Aldy Hernandez2-0/+21
If the shift amount in operator_lshift::op1_range was zero, an invalid range of [1, 0] was being created. gcc/ChangeLog: PR tree-optimization/97467 * range-op.cc (operator_lshift::op1_range): Handle shifts by 0. gcc/testsuite/ChangeLog: * gcc.dg/pr97467.c: New test.
2020-10-19tree-optimization/97466 - remove spurious assertRichard Biener1-66/+62
This removes an assertion that was supposed to be only for temporary debugging. I've also re-indented the code which I missed as well. 2020-10-19 Richard Biener <rguenther@suse.de> PR tree-optimization/97466 * tree-vect-slp.c (vect_get_and_check_slp_defs): Remove spurious assert, re-indent.
2020-10-19[PATCH] fold x << (n % C) to x << (n & C-1) if C meets power2guojiufu2-1/+25
This patch fixes PR66552 which is also as: https://gcc.gnu.org/pipermail/gcc-patches/2020-February/540930.html which requests to optimizes (x shift (n mod C)) to (x shift (n bit_and (C - 1))) when C is a constant and power of two. gcc/ChangeLog 2020-10-19 Li Jia He <helijia@gcc.gnu.org> PR tree-optimization/66552 * match.pd (x << (n % C) -> x << (n & C-1)): New simplification. gcc/testsuite/ChangeLog 2020-10-19 Li Jia He <helijia@gcc.gnu.org> PR tree-optimization/66552 * gcc.dg/pr66552.c: New testcase.
2020-10-19Simplify comparison GIMPLE IL verificationRichard Biener1-7/+2
There's an old extra allowance for same-mode pointer comparison for which I don't see any good reason today where the only special-case of pointers in useless_type_conversion_p is that of function/method pointers vs. non-function/method pointers. 2020-10-19 Richard Biener <rguenther@suse.de> * tree-cfg.c (verify_gimple_comparison): Drop special-case for pointer comparison.
2020-10-19Daily bump.GCC Administrator3-1/+37
2020-10-18revamp ada.numerics.auxAlexandre Oliva15-477/+598
Instead of mapping elementary functions for all types to a single type, use the intrinsics available for the various base types. A new Ada.Numerics.Aux_Generic_Float is introduced to explicitly dispatch, based on the 'Digits attribute of the base type, to the various newly-added Aux_Short_Float, Aux_Float, Aux_Long_Float, or Aux_Long_Long_Float. The Aux_Short_Float unit is implemented in terms of the Aux_Float one, and the others rely on the elementary functions from the C Math library for float, double and long double types, respectively. An Aux_Linker_Options is added, and units that import intrinsics from libm/libc depend on it to provide the "-lm" linker option if needed. The option is provided by default, but there is an alternate version that doesn't, that is used for vxworks targets. The Aux variant that used to open-code Sin and Cos for the ancient ppc-darwin, because of insufficient precision in libc, is dropped, along with the alternate dummy body for Aux. Both are presumed no longer needed. The original Ada.Numerics.Aux is retained, for backward compatibility, as a wrapper for a newly-added Aux_Compat, that renames Aux_Long_Float, except on x86, in which an alternate version renames Aux_Long_Long_Float. Generic_Elementary_Functions and Generic_Complex_Types are adjusted to use Aux_Generic_Float, avoiding the type conversions and inefficiencies of computing results in higher precision than requested. Generic_Complex_Elementary_Functions is adjusted to enable an additional instance of the sincos optimization, even without -gnatn. for gcc/ada/ChangeLog * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Compile Ada.Numerics child units Aux_Generic_Float, Aux_Long_Long_Float, Aux_Long_Float, Aux_Float, Aux_Short_Float, Aux_Compat, and Aux_Linker_Options. (X86_TARGET_PAIRS): Drop dummy body for Aux. Use x86 version of Aux_Compat. (X86_64_TARGET_PAIRS): Likewise. (LIBGNAT_TARGET_PAIRS): On VxWorks, select the nolibm variants. Drop the darwin version of Aux. Drop the redundant libc-x86 numaux variants on x86* kfreebsd variants. * libgnat/a-nagefl.ads: New Aux_Generic_Float. * libgnat/a-naliop.ads: New Aux_Linker_Options. * libgnat/a-naliop__nolibm.ads: New. * libgnat/a-nallfl.ads: New Aux_Long_Long_Float. * libgnat/a-nalofl.ads: New Aux_Long_Float. * libgnat/a-nuaufl.ads: New Aux_Float. * libgnat/a-nashfl.ads: New Aux_Short_Float. * libgnat/a-ngcefu.adb (Exp): Factor out the Im (X) passed to Sin and Cos in the Complex variant too. * libgnat/a-ngcoty.adb: Switch to Aux_Generic_Float. Drop redundant conversions. * libgnat/a-ngelfu.adb: Likewise. * libgnat/a-nuauco.ads: New Aux_Compat. * libgnat/a-nuauco__x86.ads: New. * libgnat/a-numaux.ads: Replace with Compat wrapper. * libgnat/a-numaux__darwin.adb: Remove. * libgnat/a-numaux__darwin.ads: Remove. * libgnat/a-numaux__dummy.adb: Remove. * libgnat/a-numaux__libc-x86.ads: Remove. * libgnat/a-numaux__vxworks.ads: Remove.
2020-10-18PR libfortran/97063 - Wrong result for vector (step size is negative) * matrixHarald Anlauf1-0/+47
The MATMUL intrinsic provided a wrong result for rank-1 times rank-2 array when a negative stride was used for addressing the elements of the rank-1 array, because a check on strides was erroneously placed before the check on the rank. Interchange order of checks. libgfortran/ChangeLog: * m4/matmul_internal.m4: Move check for rank-1 times rank-2 before checks on strides for rank-2 times rank-2. * generated/matmul_c10.c: Regenerated. * generated/matmul_c16.c: Likewise. * generated/matmul_c4.c: Likewise. * generated/matmul_c8.c: Likewise. * generated/matmul_i1.c: Likewise. * generated/matmul_i16.c: Likewise. * generated/matmul_i2.c: Likewise. * generated/matmul_i4.c: Likewise. * generated/matmul_i8.c: Likewise. * generated/matmul_r10.c: Likewise. * generated/matmul_r16.c: Likewise. * generated/matmul_r4.c: Likewise. * generated/matmul_r8.c: Likewise. * generated/matmulavx128_c10.c: Likewise. * generated/matmulavx128_c16.c: Likewise. * generated/matmulavx128_c4.c: Likewise. * generated/matmulavx128_c8.c: Likewise. * generated/matmulavx128_i1.c: Likewise. * generated/matmulavx128_i16.c: Likewise. * generated/matmulavx128_i2.c: Likewise. * generated/matmulavx128_i4.c: Likewise. * generated/matmulavx128_i8.c: Likewise. * generated/matmulavx128_r10.c: Likewise. * generated/matmulavx128_r16.c: Likewise. * generated/matmulavx128_r4.c: Likewise. * generated/matmulavx128_r8.c: Likewise. gcc/testsuite/ChangeLog: * gfortran.dg/matmul_20.f90: New test.
2020-10-18Daily bump.GCC Administrator2-1/+26
2020-10-17testsuite: simplify target requirements for various Power9 testcases.David Edelsohn18-19/+21
This patch removes unnnecessary or simplifies requirements for various Power9 testcase. gcc/testsuite/ChangeLog: * gcc.target/powerpc/p9-dimode1.c: Remove target. * gcc.target/powerpc/p9-dimode2.c: Remove target. * gcc.target/powerpc/p9-fpcvt-1.c: Remove target. * gcc.target/powerpc/p9-fpcvt-2.c: Require lp64. * gcc.target/powerpc/p9-minmax-1.c: Remove target. * gcc.target/powerpc/p9-minmax-2.c: Remove target. * gcc.target/powerpc/p9-minmax-3.c: Remove target. * gcc.target/powerpc/p9-splat-1.c: Require lp64. * gcc.target/powerpc/p9-splat-2.c: Remove target. * gcc.target/powerpc/p9-splat-3.c: Remove target. * gcc.target/powerpc/p9-splat-4.c: Require lp64. * gcc.target/powerpc/p9-vbpermd.c: Require lp64. * gcc.target/powerpc/p9-vneg.c: Require lp64. * gcc.target/powerpc/p9-vparity.c: Require lp64. * gcc.target/powerpc/p9-vpermr.c: Require LE. * gcc.target/powerpc/p9-xxbr-1.c: Remove target. * gcc.target/powerpc/p9-xxbr-2.c: Require lp64. * gcc.target/powerpc/p9-xxbr-3.c: Require lp64.
2020-10-16testsuite: Enable builtins-3-p9.c on BE targets.David Edelsohn1-1/+1
This patch removes the unnecessary "le" target requirement of the builtins-3-p9.c testcase. gcc/testsuite/ChangeLog: 2020-10-16 David Edelsohn <dje.gcc@gmail.com> * gcc.target/powerpc/builtins-3-p9.c: Remove le.
2020-10-17Daily bump.GCC Administrator6-1/+593
2020-10-16testsuite: remove explicit -m32/-m64 from testcasesDavid Edelsohn2-2/+2
Two tests in the powerpc-specific testsuite explicitly add the -m32 and -m64 commandline options, which only are valid for Linux. And the tests check for lp64 or ilp32, which is redundant. This patch removes the unnecessary commandline options. gcc/testsuite/ChangeLog: 2020-10-16 David Edelsohn <dje.gcc@gmail.com> * gcc.target/powerpc/pr96139-a.c: Remove -m32. * gcc.target/powerpc/pr96139-b.c: Remove -m64.
2020-10-16PR fortran/95979 - ICE in get_kind, at fortran/simplify.c:129Harald Anlauf4-6/+26
Simplification of the elemental intrinsic INDEX with constant array-valued arguments failed with an ICE or did not reduce to a constant array, depending also on the presence of the optional KIND argument. Add a further attempt of simplification in the case of elemental intrinsics, and make sure the KIND argument is not removed prematurely during simplification of INDEX. gcc/fortran/ChangeLog: PR fortran/95979 * expr.c (gfc_check_init_expr): Fix check of return code from gfc_intrinsic_func_interface. * intrinsic.c (gfc_intrinsic_func_interface): Add further attempt of simplification of elemental intrinsics with array arguments. * iresolve.c (gfc_resolve_index_func): Keep optional KIND argument for simplification of elemental use of INDEX. gcc/testsuite/ChangeLog: PR fortran/95979 * gfortran.dg/index_4.f90: New test.
2020-10-16[PATCH] Don't display ranges for dead ssa-names.Andrew MacLeod1-1/+1
Dont show names that have been removed. * vr-values.c (dump_all_value_ranges): Only dump names which are still active.
2020-10-16pointer_plus [0, 0] + const foldingAndrew MacLeod1-0/+8
Return a constant range if POINTER_PLUS is [0,0] plus a const. * range-op.cc (pointer_plus_operator::wi_fold): Make pointer_plus [0, 0] + const return a [const, const] range.
2020-10-16Don't invoke range_of_expr multiple times.Andrew MacLeod1-2/+11
Call evrp_folder::range_of_expr directly so we dont end up calling hybrid_folder::range_of_expr and doing double lookups/comparisons. * gimple-ssa-evrp.c (hybrid_folder::value_on_edge): Call evrp_folder::value_of_expr directly. (hybrid_folder::value_of_stmt): Ditto.
2020-10-16Don't assert on a negative shift.Andrew MacLeod2-1/+12
Don't assert, simply Return false for negative shifts as we can't tell anything about the operand. PR tree-optimization/97462 gcc/ * range-op.cc (operator_lshift::op1_range): Don't trap on negative shifts. gcc/testsuite/ * gcc.dg/pr97462.c: New file.
2020-10-16c++: Fix nullptr deref [pr97460[Nathan Sidwell2-1/+11
My changes to friend handling meant that there are now cases where a friend doesn't get a lang-specific object. So we need to check there is one before looking inside it. PR c++/97460 gcc/cp/ * pt.c (push_template_decl): Check DECL_LANG_SPECIFIC in friend case. gcc/testsuite/ * g++.dg/template/pr97460.C: New.
2020-10-16c++: Fix null deref at EOF [PR96258]Nathan Sidwell2-4/+7
cp_parser_declaration peeks at 1 or 2 tokens, when I changed it not to peek past EOF, I set the second token to NULL. But there are paths through the function that just look at the second token. Fixed by setting that token to EOF rather than NULL in this case. PR c++/96258 gcc/cp/ * parser.c (cp_parser_declaration): Make token2 point to EOF if token1 was EOF. gcc/testsuite/ * g++.dg/parse/pr96258.C: New.
2020-10-16Fix the vxworks crtstuff handling of kernel/rtp variationsOlivier Hainque1-2/+1
The ports that support RTPs achieve the kernel/rtp compilation and link distinction through the multilib mechanism. This patch just removes the bogus explicit extraneous materialization of this distinction in the common VxWorks configuration files and leaves the rtp specialization all to the multilib machinery. 2020-10-15 Olivier Hainque <hainque@adacore.com> libgcc/ * config/t-vxcrtstuff: Remove the -kernel/-rtp specialization. gcc/ * config/vxworks.h (VX_CRTBEGIN_SPEC): Likewise.
2020-10-16Allow self configured definition of _WRS_VXWORKS_MAJOROlivier Hainque1-4/+16
This conditions the use of system headers to fetch a _WRS_VXWORKS_MAJOR macro on the non definition of that macro. This allows builds where a specific value is predefined, e.g. with a self spec, useful in environments where the system headers don't actually define that macro (e.g. vxworks 5 or 653). In addition, _WRS_VXWORKS_MINOR is only provided by the system headers when really meaningful, e.g. from 6.4 to 6.9. We just pick a conservative default to 0 for all the cases where it is not exposed by the system headers or otherwise. 2020-10-15 Olivier Hainque <hainque@adacore.com> gcc/ * config/vxworks/_vxworks-versions.h: Only include version.h if _WRS_VXWORKS_MAJOR is not defined. Provide a default _WRS_VXWORKS_MINOR (0).
2020-10-16arm: Fix the warning -mcpu=cortex-m55 conflicting with -march=armv8.1-m.main ↵Srinath Parvathaneni2-1/+10
(pr97327). This patch fixes (PR97327) the warning -mcpu=cortex-m55 conflicts with -march=armv8.1-m.main for -mfloat-abi=soft by adding the isa_bit_mve_float to clearing FP bit list. The following combination are fixed with this patch: $ cat bug.c int main(){ return 0; } $ arm-none-eabi-gcc -mcpu=cortex-m55 -mfloat-abi=soft bug.c -c $ arm-none-eabi-gcc -mcpu=cortex-m55 -mfloat-abi=soft -march=armv8.1-m.main+mve bug.c -c Before this patch for above combinations: cc1: warning: switch '-mcpu=cortex-m55' conflicts with '-march=armv8.1-m.main' switch After this patch for above combinations no warning/errors. gcc/ChangeLog: 2020-10-16 Srinath Parvathaneni <srinath.parvathaneni@arm.com> PR target/97327 * config/arm/arm.c (fp_bitlist): Add isa_bit_mve_float to FP bits array. gcc/testsuite/ChangeLog: PR target/97327 * gcc.target/arm/mve/intrinsics/pr97327.c: New test.
2020-10-16Adjust BB vectorization SLP build heuristicsRichard Biener2-6/+45
This changes SLP def gathering to not fail due to mismatched def type but instead demote the def to external. This allows the new testcase to be vectorized in full (with GCC 10 it is not vectorized at all and with current trunk we vectorize only the store). This is important since with BB vectorization being applied to bigger pieces of code the chance that we mix internal and external defs for an operand that should end up treated as external (built from scalars) increases. 2020-10-16 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): For BB vectorization swap operands only if it helps, demote mismatches to external. * gcc.dg/vect/bb-slp-53.c: New testcase.
2020-10-16arm: Fix wrong code generated for mve scatter store with writeback ↵Srinath Parvathaneni14-252/+32
intrinsics with -O2 (PR97271). This patch fixes (PR97271) the wrong code-gen for mve scatter store with writeback intrinsics with -O2. $cat bug.c void foo (uint32x4_t * addr, const int offset, int32x4_t value) { vstrwq_scatter_base_wb_s32 (addr, 8, value); } $ arm-none-eabi-gcc bug.c -S -O2 -march=armv8.1-m.main+mve -mfloat-abi=hard -o - Without this patch: ... foo: vldrw.32 q3, [r0] vstrw.u32 q0, [q3, #8]! ---> (A) vldr.64 d4, .L3 vldr.64 d5, .L3+8 vldrw.32 q3, [r0] vstrw.u32 q2, [q3, #8]! ---> (B) bx lr ... With this patch: ... foo: vldrw.32 q3, [r0] vstrw.u32 q0, [q3, #8]! --> (C) vstrw.32 q3, [r0] bx lr ... Without this patch 2 vstrw assembly instructions (A and B) are generated for vstrwq_scatter_base_wb_s32 intrinsic where as fix generates only one vstrw assembly instruction (C). gcc/ChangeLog: 2020-10-06 Srinath Parvathaneni <srinath.parvathaneni@arm.com> PR target/97291 * config/arm/arm-builtins.c (arm_strsbwbs_qualifiers): Modify array. (arm_strsbwbu_qualifiers): Likewise. (arm_strsbwbs_p_qualifiers): Likewise. (arm_strsbwbu_p_qualifiers): Likewise. * config/arm/arm_mve.h (__arm_vstrdq_scatter_base_wb_s64): Modify function definition. (__arm_vstrdq_scatter_base_wb_u64): Likewise. (__arm_vstrdq_scatter_base_wb_p_s64): Likewise. (__arm_vstrdq_scatter_base_wb_p_u64): Likewise. (__arm_vstrwq_scatter_base_wb_p_s32): Likewise. (__arm_vstrwq_scatter_base_wb_p_u32): Likewise. (__arm_vstrwq_scatter_base_wb_s32): Likewise. (__arm_vstrwq_scatter_base_wb_u32): Likewise. (__arm_vstrwq_scatter_base_wb_f32): Likewise. (__arm_vstrwq_scatter_base_wb_p_f32): Likewise. * config/arm/arm_mve_builtins.def (vstrwq_scatter_base_wb_add_u): Remove expansion for the builtin. (vstrwq_scatter_base_wb_add_s): Likewise. (vstrwq_scatter_base_wb_add_f): Likewise. (vstrdq_scatter_base_wb_add_u): Likewise. (vstrdq_scatter_base_wb_add_s): Likewise. (vstrwq_scatter_base_wb_p_add_u): Likewise. (vstrwq_scatter_base_wb_p_add_s): Likewise. (vstrwq_scatter_base_wb_p_add_f): Likewise. (vstrdq_scatter_base_wb_p_add_u): Likewise. (vstrdq_scatter_base_wb_p_add_s): Likewise. * config/arm/mve.md (mve_vstrwq_scatter_base_wb_<supf>v4si): Remove expand. (mve_vstrwq_scatter_base_wb_add_<supf>v4si): Likewise. (mve_vstrwq_scatter_base_wb_<supf>v4si_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_<supf>v4si): This. (mve_vstrwq_scatter_base_wb_p_<supf>v4si): Remove expand. (mve_vstrwq_scatter_base_wb_p_add_<supf>v4si): Likewise. (mve_vstrwq_scatter_base_wb_p_<supf>v4si_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_p_<supf>v4si): This. (mve_vstrwq_scatter_base_wb_fv4sf): Remove expand. (mve_vstrwq_scatter_base_wb_add_fv4sf): Likewise. (mve_vstrwq_scatter_base_wb_fv4sf_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_fv4sf): This. (mve_vstrwq_scatter_base_wb_p_fv4sf): Remove expand. (mve_vstrwq_scatter_base_wb_p_add_fv4sf): Likewise. (mve_vstrwq_scatter_base_wb_p_fv4sf_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_p_fv4sf): This. (mve_vstrdq_scatter_base_wb_<supf>v2di): Remove expand. (mve_vstrdq_scatter_base_wb_add_<supf>v2di): Likewise. (mve_vstrdq_scatter_base_wb_<supf>v2di_insn): Rename pattern to ... (mve_vstrdq_scatter_base_wb_<supf>v2di): This. (mve_vstrdq_scatter_base_wb_p_<supf>v2di): Remove expand. (mve_vstrdq_scatter_base_wb_p_add_<supf>v2di): Likewise. (mve_vstrdq_scatter_base_wb_p_<supf>v2di_insn): Rename pattern to ... (mve_vstrdq_scatter_base_wb_p_<supf>v2di): This. gcc/testsuite/ChangeLog: PR target/97291 * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c: Modify. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c: Likewise.
2020-10-16Fix modref-4.c testcaseJan Hubicka1-2/+2
PR testsuite/97426 * gcc.dg/tree-ssa/modref-4.c: Fix return test.
2020-10-16RISC-V: Handle implied extension in multilib-generatorKito Cheng1-4/+20
- -march has handle implied extension for a while, so I think multilib-generator should handle this well too. - Currently only add rule for D imply F. gcc/ChangeLog: * config/riscv/multilib-generator (IMPLIED_EXT): New. (arch_canonicalize): Update comment and handle implied extensions.
2020-10-16Refactor vect_get_and_check_slp_defs some moreRichard Biener1-59/+82
This refactors vect_get_and_check_slp_defs so that the ops and def_stmts arrays are filled for all stmts and operands even when we signal failure. This allows later changes for BB vectorization SLP discovery heuristics. 2020-10-16 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): First analyze all operands and fill in the def_stmts and ops entries. (vect_def_types_match): New helper.
2020-10-16IPA: compare VRP types.Martin Liska2-1/+30
gcc/ChangeLog: PR ipa/97404 * ipa-prop.c (struct ipa_vr_ggc_hash_traits): Compare types of VRP as we can merge ranges of different types. gcc/testsuite/ChangeLog: PR ipa/97404 * gcc.c-torture/execute/pr97404.c: New test.