aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-06-07Use moves to eliminate redundant test/compare instructionsJeff Law1-9/+44
gcc/ * config/h8300/movepush.md: Change most _clobber_flags patterns to instead use <cczn> subst. (movsi_cczn): New pattern with usable CC cases split out. (movsi_h8sx_cczn): Likewise.
2021-06-07Reformat target.def for better parsing.Martin Liska4-339/+612
gcc/c-family/ChangeLog: * c-target.def: Split long lines and replace them with '\n\'. gcc/ChangeLog: * common/common-target.def: Split long lines and replace them with '\n\'. * target.def: Likewise. * doc/tm.texi: Re-generated.
2021-06-07For obj-c stage-final re-use the checksum from the previous stageBernd Edlinger2-7/+22
This silences the stage compare. gcc/objc: 2021-06-07 Bernd Edlinger <bernd.edlinger@softing.com> * Make-lang.in (cc1obj-checksum.c): For stage-final re-use the checksum from the previous stage. gcc/objcp: 2021-06-07 Bernd Edlinger <bernd.edlinger@softing.com> * Make-lang.in (cc1objplus-checksum.c): For stage-final re-use the checksum from the previous stage.
2021-06-07fold-const: Fix up fold_read_from_vector [PR100887]Jakub Jelinek2-0/+17
The callers of fold_read_from_vector expect that the index they pass is an index of an element in the vector and the function does that most of the time. But we allow CONSTRUCTORs with VECTOR_TYPE to have VECTOR_TYPE elements and in that case every CONSTRUCTOR element represents not just one index (with the exception of V1 vectors), but multiple. So returning zero vector if i >= CONSTRUCTOR_NELTS or returning some CONSTRUCTOR_ELT's value might not be what the callers expect. Fixed by punting if the first element has vector type. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? In theory we could instead recurse (and assert that for CONSTRUCTORs of vector elements we have always all elements specified like tree-cfg.c verifies?) after adjusting the index appropriately. 2021-06-07 Jakub Jelinek <jakub@redhat.com> PR target/100887 * fold-const.c (fold_read_from_vector): Return NULL if trying to read from a CONSTRUCTOR with vector type elements. * gcc.dg/pr100887.c: New test.
2021-06-07tree-inline: Fix up __builtin_va_arg_pack handling [PR100898]Jakub Jelinek2-10/+30
The following testcase ICEs, because gimple_call_arg_ptr (..., 0) asserts that there is at least one argument, while we were using it even if we didn't copy anything just to get a pointer from/to which the zero arguments should be copied. Fixed by guarding the memcpy calls. Also, the code was calling gimple_call_num_args too many times - 5 times instead of 2, so the patch adds two temporaries for those. 2021-06-07 Jakub Jelinek <jakub@redhat.com> PR middle-end/100898 * tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy should copy any arguments. Don't call gimple_call_num_args on id->call_stmt or call_stmt more than once. * g++.dg/ext/va-arg-pack-3.C: New test.
2021-06-07Fix ICE of insn does not satisfy its constraints.liuhongt2-4/+148
evex encoding vpmovzxbx needs both AVX512BW and AVX512VL which means constraint "Yw" should be used instead of constraint "v". gcc/ChangeLog: PR target/100885 * config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine constraints. (<insn>v4siv4di2): Delete constraints for define_expand. gcc/testsuite/ChangeLog: PR target/100885 * g++.target/i386/pr100885.C: New test.
2021-06-07Fix _mm256_zeroupper by representing the instructions as call_insns in which ↵liuhongt13-143/+252
the call has a special vzeroupper ABI. When __builtin_ia32_vzeroupper is called explicitly, the corresponding vzeroupper pattern does not carry any CLOBBERS or SETs before LRA, which leads to incorrect optimization in pass_reload. In order to solve this problem, this patch refine instructions as call_insns in which the call has a special vzeroupper ABI. gcc/ChangeLog: PR target/82735 * config/i386/i386-expand.c (ix86_expand_builtin): Remove assignment of cfun->machine->has_explicit_vzeroupper. * config/i386/i386-features.c (ix86_add_reg_usage_to_vzerouppers): Delete. (ix86_add_reg_usage_to_vzeroupper): Ditto. (rest_of_handle_insert_vzeroupper): Remove ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end of the function. (gate): Remove cfun->machine->has_explicit_vzeroupper. * config/i386/i386-protos.h (ix86_expand_avx_vzeroupper): Declared. * config/i386/i386.c (ix86_insn_callee_abi): New function. (ix86_initialize_callee_abi): Ditto. (ix86_expand_avx_vzeroupper): Ditto. (ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper ABI. (TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi. (ix86_emit_mode_set): Call ix86_expand_avx_vzeroupper directly. * config/i386/i386.h (struct GTY(()) machine_function): Delete has_explicit_vzeroupper. * config/i386/i386.md (enum unspec): New member UNSPEC_CALLEE_ABI. (ABI_DEFAULT,ABI_VZEROUPPER,ABI_UNKNOWN): New define_constants for insn callee abi index. * config/i386/predicates.md (vzeroupper_pattern): Adjust. * config/i386/sse.md (UNSPECV_VZEROUPPER): Deleted. (avx_vzeroupper): Call ix86_expand_avx_vzeroupper. (*avx_vzeroupper): Rename to .. (avx_vzeroupper_callee_abi): .. this, and adjust pattern as call_insn which has a special vzeroupper ABI. (*avx_vzeroupper_1): Deleted. gcc/testsuite/ChangeLog: PR target/82735 * gcc.target/i386/pr82735-1.c: New test. * gcc.target/i386/pr82735-2.c: New test. * gcc.target/i386/pr82735-3.c: New test. * gcc.target/i386/pr82735-4.c: New test. * gcc.target/i386/pr82735-5.c: New test.
2021-06-07CALL_INSN may not be a real function call.liuhongt6-6/+31
Use "used" flag for CALL_INSN to indicate it's a fake call. If it's a fake call, it won't have its own function stack. gcc/ChangeLog PR target/82735 * df-scan.c (df_get_call_refs): When call_insn is a fake call, it won't use stack pointer reg. * final.c (leaf_function_p): When call_insn is a fake call, it won't affect caller as a leaf function. * reg-stack.c (callee_clobbers_any_stack_reg): New. (subst_stack_regs): When call_insn doesn't clobber any stack reg, don't clear the arguments. * rtl.c (shallow_copy_rtx): Don't clear flag used when orig is a insn. * shrink-wrap.c (requires_stack_frame_p): No need for stack frame for a fake call. * rtl.h (FAKE_CALL_P): New macro.
2021-06-07Daily bump.GCC Administrator5-1/+78
2021-06-06Reimplement LEAF_REG_REMAP macro for the SPARCEric Botcazou3-38/+37
The current implementation as an array of chars is indeed a bit awkward so this reimplements it as a function taking and returning an int. gcc/ * config/sparc/sparc-protos.h (order_regs_for_local_alloc): Rename to... (sparc_order_regs_for_local_alloc): ...this. (sparc_leaf_reg_remap): Declare. * config/sparc/sparc.h (ADJUST_REG_ALLOC_ORDER): Adjust. (LEAF_REG_REMAP): Reimplement as call to sparc_leaf_reg_remap. * config/sparc/sparc.c (leaf_reg_remap): Delete. (order_regs_for_local_alloc): Rename to... (sparc_order_regs_for_local_alloc): ...this. (sparc_leaf_reg_remap): New function. (sparc_conditional_register_usage): Do not modify leaf_reg_remap.
2021-06-06aix: Use assemble_name to output BSS section name.David Edelsohn1-2/+8
The code to emit BSS CSECT needs to support user assembler name. * config/rs6000/rs6000.c (rs6000_xcoff_asm_output_aligned_decl_common): Use assemble_name to output BSS section name.
2021-06-06i386: Clean up constraints.mdUros Bizjak1-6/+9
No functional changes. 2021-06-06 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/constraints.md (Bs): Remove boolean operators from match_test RTX. (Bw): Ditto. (L): Ditto. (M): Use "mode" variable instead of GET_MODE (op) in match_test RTX. (Wz): Ditto.
2021-06-06openmp: Add testcase for scan directive with nested functionsJakub Jelinek1-0/+51
> In convert_nonlocal_omp_clauses, the following clauses are > missing: OMP_CLAUSE_AFFINITY, OMP_CLAUSE_DEVICE_TYPE, > OMP_CLAUSE_EXCLUSIVE, OMP_CLAUSE_INCLUSIVE. OMP_CLAUSE_{EXCLUSIVE,INCLUSIVE} isn't needed, because we don't walk the clauses at all for GIMPLE_OMP_SCAN. It would be a bug if we used the exclusive/inclusive operands after gimplification, but we apparently don't do that, all we check is whether the OMP_CLAUSE_KIND of the first clause (all should be the same) is OMP_CLAUSE_EXCLUSIVE or OMP_CLAUSE_INCLUSIVE, nothing else. That said, I think we should have a testcase. 2021-06-06 Jakub Jelinek <jakub@redhat.com> * gcc.dg/gomp/scan-1.c: New test.
2021-06-06openmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]Jakub Jelinek3-0/+19
When looking at in_reduction support for target, I've noticed that c_omp_adjust_map_clauses is not called for the combined target case. The following patch fixes it. Unfortunately, there are other issues. One is (also mentioned in the PR) that currently the pointer attachment stuff seems to be clause ordering dependent (the standard says that clause ordering on the same construct does not matter), the baz and qux cases in the PR are rejected while when swapped it is accepted. Note, the order of clauses in GCC really is treated as insignificant initially and only later on the compiler can adjust the ordering (e.g. when we sort map clauses based on what they refer to etc.) and in particular, clauses from parsing is reverse of the order in user code, while c_omp_split_clauses performed for combined/composite constructs typically reverses that ordering, i.e. makes it follow the user code ordering. And another one is I'm slightly afraid c_omp_adjust_map_clauses might misbehave in templates, though haven't tried to verify it with testcases. When processing_template_decl, the non-dependent clauses will be handled usually the same as when not in a template, but dependent clauses aren't processed or only limited processing is done there, and rest is deferred till later. From quick skimming of c_omp_adjust_map_clauses, it seems it might not be very happy about non-processed map clauses that might still have the TREE_LIST representation of array sections, or might not have finalized decls or base decls etc. So, for this I wonder if cp_parser_omp_target (and other cp/parser.c callers of c_omp_adjust_map_clauses) shouldn't call it only if (!processing_template_decl) - perhaps you could add cp_omp_adjust_map_clauses wrapper that would be if (!processing_template_decl) c_omp_adjust_map_clauses (...); - and call c_omp_adjust_map_clauses from within pt.c after the clauses are tsubsted and finish_omp_clauses is called again. 2021-06-06 Jakub Jelinek <jakub@redhat.com> PR c/100902 * c-parser.c (c_parser_omp_target): Call c_omp_adjust_map_clauses even when target is combined with other constructs. * parser.c (cp_parser_omp_target): Call c_omp_adjust_map_clauses even when target is combined with other constructs. * c-c++-common/gomp/pr100902-1.c: New test.
2021-06-06docs: Add missing @headitem for tables.Martin Liska3-10/+10
gcc/ChangeLog: * doc/extend.texi: Add missing @headitem. * doc/invoke.texi: Likewise. * doc/objc.texi: Likewise.
2021-06-06genhooks: remove dead codeMartin Liska1-30/+3
gcc/ChangeLog: * genhooks.c (emit_findices): Remove unused function. (emit_documentation): Do not call emit_findices and do not search for @Fcode directives.
2021-06-06docs: remove extra character.Martin Liska1-1/+1
gcc/ChangeLog: * doc/invoke.texi: Remove extra character.
2021-06-06Fix thinko in new warning on type punning for storage order purposesEric Botcazou3-11/+84
In C, unlike in Ada, the storage order of arrays is that of their component type, so you need to look at it when deciding to warn. And the PR complains about a bogus warning on the assignment of a pointer returned by alloca or malloc, so this also fixes that. gcc/c PR c/100920 * c-decl.c (finish_struct): Fix thinko in previous change. * c-typeck.c (convert_for_assignment): Do not warn on pointer assignment and initialization for storage order purposes if the RHS is a call to a DECL_IS_MALLOC function. gcc/testsuite/ * gcc.dg/sso-14.c: New test.
2021-06-06Daily bump.GCC Administrator4-1/+87
2021-06-05sh: Update unexpected empty split conditionKewen Lin1-1/+1
gcc/ChangeLog: * config/sh/sh.md (doloop_end_split): Fix empty split condition.
2021-06-05sparc: Update unexpected empty split conditionKewen Lin1-6/+6
gcc/ChangeLog: * config/sparc/sparc.md (*snedi<W:mode>_zero_vis3, *neg_snedi<W:mode>_zero_subxc, *plus_snedi<W:mode>_zero, *plus_plus_snedi<W:mode>_zero, *minus_snedi<W:mode>_zero, *minus_minus_snedi<W:mode>_zero): Fix empty split condition.
2021-06-05or1k: Update unexpected empty split conditionKewen Lin1-1/+1
gcc/ChangeLog: * config/or1k/or1k.md (*movdi): Fix empty split condition.
2021-06-05mips: Update unexpected empty split conditionKewen Lin1-3/+3
gcc/ChangeLog: * config/mips/mips.md (<anonymous>, bswapsi2, bswapdi2): Fix empty split condition.
2021-06-05m68k: Update unexpected empty split conditionKewen Lin1-3/+3
gcc/ChangeLog: * config/m68k/m68k.md (*zero_extend_inc, *zero_extend_dec, *zero_extendsidi2): Fix empty split condition.
2021-06-05Fortran: Fix some issues with pointers to character.José Rui Faustino de Sousa10-79/+1730
gcc/fortran/ChangeLog: PR fortran/100120 PR fortran/100816 PR fortran/100818 PR fortran/100819 PR fortran/100821 * trans-array.c (gfc_get_array_span): rework the way character array "span" was calculated. (gfc_conv_expr_descriptor): improve handling of character sections and unlimited polymorphic objects. * trans-expr.c (gfc_get_character_len): new function to calculate character string length. (gfc_get_character_len_in_bytes): new function to calculate character string length in bytes. (gfc_conv_scalar_to_descriptor): add call to set the "span". (gfc_trans_pointer_assignment): set "_len" and antecipate the initialization of the deferred character length hidden argument. * trans-intrinsic.c (gfc_conv_associated): set "force_no_tmp" to avoid the creation of a temporary. * trans-types.c (gfc_get_dtype_rank_type): rework type detection so that unlimited polymorphic objects get proper type infomation, also important for bind(c). (gfc_get_dtype): add argument to pass the rank if necessary. (gfc_get_array_type_bounds): cosmetic change to have character arrays called character instead of unknown. * trans-types.h (gfc_get_dtype): modify prototype. * trans.c (get_array_span): rework the way character array "span" was calculated. * trans.h (gfc_get_character_len): new prototype. (gfc_get_character_len_in_bytes): new prototype. Add "unlimited_polymorphic" flag to "gfc_se" type to signal when expression carries an unlimited polymorphic object. libgfortran/ChangeLog: PR fortran/100120 * intrinsics/associated.c (associated): have associated verify if the "span" matches insted of the "elem_len". * libgfortran.h (GFC_DESCRIPTOR_SPAN): add macro to retrive the descriptor "span". gcc/testsuite/ChangeLog: PR fortran/100120 * gfortran.dg/PR100120.f90: New test. PR fortran/100816 PR fortran/100818 PR fortran/100819 PR fortran/100821 * gfortran.dg/character_workout_1.f90: New test. * gfortran.dg/character_workout_4.f90: New test.
2021-06-05Fix split conditions in H8/300 portJeff Law11-91/+91
gcc/ * config/h8300/addsub.md: Fix split condition in define_insn_and_split patterns. * config/h8300/bitfield.md: Likewise. * config/h8300/combiner.md: Likewise. * config/h8300/divmod.md: Likewise. * config/h8300/extensions.md: Likewise. * config/h8300/jumpcall.md: Likewise. * config/h8300/movepush.md: Likewise. * config/h8300/multiply.md: Likewise. * config/h8300/other.md: Likewise. * config/h8300/shiftrotate.md: Likewise. * config/h8300/logical.md: Likewise. Fix split pattern to use code iterator that somehow slipped through.
2021-06-05Daily bump.GCC Administrator8-1/+301
2021-06-04OpenMP: Handle bind clause in tree-nested.c [PR100905]Tobias Burnus2-0/+57
PR middle-end/100905 gcc/ChangeLog: * tree-nested.c (convert_nonlocal_omp_clauses, convert_local_omp_clauses): Handle OMP_CLAUSE_BIND. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/loop-3.f90: New test.
2021-06-04d: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)Iain Buclaw6-12/+131
Constructor calls for temporaries were reusing the TARGET_EXPR_SLOT of a TARGET_EXPR for an assignment, which later got passed to `build_assign', which stripped away the outer TARGET_EXPR, leaving a reference to a lone temporary with no declaration. This stripping away of the TARGET_EXPR also discarded any cleanups that may have been assigned to the expression as well. So now the reuse of TARGET_EXPR_SLOT has been removed, and `build_assign' now constructs assignments inside the TARGET_EXPR_INITIAL slot. This has also been extended to `return_expr', to deal with possibility of a TARGET_EXPR being returned. gcc/d/ChangeLog: PR d/100882 * d-codegen.cc (build_assign): Construct initializations inside TARGET_EXPR_INITIAL. (compound_expr): Remove intermediate expressions that have no side-effects. (return_expr): Construct returns inside TARGET_EXPR_INITIAL. * expr.cc (ExprVisitor::visit (CallExp *)): Remove useless assignment to TARGET_EXPR_SLOT. gcc/testsuite/ChangeLog: PR d/100882 * gdc.dg/pr100882a.d: New test. * gdc.dg/pr100882b.d: New test. * gdc.dg/pr100882c.d: New test. * gdc.dg/torture/pr100882.d: New test.
2021-06-04c++: top-level cv-quals on type of NTTP [PR100893]Patrick Palka5-1/+30
Here, we're rejecting the specialization of g<T,F> with T=A, F=&f in param4.C below due to a spurious constness mismatch between the type of the template argument &f and the substituted type of the parm F (the latter has a top-level const). Note that this mismatch doesn't occur with object pointers because in that case a call to perform_qualification_conversions from convert_nontype_argument implicitly adds a top-level const to the argument (via a cast) to match. This however seems to be a manifestation of a more general conformance issue: we're not dropping top-level cv-quals on the substituted type of an NTTP as per [temp.param]/6 (we only do so at parse time in process_template_parm). So this patch makes convert_template_argument drop top-level cv-quals accordingly. PR c++/100893 gcc/cp/ChangeLog: * pt.c (convert_template_argument): Strip top-level cv-quals on the substituted type of a non-type template parameter. gcc/testsuite/ChangeLog: * g++.dg/template/param4.C: New test. * g++.dg/template/param5.C: New test. * g++.dg/cpp1z/nontype-auto19.C: New test. * g++.dg/cpp2a/concepts-decltype.C: Don't expect that the deduced type of a decltype(auto) NTTP has top-level cv-quals.
2021-06-04c++: tsubst_function_decl and excess arg levels [PR100102]Patrick Palka3-39/+18
Here, when instantiating the dependent alias template duration::__is_harmonic with args={{T,U},{int}}, we find ourselves substituting the function decl _S_gcd. Since we have more arg levels than _S_gcd has parm levels, an old special case in tsubst_function_decl causes us to unwantedly reduce args to its innermost level, yielding args={int}, which leads to a nonsensical substitution into the decl context and eventually a crash. The comment for this special case refers to three examples for which we ought to see more arg levels than parm levels here, but none of the examples actually demonstrate this. In the first example, when defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and later when instantiating say S<int>::f<char> both depths are 2. In the second example, when substituting the template friend declaration parms_depth is 2 and args_depth is 1, and later when instantiating f both depths are 1. Finally, the third example is invalid since we can't specialize a member template of an unspecialized class template like that. Given that this reduction code seems no longer relevant for its documented purpose and that it causes problems as in the PR, this patch just removes it. Note that as far as bootstrap/regtest is concerned, this code is dead; the below two tests would be the first to reach it. PR c++/100102 gcc/cp/ChangeLog: * pt.c (tsubst_function_decl): Remove old code for reducing args when it has excess levels. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/alias-decl-72.C: New test. * g++.dg/cpp0x/alias-decl-72a.C: New test.
2021-06-04Fortran - ICE in inline_matmul_assignHarald Anlauf2-0/+22
Restrict inlining of matmul to those cases where assignment to the result array does not need special treatment. gcc/fortran/ChangeLog: PR fortran/99839 * frontend-passes.c (inline_matmul_assign): Do not inline matmul if the assignment to the resulting array if it is not of canonical type (real/integer/complex/logical). gcc/testsuite/ChangeLog: PR fortran/99839 * gfortran.dg/inline_matmul_25.f90: New test.
2021-06-04PR c/100783 - ICE on -Wnonnull and erroneous typeMartin Sebor3-0/+24
gcc/c-family/ChangeLog: PR c/100783 * c-attribs.c (positional_argument): Bail on erroneous types. gcc/c/ChangeLog: PR c/100783 * c-objc-common.c (print_type): Handle erroneous types. gcc/testsuite/ChangeLog: PR c/100783 * gcc.dg/nonnull-6.c: New test.
2021-06-04Fortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'Tobias Burnus1-0/+5
gcc/fortran/ChangeLog * dump-parse-tree.c (show_code_node): Handle EXEC_OMP_(TARGET_)(,PARALLEL_,TEAMS_)LOOP.
2021-06-04PR middle-end/100732 - ICE on sprintf %s with integer argumentMartin Sebor7-16/+176
gcc/ChangeLog: PR middle-end/100732 * gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls with either source or destination argument of invalid type. * tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking calls with arguments of invalid type. gcc/testsuite/ChangeLog: PR middle-end/100732 * gcc.dg/tree-ssa/builtin-snprintf-11.c: New test. * gcc.dg/tree-ssa/builtin-snprintf-12.c: New test. * gcc.dg/tree-ssa/builtin-sprintf-28.c: New test. * gcc.dg/tree-ssa/builtin-sprintf-29.c: New test. * gcc.dg/uninit-pr100732.c: New test.
2021-06-04PR c/100719 - missing -Wvla-parameter on a mismatch in second parameterMartin Sebor4-8/+153
gcc/ChangeLog: * attribs.c (init_attr_rdwr_indices): Use VLA bounds in the expected order. (attr_access::vla_bounds): Also handle VLA bounds. gcc/c-family/ChangeLog: * c-warn.c (warn_parm_array_mismatch): Check TREE_PURPOSE to test for element presence. gcc/testsuite/ChangeLog: * gcc.dg/Wvla-parameter-10.c: New test. * gcc.dg/Wvla-parameter-11.c: New test.
2021-06-04i386: Convert a couple of predicates to use match_code RTXes.Uros Bizjak1-10/+7
No functional changes. 2021-06-04 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/predicates.md (GOT_memory_operand): Implement using match_code RTXes. (GOT32_symbol_operand): Ditto.
2021-06-04Fortran: Fix OpenMP/OpenACC continue-line parsingTobias Burnus4-13/+67
gcc/fortran/ChangeLog: * scanner.c (skip_fixed_omp_sentinel): Set openacc_flag if this is not an (OpenMP) continuation line. (skip_fixed_oacc_sentinel): Likewise for openmp_flag and OpenACC. (gfc_next_char_literal): gfc_error_now to force error for mixed OMP/ACC continuation once per location and return '\n'. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/omp-fixed.f: Re-add test item changed in previous commit in addition - add more dg-errors and '... end ...' due to changed parsing. * gfortran.dg/goacc/omp.f95: Likewise. * gfortran.dg/goacc-gomp/mixed-1.f: New test.
2021-06-04i386: Add init pattern for V2HI vectors [PR100637]Uros Bizjak3-14/+121
2021-06-03 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/i386-expand.c (ix86_expand_vector_init_duplicate): Handle V2HI mode. (ix86_expand_vector_init_general): Ditto. Use SImode instead of word_mode for logic operations when GET_MODE_SIZE (mode) < UNITS_PER_WORD. (expand_vec_perm_even_odd_1): Assert that V2HI mode should be implemented by expand_vec_perm_1. (expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes should be implemented using standard shuffle patterns. (ix86_vectorize_vec_perm_const): Handle V2HImode. Add V4HI and V2HI modes to modes, implementable with shuffle for one operand. * config/i386/mmx.md (*punpckwd): New insn_and_split pattern. (*pshufw_1): New insn pattern. (*vec_dupv2hi): Ditto. (vec_initv2hihi): New expander. gcc/testsuite/ PR target/100637 * gcc.dg/vect/slp-perm-9.c (dg-final): Adjust dumps for vect32 targets.
2021-06-04gfortran.dg/gomp/pr99928-5.f90: Use proper iteration varTobias Burnus1-1/+1
gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-5.f90: Really use the proper iteration variable.
2021-06-04gfortran.dg/gomp/pr99928-*.f90: Use implicit none, remove one xfailTobias Burnus7-2/+10
gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-1.f90: Add 'implicit none'. * gfortran.dg/gomp/pr99928-11.f90: Likewise. * gfortran.dg/gomp/pr99928-4.f90: Likewise. * gfortran.dg/gomp/pr99928-6.f90: Likewise. * gfortran.dg/gomp/pr99928-8.f90: Likewise. * gfortran.dg/gomp/pr99928-2.f90: Likewise. Add missing decl. * gfortran.dg/gomp/pr99928-5.f90: Add implicit none; fix loop-variable and remove xfail.
2021-06-04arm: Update unexpected empty split conditionKewen Lin1-2/+2
gcc/ChangeLog: * config/arm/vfp.md (no_literal_pool_df_immediate, no_literal_pool_sf_immediate): Fix empty split condition.
2021-06-04i386: Update unexpected empty split conditionKewen Lin2-7/+7
gcc/ChangeLog: * config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext, *tls_dynamic_gnu2_combine_32): Fix empty split condition. * config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt, *<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt, *<sse4_1_avx2>_pblendvb_lt): Likewise.
2021-06-04Fortran/OpenMP: omp loop's BIND clause - fix typoTobias Burnus2-2/+2
Missed a 'git add' after fixing this typo pointed out during review. PR middle-end/99928 gcc/fortran/ChangeLog: * openmp.c (gfc_match_omp_clauses): Fix typo in error message. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/loop-2.f90: Update for typo fix.
2021-06-04Fortran/OpenMP: Add omp loop [PR99928]Tobias Burnus22-81/+1497
PR middle-end/99928 gcc/fortran/ChangeLog: * dump-parse-tree.c (show_omp_clauses): Handle bind clause. (show_omp_node): Handle loop directive. * frontend-passes.c (gfc_code_walker): Likewise. * gfortran.h (enum gfc_statement): Add ST_OMP_(END_)(TARGET_)(|PARALLEL_|TEAMS_)LOOP. (enum gfc_omp_bind_type): New. (gfc_omp_clauses): Use it. (enum gfc_exec_op): Add EXEC_OMP_(TARGET_)(|PARALLEL_|TEAMS_)LOOP. * match.h (gfc_match_omp_loop, gfc_match_omp_parallel_loop, gfc_match_omp_target_parallel_loop, gfc_match_omp_target_teams_loop, gfc_match_omp_teams_loop): New. * openmp.c (enum omp_mask1): Add OMP_CLAUSE_BIND. (gfc_match_omp_clauses): Handle it. (OMP_LOOP_CLAUSES, gfc_match_omp_loop, gfc_match_omp_teams_loop, gfc_match_omp_target_teams_loop, gfc_match_omp_parallel_loop, gfc_match_omp_target_parallel_loop): New. (resolve_omp_clauses, resolve_omp_do, omp_code_to_statement, gfc_resolve_omp_directive): Handle omp loop. * parse.c (decode_omp_directive case_exec_markers, gfc_ascii_statement, parse_omp_do, parse_executable): Likewise. (parse_omp_structured_block): Remove ST_ which use parse_omp_do. * resolve.c (gfc_resolve_blocks): Add omp loop. * st.c (gfc_free_statement): Likewise. * trans-openmp.c (gfc_trans_omp_clauses): Handle bind clause. (gfc_trans_omp_do, gfc_trans_omp_parallel_do, gfc_trans_omp_distribute, gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_directive): Handle loop directive. (gfc_split_omp_clauses): Likewise; fix firstprivate/lastprivate and (in_)reduction for taskloop. * trans.c (trans_code): Handle omp loop directive. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-3.f90: Add 'default(none)', following C/C++ version of the patch. * gfortran.dg/gomp/loop-1.f90: New test. * gfortran.dg/gomp/loop-2.f90: New test. * gfortran.dg/gomp/pr99928-1.f90: New test; based on C/C++ test. * gfortran.dg/gomp/pr99928-11.f90: Likewise. * gfortran.dg/gomp/pr99928-2.f90: Likewise. * gfortran.dg/gomp/pr99928-4.f90: Likewise. * gfortran.dg/gomp/pr99928-5.f90: Likewise. * gfortran.dg/gomp/pr99928-6.f90: Likewise. * gfortran.dg/gomp/pr99928-8.f90: Likewise. * gfortran.dg/goacc/omp.f95: Use 'acc kernels loops' instead of 'acc loops' to hide unrelated bug for now. * gfortran.dg/goacc/omp-fixed.f: Likewise
2021-06-04x86: Fix ix86_expand_vector_init for V*TImode [PR100887]Jakub Jelinek2-3/+20
We have vec_initv4tiv2ti and vec_initv2titi patterns which call ix86_expand_vector_init and assume it works for those modes. For the case of construction from two half-sized vectors, the code assumes it will always succeed, but we have only insn patterns with SImode and DImode element types. QImode and HImode element types are already handled by performing it with same sized vectors with SImode elements and the following patch extends that to V*TImode vectors. 2021-06-04 Jakub Jelinek <jakub@redhat.com> PR target/100887 * config/i386/i386-expand.c (ix86_expand_vector_init): Handle concatenation from half-sized modes with TImode elements. * gcc.target/i386/pr100887.c: New test.
2021-06-04c++: Fix up attribute handling in methods in templates [PR100872]Jakub Jelinek2-2/+20
The following testcase FAILs because a dependent (late) attribute is never tsubsted. While the testcase is OpenMP, I think it is a generic C++ FE problem that could affect any other dependent attribute. apply_late_template_attributes documents that it relies on /* save_template_attributes puts the dependent attributes at the beginning of the list; find the non-dependent ones. */ The "operator binding" attributes that are sometimes added are added to the head of DECL_ATTRIBUTES list though and because it doesn't have ATTR_IS_DEPENDENT set it violates this requirement. The following patch fixes it by adding that attribute after all ATTR_IS_DEPENDENT attributes. I'm not 100% sure if DECL_ATTRIBUTES can't be shared by multiple functions (e.g. the cdtor clones), but the code uses later remove_attribute which could break that too. Other option would be to copy_list the ATTR_IS_DEPENDENT portion of the DECL_ATTRIBUTES list if we need to do this, that would be the same as this patch but replace that *ap = op_attr; at the end with *ap = NULL_TREE; DECL_ATTRIBUTES (cfn) = chainon (copy_list (DECL_ATTRIBUTES (cfn)), op_attr); Or perhaps set ATTR_IS_DEPENDENT on the "operator bindings" attribute, though it would need to be studied what would it try to do with the attribute during tsubst. 2021-06-04 Jakub Jelinek <jakub@redhat.com> PR c++/100872 * name-lookup.c (maybe_save_operator_binding): Add op_attr after all ATTR_IS_DEPENDENT attributes in the DECL_ATTRIBUTES list rather than to the start. * g++.dg/gomp/declare-simd-8.C: New test.
2021-06-04arc: Don't allow millicode thunks with reduced register set CPUs.Claudiu Zissulescu1-2/+4
The millicode thunks are not reduced register set safe. Disable them for CPUs having this option on. gcc/ 2021-06-04 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_override_options): Disable millicode thunks when RF16 is on. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2021-06-04rs6000: Disable mode promotion for pseudosHaochen Gui2-11/+13
rs6000 has instructions that can do almost everything 32 bit at least as efficiently as corresponding 64 bit things. The mode promotion can be defered to when a wide mode is necessary. So it helps a lot not promote mode for pseudos. SPECint test shows that the overall performance improvement (by geomean) is more than 2% with this patch. testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how the patch eliminates the redundant extensions and do further optimization by disabling mode promotion for pseduos. gcc/ChangeLog * config/rs6000/rs6000.h (PROMOTE_MODE): Remove. gcc/testsuite/ChangeLog: * gcc.target/powerpc/not-promote-mode.c: New.
2021-06-04rs6000: Expand PROMOTE_MODE marco in rs6000_promote_function_modeHaochen Gui1-1/+3
This patch prepares for the patch which disables mode promotion of pseudos on rs6000. gcc/ChangeLog: * config/rs6000/rs6000-call.c (rs6000_promote_function_mode): Replace PROMOTE_MODE marco with its content.