aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2019-12-12opts.c (default_options_table): Move -ftree-loop-distribute-patterns entry ↵Jakub Jelinek3-3/+8
from -O3 or later section to -O2 or... * opts.c (default_options_table): Move -ftree-loop-distribute-patterns entry from -O3 or later section to -O2 or later section. * doc/invoke.texi (-ftree-loop-distribute-patterns): Mention the option is enabled by default at -O2+ rather than just at -O3. From-SVN: r279267
2019-12-12re PR fortran/92899 ([OpenMP] ICE in gfc_trans_omp_atomic, at ↵Jakub Jelinek2-2/+7
fortran/trans-openmp.c:3769) PR fortran/92899 * trans-openmp.c (gfc_trans_omp_atomic): For GFC_OMP_ATOMIC_SWAP, do look through conversion on expr2 if any. * testsuite/libgomp.fortran/atomic1.f90: New test. From-SVN: r279266
2019-12-12re PR target/92723 (ICE in expand_shift_1, at expmed.c:2635)Jakub Jelinek4-12/+24
PR target/92723 * tree-vect-patterns.c (vect_recog_rotate_pattern): If dt is not vect_internal_def, use oprnd1 as is, without trying to cast it. Formatting fix. * gcc.dg/vect/pr92723.c: New test. From-SVN: r279265
2019-12-11builtins.c (compute_objsize): Add an argument and set it to offset into ↵Martin Sebor9-111/+477
destination. gcc/ChangeLog: * builtins.c (compute_objsize): Add an argument and set it to offset into destination. * builtins.h (compute_objsize): Add an argument. * tree-object-size.c (addr_object_size): Add an argument and set it to offset into destination. (compute_builtin_object_size): Same. * tree-object-size.h (compute_builtin_object_size): Add an argument. * tree-ssa-strlen.c (get_addr_stridx): Add an argument and set it to offset into destination. (maybe_warn_overflow): New function. (handle_store): Call maybe_warn_overflow to issue warnings. gcc/testsuite/ChangeLog: * c-c++-common/Wstringop-overflow-2.c: Adjust text of expected messages. * g++.dg/warn/Wstringop-overflow-3.C: Same. * gcc.dg/Wstringop-overflow-17.c: Same. From-SVN: r279248
2019-12-11re PR fortran/92897 ([Coarray] ICE in gfc_set_array_spec, at ↵Steven G. Kargl4-4/+19
fortran/array.c:864) 2019-12-11 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/92897 * array.c (gfc_set_array_spec): Remove invalid assert() triggered by invalid Fortran code. 2019-12-11 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/92897 * gfortran.dg/pr92897.f90: New test. From-SVN: r279247
2019-12-11MSP430: Add -fno-exceptions multilibJozef Lawrynowicz8-6/+73
ChangeLog: 2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com> * config-ml.in (msp430-*-*): Support --disable-no-exceptions configure flag. gcc/ChangeLog: 2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com> * config/msp430/msp430.h (STARTFILE_SPEC) [!fexceptions]: Use crtbegin_no_eh.o if building for the C language. [fno-exceptions]: Use crtbegin_no_eh.o if building for any language except C. (ENDFILE_SPEC) [!fexceptions]: Use crtend_no_eh.o if building for the C language. [fno-exceptions]: Use crtend_no_eh.o if building for any language except C. * config/msp430/t-msp430: Add -fno-exceptions multilib. * doc/install.texi: Document --disable-no-exceptions multilib configure option. * doc/sourcebuild.texi: Document exceptions_enabled effective target. gcc/testsuite/ChangeLog: 2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com> * lib/gcc-dg.exp: Add dg-prune messages for when exception handling is disabled. * lib/target-supports.exp (check_effective_target_exceptions_enabled): New. libgcc/ChangeLog: 2019-12-11 Jozef Lawrynowicz <jozef.l@mittosystems.com> * config.host: Add crt{begin,end}_no_eh.o to "extra_parts". * config.host (msp430*-*-elf): Add crt{begin,end}_no_eh.o to "extra_parts". From-SVN: r279246
2019-12-11Introduce pretty_printer::clone vfuncDavid Malcolm10-0/+83
This patch provides a way to clone a pretty_printer. This is needed so that we can capture text in a label_text and make layout decisions based on it, using the policy of global_dc's printer, whilst within a call to diagnostic_show_locus. We can't print with the pretty_printer itself within a call to diagnostic_show_locus since it has partly-buffered content. gcc/c-family/ChangeLog: * c-pretty-print.c (c_pretty_printer::clone): New vfunc implementation. * c-pretty-print.h (c_pretty_printer::clone): New vfunc decl. gcc/cp/ChangeLog: * cxx-pretty-print.c (cxx_pretty_printer::clone): New vfunc implementation. * cxx-pretty-print.h (cxx_pretty_printer::clone): New vfunc decl. * error.c (cxx_format_postprocessor::clone): New vfunc. gcc/ChangeLog: * pretty-print.c (pretty_printer::pretty_printer): New copy-ctor. (pretty_printer::clone): New vfunc implementation. * pretty-print.h (format_postprocessor::clone): New pure vfunc decl. (pretty_printer::pretty_printer): New copy-ctor decl. (pretty_printer::clone): New vfunc decl. From-SVN: r279244
2019-12-11function-tests.c: expose selftest::make_fndecl for use elsewhereDavid Malcolm3-2/+14
This is used by new selftests in the analyzer patch kit. gcc/ChangeLog: * function-tests.c (selftest::make_fndecl): Make non-static. * selftest.h (selftest::make_fndecl): New decl. From-SVN: r279242
2019-12-11re PR c++/92869 (C++17 wrongly reports aggregate type as not-aggregate (when ↵Jakub Jelinek4-1/+39
explicitly defaulted ctors are added)) PR c++/92869 * class.c (finish_struct): For C++17 and earlier, check type_has_user_provided_or_explicit_constructor rather than TYPE_HAS_USER_CONSTRUCTOR whether to set CLASSTYPE_NON_AGGREGATE. * g++.dg/cpp0x/aggr3.C: New test. From-SVN: r279241
2019-12-11PR c++/92878 - Parenthesized init of aggregates in new-expression.Marek Polacek4-3/+80
Ville pointed out that our paren init of aggregates doesn't work for auto a = new A(1, 2, 3); and I think it should: A new-expression that creates an object of type T initializes that object as follows: ... -- Otherwise, the new-initializer is interpreted according to the initialization rules of [dcl.init] for direct-initialization. so I think it follows that we should perform dcl.init#17.6.2.2. This doesn't work with new[]; we have: error ("parenthesized initializer in array new"); * init.c (build_new_1): Handle parenthesized initialization of aggregates in new-expression. * g++.dg/cpp2a/paren-init20.C: New test. From-SVN: r279240
2019-12-11* g++.dg/cpp0x/initlist-new2.C: Clarify comment.Jason Merrill1-1/+1
From-SVN: r279239
2019-12-11PR c++/92105 - decltype(decltype) error cascade.Jason Merrill4-10/+35
The primary change here is to do the CPP_DECLTYPE replacement even when we get an error, so we don't keep trying and giving the same parse error each time. We also commit to the tentative firewall parse more often, leading to better diagnostics. * parser.c (cp_parser_decltype_expr): Don't tentative_firewall here. (cp_parser_decltype): Do it here. Remember a non-tentative error. From-SVN: r279237
2019-12-11PR c++/57082 - new X{} and private destructor.Jason Merrill3-1/+20
build_new_1 already passes tf_no_cleanup to build_value_init, but in this testcase we end up calling build_value_init by way of build_special_member_call, so we need to pass it to that function as well. * init.c (build_new_1): Also pass tf_no_cleanup to build_special_member_call. From-SVN: r279236
2019-12-11PR c++/92774 - ICE with implicitly deleted operator<=>.Jason Merrill3-12/+50
Missing error-recovery code. While I was poking at this I also figured we don't need to iterate over the members of a union. * method.c (comp_info::~comp_info): Factor out of... (build_comparison_op): Here. Handle error return from build_new_op. From-SVN: r279235
2019-12-11PR c++/92859 - ADL and bit-field.Jason Merrill3-1/+22
We also need unlowered_expr_type when considering associated types for ADL. * name-lookup.c: Use unlowered_expr_type. From-SVN: r279229
2019-12-11PR c++/92446 - deduction of class NTTP.Jason Merrill3-1/+19
Another place we need to look through the VIEW_CONVERT_EXPR we add to make a use of a class NTTP have const type. * pt.c (deducible_expression): Look through VIEW_CONVERT_EXPR. From-SVN: r279228
2019-12-11PR middle-end/79221 - missing -Wstringop-overflow= on a strcat overflowMartin Sebor2-0/+25
gcc/testsuite/ChangeLog: * gcc.dg/Wstringop-overflow-26.c: New test. From-SVN: r279227
2019-12-11Adds multibyte awareness to pretty-print.cLewis Hyatt2-1/+71
2019-12-11 Lewis Hyatt <lhyatt@gmail.com> PR 91853 * pretty-print.c (pp_quoted_string): Avoid hex-escaping valid multibyte input. Fix off-by-one-bug printing the last byte before a hex-escaped output. (pp_character): Don't apply line wrapping in the middle of multibyte characters. (test_utf8): New test. (pretty_print_c_tests): Call the new test. From-SVN: r279226
2019-12-11[testsuite][arm] Remove xfail for vect-epilogues testAndre Vieira2-1/+5
gcc/testsuite/ChangeLog: 2019-12-11 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.dg/vect/vect-epilogues.c: Remove xfail for arm. From-SVN: r279225
2019-12-11arm: Fix an incorrect warning when -mcpu=cortex-a55 is used with ↵Richard Earnshaw3-28/+57
-mfloat-abi=soft When a CPU such as cortex-a55 is used with the soft-float ABI variant, the compiler is incorrectly issuing a warning about a mismatch between the architecture (generated internally) and the CPU. This is not expected or intended. The problem stems from the fact that we generate (correctly) an architecture for a soft-float compilation, but then try to compare it against the one recorded for the CPU. Normally we strip out the floating point information before doing that comparison, but we currently only do that for the features that can be affected by the -mfpu option. For a soft-float environment we also need to strip out any bits that depend on having floating-point present. So this patch implements that and does a bit of housekeeping at the same time: - in arm-cpus.in it is not necessary for a CPU to specify both +dotprod and +simd in its architecture specification, since +dotprod implies +simd. - I've refactored the ALL_SIMD fgroup in arm-cpus.in to create a new subgroup ALL_SIMD_EXTERNAL and containing the bits that were previously added directly to ALL_SIMD. Similarly, I've added an ALL_FPU_EXTERNAL subgroup. - in arm.c rename fpu_bitlist and all_fpubits to fpu_bitlist_internal and all_fpubits_internal for consistency with the fgroup bits which they contain. * config/arm/arm-cpus.in (ALL_SIMD_EXTERNAL): New fgroup. (ALL_SIMD): Use it. (ALL_FPU_EXTERNAL): New fgroup. (ALL_FP): Use it. (cortex-a55, cortex-a75, cortex-a76, cortex-a76ae): Remove redundant +simd from architecture specification. (cortex-a77, neoverse-n1, cortex-a75.cortex-a55): Likewise. * config/arm/arm.c (isa_all_fpubits, fpu_bitlist): Rename to ... (isa_all_fpubits_internal, fpu_bitlist_internal): ... these. (isa_all_fpbits): New bitmap. (arm_option_override): Initialize it. (arm_configure_build_target): If the target isa does not have any FP enabled, do not warn about mismatches in FP-related feature bits. From-SVN: r279219
2019-12-11Add ARM-specific Bfloat format support to middle-endStam Markianos-Wright3-0/+144
2019-12-11 Stam Markianos-Wright <stam.markianos-wright@arm.com> * real.c (struct arm_bfloat_half_format, encode_arm_bfloat_half, decode_arm_bfloat_half): New. * real.h (arm_bfloat_half_format): New. From-SVN: r279216
2019-12-11Fix PR92901: Change test expectation for C++ in OpenACC test clause-locations.c Frederik Harwath2-1/+8
The columns of the clause locations that are reported for C and C++ are different and hence we need separate test expectations for both languages. 2019-12-11 Frederik Harwath <frederik@codesourcery.com> PR other/92901 /gcc/testsuite/ * c-c++-common/clause-locations.c: Adjust test expectation for C++. From-SVN: r279215
2019-12-11Fix unrecognizable insn of pr92865.Hongtao Liu4-1/+78
gcc/ PR target/92865 * config/i386/i386-expand.c (ix86_valid_mask_cmp_mode): Enable integer mask cmov when available even with TARGET_XOP. gcc/testsuite * gcc.target/i386/pr92865-1.c: New test. From-SVN: r279214
2019-12-11Daily bump.GCC Administrator1-1/+1
From-SVN: r279210
2019-12-11compiler: generate type descriptor for pointer to alias defined in another ↵Ian Lance Taylor2-4/+4
package When a type descriptor is needed (for e.g. interface conversion), if the type is a pointer to a named type defined in another package, we don't generate the definition of the type descriptor because it is generated in the package where the type is defined. However, if the named type is an alias to an unnamed type, its descriptor is not generated in the other package, and we need to generate it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210787 From-SVN: r279207
2019-12-11re PR tree-optimization/92891 (ice in decompose, at wide-int.h:984)Jakub Jelinek4-1/+28
PR tree-optimization/92891 * builtins.c (gimple_call_alloc_size): Convert size to sizetype before returning it. * gcc.c-torture/compile/pr92891.c: New test. From-SVN: r279205
2019-12-10re PR rtl-optimization/92796 (ICE in lra_assign, at lra-assigns.c:1646 on ↵Vladimir Makarov7-15/+66
powerpc64le-linux-gnu) 2019-12-10 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92796 * lra-int.h (lra_risky_transformations_p): Rename to check_and_force_assignment_correctness_p. * lra-assigns.c: Ditto. (lra_assign): Reset check_and_force_assignment_correctness_p. * lra-constraints.c (lra_risky_transformations_p): Rename to check_and_force_assignment_correctness_p. (lra_constraints): Set up check_and_force_assignment_correctness_p only for the 1st sub-pass. * lra-eliminations.c (process_insn_for_elimination): Set up check_and_force_assignment_correctness_p if the insn chnaged its code. 2019-12-10 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92796 * gcc.target/powerpc/pr92796.c: New test. From-SVN: r279204
2019-12-10re PR fortran/91643 (ICE in gfc_trans_create_temp_array, at ↵Thomas Koenig4-0/+29
fortran/trans-array.c:1265) 2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91643 * trans-array.c (gfc_conv_array_parameter): Do not repack an assumed rank dummy argument. 2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91643 * gfortran.dg/assumed_rank_18.f90: New test. From-SVN: r279203
2019-12-10re PR rtl-optimization/92882 (ICE in regstat_bb_compute_calls_crossed, at ↵Jakub Jelinek4-3/+15
regstat.c:327 since r279124) PR rtl-optimization/92882 * regstat.c (regstat_bb_compute_calls_crossed): Don't check INSN_UID against DF_INSN_SIZE or use DF_INSN_INFO_GET unless NONDEBUG_INSN_P. * gfortran.dg/pr92882.f: New test. From-SVN: r279196
2019-12-10re PR ipa/92883 (ICE in compare_values_warnv)Jakub Jelinek4-7/+26
PR ipa/92883 * ipa-cp.c (propagate_vr_across_jump_function): Pass jvr rather than *jfunc->m_vr to intersect. Formatting fix. * gcc.dg/ipa/pr92883.c: New test. From-SVN: r279194
2019-12-10re PR middle-end/92825 (Unnecesary stack protection in Firefox's LightPixel.)Jakub Jelinek5-57/+65
PR middle-end/92825 * cfgexpand.c (add_stack_protection_conflicts): Change return type from void to bool, return true if at least one stack_vars[i].decl is addressable. (record_or_union_type_has_array_p, stack_protect_decl_p): Remove. (expand_used_vars): Don't call stack_protect_decl_p, instead for -fstack-protector-strong set gen_stack_protect_signal to true if add_stack_protection_conflicts returned true. Formatting fixes. * doc/invoke.texi (-fstack-protector-strong): Clarify that optimized out variables or variables not living on the stack don't count. (-fstack-protector): Likewise. Clarify it affects >= 8 byte arrays rather than > 8 byte. * gcc.target/i386/pr92825.c: New test. From-SVN: r279193
2019-12-10* ipa-param-manipulation.cJakub Jelinek3-6/+16
(ipa_param_body_adjustments::register_replacement): Fix comment typo - accross -> across. * ipa-sra.c (propagate_used_across_scc_edge, ipa_sra_analysis): Likewise. (param_splitting_across_edge): Fix typo in dump message - accross -> across. From-SVN: r279188
2019-12-10PR c++/92847 - C++20 comparison ambiguity with class template.Jason Merrill3-14/+33
This testcase demonstrates that looking at cand->template_decl is not a good starting place for finding the most general template, as it is only set for primary templates. * call.c (cand_parms_match): Handle all templated functions. From-SVN: r279185
2019-12-10Fix C++20 structural type vs. private base.Jason Merrill4-19/+55
In my patch to implement C++20 "structural type" I tried to set the access flags on the artificial base fields appropriately, but failed. I was copying TREE_PRIVATE from the binfo, but TREE_PRIVATE on binfo is just a temporary cache for dfs_access_in_type; we really need to get the inheritance access information from BINFO_BASE_ACCESSES. * class.c (build_base_field_1): Take access parameter. (build_base_field): Likewise. (build_base_fields, layout_virtual_bases): Pass it. * tree.c (structural_type_p): Improve private base diagnostic. From-SVN: r279184
2019-12-10PR c++/92560 - ICE with decltype and rewritten operator.Jason Merrill3-1/+21
A call as the immediate operand of decltype is handled differently; we don't create an object of the return type as we do normally. But in the case of a rewritten operator, we're adding another call as a wrapper, so the inner call doesn't get the special handling. * call.c (build_new_op_1): Clear tf_decltype on inner call. From-SVN: r279183
2019-12-10Bail out in gfc_dep_compare_expr for a NULL argument.Martin Liska4-0/+24
2019-12-10 Martin Liska <mliska@suse.cz> PR fortran/92874 * dependency.c (gfc_dep_compare_expr): Bail out when one of the arguments is null. 2019-12-10 Martin Liska <mliska@suse.cz> PR fortran/92874 * gfortran.dg/pr92874.f90: New test. From-SVN: r279181
2019-12-10re PR fortran/92863 (ICE in gfc_typename)Thomas Koenig4-0/+33
2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/92863 * misc.c (gfc_typename): If derived component is NULL for derived or class, return "invalid type" or "invalid class", respectively. 2019-12-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/92863 * gfortran.dg/interface_45.f90: New test. From-SVN: r279180
2019-12-10cgraph.c (cgraph_node::verify_node): Verify tp_first_run.Jan Hubicka1-0/+10
* cgraph.c (cgraph_node::verify_node): Verify tp_first_run. * cgraph.h (cgrpah_node): Turn tp_first_run back to int. * cgraphunit.c (tp_first_run_node_cmp): Do not watch for overflows. (expand_all_functions): First expand ordered section and then unordered. * profile.c (compute_value_histograms): Error on out of range tp_first_runs. From-SVN: r279179
2019-12-10Turn tp_first_run counts back to 32bit values.Jan Hubicka6-39/+54
* cgraph.c (cgraph_node::verify_node): Verify tp_first_run. * cgraph.h (cgrpah_node): Turn tp_first_run back to int. * cgraphunit.c (tp_first_run_node_cmp): Do not watch for overflows. (expand_all_functions): First expand ordered section and then unordered. * lto-partition.c (lto_balanced_map): Fix printing of tp_first_run. * profile.c (compute_value_histograms): Error on out of range tp_first_runs. From-SVN: r279178
2019-12-10predict.c (compute_function_frequency): Check for presence of IPA profile.Jan Hubicka2-5/+8
* predict.c (compute_function_frequency): Check for presence of IPA profile. From-SVN: r279177
2019-12-10varasm.c (default_function_section): Fix confused tests for tp_first_run ↵Jan Hubicka2-7/+13
reordering. * varasm.c (default_function_section): Fix confused tests for tp_first_run reordering. From-SVN: r279176
2019-12-10[AArch64] Don't allow partial SVE modes in GPRsRichard Sandiford4-1/+40
With -msve-vector-bits=N, the payload of some partial SVE modes can be 16 bytes or smaller, which makes them small enough to fit in a pair of GPRs. We specifically don't want that, because the payload is distributed evenly across the SVE register rather than collected at one end. Marshalling it into a GPR via register operations would be expensive. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Don't allow SVE modes in GPRs. gcc/testsuite/ * gcc.target/aarch64/sve/mixed_size_7.c: New test. From-SVN: r279174
2019-12-10[AArch64] Fix INDEX patterns for partial VNx2 modesRichard Sandiford5-4/+68
The INDEX patterns handle partial modes by choosing the container size rather than the element size, so that the number of lanes (and thus number of additions) matches the mode. This means that all VNx4 modes use .s and all VNx2 modes use .d, etc. When adding this, I'd forgotten that the choice between Wn and Xn registers would need to be updated to use the container size too. For partial VNx2s, we were using .d containers with Wn rather than Xn source registers. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/iterators.md (vccore): New iterator. * config/aarch64/aarch64-sve.md (vec_series<mode>): Use it instead of vwcore. (*vec_series<mode>_plus): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/mixed_size_6.c: New test. From-SVN: r279173
2019-12-10Add tests to verify OpenACC clause locationsFrederik Harwath3-0/+40
Check that the column information for OpenACC clauses is communicated correctly to the middle-end, in particular by the Fortran front-end (cf. PR 92793). 2019-12-10 Frederik Harwath <frederik@codesourcery.com> gcc/testsuite/ * c-c++-common/goacc/clause-locations.c: New test. * gfortran.dg/goacc/clause-locations.f90: New test. From-SVN: r279169
2019-12-10Use clause locations in OpenACC nested reduction warningsFrederik Harwath2-1/+5
Since the Fortran front-end now sets the clause locations correctly, we can emit warnings with more precise locations if we encounter conflicting operations for a variable in reduction clauses. 2019-12-10 Frederik Harwath <frederik@codesourcery.com> gcc/ * omp-low.c (scan_omp_for): Use clause location in warning. From-SVN: r279168
2019-12-10Make dwarf2out punt for MODE_VECTOR_BOOLRichard Sandiford4-1/+37
The dwarf2 handling of vector constants currently divides the vector into a length (number of elements) and byte element size. This doesn't work well for MODE_VECTOR_BOOL, where several elements are packed into the same byte. We should probably add a way of encoding this in future, but for now the safest thing is to punt, like we already do for variable-length vectors. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * dwarf2out.c (loc_descriptor): Punt for MODE_VECTOR_BOOL. (add_const_value_attribute): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/acle/general/debug_4.c: New test. From-SVN: r279165
2019-12-10Add missing conversion in vect_create_epilog_for_reductionRichard Sandiford2-0/+8
The direct_slp_reduc code in vect_create_epilog_for_reduction was still assuming that all types involved in a reduction are the same (up to types_compatible_p), whereas we now support differences in sign. This was causing an ICE in gcc.dg/vect/pr92324-4.c for SVE. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vect_create_epilog_for_reduction): When handling direct_slp_reduc, allow the PHI arguments to have a different type from the vector elements. From-SVN: r279164
2019-12-10Record the loop masks needed for EXTRACT_LAST_REDUCTIONsRichard Sandiford4-2/+45
The analysis phase of vectorizable_condition wasn't recording the loop masks needed by the transform phase. This meant that the masks wouldn't be created in the (rare) case that no other statement needed them. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-stmts.c (vectorizable_condition): Record the loop masks required for extract-last reductions. gcc/testsuite/ * gcc.target/aarch64/sve/clastb_9.c: New test. From-SVN: r279163
2019-12-10Fix EXTRACT_LAST_REDUCTION handling of pattern stmtsRichard Sandiford2-7/+16
Unlike most vector ops, extract-last reductions replace the original scalar code in-situ rather than adding an adjacent vector implementation. I.e.: dest_1 = COND_EXPR <...>; becomes: dest_1 = .EXTRACT_LAST (...); gcc.dg/vect/vect-cond-reduc-4.c was ICEing for SVE because we tried to replace the pattern statement in this way, rather than replacing the original scalar statement. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-stmts.c (vect_finish_replace_stmt): Always use the original scalar statement rather than a pattern statement. (vectorizable_condition): Likewise, in the handling of extract-last reductions. From-SVN: r279162
2019-12-10Disallow EXTRACT_LAST_REDUCTION for reduction chainsRichard Sandiford2-2/+8
gcc.dg/vect/vect-cond-reduc-5.c was ICEing for SVE because we tried to use an extract-last reduction for a chain of COND_EXPRs. Adding support for the chained case would be too invasive for stage 3 so this patch explicitly forbids it instead. I've filed PR92884 for the possible future work. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vectorizable_reduction): Don't use EXTRACT_LAST_REDUCTION for chained reductions. From-SVN: r279161