diff options
author | Martin Liska <mliska@suse.cz> | 2021-05-31 11:30:50 +0200 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2021-05-31 11:30:50 +0200 |
commit | 520839b3244507adc4f3ad640e5cab46e2ccbf8f (patch) | |
tree | 0d408f4e8cebbcbfa3115a907a162168b57bd65d /gcc | |
parent | 9104f3d64deca97a7698e9dde45010ca3cf75928 (diff) | |
parent | 21d7bba242f1a7349adc6a57aa4c874f7bb159f8 (diff) | |
download | gcc-520839b3244507adc4f3ad640e5cab46e2ccbf8f.zip gcc-520839b3244507adc4f3ad640e5cab46e2ccbf8f.tar.gz gcc-520839b3244507adc4f3ad640e5cab46e2ccbf8f.tar.bz2 |
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'gcc')
63 files changed, 1268 insertions, 293 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 290e374..05e1640 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,97 @@ +2021-05-29 Jeff Law <jlaw@tachyum.com> + + * config/h8300/h8300.c (h8300_emit_stack_adjustment): Drop unused + parameter. Call callers fixed. + (push): Likewise. + (output_plussi): Add FALLTHRU markers. + (h8300_shift_needs_scratch_p): Add gcc_unreachable marker. + +2021-05-29 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * gimplify.c (gimplify_scan_omp_clauses): For taskloop simd + combined with parallel, make sure to add shared clause to + parallel for explicit linear clause. + +2021-05-29 Aldy Hernandez <aldyh@redhat.com> + + PR tree-optimization/100787 + * gimple-ssa-evrp.c: Disable exporting of global ranges. + +2021-05-28 Jason Merrill <jason@redhat.com> + + * tree-iterator.h (struct tree_stmt_iterator): Add operator++, + operator--, operator*, operator==, and operator!=. + (class tsi_range): New. + +2021-05-28 Richard Biener <rguenther@suse.de> + + PR tree-optimization/100778 + * tree-vect-slp.c (vect_build_slp_tree_1): Prevent possibly + trapping ops in different BBs. + +2021-05-28 Richard Biener <rguenther@suse.de> + + PR ipa/100791 + * tree-inline.c (copy_bb): When processing __builtin_va_arg_pack + copy fntype from original call. + +2021-05-28 Martin Liska <mliska@suse.cz> + + PR gcov-profile/100751 + * doc/gcov.texi: Revert partially a hunk that was wrong. + +2021-05-28 Cooper Qu <cooper.qu@linux.alibaba.com> + + * config/csky/csky-linux-elf.h (HAVE_sync_compare_and_swapqi): + Defined. + (HAVE_sync_compare_and_swaphi): Likewise. + (HAVE_sync_compare_and_swapsi): Likewise. + +2021-05-28 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * tree.h (OMP_CLAUSE_MAP_IMPLICIT): Define. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * gimplify.c (gimplify_omp_affinity): New. + (gimplify_scan_omp_clauses): Call it; remove affinity clause afterwards. + * tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_AFFINITY. + * tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_AFFINITY. + * tree.c (omp_clause_num_ops, omp_clause_code_name): Add clause. + (walk_tree_1): Handle OMP_CLAUSE_AFFINITY. + +2021-05-28 Joern Rennecke <joern.rennecke@riscy-ip.com> + Richard Biener <rguenther@suse.de> + + * match.pd <popcount & / + pattern matching>: + When generating popcount directly fails, try doing it in two halves. + +2021-05-28 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * Makefile.in (generated_files): Add gimple-match.c and + generic-match.c + +2021-05-28 Joern Rennecke <joern.rennecke@embecosm.com> + + * gensupport.c (alter_predicate_for_insn): Handle MATCH_DUP. + +2021-05-28 Joern Rennecke <joern.rennecke@embecosm.com> + + * gensupport.c (alter_constraints): Add MATCH_SCRATCH case. + +2021-05-28 Kewen Lin <linkw@linux.ibm.com> + + PR tree-optimization/99398 + * tree-ssa-forwprop.c (simplify_permutation): Optimize some cases + where the fed operands are CTOR/CST and propagated through + VIEW_CONVERT_EXPR. Call vec_perm_indices::new_shrunk_vector. + * vec-perm-indices.c (vec_perm_indices::new_shrunk_vector): New + function. + * vec-perm-indices.h (vec_perm_indices::new_shrunk_vector): New + declare. + 2021-05-27 Uroš Bizjak <ubizjak@gmail.com> * config/i386/mmx.md (addv2sf3): Do not call diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 2fcc100..9bfad84 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20210528 +20210531 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 28544c7..2905179 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,13 @@ +2021-05-28 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * c-omp.c (c_omp_split_clauses): For reduction clause if combined with + target add a map tofrom clause with OMP_CLAUSE_MAP_IMPLICIT. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_AFFINITY. + 2021-05-25 Martin Liska <mliska@suse.cz> PR tree-optimization/92860 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index b7daa2e..c4eb2b1 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -51,6 +51,8 @@ along with GCC; see the file COPYING3. If not see #include "c-spellcheck.h" #include "selftest.h" #include "debug.h" +#include "tree-vector-builder.h" +#include "vec-perm-indices.h" cpp_reader *parse_in; /* Declared in c-pragma.h. */ @@ -383,6 +385,7 @@ const struct c_common_resword c_common_reswords[] = { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 }, { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY }, { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 }, + { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 }, { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY }, { "__builtin_offsetof", RID_OFFSETOF, 0 }, { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY }, @@ -1108,6 +1111,142 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask, return ret; } +/* Build a VEC_PERM_EXPR if V0, V1 are not error_mark_nodes + and have vector types, V0 has the same element type as V1, and the + number of elements the result is that of MASK. */ +tree +c_build_shufflevector (location_t loc, tree v0, tree v1, vec<tree> mask, + bool complain) +{ + tree ret; + bool wrap = true; + bool maybe_const = false; + + if (v0 == error_mark_node || v1 == error_mark_node) + return error_mark_node; + + if (!gnu_vector_type_p (TREE_TYPE (v0)) + || !gnu_vector_type_p (TREE_TYPE (v1))) + { + if (complain) + error_at (loc, "%<__builtin_shufflevector%> arguments must be vectors"); + return error_mark_node; + } + + /* ??? In principle one could select a constant part of a variable size + vector but things get a bit awkward with trying to support this here. */ + unsigned HOST_WIDE_INT v0n, v1n; + if (!TYPE_VECTOR_SUBPARTS (TREE_TYPE (v0)).is_constant (&v0n) + || !TYPE_VECTOR_SUBPARTS (TREE_TYPE (v1)).is_constant (&v1n)) + { + if (complain) + error_at (loc, "%<__builtin_shufflevector%> arguments must be constant" + " size vectors"); + return error_mark_node; + } + + if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (v0))) + != TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (v1)))) + { + if (complain) + error_at (loc, "%<__builtin_shufflevector%> argument vectors must " + "have the same element type"); + return error_mark_node; + } + + if (!pow2p_hwi (mask.length ())) + { + if (complain) + error_at (loc, "%<__builtin_shufflevector%> must specify a result " + "with a power of two number of elements"); + return error_mark_node; + } + + if (!c_dialect_cxx ()) + { + /* Avoid C_MAYBE_CONST_EXPRs inside VEC_PERM_EXPR. */ + v0 = c_fully_fold (v0, false, &maybe_const); + wrap &= maybe_const; + + v1 = c_fully_fold (v1, false, &maybe_const); + wrap &= maybe_const; + } + + unsigned HOST_WIDE_INT maskl = MAX (mask.length (), MAX (v0n, v1n)); + unsigned HOST_WIDE_INT pad = (v0n < maskl ? maskl - v0n : 0); + vec_perm_builder sel (maskl, maskl, 1); + unsigned i; + for (i = 0; i < mask.length (); ++i) + { + tree idx = mask[i]; + if (!tree_fits_shwi_p (idx)) + { + if (complain) + error_at (loc, "invalid element index %qE to " + "%<__builtin_shufflevector%>", idx); + return error_mark_node; + } + HOST_WIDE_INT iidx = tree_to_shwi (idx); + if (iidx < -1 + || (iidx != -1 + && (unsigned HOST_WIDE_INT) iidx >= v0n + v1n)) + { + if (complain) + error_at (loc, "invalid element index %qE to " + "%<__builtin_shufflevector%>", idx); + return error_mark_node; + } + /* ??? Our VEC_PERM_EXPR does not allow for -1 yet. */ + if (iidx == -1) + iidx = i; + /* ??? Our VEC_PERM_EXPR does not allow different sized inputs, + so pad out a smaller v0. */ + else if ((unsigned HOST_WIDE_INT) iidx >= v0n) + iidx += pad; + sel.quick_push (iidx); + } + /* ??? VEC_PERM_EXPR does not support a result that is smaller than + the inputs, so we have to pad id out. */ + for (; i < maskl; ++i) + sel.quick_push (i); + + vec_perm_indices indices (sel, 2, maskl); + + tree ret_type = build_vector_type (TREE_TYPE (TREE_TYPE (v0)), maskl); + tree mask_type = build_vector_type (build_nonstandard_integer_type + (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (ret_type))), 1), + maskl); + /* Pad out arguments to the common vector size. */ + if (v0n < maskl) + { + constructor_elt elt = { NULL_TREE, build_zero_cst (TREE_TYPE (v0)) }; + v0 = build_constructor_single (ret_type, NULL_TREE, v0); + for (i = 1; i < maskl / v0n; ++i) + vec_safe_push (CONSTRUCTOR_ELTS (v0), elt); + } + if (v1n < maskl) + { + constructor_elt elt = { NULL_TREE, build_zero_cst (TREE_TYPE (v1)) }; + v1 = build_constructor_single (ret_type, NULL_TREE, v1); + for (i = 1; i < maskl / v1n; ++i) + vec_safe_push (CONSTRUCTOR_ELTS (v1), elt); + } + ret = build3_loc (loc, VEC_PERM_EXPR, ret_type, v0, v1, + vec_perm_indices_to_tree (mask_type, indices)); + /* Get the lowpart we are interested in. */ + if (mask.length () < maskl) + { + tree lpartt = build_vector_type (TREE_TYPE (ret_type), mask.length ()); + ret = build3_loc (loc, BIT_FIELD_REF, + lpartt, ret, TYPE_SIZE (lpartt), bitsize_zero_node); + } + + if (!c_dialect_cxx () && !wrap) + ret = c_wrap_maybe_const (ret, true); + + return ret; +} + /* Build a VEC_CONVERT ifn for __builtin_convertvector builtin. */ tree diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index f30b6c6..be4b29a 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -107,7 +107,7 @@ enum rid RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG, RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P, RID_BUILTIN_COMPLEX, RID_BUILTIN_SHUFFLE, - RID_BUILTIN_CONVERTVECTOR, RID_BUILTIN_TGMATH, + RID_BUILTIN_SHUFFLEVECTOR, RID_BUILTIN_CONVERTVECTOR, RID_BUILTIN_TGMATH, RID_BUILTIN_HAS_ATTRIBUTE, RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128, @@ -1048,6 +1048,8 @@ extern bool lvalue_p (const_tree); extern bool vector_targets_convertible_p (const_tree t1, const_tree t2); extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note); extern tree c_build_vec_perm_expr (location_t, tree, tree, tree, bool = true); +extern tree c_build_shufflevector (location_t, tree, tree, + vec<tree>, bool = true); extern tree c_build_vec_convert (location_t, tree, location_t, tree, bool = true); extern void init_c_lex (void); diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 669a818..411058f 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,29 @@ +2021-05-28 Richard Biener <rguenther@suse.de> + + PR c/100803 + * gimple-parser.c (c_parser_gimple_paren_condition): Diagnose + invalid if conditions. + +2021-05-28 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * c-typeck.c (handle_omp_array_sections): Copy OMP_CLAUSE_MAP_IMPLICIT. + (c_finish_omp_clauses): Move not just OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT + marked clauses last, but also OMP_CLAUSE_MAP_IMPLICIT. Add + map_firstprivate_head bitmap, set it for GOMP_MAP_FIRSTPRIVATE_POINTER + maps and silently remove OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT if it is + present too. For OMP_CLAUSE_MAP_IMPLICIT silently remove the clause + if present in map_head, map_field_head or map_firstprivate_head + bitmaps. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * c-parser.c (c_parser_omp_clause_affinity): New. + (c_parser_omp_clause_name, c_parser_omp_variable_list, + c_parser_omp_all_clauses, OMP_TASK_CLAUSE_MASK): Handle affinity clause. + * c-typeck.c (handle_omp_array_sections_1, handle_omp_array_sections, + c_finish_omp_clauses): Likewise. + 2021-05-26 Eric Botcazou <ebotcazou@adacore.com> PR c/100653 diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 3c7b306..28f851b 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -10547,6 +10547,7 @@ names_builtin_p (const char *name) case RID_BUILTIN_CONVERTVECTOR: case RID_BUILTIN_HAS_ATTRIBUTE: case RID_BUILTIN_SHUFFLE: + case RID_BUILTIN_SHUFFLEVECTOR: case RID_CHOOSE_EXPR: case RID_OFFSETOF: case RID_TYPES_COMPATIBLE_P: diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index d71fd0a..c491b12 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -10000,6 +10000,44 @@ c_parser_postfix_expression (c_parser *parser) set_c_expr_source_range (&expr, loc, close_paren_loc); break; } + case RID_BUILTIN_SHUFFLEVECTOR: + { + vec<c_expr_t, va_gc> *cexpr_list; + unsigned int i; + c_expr_t *p; + location_t close_paren_loc; + + c_parser_consume_token (parser); + if (!c_parser_get_builtin_args (parser, + "__builtin_shufflevector", + &cexpr_list, false, + &close_paren_loc)) + { + expr.set_error (); + break; + } + + FOR_EACH_VEC_SAFE_ELT (cexpr_list, i, p) + *p = convert_lvalue_to_rvalue (loc, *p, true, true); + + if (vec_safe_length (cexpr_list) < 3) + { + error_at (loc, "wrong number of arguments to " + "%<__builtin_shuffle%>"); + expr.set_error (); + } + else + { + auto_vec<tree, 16> mask; + for (i = 2; i < cexpr_list->length (); ++i) + mask.safe_push ((*cexpr_list)[i].value); + expr.value = c_build_shufflevector (loc, (*cexpr_list)[0].value, + (*cexpr_list)[1].value, + mask); + } + set_c_expr_source_range (&expr, loc, close_paren_loc); + break; + } case RID_BUILTIN_CONVERTVECTOR: { location_t start_loc = loc; diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 0ae8030..ba2b9da 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -91,7 +91,7 @@ static int h8300_interrupt_function_p (tree); static int h8300_saveall_function_p (tree); static int h8300_monitor_function_p (tree); static int h8300_os_task_function_p (tree); -static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT, bool); +static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT); static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT); static unsigned int compute_saved_regs (void); static const char *cond_string (enum rtx_code); @@ -452,7 +452,7 @@ Fpa (rtx par) SIZE to adjust the stack pointer. */ static void -h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size, bool in_prologue) +h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size) { /* If the frame size is 0, we don't have anything to do. */ if (size == 0) @@ -511,7 +511,7 @@ compute_saved_regs (void) /* Emit an insn to push register RN. */ static rtx -push (int rn, bool in_prologue) +push (int rn) { rtx reg = gen_rtx_REG (word_mode, rn); rtx x; @@ -571,7 +571,7 @@ h8300_push_pop (int regno, int nregs, bool pop_p, bool return_p) if (pop_p) pop (regno); else - push (regno, false); + push (regno); return; } @@ -755,7 +755,7 @@ h8300_expand_prologue (void) if (frame_pointer_needed) { /* Push fp. */ - push (HARD_FRAME_POINTER_REGNUM, true); + push (HARD_FRAME_POINTER_REGNUM); F (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx), 0); } @@ -787,7 +787,7 @@ h8300_expand_prologue (void) } /* Leave room for locals. */ - h8300_emit_stack_adjustment (-1, round_frame_size (get_frame_size ()), true); + h8300_emit_stack_adjustment (-1, round_frame_size (get_frame_size ())); if (flag_stack_usage_info) current_function_static_stack_size @@ -828,7 +828,7 @@ h8300_expand_epilogue (void) returned_p = false; /* Deallocate locals. */ - h8300_emit_stack_adjustment (1, frame_size, false); + h8300_emit_stack_adjustment (1, frame_size); /* Pop the saved registers in descending order. */ saved_regs = compute_saved_regs (); @@ -2707,10 +2707,14 @@ output_plussi (rtx *operands, bool need_flags) if (!need_flags) return "adds\t%2,%S0"; + /* FALLTHRU */ + case 0xfffffffc: if (!need_flags) return "subs\t%G2,%S0"; + /* FALLTHRU */ + case 0x00010000: case 0x00020000: if (!need_flags) @@ -2719,6 +2723,8 @@ output_plussi (rtx *operands, bool need_flags) return "inc.w\t%2,%e0"; } + /* FALLTHRU */ + case 0xffff0000: case 0xfffe0000: if (!need_flags) @@ -2726,6 +2732,9 @@ output_plussi (rtx *operands, bool need_flags) operands[2] = GEN_INT (intval >> 16); return "dec.w\t%G2,%e0"; } + + /* FALLTHRU */ + } /* See if we can finish with 4 bytes. */ @@ -2792,10 +2801,15 @@ compute_plussi_length (rtx *operands, bool need_flags) if (!need_flags) return 2; + /* FALLTHRU */ + case 0xffff0000: case 0xfffe0000: if (!need_flags) return 2; + + /* FALLTHRU */ + } /* See if we can finish with 4 bytes. */ @@ -3999,6 +4013,7 @@ h8300_shift_needs_scratch_p (int count, machine_mode mode, enum rtx_code type) else if (type == ASHIFTRT) return (ar == SHIFT_LOOP || (TARGET_H8300H && mode == SImode && count == 8)); + gcc_unreachable (); } /* Output the assembler code for doing shifts. */ diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index e21bc74..121cbf1 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -1172,7 +1172,8 @@ (match_test "(mode == V16QImode && (vsx_register_operand (op, mode) || (MEM_P (op) - && quad_address_p (XEXP (op, 0), mode, false))))")) + && (indexed_or_indirect_address (XEXP (op, 0), mode) + || quad_address_p (XEXP (op, 0), mode, false)))))")) ;; Return 1 if this operand is valid for an MMA disassemble insn. (define_predicate "mma_disassemble_output_operand" diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d4aa545..882c8eb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,44 @@ +2021-05-28 Jason Merrill <jason@redhat.com> + + * constexpr.c (build_data_member_initialization): Use tsi_range. + (build_constexpr_constructor_member_initializers): Likewise. + (constexpr_fn_retval, cxx_eval_statement_list): Likewise. + (potential_constant_expression_1): Likewise. + * coroutines.cc (await_statement_expander): Likewise. + (await_statement_walker): Likewise. + * module.cc (trees_out::core_vals): Likewise. + * pt.c (tsubst_expr): Likewise. + * semantics.c (set_cleanup_locs): Likewise. + +2021-05-28 Jason Merrill <jason@redhat.com> + + PR c++/100797 + PR c++/95719 + * call.c (build_over_call): Adjust base_binfo in + resolves_to_fixed_type_p case. + +2021-05-28 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * semantics.c (handle_omp_array_sections): Copy + OMP_CLAUSE_MAP_IMPLICIT. + (finish_omp_clauses): Move not just OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT + marked clauses last, but also OMP_CLAUSE_MAP_IMPLICIT. Add + map_firstprivate_head bitmap, set it for GOMP_MAP_FIRSTPRIVATE_POINTER + maps and silently remove OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT if it is + present too. For OMP_CLAUSE_MAP_IMPLICIT silently remove the clause + if present in map_head, map_field_head or map_firstprivate_head + bitmaps. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * parser.c (cp_parser_omp_clause_affinity): New. + (cp_parser_omp_clause_name, cp_parser_omp_var_list_no_open, + cp_parser_omp_all_clauses, OMP_TASK_CLAUSE_MASK): Handle affinity + clause. + * semantics.c (handle_omp_array_sections_1, handle_omp_array_sections, + finish_omp_clauses): Likewise. + 2021-05-27 Matthias Kretz <kretz@kde.org> PR c++/100716 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 3076fe6..bf524b5 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -9152,18 +9152,32 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (base_binfo == error_mark_node) return error_mark_node; } - tree converted_arg = build_base_path (PLUS_EXPR, arg, - base_binfo, 1, complain); /* If we know the dynamic type of the object, look up the final overrider in the BINFO. */ if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0 && resolves_to_fixed_type_p (arg)) { - fn = lookup_vfn_in_binfo (DECL_VINDEX (fn), base_binfo); - flags |= LOOKUP_NONVIRTUAL; + tree ov = lookup_vfn_in_binfo (DECL_VINDEX (fn), base_binfo); + + /* And unwind base_binfo to match. If we don't find the type we're + looking for in BINFO_INHERITANCE_CHAIN, we're looking at diamond + inheritance; for now do a normal virtual call in that case. */ + tree octx = DECL_CONTEXT (ov); + tree obinfo = base_binfo; + while (obinfo && !SAME_BINFO_TYPE_P (BINFO_TYPE (obinfo), octx)) + obinfo = BINFO_INHERITANCE_CHAIN (obinfo); + if (obinfo) + { + fn = ov; + base_binfo = obinfo; + flags |= LOOKUP_NONVIRTUAL; + } } + tree converted_arg = build_base_path (PLUS_EXPR, arg, + base_binfo, 1, complain); + argarray[j++] = converted_arg; parm = TREE_CHAIN (parm); if (first_arg != NULL_TREE) diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 9cb761d..297f207 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -330,12 +330,9 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec) return false; if (TREE_CODE (t) == STATEMENT_LIST) { - tree_stmt_iterator i; - for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) - { - if (! build_data_member_initialization (tsi_stmt (i), vec)) - return false; - } + for (tree stmt : tsi_range (t)) + if (! build_data_member_initialization (stmt, vec)) + return false; return true; } if (TREE_CODE (t) == CLEANUP_STMT) @@ -577,10 +574,9 @@ build_constexpr_constructor_member_initializers (tree type, tree body) break; case STATEMENT_LIST: - for (tree_stmt_iterator i = tsi_start (body); - !tsi_end_p (i); tsi_next (&i)) + for (tree stmt : tsi_range (body)) { - body = tsi_stmt (i); + body = stmt; if (TREE_CODE (body) == BIND_EXPR) break; } @@ -617,10 +613,9 @@ build_constexpr_constructor_member_initializers (tree type, tree body) } else if (TREE_CODE (body) == STATEMENT_LIST) { - tree_stmt_iterator i; - for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i)) + for (tree stmt : tsi_range (body)) { - ok = build_data_member_initialization (tsi_stmt (i), &vec); + ok = build_data_member_initialization (stmt, &vec); if (!ok) break; } @@ -675,11 +670,10 @@ constexpr_fn_retval (tree body) { case STATEMENT_LIST: { - tree_stmt_iterator i; tree expr = NULL_TREE; - for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i)) + for (tree stmt : tsi_range (body)) { - tree s = constexpr_fn_retval (tsi_stmt (i)); + tree s = constexpr_fn_retval (stmt); if (s == error_mark_node) return error_mark_node; else if (s == NULL_TREE) @@ -5772,7 +5766,6 @@ cxx_eval_statement_list (const constexpr_ctx *ctx, tree t, bool *non_constant_p, bool *overflow_p, tree *jump_target) { - tree_stmt_iterator i; tree local_target; /* In a statement-expression we want to return the last value. For empty statement expression return void_node. */ @@ -5782,9 +5775,8 @@ cxx_eval_statement_list (const constexpr_ctx *ctx, tree t, local_target = NULL_TREE; jump_target = &local_target; } - for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) + for (tree stmt : tsi_range (t)) { - tree stmt = tsi_stmt (i); /* We've found a continue, so skip everything until we reach the label its jumping to. */ if (continues (jump_target)) @@ -8282,16 +8274,10 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, } case STATEMENT_LIST: - { - tree_stmt_iterator i; - for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) - { - if (!RECUR (tsi_stmt (i), any)) - return false; - } - return true; - } - break; + for (tree stmt : tsi_range (t)) + if (!RECUR (stmt, any)) + return false; + return true; case MODIFY_EXPR: if (cxx_dialect < cxx14) diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 7166206..1bf1931 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -1764,10 +1764,9 @@ await_statement_expander (tree *stmt, int *do_subtree, void *d) return NULL_TREE; /* Just process the sub-trees. */ else if (TREE_CODE (*stmt) == STATEMENT_LIST) { - tree_stmt_iterator i; - for (i = tsi_start (*stmt); !tsi_end_p (i); tsi_next (&i)) + for (tree &s : tsi_range (*stmt)) { - res = cp_walk_tree (tsi_stmt_ptr (i), await_statement_expander, + res = cp_walk_tree (&s, await_statement_expander, d, NULL); if (res) return res; @@ -3509,10 +3508,9 @@ await_statement_walker (tree *stmt, int *do_subtree, void *d) } else if (TREE_CODE (*stmt) == STATEMENT_LIST) { - tree_stmt_iterator i; - for (i = tsi_start (*stmt); !tsi_end_p (i); tsi_next (&i)) + for (tree &s : tsi_range (*stmt)) { - res = cp_walk_tree (tsi_stmt_ptr (i), await_statement_walker, + res = cp_walk_tree (&s, await_statement_walker, d, NULL); if (res) return res; diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index 9847270..46b2248 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -390,6 +390,7 @@ names_builtin_p (const char *name) case RID_BUILTIN_CONVERTVECTOR: case RID_BUILTIN_HAS_ATTRIBUTE: case RID_BUILTIN_SHUFFLE: + case RID_BUILTIN_SHUFFLEVECTOR: case RID_BUILTIN_LAUNDER: case RID_BUILTIN_BIT_CAST: case RID_OFFSETOF: diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index aa20271..c95a820 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7895,6 +7895,9 @@ extern tree cp_build_binary_op (const op_location_t &, extern tree build_x_vec_perm_expr (location_t, tree, tree, tree, tsubst_flags_t); +extern tree build_x_shufflevector (location_t, + vec<tree, va_gc> *, + tsubst_flags_t); #define cxx_sizeof(T) cxx_sizeof_or_alignof_type (input_location, T, SIZEOF_EXPR, false, true) extern tree build_simple_component_ref (tree, tree); extern tree build_ptrmemfunc_access_expr (tree, tree); diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 02c19f5..f0fb014 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -6094,9 +6094,8 @@ trees_out::core_vals (tree t) break; case STATEMENT_LIST: - for (tree_stmt_iterator iter = tsi_start (t); - !tsi_end_p (iter); tsi_next (&iter)) - if (tree stmt = tsi_stmt (iter)) + for (tree stmt : tsi_range (t)) + if (stmt) WT (stmt); WT (NULL_TREE); break; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 84c6be8..4a46828 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -7295,6 +7295,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, case RID_ADDRESSOF: case RID_BUILTIN_SHUFFLE: + case RID_BUILTIN_SHUFFLEVECTOR: case RID_BUILTIN_LAUNDER: { vec<tree, va_gc> *vec; @@ -7357,6 +7358,20 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, } break; + case RID_BUILTIN_SHUFFLEVECTOR: + if (vec->length () < 3) + { + error_at (loc, "wrong number of arguments to " + "%<__builtin_shufflevector%>"); + postfix_expression = error_mark_node; + } + else + { + postfix_expression + = build_x_shufflevector (loc, vec, tf_warning_or_error); + } + break; + default: gcc_unreachable (); } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index bb22d68..3130280 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18152,9 +18152,8 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl, { case STATEMENT_LIST: { - tree_stmt_iterator i; - for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) - RECUR (tsi_stmt (i)); + for (tree stmt : tsi_range (t)) + RECUR (stmt); break; } @@ -20398,6 +20397,15 @@ tsubst_copy_and_build (tree t, RETURN (ret); break; + case IFN_SHUFFLEVECTOR: + { + ret = build_x_shufflevector (input_location, call_args, + complain); + if (ret != error_mark_node) + RETURN (ret); + break; + } + default: /* Unsupported internal function with arguments. */ gcc_unreachable (); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fe370a2..e40462d 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -613,9 +613,8 @@ set_cleanup_locs (tree stmts, location_t loc) set_cleanup_locs (CLEANUP_BODY (stmts), loc); } else if (TREE_CODE (stmts) == STATEMENT_LIST) - for (tree_stmt_iterator i = tsi_start (stmts); - !tsi_end_p (i); tsi_next (&i)) - set_cleanup_locs (tsi_stmt (i), loc); + for (tree stmt : tsi_range (stmts)) + set_cleanup_locs (stmt, loc); } /* Finish a scope. */ diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 3df4117..dbb2370 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5989,6 +5989,42 @@ build_x_vec_perm_expr (location_t loc, orig_arg1, orig_arg2); return exp; } + +/* Build a VEC_PERM_EXPR. + This is a simple wrapper for c_build_shufflevector. */ +tree +build_x_shufflevector (location_t loc, vec<tree, va_gc> *args, + tsubst_flags_t complain) +{ + tree arg0 = (*args)[0]; + tree arg1 = (*args)[1]; + if (processing_template_decl) + { + for (unsigned i = 0; i < args->length (); ++i) + if (type_dependent_expression_p ((*args)[i])) + { + tree exp = build_min_nt_call_vec (NULL, args); + CALL_EXPR_IFN (exp) = IFN_SHUFFLEVECTOR; + return exp; + } + arg0 = build_non_dependent_expr (arg0); + arg1 = build_non_dependent_expr (arg1); + /* ??? Nothing needed for the index arguments? */ + } + auto_vec<tree, 16> mask; + for (unsigned i = 2; i < args->length (); ++i) + { + tree idx = maybe_constant_value ((*args)[i]); + mask.safe_push (idx); + } + tree exp = c_build_shufflevector (loc, arg0, arg1, mask, complain & tf_error); + if (processing_template_decl && exp != error_mark_node) + { + exp = build_min_non_dep_call_vec (exp, NULL, args); + CALL_EXPR_IFN (exp) = IFN_SHUFFLEVECTOR; + } + return exp; +} /* Return a tree for the sum or difference (RESULTCODE says which) of pointer PTROP and integer INTOP. */ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index bfe9c21..8711745 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -11849,6 +11849,34 @@ to and from other datatypes of the same size). You cannot operate between vectors of different lengths or different signedness without a cast. +@findex __builtin_shufflevector +Vector shuffling is available using the +@code{__builtin_shufflevector (vec1, vec2, index...)} +function. @var{vec1} and @var{vec2} must be expressions with +vector type with a compatible element type. The result of +@code{__builtin_shufflevector} is a vector with the same element type +as @var{vec1} and @var{vec2} but that has an element count equal to +the number of indices specified. + +The @var{index} arguments are a list of integers that specify the +elements indices of the first two vectors that should be extracted and +returned in a new vector. These element indices are numbered sequentially +starting with the first vector, continuing into the second vector. +An index of -1 can be used to indicate that the corresponding element in +the returned vector is a don't care and can be freely chosen to optimized +the generated code sequence performing the shuffle operation. + +Consider the following example, +@smallexample +typedef int v4si __attribute__ ((vector_size (16))); +typedef int v8si __attribute__ ((vector_size (32))); + +v8si a = @{1,-2,3,-4,5,-6,7,-8@}; +v4si b = __builtin_shufflevector (a, a, 0, 2, 4, 6); /* b is @{1,3,5,7@} */ +v4si c = @{-2,-4,-6,-8@}; +v8si d = __builtin_shufflevector (c, b, 4, 0, 5, 1, 6, 2, 7, 3); /* d is a */ +@end smallexample + @findex __builtin_convertvector Vector conversion is available using the @code{__builtin_convertvector (vec, vectype)} diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d261101..95857cc 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,32 @@ +2021-05-30 Gerald Pfeifer <gerald@pfeifer.com> + + * gfortran.texi (BOZ literal constants): Fix typo. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * dump-parse-tree.c (show_iterator): New. + (show_omp_namelist): Handle iterators. + (show_omp_clauses): Handle affinity. + * gfortran.h (gfc_free_omp_namelist): New union with 'udr' and new 'ns'. + * match.c (gfc_free_omp_namelist): Add are to choose union element. + * openmp.c (gfc_free_omp_clauses, gfc_match_omp_detach, + gfc_match_omp_clause_reduction, gfc_match_omp_flush): Update + call to gfc_free_omp_namelist. + (gfc_match_omp_variable_list): Likewise; permit preceeding whitespace. + (enum omp_mask1): Add OMP_CLAUSE_AFFINITY. + (gfc_match_iterator): New. + (gfc_match_omp_clauses): Use it; update call to gfc_free_omp_namelist. + (OMP_TASK_CLAUSES): Add OMP_CLAUSE_AFFINITY. + (gfc_match_omp_taskwait): Match depend clause. + (resolve_omp_clauses): Handle affinity; update for udr/union change. + (gfc_resolve_omp_directive): Resolve clauses of taskwait. + * st.c (gfc_free_statement): Update gfc_free_omp_namelist call. + * trans-openmp.c (gfc_trans_omp_array_reduction_or_udr): Likewise + (handle_iterator): New. + (gfc_trans_omp_clauses): Handle iterators for depend/affinity clause. + (gfc_trans_omp_taskwait): Handle depend clause. + (gfc_trans_omp_directive): Update call. + 2021-05-27 Harald Anlauf <anlauf@gmx.de> PR fortran/100602 diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index 60bf257..a54153b 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -1842,7 +1842,7 @@ type, then the real-literal-constant will be interpreted as a Besides decimal constants, Fortran also supports binary (@code{b}), octal (@code{o}) and hexadecimal (@code{z}) integer constants. The -syntax is: @samp{prefix quote digits quote}, were the prefix is +syntax is: @samp{prefix quote digits quote}, where the prefix is either @code{b}, @code{o} or @code{z}, quote is either @code{'} or @code{"} and the digits are @code{0} or @code{1} for binary, between @code{0} and @code{7} for octal, and between @code{0} and diff --git a/gcc/gimple-ssa-evrp.c b/gcc/gimple-ssa-evrp.c index 118d103..f1eea20 100644 --- a/gcc/gimple-ssa-evrp.c +++ b/gcc/gimple-ssa-evrp.c @@ -127,7 +127,8 @@ public: if (dump_file && (dump_flags & TDF_DETAILS)) m_ranger->dump (dump_file); - m_ranger->export_global_ranges (); + // FIXME: Do not export ranges until PR100787 is fixed. + //m_ranger->export_global_ranges (); disable_ranger (cfun); } @@ -193,7 +194,8 @@ public: if (dump_file && (dump_flags & TDF_DETAILS)) m_ranger->dump (dump_file); - m_ranger->export_global_ranges (); + // FIXME: Do not export ranges until PR100787 is fixed. + //m_ranger->export_global_ranges (); disable_ranger (cfun); } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index d60fc95..3ca29ce 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -9014,6 +9014,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, lastprivate and perhaps firstprivate too on the parallel. Similarly for #pragma omp for simd. */ struct gimplify_omp_ctx *octx = outer_ctx; + bool taskloop_seen = false; decl = NULL_TREE; do { @@ -9045,11 +9046,12 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, else if (octx && (octx->region_type & ORT_TASK) != 0 && octx->combined_loop) - ; + taskloop_seen = true; else if (octx && octx->region_type == ORT_COMBINED_PARALLEL - && ctx->region_type == ORT_WORKSHARE - && octx == outer_ctx) + && ((ctx->region_type == ORT_WORKSHARE + && octx == outer_ctx) + || taskloop_seen)) flags = GOVD_SEEN | GOVD_SHARED; else if (octx && ((octx->region_type & ORT_COMBINED_TEAMS) diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index f06c2711..fb8b43d 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -4122,6 +4122,12 @@ vectorized_internal_fn_supported_p (internal_fn ifn, tree type) } void +expand_SHUFFLEVECTOR (internal_fn, gcall *) +{ + gcc_unreachable (); +} + +void expand_PHI (internal_fn, gcall *) { gcc_unreachable (); diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index daeace7..b2f414d 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -405,6 +405,9 @@ DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL) /* A NOP function with arbitrary arguments and return value. */ DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) +/* Temporary vehicle for __builtin_shufflevector. */ +DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) + #undef DEF_INTERNAL_INT_FN #undef DEF_INTERNAL_FLT_FN #undef DEF_INTERNAL_FLT_FLOATN_FN diff --git a/gcc/internal-fn.h b/gcc/internal-fn.h index 5bc5660..19d0f84 100644 --- a/gcc/internal-fn.h +++ b/gcc/internal-fn.h @@ -233,6 +233,7 @@ extern void expand_addsub_overflow (location_t, tree_code, tree, tree, tree, extern void expand_internal_call (gcall *); extern void expand_internal_call (internal_fn, gcall *); extern void expand_PHI (internal_fn, gcall *); +extern void expand_SHUFFLEVECTOR (internal_fn, gcall *); extern bool vectorized_internal_fn_supported_p (internal_fn, tree); diff --git a/gcc/lto/lto-common.c b/gcc/lto/lto-common.c index 02d16f4..bfe52a2 100644 --- a/gcc/lto/lto-common.c +++ b/gcc/lto/lto-common.c @@ -1235,7 +1235,7 @@ compare_tree_sccs_1 (tree t1, tree t2, tree **map) compare_values (DECL_IS_NOVOPS); compare_values (DECL_IS_RETURNS_TWICE); compare_values (DECL_IS_MALLOC); - compare_values (DECL_IS_OPERATOR_NEW_P); + compare_values (FUNCTION_DECL_DECL_TYPE); compare_values (DECL_DECLARED_INLINE_P); compare_values (DECL_STATIC_CHAIN); compare_values (DECL_NO_INLINE_WARNING_P); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 27e5f67..f8eedd47 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,103 @@ +2021-05-29 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gcc.dg/plugin/diagnostic_plugin_show_trees.c (plugin_init): Fix caret_max_with. + * gcc.dg/plugin/diagnostic_plugin_test_inlining.c + (plugin_init): Likewise. + * gcc.dg/plugin/diagnostic_plugin_test_paths.c (plugin_init): Likewise. + * gcc.dg/plugin/diagnostic_plugin_test_string_literals.c + (plugin_init): Likewise. + * gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c + (plugin_init): Likewise. + +2021-05-29 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * c-c++-common/gomp/pr99928-1.c: Add default(none) to constructs + combined with parallel, teams or taskloop and defaultmap(none) + to constructs combined with target. + * c-c++-common/gomp/pr99928-2.c: Likewise. + * c-c++-common/gomp/pr99928-3.c: Likewise. + * c-c++-common/gomp/pr99928-4.c: Likewise. + * c-c++-common/gomp/pr99928-5.c: Likewise. + * c-c++-common/gomp/pr99928-6.c: Likewise. + * c-c++-common/gomp/pr99928-7.c: Likewise. + * c-c++-common/gomp/pr99928-8.c: Likewise. + * c-c++-common/gomp/pr99928-9.c: Likewise. + * c-c++-common/gomp/pr99928-10.c: Likewise. + * c-c++-common/gomp/pr99928-13.c: Likewise. + * c-c++-common/gomp/pr99928-14.c: Likewise. + +2021-05-29 Aldy Hernandez <aldyh@redhat.com> + + * gcc.dg/Wstringop-overflow-55.c: + * gcc.dg/pr80776-1.c: + +2021-05-28 Richard Biener <rguenther@suse.de> + + PR tree-optimization/100778 + * gcc.dg/vect/bb-slp-pr100778-1.c: New testcase. + +2021-05-28 Jason Merrill <jason@redhat.com> + + PR c++/100797 + PR c++/95719 + * g++.dg/inherit/virtual15.C: New test. + * g++.dg/inherit/virtual15a.C: New file. + +2021-05-28 Richard Biener <rguenther@suse.de> + + PR ipa/100791 + * gcc.dg/pr100791.c: New testcase. + +2021-05-28 Richard Biener <rguenther@suse.de> + + PR c/100803 + * gcc.dg/gimplefe-error-11.c: New testcase. + +2021-05-28 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/99928 + * c-c++-common/gomp/pr99928-8.c: Remove all xfails. + * c-c++-common/gomp/pr99928-9.c: Likewise. + * c-c++-common/gomp/pr99928-10.c: Likewise. + * c-c++-common/gomp/pr99928-16.c: New test. + +2021-05-28 Tobias Burnus <tobias@codesourcery.com> + + * c-c++-common/gomp/affinity-1.c: New test. + * c-c++-common/gomp/affinity-2.c: New test. + * c-c++-common/gomp/affinity-3.c: New test. + * c-c++-common/gomp/affinity-4.c: New test. + * c-c++-common/gomp/affinity-5.c: New test. + * c-c++-common/gomp/affinity-6.c: New test. + * c-c++-common/gomp/affinity-7.c: New test. + * gfortran.dg/gomp/affinity-clause-1.f90: New test. + * gfortran.dg/gomp/affinity-clause-2.f90: New test. + * gfortran.dg/gomp/affinity-clause-3.f90: New test. + * gfortran.dg/gomp/affinity-clause-4.f90: New test. + * gfortran.dg/gomp/affinity-clause-5.f90: New test. + * gfortran.dg/gomp/affinity-clause-6.f90: New test. + * gfortran.dg/gomp/depend-iterator-1.f90: New test. + * gfortran.dg/gomp/depend-iterator-2.f90: New test. + * gfortran.dg/gomp/depend-iterator-3.f90: New test. + * gfortran.dg/gomp/taskwait.f90: New test. + +2021-05-28 Joern Rennecke <joern.rennecke@riscy-ip.com> + Richard Biener <rguenther@suse.de> + + * gcc.dg/tree-ssa/popcount4ll.c: Remove lp64 condition. + Adjust scanning pattern for !lp64. + * gcc.dg/tree-ssa/popcount5ll.c: Likewise. + * gcc.dg/tree-ssa/popcount4l.c: Adjust scanning pattern + for ! int32plus. + +2021-05-28 Kewen Lin <linkw@linux.ibm.com> + + PR tree-optimization/99398 + * gcc.target/powerpc/vec-perm-ctor-run.c: New test. + * gcc.target/powerpc/vec-perm-ctor.c: New test. + * gcc.target/powerpc/vec-perm-ctor.h: New test. + 2021-05-27 Matthias Kretz <kretz@kde.org> PR c++/100716 diff --git a/gcc/testsuite/c-c++-common/builtin-shufflevector-2.c b/gcc/testsuite/c-c++-common/builtin-shufflevector-2.c new file mode 100644 index 0000000..78cec16 --- /dev/null +++ b/gcc/testsuite/c-c++-common/builtin-shufflevector-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ + +typedef long v4di __attribute__((vector_size(4 * sizeof (long)))); +typedef int v4si __attribute__((vector_size(4 * sizeof (int)))); +typedef int v8si __attribute__((vector_size(8 * sizeof (int)))); + +v4si res, a, b; +v4di resl, al, bl; +v8si res8, a8, b8; +void foo (void) +{ + res = __builtin_shufflevector (a, 0, 0, 1, 4, 5); /* { dg-error "must be vectors" } */ + res = __builtin_shufflevector (a, b, 0, 1, 4, 5, 6); /* { dg-error "power of two" } */ + res = __builtin_shufflevector (a, b, 0, 1, 4, 8); /* { dg-error "invalid" } */ + res = __builtin_shufflevector (a, b, 0, 1, -4, 5); /* { dg-error "invalid" } */ + res = __builtin_shufflevector (a, bl, 0, 1, 4, 5); /* { dg-error "same element type" } */ + resl = __builtin_shufflevector (a, b, 0, 1, 4, 5); /* { dg-error "" } incompatible types */ +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-1.c b/gcc/testsuite/c-c++-common/gomp/pr99928-1.c index 37181fd..b4aa8dd 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-1.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-1.c @@ -12,14 +12,14 @@ foo (void) /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } *//* FIXME. */ - #pragma omp distribute parallel for firstprivate (f00) + #pragma omp distribute parallel for firstprivate (f00) default(none) for (int i = 0; i < 64; i++) f00++; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } */ - #pragma omp distribute parallel for simd firstprivate (f01) + #pragma omp distribute parallel for simd firstprivate (f01) default(none) for (int i = 0; i < 64; i++) f01++; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f02\\)" "gimple" } } */ @@ -40,53 +40,53 @@ bar (void) f03++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(f04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(f04\\)" "gimple" } } */ - #pragma omp master taskloop firstprivate (f04) + #pragma omp master taskloop firstprivate (f04) default(none) for (int i = 0; i < 64; i++) f04++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(f05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(f05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f05\\)" "gimple" } } */ - #pragma omp master taskloop simd firstprivate (f05) + #pragma omp master taskloop simd firstprivate (f05) default(none) for (int i = 0; i < 64; i++) f05++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } *//* FIXME. */ - #pragma omp parallel for firstprivate (f06) + #pragma omp parallel for firstprivate (f06) default(none) for (int i = 0; i < 64; i++) f06++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } */ - #pragma omp parallel for simd firstprivate (f07) + #pragma omp parallel for simd firstprivate (f07) default(none) for (int i = 0; i < 64; i++) f07++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f08\\)" "gimple" } } */ - #pragma omp parallel loop firstprivate (f08) + #pragma omp parallel loop firstprivate (f08) default(none) for (int i = 0; i < 64; i++) f08++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(f09\\)" "gimple" } } */ - #pragma omp parallel master firstprivate (f09) + #pragma omp parallel master firstprivate (f09) default(none) f09++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(f10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(f10\\)" "gimple" } } */ - #pragma omp parallel master taskloop firstprivate (f10) + #pragma omp parallel master taskloop firstprivate (f10) default(none) for (int i = 0; i < 64; i++) f10++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(f11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(f11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f11\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd firstprivate (f11) + #pragma omp parallel master taskloop simd firstprivate (f11) default(none) for (int i = 0; i < 64; i++) f11++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*firstprivate\\(f12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*firstprivate\\(f12\\)" "gimple" } } */ - #pragma omp parallel sections firstprivate (f12) + #pragma omp parallel sections firstprivate (f12) default(none) { f12++; #pragma omp section @@ -94,36 +94,36 @@ bar (void) } /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f13\\)" "gimple" } } */ - #pragma omp target parallel firstprivate (f13) + #pragma omp target parallel firstprivate (f13) default(none) defaultmap(none) f13++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for firstprivate (f14) + #pragma omp target parallel for firstprivate (f14) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f14++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } */ - #pragma omp target parallel for simd firstprivate (f15) + #pragma omp target parallel for simd firstprivate (f15) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f15++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f16\\)" "gimple" } } */ - #pragma omp target parallel loop firstprivate (f16) + #pragma omp target parallel loop firstprivate (f16) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f16++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f17\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f17\\)" "gimple" } } */ - #pragma omp target teams firstprivate (f17) + #pragma omp target teams firstprivate (f17) default(none) defaultmap(none) f17++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } *//* FIXME: This should be on distribute instead. */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute firstprivate (f18) + #pragma omp target teams distribute firstprivate (f18) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f18++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } */ @@ -131,7 +131,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute parallel for firstprivate (f19) + #pragma omp target teams distribute parallel for firstprivate (f19) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f19++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } */ @@ -140,14 +140,14 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd firstprivate (f20) + #pragma omp target teams distribute parallel for simd firstprivate (f20) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f20++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } */ - #pragma omp target teams distribute simd firstprivate (f21) + #pragma omp target teams distribute simd firstprivate (f21) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f21++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f22\\)" "gimple" } } */ @@ -156,29 +156,29 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f22\\)" "gimple" } } *//* NOTE: This is an implementation detail. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f22\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f22\\)" "gimple" } } */ - #pragma omp target teams loop firstprivate (f22) + #pragma omp target teams loop firstprivate (f22) default(none) defaultmap(none) for (int i = 0; i < 64; i++) f22++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f23\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f23\\)" "gimple" } } */ - #pragma omp target simd firstprivate (f23) + #pragma omp target simd firstprivate (f23) defaultmap(none) for (int i = 0; i < 64; i++) f23++; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(f24\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f24\\)" "gimple" } } */ - #pragma omp taskloop simd firstprivate (f24) + #pragma omp taskloop simd firstprivate (f24) default(none) for (int i = 0; i < 64; i++) f24++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } *//* FIXME: This should be on distribute instead. */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute firstprivate (f25) + #pragma omp teams distribute firstprivate (f25) default(none) for (int i = 0; i < 64; i++) f25++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } *//* FIXME: This should be on distribute instead. */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute parallel for firstprivate (f26) + #pragma omp teams distribute parallel for firstprivate (f26) default(none) for (int i = 0; i < 64; i++) f26++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } *//* FIXME: This should be on for instead. */ @@ -186,13 +186,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd firstprivate (f27) + #pragma omp teams distribute parallel for simd firstprivate (f27) default(none) for (int i = 0; i < 64; i++) f27++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } */ - #pragma omp teams distribute simd firstprivate (f28) + #pragma omp teams distribute simd firstprivate (f28) default(none) for (int i = 0; i < 64; i++) f28++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f29\\)" "gimple" } } */ @@ -200,7 +200,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f29\\)" "gimple" } } *//* NOTE: This is an implementation detail. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f29\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f29\\)" "gimple" } } */ - #pragma omp teams loop firstprivate (f29) + #pragma omp teams loop firstprivate (f29) default(none) for (int i = 0; i < 64; i++) f29++; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-10.c b/gcc/testsuite/c-c++-common/gomp/pr99928-10.c index 6c44600..4366863 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-10.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-10.c @@ -13,14 +13,14 @@ foo (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r00 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r00 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r00 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp distribute parallel for reduction(+:r00[1:2]) + #pragma omp distribute parallel for reduction(+:r00[1:2]) default(none) for (int i = 0; i < 64; i++) r00[1]++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r01 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r01 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r01 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r01 \\+ 4" "gimple" } } */ - #pragma omp distribute parallel for simd reduction(+:r01[1:3]) + #pragma omp distribute parallel for simd reduction(+:r01[1:3]) default(none) for (int i = 0; i < 64; i++) r01[1]++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r02 \\+ 4" "gimple" } } */ @@ -43,53 +43,53 @@ bar (void) r03[1]++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r04 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r04 \\+ 4" "gimple" } } */ - #pragma omp master taskloop reduction(+:r04[1:6]) + #pragma omp master taskloop reduction(+:r04[1:6]) default(none) for (int i = 0; i < 64; i++) r04[1]++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r05 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r05 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r05 \\+ 4" "gimple" } } */ - #pragma omp master taskloop simd reduction(+:r05[1:7]) + #pragma omp master taskloop simd reduction(+:r05[1:7]) default(none) for (int i = 0; i < 64; i++) r05[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r06 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r06 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp parallel for reduction(+:r06[1:8]) + #pragma omp parallel for reduction(+:r06[1:8]) default(none) for (int i = 0; i < 64; i++) r06[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r07 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r07 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r07 \\+ 4" "gimple" } } */ - #pragma omp parallel for simd reduction(+:r07[1:9]) + #pragma omp parallel for simd reduction(+:r07[1:9]) default(none) for (int i = 0; i < 64; i++) r07[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r08\\)" "gimple" } } *//* FIXME: Should be shared, but firstprivate is an optimization. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r08 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r08 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp parallel loop reduction(+:r08[1:10]) + #pragma omp parallel loop reduction(+:r08[1:10]) default(none) for (int i = 0; i < 64; i++) r08[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r09 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r09 \\+ 4" "gimple" } } */ - #pragma omp parallel master reduction(+:r09[1:11]) + #pragma omp parallel master reduction(+:r09[1:11]) default(none) r09[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r10\\)" "gimple" } } *//* FIXME: Should be shared, but firstprivate is an optimization. */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r10 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r10 \\+ 4" "gimple" } } */ - #pragma omp parallel master taskloop reduction(+:r10[1:12]) + #pragma omp parallel master taskloop reduction(+:r10[1:12]) default(none) for (int i = 0; i < 64; i++) r10[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r11\\)" "gimple" } } *//* FIXME: Should be shared, but firstprivate is an optimization. */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r11 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r11 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r11 \\+ 4" "gimple" } } */ - #pragma omp parallel master taskloop simd reduction(+:r11[1:13]) + #pragma omp parallel master taskloop simd reduction(+:r11[1:13]) default(none) for (int i = 0; i < 64; i++) r11[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r12 \\+ 4" "gimple" } } *//* FIXME: This should be on sections instead. */ /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r12 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r12 \\+ 4" "gimple" } } */ - #pragma omp parallel sections reduction(+:r12[1:14]) + #pragma omp parallel sections reduction(+:r12[1:14]) default(none) { r12[1]++; #pragma omp section @@ -99,14 +99,14 @@ bar (void) /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(firstprivate:r13 \\\[pointer assign, bias: 4\\\]\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r13 \\+ 4" "gimple" } } */ - #pragma omp target parallel reduction(+:r13[1:15]) + #pragma omp target parallel reduction(+:r13[1:15]) default(none) defaultmap(none) r13[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 64\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(firstprivate:r14 \\\[pointer assign, bias: 4\\\]\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r14" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r14 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r14 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for reduction(+:r14[1:16]) + #pragma omp target parallel for reduction(+:r14[1:16]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r14[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 68\\\]" "gimple" } } */ @@ -115,7 +115,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r15 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r15 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r15 \\+ 4" "gimple" } } */ - #pragma omp target parallel for simd reduction(+:r15[1:17]) + #pragma omp target parallel for simd reduction(+:r15[1:17]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r15[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 72\\\]" "gimple" } } */ @@ -124,21 +124,21 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r16\\)" "gimple" } } *//* FIXME: Should be shared, but firstprivate is an optimization. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r16 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r16 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target parallel loop reduction(+:r16[1:18]) + #pragma omp target parallel loop reduction(+:r16[1:18]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r16[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 76\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(firstprivate:r17 \\\[pointer assign, bias: 4\\\]\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r17\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r17 \\+ 4" "gimple" } } */ - #pragma omp target teams reduction(+:r17[1:19]) + #pragma omp target teams reduction(+:r17[1:19]) default(none) defaultmap(none) r17[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 80\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(firstprivate:r18 \\\[pointer assign, bias: 4\\\]\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r18 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r18 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute reduction(+:r18[1:20]) + #pragma omp target teams distribute reduction(+:r18[1:20]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r18[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 84\\\]" "gimple" } } */ @@ -148,7 +148,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r19 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r19 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r19 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute parallel for reduction(+:r19[1:21]) + #pragma omp target teams distribute parallel for reduction(+:r19[1:21]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r19[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 88\\\]" "gimple" } } */ @@ -159,7 +159,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r20 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r20 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r20 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute parallel for simd reduction(+:r20[1:22]) + #pragma omp target teams distribute parallel for simd reduction(+:r20[1:22]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r20[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 92\\\]" "gimple" } } */ @@ -168,7 +168,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r21 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r21 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r21 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute simd reduction(+:r21[1:23]) + #pragma omp target teams distribute simd reduction(+:r21[1:23]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r21[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 96\\\]" "gimple" } } */ @@ -179,31 +179,31 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r22\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r22 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r22 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target teams loop reduction(+:r22[1:24]) + #pragma omp target teams loop reduction(+:r22[1:24]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r22[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:\\\*_\[0-9]* \\\[len: 100\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(firstprivate:r23 \\\[pointer assign, bias: 4\\\]\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r23\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r23 \\+ 4" "gimple" } } */ - #pragma omp target simd reduction(+:r23[1:25]) + #pragma omp target simd reduction(+:r23[1:25]) defaultmap(none) for (int i = 0; i < 64; i++) r23[1]++; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r24 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r24 \\+ 4" "gimple" } } */ - #pragma omp taskloop simd reduction(+:r24[1:26]) + #pragma omp taskloop simd reduction(+:r24[1:26]) default(none) for (int i = 0; i < 64; i++) r24[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r25 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r25 \\+ 4" "gimple" } } */ - #pragma omp teams distribute reduction(+:r25[1:27]) + #pragma omp teams distribute reduction(+:r25[1:27]) default(none) for (int i = 0; i < 64; i++) r25[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r26 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r26 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r26 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r26 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute parallel for reduction(+:r26[1:28]) + #pragma omp teams distribute parallel for reduction(+:r26[1:28]) default(none) for (int i = 0; i < 64; i++) r26[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r27 \\+ 4" "gimple" } } */ @@ -211,13 +211,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r27 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r27 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r27 \\+ 4" "gimple" } } */ - #pragma omp teams distribute parallel for simd reduction(+:r27[1:29]) + #pragma omp teams distribute parallel for simd reduction(+:r27[1:29]) default(none) for (int i = 0; i < 64; i++) r27[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r28 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r28 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r28 \\+ 4" "gimple" } } */ - #pragma omp teams distribute simd reduction(+:r28[1:30]) + #pragma omp teams distribute simd reduction(+:r28[1:30]) default(none) for (int i = 0; i < 64; i++) r28[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(r29\\)" "gimple" } } *//* FIXME: Should be shared, but firstprivate is an optimization. */ @@ -225,7 +225,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(r29\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r29 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*\\)r29 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp teams loop reduction(+:r29[1:31]) + #pragma omp teams loop reduction(+:r29[1:31]) default(none) for (int i = 0; i < 64; i++) r29[1]++; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-13.c b/gcc/testsuite/c-c++-common/gomp/pr99928-13.c index d5d8d78..d45417f 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-13.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-13.c @@ -16,7 +16,7 @@ foo (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */ - #pragma omp distribute parallel for simd collapse(2) lastprivate (j00a, j00b) + #pragma omp distribute parallel for simd collapse(2) lastprivate (j00a, j00b) default(none) for (j00a = 0; j00a < 64; j00a++) for (j00b = 0; j00b < 4; j00b++) ; @@ -50,7 +50,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */ - #pragma omp master taskloop simd collapse(2) lastprivate (j03a, j03b) + #pragma omp master taskloop simd collapse(2) lastprivate (j03a, j03b) default(none) for (j03a = 0; j03a < 64; j03a++) for (j03b = 0; j03b < 4; j03b++) ; @@ -60,7 +60,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j04b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */ - #pragma omp parallel for simd collapse(2) lastprivate (j04a, j04b) + #pragma omp parallel for simd collapse(2) lastprivate (j04a, j04b) default(none) for (j04a = 0; j04a < 64; j04a++) for (j04b = 0; j04b < 4; j04b++) ; @@ -74,7 +74,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd collapse(2) lastprivate (j05a, j05b) + #pragma omp parallel master taskloop simd collapse(2) lastprivate (j05a, j05b) default(none) for (j05a = 0; j05a < 64; j05a++) for (j05b = 0; j05b < 4; j05b++) ; @@ -88,7 +88,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j06b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */ - #pragma omp target parallel for simd collapse(2) lastprivate (j06a, j06b) + #pragma omp target parallel for simd collapse(2) lastprivate (j06a, j06b) default(none) defaultmap(none) for (j06a = 0; j06a < 64; j06a++) for (j06b = 0; j06b < 4; j06b++) ; @@ -98,7 +98,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07b" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07b\\)" "gimple" } } */ - #pragma omp target simd collapse(2) lastprivate (j07a, j07b) + #pragma omp target simd collapse(2) lastprivate (j07a, j07b) defaultmap(none) for (j07a = 0; j07a < 64; j07a++) for (j07b = 0; j07b < 4; j07b++) ; @@ -116,7 +116,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j08b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd collapse(2) lastprivate (j08a, j08b) + #pragma omp target teams distribute parallel for simd collapse(2) lastprivate (j08a, j08b) default(none) defaultmap(none) for (j08a = 0; j08a < 64; j08a++) for (j08b = 0; j08b < 4; j08b++) ; @@ -130,7 +130,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */ - #pragma omp target teams distribute simd collapse(2) lastprivate (j09a, j09b) + #pragma omp target teams distribute simd collapse(2) lastprivate (j09a, j09b) default(none) defaultmap(none) for (j09a = 0; j09a < 64; j09a++) for (j09b = 0; j09b < 4; j09b++) ; @@ -140,7 +140,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */ - #pragma omp taskloop simd collapse(2) lastprivate (j10a, j10b) + #pragma omp taskloop simd collapse(2) lastprivate (j10a, j10b) default(none) for (j10a = 0; j10a < 64; j10a++) for (j10b = 0; j10b < 4; j10b++) ; @@ -154,7 +154,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j11b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd collapse(2) lastprivate (j11a, j11b) + #pragma omp teams distribute parallel for simd collapse(2) lastprivate (j11a, j11b) default(none) for (j11a = 0; j11a < 64; j11a++) for (j11b = 0; j11b < 4; j11b++) ; @@ -164,7 +164,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */ - #pragma omp teams distribute simd collapse(2) lastprivate (j12a, j12b) + #pragma omp teams distribute simd collapse(2) lastprivate (j12a, j12b) default(none) for (j12a = 0; j12a < 64; j12a++) for (j12b = 0; j12b < 4; j12b++) ; diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-14.c b/gcc/testsuite/c-c++-common/gomp/pr99928-14.c index 2d9e0be..2df7891 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-14.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-14.c @@ -16,7 +16,7 @@ foo (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */ - #pragma omp distribute parallel for simd collapse(2) + #pragma omp distribute parallel for simd collapse(2) default(none) for (j00a = 0; j00a < 64; j00a++) for (j00b = 0; j00b < 4; j00b++) ; @@ -50,7 +50,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */ - #pragma omp master taskloop simd collapse(2) + #pragma omp master taskloop simd collapse(2) default(none) for (j03a = 0; j03a < 64; j03a++) for (j03b = 0; j03b < 4; j03b++) ; @@ -60,7 +60,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */ - #pragma omp parallel for simd collapse(2) + #pragma omp parallel for simd collapse(2) default(none) for (j04a = 0; j04a < 64; j04a++) for (j04b = 0; j04b < 4; j04b++) ; @@ -74,7 +74,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd collapse(2) + #pragma omp parallel master taskloop simd collapse(2) default(none) for (j05a = 0; j05a < 64; j05a++) for (j05b = 0; j05b < 4; j05b++) ; @@ -88,7 +88,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */ - #pragma omp target parallel for simd collapse(2) + #pragma omp target parallel for simd collapse(2) default(none) defaultmap(none) for (j06a = 0; j06a < 64; j06a++) for (j06b = 0; j06b < 4; j06b++) ; @@ -98,7 +98,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07b" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07b\\)" "gimple" } } */ - #pragma omp target simd collapse(2) + #pragma omp target simd collapse(2) defaultmap(none) for (j07a = 0; j07a < 64; j07a++) for (j07b = 0; j07b < 4; j07b++) ; @@ -116,7 +116,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd collapse(2) + #pragma omp target teams distribute parallel for simd collapse(2) default(none) defaultmap(none) for (j08a = 0; j08a < 64; j08a++) for (j08b = 0; j08b < 4; j08b++) ; @@ -130,7 +130,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */ - #pragma omp target teams distribute simd collapse(2) + #pragma omp target teams distribute simd collapse(2) default(none) defaultmap(none) for (j09a = 0; j09a < 64; j09a++) for (j09b = 0; j09b < 4; j09b++) ; @@ -140,7 +140,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10b\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */ - #pragma omp taskloop simd collapse(2) + #pragma omp taskloop simd collapse(2) default(none) for (j10a = 0; j10a < 64; j10a++) for (j10b = 0; j10b < 4; j10b++) ; @@ -154,7 +154,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd collapse(2) + #pragma omp teams distribute parallel for simd collapse(2) default(none) for (j11a = 0; j11a < 64; j11a++) for (j11b = 0; j11b < 4; j11b++) ; @@ -164,7 +164,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */ - #pragma omp teams distribute simd collapse(2) + #pragma omp teams distribute simd collapse(2) default(none) for (j12a = 0; j12a < 64; j12a++) for (j12b = 0; j12b < 4; j12b++) ; diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-2.c b/gcc/testsuite/c-c++-common/gomp/pr99928-2.c index 6ba3d46..1af9bd2 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-2.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-2.c @@ -11,14 +11,14 @@ foo (void) /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } *//* FIXME. */ - #pragma omp distribute parallel for lastprivate (l00) + #pragma omp distribute parallel for lastprivate (l00) default(none) for (int i = 0; i < 64; i++) l00 = i; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } */ - #pragma omp distribute parallel for simd lastprivate (l01) + #pragma omp distribute parallel for simd lastprivate (l01) default(none) for (int i = 0; i < 64; i++) l01 = i; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l02\\)" "gimple" } } */ @@ -41,38 +41,38 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l04\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } */ - #pragma omp master taskloop lastprivate (l04) + #pragma omp master taskloop lastprivate (l04) default(none) for (int i = 0; i < 64; i++) l04 = i; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l05\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l05\\)" "gimple" } } */ - #pragma omp master taskloop simd lastprivate (l05) + #pragma omp master taskloop simd lastprivate (l05) default(none) for (int i = 0; i < 64; i++) l05 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } *//* FIXME. */ - #pragma omp parallel for lastprivate (l06) + #pragma omp parallel for lastprivate (l06) default(none) for (int i = 0; i < 64; i++) l06 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } */ - #pragma omp parallel for simd lastprivate (l07) + #pragma omp parallel for simd lastprivate (l07) default(none) for (int i = 0; i < 64; i++) l07 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp parallel loop lastprivate (j00) + #pragma omp parallel loop lastprivate (j00) default(none) for (j00 = 0; j00 < 64; j00++) ; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l08\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } */ - #pragma omp parallel master taskloop lastprivate (l08) + #pragma omp parallel master taskloop lastprivate (l08) default(none) for (int i = 0; i < 64; i++) l08 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l09\\)" "gimple" } } */ @@ -80,13 +80,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l09\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd lastprivate (l09) + #pragma omp parallel master taskloop simd lastprivate (l09) default(none) for (int i = 0; i < 64; i++) l09 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } *//* FIXME: This should be on sections instead. */ /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*lastprivate\\(l10\\)" "gimple" } } */ - #pragma omp parallel sections lastprivate (l10) + #pragma omp parallel sections lastprivate (l10) default(none) { l10 = 1; #pragma omp section @@ -96,7 +96,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for lastprivate (l11) + #pragma omp target parallel for lastprivate (l11) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l11 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l12" "gimple" } } */ @@ -104,7 +104,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } */ - #pragma omp target parallel for simd lastprivate (l12) + #pragma omp target parallel for simd lastprivate (l12) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l12 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j01" "gimple" } } */ @@ -112,14 +112,14 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target parallel loop lastprivate (j01) + #pragma omp target parallel loop lastprivate (j01) default(none) defaultmap(none) for (j01 = 0; j01 < 64; j01++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l13" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l13\\)" "gimple" } } */ - #pragma omp target teams distribute lastprivate (l13) + #pragma omp target teams distribute lastprivate (l13) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l13 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l14" "gimple" } } */ @@ -128,7 +128,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute parallel for lastprivate (l14) + #pragma omp target teams distribute parallel for lastprivate (l14) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l14 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l15" "gimple" } } */ @@ -138,7 +138,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd lastprivate (l15) + #pragma omp target teams distribute parallel for simd lastprivate (l15) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l15 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l16" "gimple" } } */ @@ -146,7 +146,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l16\\)" "gimple" } } */ - #pragma omp target teams distribute simd lastprivate (l16) + #pragma omp target teams distribute simd lastprivate (l16) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l16 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j02" "gimple" } } */ @@ -156,31 +156,31 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j02\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target teams loop lastprivate (j02) + #pragma omp target teams loop lastprivate (j02) default(none) defaultmap(none) for (j02 = 0; j02 < 64; j02++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l17" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l17\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l17\\)" "gimple" } } */ - #pragma omp target simd lastprivate (l17) + #pragma omp target simd lastprivate (l17) defaultmap(none) for (int i = 0; i < 64; i++) l17 = i; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l18\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l18\\)" "gimple" } } */ - #pragma omp taskloop simd lastprivate (l18) + #pragma omp taskloop simd lastprivate (l18) default(none) for (int i = 0; i < 64; i++) l18 = i; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l19\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l19\\)" "gimple" } } */ - #pragma omp teams distribute lastprivate (l19) + #pragma omp teams distribute lastprivate (l19) default(none) for (int i = 0; i < 64; i++) l19 = i; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l20\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute parallel for lastprivate (l20) + #pragma omp teams distribute parallel for lastprivate (l20) default(none) for (int i = 0; i < 64; i++) l20 = i; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l21\\)" "gimple" } } */ @@ -188,13 +188,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd lastprivate (l21) + #pragma omp teams distribute parallel for simd lastprivate (l21) default(none) for (int i = 0; i < 64; i++) l21 = i; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l22\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l22\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l22\\)" "gimple" } } */ - #pragma omp teams distribute simd lastprivate (l22) + #pragma omp teams distribute simd lastprivate (l22) default(none) for (int i = 0; i < 64; i++) l22 = i; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j03\\)" "gimple" } } */ @@ -202,7 +202,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j03\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp teams loop lastprivate (j03) + #pragma omp teams loop lastprivate (j03) default(none) for (j03 = 0; j03 < 64; j03++) ; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-3.c b/gcc/testsuite/c-c++-common/gomp/pr99928-3.c index cf9c72d..8e8cf93 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-3.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-3.c @@ -20,7 +20,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } */ - #pragma omp master taskloop firstprivate (l01) lastprivate (l01) + #pragma omp master taskloop firstprivate (l01) lastprivate (l01) default(none) for (int i = 0; i < 64; i++) l01 = i; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*firstprivate\\(l02\\)" "gimple" } } */ @@ -29,14 +29,14 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l02\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l02\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l02\\)" "gimple" } } */ - #pragma omp master taskloop simd firstprivate (l02) lastprivate (l02) + #pragma omp master taskloop simd firstprivate (l02) lastprivate (l02) default(none) for (int i = 0; i < 64; i++) l02 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } *//* FIXME. */ - #pragma omp parallel for firstprivate (l03) lastprivate (l03) + #pragma omp parallel for firstprivate (l03) lastprivate (l03) default(none) for (int i = 0; i < 64; i++) l03 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } *//* FIXME: This should be on for instead. */ @@ -45,7 +45,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } */ - #pragma omp parallel for simd firstprivate (l04) lastprivate (l04) + #pragma omp parallel for simd firstprivate (l04) lastprivate (l04) default(none) for (int i = 0; i < 64; i++) l04 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l05\\)" "gimple" } } */ @@ -53,7 +53,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l05\\)" "gimple" } } */ - #pragma omp parallel master taskloop firstprivate (l05) lastprivate (l05) + #pragma omp parallel master taskloop firstprivate (l05) lastprivate (l05) default(none) for (int i = 0; i < 64; i++) l05 = i; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l06\\)" "gimple" } } */ @@ -63,7 +63,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd firstprivate (l06) lastprivate (l06) + #pragma omp parallel master taskloop simd firstprivate (l06) lastprivate (l06) default(none) for (int i = 0; i < 64; i++) l06 = i; /* FIXME: OpenMP 5.0/5.1 broken here, conceptually it should be shared on parallel and @@ -76,7 +76,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*firstprivate\\(l07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*lastprivate\\(l07\\)" "gimple" } } */ - #pragma omp parallel sections firstprivate (l07) lastprivate (l07) + #pragma omp parallel sections firstprivate (l07) lastprivate (l07) default(none) { l07 = 1; #pragma omp section @@ -88,7 +88,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for firstprivate (l08) lastprivate (l08) + #pragma omp target parallel for firstprivate (l08) lastprivate (l08) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l08 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l09" "gimple" } } */ @@ -99,21 +99,21 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } */ - #pragma omp target parallel for simd firstprivate (l09) lastprivate (l09) + #pragma omp target parallel for simd firstprivate (l09) lastprivate (l09) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l09 = i; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l10" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } */ - #pragma omp target simd firstprivate (l10) lastprivate (l10) + #pragma omp target simd firstprivate (l10) lastprivate (l10) defaultmap(none) for (int i = 0; i < 64; i++) l10 = i; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } */ - #pragma omp taskloop simd firstprivate (l11) lastprivate (l11) + #pragma omp taskloop simd firstprivate (l11) lastprivate (l11) default(none) for (int i = 0; i < 64; i++) l11 = i; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-4.c b/gcc/testsuite/c-c++-common/gomp/pr99928-4.c index f35e734..915a865 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-4.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-4.c @@ -19,12 +19,12 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l01:1\\)" "gimple" } } */ - #pragma omp master taskloop simd linear (l01) + #pragma omp master taskloop simd linear (l01) default(none) for (int i = 0; i < 64; i++) l01++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l02\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*linear\\(l02:1\\)" "gimple" } } */ - #pragma omp parallel for linear (l02) + #pragma omp parallel for linear (l02) default(none) for (int i = 0; i < 64; i++) l02++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } *//* FIXME: This should be on for instead. */ @@ -32,7 +32,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l03:1\\)" "gimple" } } */ - #pragma omp parallel for simd linear (l03) + #pragma omp parallel for simd linear (l03) default(none) for (int i = 0; i < 64; i++) l03++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l04\\)" "gimple" } } */ @@ -41,14 +41,14 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l04:1\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd linear (l04) + #pragma omp parallel master taskloop simd linear (l04) default(none) for (int i = 0; i < 64; i++) l04++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l05" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*linear\\(l05:1\\)" "gimple" } } */ - #pragma omp target parallel for linear (l05) + #pragma omp target parallel for linear (l05) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l05++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l06" "gimple" } } */ @@ -58,19 +58,19 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l06:1\\)" "gimple" } } */ - #pragma omp target parallel for simd linear (l06) + #pragma omp target parallel for simd linear (l06) default(none) defaultmap(none) for (int i = 0; i < 64; i++) l06++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l07" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l07:1\\)" "gimple" } } */ - #pragma omp target simd linear (l07) + #pragma omp target simd linear (l07) defaultmap(none) for (int i = 0; i < 64; i++) l07++; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l08:1\\)" "gimple" } } */ - #pragma omp taskloop simd linear (l08) + #pragma omp taskloop simd linear (l08) default(none) for (int i = 0; i < 64; i++) l08++; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-5.c b/gcc/testsuite/c-c++-common/gomp/pr99928-5.c index 7405188..26da0ac 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-5.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-5.c @@ -12,7 +12,7 @@ foo (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } } */ - #pragma omp distribute parallel for simd linear (j00) + #pragma omp distribute parallel for simd linear (j00) default(none) for (j00 = 0; j00 < 64; j00++) ; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } */ @@ -35,13 +35,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } } */ - #pragma omp master taskloop simd linear (j03) + #pragma omp master taskloop simd linear (j03) default(none) for (j03 = 0; j03 < 64; j03++) ; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } } */ - #pragma omp parallel for simd linear (j04) + #pragma omp parallel for simd linear (j04) default(none) for (j04 = 0; j04 < 64; j04++) ; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } } */ @@ -49,7 +49,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd linear (j05) + #pragma omp parallel master taskloop simd linear (j05) default(none) for (j05 = 0; j05 < 64; j05++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } } */ @@ -57,13 +57,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } } */ - #pragma omp target parallel for simd linear (j06) + #pragma omp target parallel for simd linear (j06) default(none) defaultmap(none) for (j06 = 0; j06 < 64; j06++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j07:1\\)" "gimple" } } */ - #pragma omp target simd linear (j07) + #pragma omp target simd linear (j07) defaultmap(none) for (j07 = 0; j07 < 64; j07++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08" "gimple" } } */ @@ -73,7 +73,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd linear (j08) + #pragma omp target teams distribute parallel for simd linear (j08) default(none) defaultmap(none) for (j08 = 0; j08 < 64; j08++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09" "gimple" } } */ @@ -81,13 +81,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j09:1\\)" "gimple" } } */ - #pragma omp target teams distribute simd linear (j09) + #pragma omp target teams distribute simd linear (j09) default(none) defaultmap(none) for (j09 = 0; j09 < 64; j09++) ; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } } */ - #pragma omp taskloop simd linear (j10) + #pragma omp taskloop simd linear (j10) default(none) for (j10 = 0; j10 < 64; j10++) ; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } } */ @@ -95,13 +95,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd linear (j11) + #pragma omp teams distribute parallel for simd linear (j11) default(none) for (j11 = 0; j11 < 64; j11++) ; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j12:1\\)" "gimple" } } */ - #pragma omp teams distribute simd linear (j12) + #pragma omp teams distribute simd linear (j12) default(none) for (j12 = 0; j12 < 64; j12++) ; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-6.c b/gcc/testsuite/c-c++-common/gomp/pr99928-6.c index 918a97e..d37587c 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-6.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-6.c @@ -12,7 +12,7 @@ foo (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } } */ - #pragma omp distribute parallel for simd + #pragma omp distribute parallel for simd default(none) for (j00 = 0; j00 < 64; j00++) ; /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } */ @@ -35,13 +35,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } } */ - #pragma omp master taskloop simd + #pragma omp master taskloop simd default(none) for (j03 = 0; j03 < 64; j03++) ; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } } */ - #pragma omp parallel for simd + #pragma omp parallel for simd default(none) for (j04 = 0; j04 < 64; j04++) ; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } } */ @@ -49,7 +49,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd + #pragma omp parallel master taskloop simd default(none) for (j05 = 0; j05 < 64; j05++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } } */ @@ -57,13 +57,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } } */ - #pragma omp target parallel for simd + #pragma omp target parallel for simd default(none) defaultmap(none) for (j06 = 0; j06 < 64; j06++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j07:1\\)" "gimple" } } */ - #pragma omp target simd + #pragma omp target simd defaultmap(none) for (j07 = 0; j07 < 64; j07++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08" "gimple" } } */ @@ -73,7 +73,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd + #pragma omp target teams distribute parallel for simd default(none) defaultmap(none) for (j08 = 0; j08 < 64; j08++) ; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09" "gimple" } } */ @@ -81,13 +81,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j09:1\\)" "gimple" } } */ - #pragma omp target teams distribute simd + #pragma omp target teams distribute simd default(none) defaultmap(none) for (j09 = 0; j09 < 64; j09++) ; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } } */ - #pragma omp taskloop simd + #pragma omp taskloop simd default(none) for (j10 = 0; j10 < 64; j10++) ; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } } */ @@ -95,13 +95,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd + #pragma omp teams distribute parallel for simd default(none) for (j11 = 0; j11 < 64; j11++) ; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j12:1\\)" "gimple" } } */ - #pragma omp teams distribute simd + #pragma omp teams distribute simd default(none) for (j12 = 0; j12 < 64; j12++) ; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-7.c b/gcc/testsuite/c-c++-common/gomp/pr99928-7.c index 5db1101..e6e0e92 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-7.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-7.c @@ -9,7 +9,7 @@ foo (void) /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } } */ - #pragma omp distribute parallel for simd + #pragma omp distribute parallel for simd default(none) for (int j00 = 0; j00 < 64; j00++) ; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } */ @@ -30,20 +30,20 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } } */ - #pragma omp master taskloop simd + #pragma omp master taskloop simd default(none) for (int j03 = 0; j03 < 64; j03++) ; /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } } */ - #pragma omp parallel for simd + #pragma omp parallel for simd default(none) for (int j04 = 0; j04 < 64; j04++) ; /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd + #pragma omp parallel master taskloop simd default(none) for (int j05 = 0; j05 < 64; j05++) ; /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } } */ @@ -52,13 +52,13 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } } */ - #pragma omp target parallel for simd + #pragma omp target parallel for simd default(none) defaultmap(none) for (int j06 = 0; j06 < 64; j06++) ; /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*map\\(tofrom:j07" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j07:1\\)" "gimple" } } */ - #pragma omp target simd + #pragma omp target simd defaultmap(none) for (int j07 = 0; j07 < 64; j07++) ; /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*map\\(tofrom:j08" "gimple" } } */ @@ -69,7 +69,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd + #pragma omp target teams distribute parallel for simd default(none) defaultmap(none) for (int j08 = 0; j08 < 64; j08++) ; /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*map\\(tofrom:j09" "gimple" } } */ @@ -77,12 +77,12 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp teams\[^\n\r]*shared\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*lastprivate\\(j09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j09:1\\)" "gimple" } } */ - #pragma omp target teams distribute simd + #pragma omp target teams distribute simd default(none) defaultmap(none) for (int j09 = 0; j09 < 64; j09++) ; /* { dg-final { scan-tree-dump-not "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } } */ - #pragma omp taskloop simd + #pragma omp taskloop simd default(none) for (int j10 = 0; j10 < 64; j10++) ; /* { dg-final { scan-tree-dump-not "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } } */ @@ -91,13 +91,13 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd + #pragma omp teams distribute parallel for simd default(none) for (int j11 = 0; j11 < 64; j11++) ; /* { dg-final { scan-tree-dump-not "omp teams\[^\n\r]*shared\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*lastprivate\\(j12\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j12:1\\)" "gimple" } } */ - #pragma omp teams distribute simd + #pragma omp teams distribute simd default(none) for (int j12 = 0; j12 < 64; j12++) ; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-8.c b/gcc/testsuite/c-c++-common/gomp/pr99928-8.c index 27e6ad1..ad36f3e 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-8.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-8.c @@ -12,14 +12,14 @@ foo (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } *//* FIXME. */ - #pragma omp distribute parallel for reduction(+:r00) + #pragma omp distribute parallel for reduction(+:r00) default(none) for (int i = 0; i < 64; i++) r00++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } */ - #pragma omp distribute parallel for simd reduction(+:r01) + #pragma omp distribute parallel for simd reduction(+:r01) default(none) for (int i = 0; i < 64; i++) r01++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r02\\)" "gimple" } } */ @@ -42,53 +42,53 @@ bar (void) r03++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:r04\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:r04\\)" "gimple" } } */ - #pragma omp master taskloop reduction(+:r04) + #pragma omp master taskloop reduction(+:r04) default(none) for (int i = 0; i < 64; i++) r04++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:r05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:r05\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r05\\)" "gimple" } } */ - #pragma omp master taskloop simd reduction(+:r05) + #pragma omp master taskloop simd reduction(+:r05) default(none) for (int i = 0; i < 64; i++) r05++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } *//* FIXME. */ - #pragma omp parallel for reduction(+:r06) + #pragma omp parallel for reduction(+:r06) default(none) for (int i = 0; i < 64; i++) r06++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } */ - #pragma omp parallel for simd reduction(+:r07) + #pragma omp parallel for simd reduction(+:r07) default(none) for (int i = 0; i < 64; i++) r07++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp parallel loop reduction(+:r08) + #pragma omp parallel loop reduction(+:r08) default(none) for (int i = 0; i < 64; i++) r08++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r09\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:r09\\)" "gimple" } } */ - #pragma omp parallel master reduction(+:r09) + #pragma omp parallel master reduction(+:r09) default(none) r09++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:r10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:r10\\)" "gimple" } } */ - #pragma omp parallel master taskloop reduction(+:r10) + #pragma omp parallel master taskloop reduction(+:r10) default(none) for (int i = 0; i < 64; i++) r10++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:r11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:r11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r11\\)" "gimple" } } */ - #pragma omp parallel master taskloop simd reduction(+:r11) + #pragma omp parallel master taskloop simd reduction(+:r11) default(none) for (int i = 0; i < 64; i++) r11++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } *//* FIXME: This should be on sections instead. */ /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } */ - #pragma omp parallel sections reduction(+:r12) + #pragma omp parallel sections reduction(+:r12) default(none) { r12++; #pragma omp section @@ -97,13 +97,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r13" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r13\\)" "gimple" } } */ - #pragma omp target parallel reduction(+:r13) + #pragma omp target parallel reduction(+:r13) default(none) defaultmap(none) r13++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r14" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r14\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for reduction(+:r14) + #pragma omp target parallel for reduction(+:r14) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r14++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r15" "gimple" } } */ @@ -111,7 +111,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } */ - #pragma omp target parallel for simd reduction(+:r15) + #pragma omp target parallel for simd reduction(+:r15) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r15++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r16" "gimple" } } */ @@ -119,19 +119,19 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target parallel loop reduction(+:r16) + #pragma omp target parallel loop reduction(+:r16) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r16++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r17" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r17\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r17\\)" "gimple" } } */ - #pragma omp target teams reduction(+:r17) + #pragma omp target teams reduction(+:r17) default(none) defaultmap(none) r17++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r18" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r18\\)" "gimple" } } */ - #pragma omp target teams distribute reduction(+:r18) + #pragma omp target teams distribute reduction(+:r18) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r18++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r19" "gimple" } } */ @@ -140,7 +140,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute parallel for reduction(+:r19) + #pragma omp target teams distribute parallel for reduction(+:r19) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r19++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r20" "gimple" } } */ @@ -150,7 +150,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } */ - #pragma omp target teams distribute parallel for simd reduction(+:r20) + #pragma omp target teams distribute parallel for simd reduction(+:r20) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r20++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r21" "gimple" } } */ @@ -158,7 +158,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r21\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r21\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r21\\)" "gimple" } } */ - #pragma omp target teams distribute simd reduction(+:r21) + #pragma omp target teams distribute simd reduction(+:r21) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r21++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r22" "gimple" } } */ @@ -168,30 +168,30 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r22\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target teams loop reduction(+:r22) + #pragma omp target teams loop reduction(+:r22) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r22++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r23" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r23\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r23\\)" "gimple" } } */ - #pragma omp target simd reduction(+:r23) + #pragma omp target simd reduction(+:r23) defaultmap(none) for (int i = 0; i < 64; i++) r23++; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:r24\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r24\\)" "gimple" } } */ - #pragma omp taskloop simd reduction(+:r24) + #pragma omp taskloop simd reduction(+:r24) default(none) for (int i = 0; i < 64; i++) r24++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r25\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r25\\)" "gimple" } } */ - #pragma omp teams distribute reduction(+:r25) + #pragma omp teams distribute reduction(+:r25) default(none) for (int i = 0; i < 64; i++) r25++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute parallel for reduction(+:r26) + #pragma omp teams distribute parallel for reduction(+:r26) default(none) for (int i = 0; i < 64; i++) r26++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } */ @@ -199,13 +199,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } */ - #pragma omp teams distribute parallel for simd reduction(+:r27) + #pragma omp teams distribute parallel for simd reduction(+:r27) default(none) for (int i = 0; i < 64; i++) r27++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r28\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r28\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r28\\)" "gimple" } } */ - #pragma omp teams distribute simd reduction(+:r28) + #pragma omp teams distribute simd reduction(+:r28) default(none) for (int i = 0; i < 64; i++) r28++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r29\\)" "gimple" } } */ @@ -213,7 +213,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r29\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp teams loop reduction(+:r29) + #pragma omp teams loop reduction(+:r29) default(none) for (int i = 0; i < 64; i++) r29++; } diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-9.c b/gcc/testsuite/c-c++-common/gomp/pr99928-9.c index 8623527..a7d970a 100644 --- a/gcc/testsuite/c-c++-common/gomp/pr99928-9.c +++ b/gcc/testsuite/c-c++-common/gomp/pr99928-9.c @@ -12,14 +12,14 @@ foo (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r00 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r00 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r00 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp distribute parallel for reduction(+:r00[1:2]) + #pragma omp distribute parallel for reduction(+:r00[1:2]) default(none) for (int i = 0; i < 64; i++) r00[1]++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r01 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r01 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r01 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r01 \\+ 4" "gimple" } } */ - #pragma omp distribute parallel for simd reduction(+:r01[1:2]) + #pragma omp distribute parallel for simd reduction(+:r01[1:2]) default(none) for (int i = 0; i < 64; i++) r01[1]++; /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r02 \\+ 4" "gimple" } } */ @@ -42,53 +42,53 @@ bar (void) r03[1]++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r04 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r04 \\+ 4" "gimple" } } */ - #pragma omp master taskloop reduction(+:r04[1:2]) + #pragma omp master taskloop reduction(+:r04[1:2]) default(none) for (int i = 0; i < 64; i++) r04[1]++; /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r05 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r05 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r05 \\+ 4" "gimple" } } */ - #pragma omp master taskloop simd reduction(+:r05[1:2]) + #pragma omp master taskloop simd reduction(+:r05[1:2]) default(none) for (int i = 0; i < 64; i++) r05[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r06 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r06 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp parallel for reduction(+:r06[1:2]) + #pragma omp parallel for reduction(+:r06[1:2]) default(none) for (int i = 0; i < 64; i++) r06[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r07 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r07 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r07 \\+ 4" "gimple" } } */ - #pragma omp parallel for simd reduction(+:r07[1:2]) + #pragma omp parallel for simd reduction(+:r07[1:2]) default(none) for (int i = 0; i < 64; i++) r07[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r08\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r08 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r08 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp parallel loop reduction(+:r08[1:2]) + #pragma omp parallel loop reduction(+:r08[1:2]) default(none) for (int i = 0; i < 64; i++) r08[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r09 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r09 \\+ 4" "gimple" } } */ - #pragma omp parallel master reduction(+:r09[1:2]) + #pragma omp parallel master reduction(+:r09[1:2]) default(none) r09[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r10\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r10 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r10 \\+ 4" "gimple" } } */ - #pragma omp parallel master taskloop reduction(+:r10[1:2]) + #pragma omp parallel master taskloop reduction(+:r10[1:2]) default(none) for (int i = 0; i < 64; i++) r10[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r11\\)" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r11 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r11 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r11 \\+ 4" "gimple" } } */ - #pragma omp parallel master taskloop simd reduction(+:r11[1:2]) + #pragma omp parallel master taskloop simd reduction(+:r11[1:2]) default(none) for (int i = 0; i < 64; i++) r11[1]++; /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r12 \\+ 4" "gimple" } } *//* FIXME: This should be on sections instead. */ /* { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r12 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump-not "omp section \[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r12 \\+ 4" "gimple" } } */ - #pragma omp parallel sections reduction(+:r12[1:2]) + #pragma omp parallel sections reduction(+:r12[1:2]) default(none) { r12[1]++; #pragma omp section @@ -97,13 +97,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r13\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r13\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r13 \\+ 4" "gimple" } } */ - #pragma omp target parallel reduction(+:r13[1:2]) + #pragma omp target parallel reduction(+:r13[1:2]) default(none) defaultmap(none) r13[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r14\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r14" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r14 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r14 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp target parallel for reduction(+:r14[1:2]) + #pragma omp target parallel for reduction(+:r14[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r14[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r15\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -111,7 +111,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r15 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r15 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r15 \\+ 4" "gimple" } } */ - #pragma omp target parallel for simd reduction(+:r15[1:2]) + #pragma omp target parallel for simd reduction(+:r15[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r15[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r16\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -119,19 +119,19 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r16\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r16 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r16 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target parallel loop reduction(+:r16[1:2]) + #pragma omp target parallel loop reduction(+:r16[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r16[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r17\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r17\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r17 \\+ 4" "gimple" } } */ - #pragma omp target teams reduction(+:r17[1:2]) + #pragma omp target teams reduction(+:r17[1:2]) default(none) defaultmap(none) r17[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r18\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r18\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r18 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r18 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute reduction(+:r18[1:2]) + #pragma omp target teams distribute reduction(+:r18[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r18[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r19\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -140,7 +140,7 @@ bar (void) /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r19 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r19 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r19 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp target teams distribute parallel for reduction(+:r19[1:2]) + #pragma omp target teams distribute parallel for reduction(+:r19[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r19[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r20\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -150,7 +150,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r20 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r20 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r20 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute parallel for simd reduction(+:r20[1:2]) + #pragma omp target teams distribute parallel for simd reduction(+:r20[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r20[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r21\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -158,7 +158,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r21 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r21 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r21 \\+ 4" "gimple" } } */ - #pragma omp target teams distribute simd reduction(+:r21[1:2]) + #pragma omp target teams distribute simd reduction(+:r21[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r21[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r22\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ @@ -168,30 +168,30 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r22\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r22 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r22 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp target teams loop reduction(+:r22[1:2]) + #pragma omp target teams loop reduction(+:r22[1:2]) default(none) defaultmap(none) for (int i = 0; i < 64; i++) r22[1]++; /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r23\\\[1\\\] \\\[len: 8\\\]" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r23\\)" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r23 \\+ 4" "gimple" } } */ - #pragma omp target simd reduction(+:r23[1:2]) + #pragma omp target simd reduction(+:r23[1:2]) defaultmap(none) for (int i = 0; i < 64; i++) r23[1]++; /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r24 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r24 \\+ 4" "gimple" } } */ - #pragma omp taskloop simd reduction(+:r24[1:2]) + #pragma omp taskloop simd reduction(+:r24[1:2]) default(none) for (int i = 0; i < 64; i++) r24[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r25 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r25 \\+ 4" "gimple" } } */ - #pragma omp teams distribute reduction(+:r25[1:2]) + #pragma omp teams distribute reduction(+:r25[1:2]) default(none) for (int i = 0; i < 64; i++) r25[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r26 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r26 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r26 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r26 \\+ 4" "gimple" } } *//* FIXME. */ - #pragma omp teams distribute parallel for reduction(+:r26[1:2]) + #pragma omp teams distribute parallel for reduction(+:r26[1:2]) default(none) for (int i = 0; i < 64; i++) r26[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r27 \\+ 4" "gimple" } } */ @@ -199,13 +199,13 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r27 \\+ 4" "gimple" } } *//* FIXME: This should be on for instead. */ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r27 \\+ 4" "gimple" } } *//* FIXME. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r27 \\+ 4" "gimple" } } */ - #pragma omp teams distribute parallel for simd reduction(+:r27[1:2]) + #pragma omp teams distribute parallel for simd reduction(+:r27[1:2]) default(none) for (int i = 0; i < 64; i++) r27[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r28 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r28 \\+ 4" "gimple" } } */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r28 \\+ 4" "gimple" } } */ - #pragma omp teams distribute simd reduction(+:r28[1:2]) + #pragma omp teams distribute simd reduction(+:r28[1:2]) default(none) for (int i = 0; i < 64; i++) r28[1]++; /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r29\\)" "gimple" } } */ @@ -213,7 +213,7 @@ bar (void) /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r29\\)" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r29 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:MEM\[^\n\r]*&r29 \\+ 4" "gimple" } } *//* NOTE: This is implementation detail. */ - #pragma omp teams loop reduction(+:r29[1:2]) + #pragma omp teams loop reduction(+:r29[1:2]) default(none) for (int i = 0; i < 64; i++) r29[1]++; } diff --git a/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c b/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c new file mode 100644 index 0000000..c864736 --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c @@ -0,0 +1,49 @@ +/* { dg-do run } */ + +typedef long v4di __attribute__((vector_size(4 * sizeof (long)))); +typedef int v4si __attribute__((vector_size(4 * sizeof (int)))); +typedef int v8si __attribute__((vector_size(8 * sizeof (int)))); + +v4si res[5], a, b; +v4di resl, al, bl; +v8si res8[3], a8, b8; +void __attribute__((noipa)) +foo (void) +{ + res[0] = __builtin_shufflevector (a, b, 0, 1, 4, 5); + res[1] = __builtin_shufflevector (a, b, 0, 1, -1, 5); + res8[0] = __builtin_shufflevector (a, b, 0, 1, 2, 2 + 1, 4, 5, 6, 7); + res[2] = __builtin_shufflevector (a8, b8, 0, 8, 1, 9); + res[3] = __builtin_shufflevector (a8, b, 0, 8, 1, 9); + res[4] = __builtin_shufflevector (a, b8, 0, 4, 1, 5); + res8[1] = __builtin_shufflevector (a8, b, 0, 8, 1, 9, 10, 11, 2, 3); + res8[2] = __builtin_shufflevector (a, b8, 0, 4, 1, 5, -1, -1, -1, -1); +} + +#define comp(a, b, n) \ + for (unsigned i = 0; i < n; ++i) \ + if ((a)[i] != (b)[i]) \ + __builtin_abort (); + +int main() +{ + a = (v4si) { 0, 1, 2, 3 }; + b = (v4si) { 4, 5, 6, 7 }; + a8 = (v8si) { 0, 1, 2, 3, 4, 5, 6, 7 }; + b8 = (v8si) { 8, 9, 10, 11, 12, 13, 14, 15 }; + foo (); + comp (res[0], ((v4si) { 0, 1, 4, 5}), 4) + res[1][2] = 9; + comp (res[1], ((v4si) { 0, 1, 9, 5}), 4) + comp (res8[0], ((v8si) { 0, 1, 2, 3, 4, 5, 6, 7 }), 8) + comp (res[2], ((v4si) { 0, 8, 1, 9}), 4) + comp (res[3], ((v4si) { 0, 4, 1, 5}), 4) + comp (res[4], ((v4si) { 0, 8, 1, 9}), 4) + comp (res8[1], ((v8si) { 0, 4, 1, 5, 6, 7, 2, 3 }), 8) + res8[2][4] = 42; + res8[2][5] = 42; + res8[2][6] = 42; + res8[2][7] = 42; + comp (res8[2], ((v8si) { 0, 8, 1, 9, 42, 42, 42, 42 }), 8) + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C new file mode 100644 index 0000000..da838e8 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C @@ -0,0 +1,18 @@ +// { dg-do compile { target c++11 } } + +template <typename T1, typename T2, int ...args> +struct shufflevector +{ + static auto shuffle (T1 a, T2 b) + -> decltype (__builtin_shufflevector (a, b, args...)) + { + return __builtin_shufflevector (a, b, args...); + } +}; + +typedef int v4si __attribute__((vector_size (16))); +v4si a, b, c; +int main() +{ + c = shufflevector<v4si, v4si, 0, 1, 4, 5>::shuffle (a, b); +} diff --git a/gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C new file mode 100644 index 0000000..c8d096c --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C @@ -0,0 +1,12 @@ +// { dg-do compile } + +typedef double v2df __attribute__((vector_size(2 * sizeof (double)))); + +template<typename T, typename U, int N, int M> +struct Shuffle { + void f(T t, U u, v2df a, v2df b) { + (void)__builtin_shufflevector(t, u, N, M); // { dg-error "invalid" } + } +}; + +template struct Shuffle<v2df, v2df, 4, 3>; diff --git a/gcc/testsuite/g++.dg/inherit/virtual15.C b/gcc/testsuite/g++.dg/inherit/virtual15.C new file mode 100644 index 0000000..ebd8e3a --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/virtual15.C @@ -0,0 +1,18 @@ +// PR c++/100797 +// { dg-do run } + +bool ok = false; +struct S1 { virtual ~S1() {} }; +struct S2 { virtual void f1() = 0; }; +struct S3: S1, S2 { + void f1() { f2(); } + virtual void f2() = 0; +}; +struct S4: S3 { + void f2() { ok = true; } + using S2::f1; +}; +int main() { + S4().f1(); + if (!ok) __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/inherit/virtual15a.C b/gcc/testsuite/g++.dg/inherit/virtual15a.C new file mode 100644 index 0000000..6139385 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/virtual15a.C @@ -0,0 +1,19 @@ +// PR c++/100797 plus diamond inheritance +// { dg-do run } + +bool ok = false; +struct S1 { virtual ~S1() {} }; +struct S2 { virtual void f1() = 0; }; +struct S3: S1, virtual S2 { + void f1() { f2(); } + virtual void f2() = 0; +}; +struct SX: virtual S2 { }; +struct S4: SX, S3 { + void f2() { ok = true; } + using S2::f1; +}; +int main() { + S4().f1(); + if (!ok) __builtin_abort (); +} diff --git a/gcc/testsuite/g++.target/powerpc/pr99842.C b/gcc/testsuite/g++.target/powerpc/pr99842.C new file mode 100644 index 0000000..922450e --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/pr99842.C @@ -0,0 +1,188 @@ +/* PR target/99842 */ +/* { dg-require-effective-target power10_ok } */ +/* { dg-options "-O3 -mdejagnu-cpu=power10 -Wno-return-type" } */ + +/* Verify we do not ICE on the following noisy creduced test case. */ + +enum { a, b, c, d }; +template <typename> struct e; +template <typename g, typename h, typename k> struct e<g(h, k)> { + typedef h f; +}; +template <typename> struct ac; +template <typename ab> struct ac<const ab> : ac<ab> {}; +template <typename> struct l; +template <typename, int, int m, int = 0, int = a, int = m> class n; +template <typename> class o; +template <typename, typename, typename> class ag; +template <typename, typename, int = c> class af; +template <typename> struct ad; +template <typename ab> struct an { + typedef n<typename ab ::ah, ac<ab>::ai, ac<ab>::aj> f; +}; +template <typename al> struct am { typedef o<al> f; }; +template <typename al, typename = typename ac<al>::ao, + typename = typename ac<al>::av> +struct ak; +template <typename al, typename ao> struct ak<al, ao, int> { + typedef typename am<al>::f f; +}; +template <typename, typename, typename> struct aq; +template <typename ar, typename as> struct aq<ar, ar, as> { typedef ar at; }; +template <typename ap> ap bf(const typename ad<ap>::f *); +template <typename ap, int> ap aw(typename ad<ap>::f *ax) { return bf<ap>(ax); } +typedef __attribute__((altivec(vector__))) double au; +template <> struct ad<au> { typedef double f; }; +template <> au bf(const double *ax) { return __builtin_vec_vsx_ld(0, ax); } +template <typename> struct az {}; +template <typename al> class o : public l<al> { +public: + typedef typename ac<al>::ah ah; + template <typename ay> al &operator+=(const o<ay> &); +}; +template <typename> struct l {}; +template <typename ba, typename bb, int bd> struct ac<af<ba, bb, bd>> { + typedef typename ba::ah ah; + enum { ai, aj }; +}; +template <typename, typename, int bd> +class af + : public ak< + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, + n<double, -1, 1, 3>, bd>, + int, int>::f {}; +template <typename, typename, typename> struct be; +template <typename bj, typename bg, typename g> void bi(bj, bg bm, g) { + typename an<bg>::f bk(bm); +} +template <typename bj, typename bg, typename g> void bl(bj, bg bm, g bp) { + be<bj, bg, g>::bn(a, bm, bp); +} +template <typename, typename, typename, typename> struct bo; +class bs { +public: + bs(double *, int); + double &operator()(int, int) { return bq[br]; } + template <typename bw, int> bw bt(int i, int j) { + double &bu = operator()(i, j); + return aw<bw, b>(&bu); + } + double *bq; + int br; +}; +class ca : public bs { +public: + ca(double *by, int bz) : bs(by, bz) {} +}; +template <typename al> class ce : public am<al>::f { +protected: + template <typename ay> void cb(l<ay>) { + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, + n<double, -1, 1, 3>> + cc; + bl(0, cc, az<typename ay::ah>()); + } + template <typename> void ch(long); + template <typename ay> void ch(l<ay> cf) { cb(cf); } +}; +template <typename cg, int aa, int m, int cl, int ci, int cj> +struct ac<n<cg, aa, m, cl, ci, cj>> { + typedef cg ah; + typedef int av; +}; +template <typename cg, int, int m, int, int, int> +class n : public ce<n<cg, m, c>> { +public: + template <typename ab> n(ab p) { n::template ch<ab>(p); } +}; +template <typename bc, typename ba, typename bb> struct ac<ag<bc, ba, bb>> { + typedef ba ao; + typedef typename e<bc(typename ba::ah, typename bb::ah)>::f ah; + typedef typename aq<typename ac<ba>::av, typename ac<bb>::av, bc>::at av; +}; +template <typename> class cm; +template <typename, typename r, typename cs> +class ag + : public cm<typename aq<typename ac<r>::av, typename ac<cs>::av, int>::at> { +}; +template <typename> +class cm : public ak<ag<int, n<double, 1, 1>, n<double, 1, 1>>>::f {}; +template <typename al> +template <typename ay> +al &o<al>::operator+=(const o<ay> &) { + af<ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, + n<double, -1, 1, 3>> + co; + bi(0, co, int()); +} +enum { cp }; +template <int> struct cq; +template <typename> struct cr { + enum { q }; + enum { ae = cq<q>::at }; +}; +template <> struct cq<cp> { + enum { at = d }; +}; +struct t { + template <typename ba, typename bb, typename s> static void bn(ba, bb, s) { + typedef typename bb::ah x; + x u; + bo<long, ca, x, ca>::bn(0, 0, ca(0, 0), ca(&u, 1), 0, 0, 0); + } +}; +template <typename, typename bb, int = cr<bb>::ae> struct cu; +template <typename cd, typename ba, typename bb, int ct, typename ah> +struct be<cd, af<ba, bb, ct>, az<ah>> { + static void bn(cd, af<ba, bb> bm, az<ah>) { + ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>> da; + cu<ba, bb>::cv(c, da, bm); + } +}; +template <typename al> struct cw { + template <typename bj> + static void + cv(bj, ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>>, + n<double, -1, 1, 3> bx) { + double alpha; + ag<int, const n<double, -1, -1, 3>, const n<double, -1, -1, 3>> bh; + al::cx(c, bh, bx, alpha); + } +}; +template <typename ba, typename bb> struct cu<ba, bb, d> : cw<cu<ba, bb>> { + template <typename s> static void cx(s, ba, bb bx, typename af<ba, bb>::ah) { + ba cz; + t::bn(cz, bx, c); + } +}; +template <typename dj, typename, bool> +void db(__vector_quad *, __vector_pair &, dj); +template <typename, typename, typename, typename, typename, typename, int> +void dc(ca alhs) { + typedef au dj; + typedef au dd; + ca bh(alhs); + enum { de }; + __vector_quad df, dg; + int j; + dd v; + __vector_pair dh; + __builtin_mma_assemble_pair( + &dh, (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j), + (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j)); + db<dj, dd, true>(&df, dh, v); + __vector_pair di; + __builtin_mma_assemble_pair( + &di, (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j), + (__attribute__((altivec(vector__))) char)bh.bt<dj, de>(0, j)); + db<dj, dd, true>(&dg, di, v); +} +template <typename bv, typename w, typename cy> struct bo<bv, w, double, cy> { + static void bn(bv, bv, w bh, cy, double, bv, double) { + dc<bv, double, w, double, cy, double, d>(bh); + } +}; +void dm() { + n<double, 1, 1> dk(1), y(0); + y += dk; +} diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-55.c b/gcc/testsuite/gcc.dg/Wstringop-overflow-55.c index c3c2dbe..5f83af7 100644 --- a/gcc/testsuite/gcc.dg/Wstringop-overflow-55.c +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-55.c @@ -66,7 +66,7 @@ void warn_ptrdiff_anti_range_add (ptrdiff_t i) { i |= 1; - char ca5[5]; // { dg-message "at offset \\\[1, 5]" "pr?????" } + char ca5[5]; // { dg-message "at offset \\\[1, 5]" "pr?????" { xfail *-*-* } } char *p0 = ca5; // offset char *p1 = p0 + i; // 1-5 char *p2 = p1 + i; // 2-5 @@ -74,7 +74,7 @@ void warn_ptrdiff_anti_range_add (ptrdiff_t i) char *p4 = p3 + i; // 4-5 char *p5 = p4 + i; // 5 - memset (p5, 0, 5); // { dg-warning "writing 5 bytes into a region of size" "pr?????" } + memset (p5, 0, 5); // { dg-warning "writing 5 bytes into a region of size 0" "pr?????" { xfail *-*-* } } sink (p0, p1, p2, p3, p4, p5); } @@ -83,7 +83,7 @@ void warn_int_anti_range (int i) { i |= 1; - char ca5[5]; // { dg-message "at offset \\\[1, 5]" "pr?????" } + char ca5[5]; // { dg-message "at offset \\\[1, 5]" "pr?????" { xfail *-*-* } } char *p0 = ca5; // offset char *p1 = p0 + i; // 1-5 char *p2 = p1 + i; // 2-5 @@ -91,7 +91,7 @@ void warn_int_anti_range (int i) char *p4 = p3 + i; // 4-5 char *p5 = p4 + i; // 5 - memset (p5, 0, 5); // { dg-warning "writing 5 bytes into a region of size" "pr?????" } + memset (p5, 0, 5); // { dg-warning "writing 5 bytes into a region of size 0" "pr?????" { xfail *-*-* } } sink (p0, p1, p2, p3, p4, p5); } diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c index 71e6740..ac72503 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c @@ -115,6 +115,8 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; + global_dc->caret_max_width = 80; + register_callback (plugin_name, PLUGIN_PRE_GENERICIZE, callback, diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c index 49b78cc..02c4629 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c @@ -169,6 +169,8 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; + global_dc->caret_max_width = 80; + pass_info.pass = new pass_test_inlining (g); pass_info.reference_pass_name = "*warn_function_noreturn"; pass_info.ref_pass_instance_number = 1; diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c index 7672875..5c2da02 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c @@ -450,6 +450,8 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; + global_dc->caret_max_width = 80; + pass_info.pass = make_pass_test_show_path (g); pass_info.reference_pass_name = "whole-program"; pass_info.ref_pass_instance_number = 1; diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.c index cf99697..aa73dca 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.c @@ -208,6 +208,8 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; + global_dc->caret_max_width = 80; + pass_info.pass = new pass_test_string_literals (g); pass_info.reference_pass_name = "ssa"; pass_info.ref_pass_instance_number = 1; diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c index 89cc95a..4a89d84 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c @@ -89,6 +89,8 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; + global_dc->caret_max_width = 130; + register_callback (plugin_name, PLUGIN_PRE_GENERICIZE, callback, diff --git a/gcc/testsuite/gcc.dg/pr80776-1.c b/gcc/testsuite/gcc.dg/pr80776-1.c index f3a120b..af41c0c 100644 --- a/gcc/testsuite/gcc.dg/pr80776-1.c +++ b/gcc/testsuite/gcc.dg/pr80776-1.c @@ -17,5 +17,7 @@ Foo (void) __builtin_unreachable (); if (! (0 <= i && i <= 999999)) __builtin_unreachable (); - sprintf (number, "%d", i); /* { dg-bogus "writing" "" } */ + /* The correctness bits for [E]VRP cannot handle chained conditionals + when deciding to ignore a unreachable branch for setting SSA range info. */ + sprintf (number, "%d", i); /* { dg-bogus "writing" "" { xfail *-*-* } } */ } diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c new file mode 100644 index 0000000..9f8b7ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_double } */ + +double foo (int x, double *p) +{ + double res = p[0] + p[1]; + double tem = p[0] / x; + if (x) + { + p[0] = tem; + p[1] /= x; + } + return res + tem; +} + +/* We may not SLP vectorize the FP division because it can trap and it + is distributed between two basic-blocks. */ +/* { dg-final { scan-tree-dump "Build SLP failed: different BB for PHI or possibly trapping operation in _\[0-9\]+ = _\[0-9\]+ / _\[0-9\]+;" "slp2" } } */ diff --git a/gcc/tree-iterator.h b/gcc/tree-iterator.h index 076fff8..a72d0d3 100644 --- a/gcc/tree-iterator.h +++ b/gcc/tree-iterator.h @@ -1,4 +1,4 @@ -/* Iterator routines for manipulating GENERIC tree statement list. +/* Iterator routines for manipulating GENERIC tree statement list. -*- C++ -*- Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Andrew MacLeod <amacleod@redhat.com> @@ -32,6 +32,21 @@ along with GCC; see the file COPYING3. If not see struct tree_stmt_iterator { struct tree_statement_list_node *ptr; tree container; + + /* No need for user-defined constructors, the implicit definitions (or + aggregate initialization) are fine. */ + + bool operator== (tree_stmt_iterator b) const + { return b.ptr == ptr && b.container == container; } + bool operator!= (tree_stmt_iterator b) const { return !(*this == b); } + tree_stmt_iterator &operator++ () { ptr = ptr->next; return *this; } + tree_stmt_iterator &operator-- () { ptr = ptr->prev; return *this; } + tree_stmt_iterator operator++ (int) + { tree_stmt_iterator x = *this; ++*this; return x; } + tree_stmt_iterator operator-- (int) + { tree_stmt_iterator x = *this; --*this; return x; } + tree &operator* () { return ptr->stmt; } + tree operator* () const { return ptr->stmt; } }; static inline tree_stmt_iterator @@ -71,27 +86,38 @@ tsi_one_before_end_p (tree_stmt_iterator i) static inline void tsi_next (tree_stmt_iterator *i) { - i->ptr = i->ptr->next; + ++(*i); } static inline void tsi_prev (tree_stmt_iterator *i) { - i->ptr = i->ptr->prev; + --(*i); } static inline tree * tsi_stmt_ptr (tree_stmt_iterator i) { - return &i.ptr->stmt; + return &(*i); } static inline tree tsi_stmt (tree_stmt_iterator i) { - return i.ptr->stmt; + return *i; } +/* Make tree_stmt_iterator work as a C++ range, e.g. + for (tree stmt : tsi_range (stmt_list)) { ... } */ +class tsi_range +{ + tree t; + public: + tsi_range (tree t): t(t) { } + tree_stmt_iterator begin() const { return tsi_start (t); } + tree_stmt_iterator end() const { return { nullptr, t }; } +}; + enum tsi_iterator_update { TSI_NEW_STMT, /* Only valid when single statement is added, move diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c index 984b1e2..e0522bf 100644 --- a/gcc/tree-streamer-in.c +++ b/gcc/tree-streamer-in.c @@ -333,7 +333,7 @@ unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr) DECL_IS_NOVOPS (expr) = (unsigned) bp_unpack_value (bp, 1); DECL_IS_RETURNS_TWICE (expr) = (unsigned) bp_unpack_value (bp, 1); DECL_IS_MALLOC (expr) = (unsigned) bp_unpack_value (bp, 1); - DECL_SET_IS_OPERATOR_NEW (expr, (unsigned) bp_unpack_value (bp, 1)); + FUNCTION_DECL_DECL_TYPE (expr) = (function_decl_type) bp_unpack_value (bp, 2); DECL_SET_IS_OPERATOR_DELETE (expr, (unsigned) bp_unpack_value (bp, 1)); DECL_DECLARED_INLINE_P (expr) = (unsigned) bp_unpack_value (bp, 1); DECL_STATIC_CHAIN (expr) = (unsigned) bp_unpack_value (bp, 1); diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c index 1a43534..855d1cd 100644 --- a/gcc/tree-streamer-out.c +++ b/gcc/tree-streamer-out.c @@ -298,7 +298,7 @@ pack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr) bp_pack_value (bp, DECL_IS_NOVOPS (expr), 1); bp_pack_value (bp, DECL_IS_RETURNS_TWICE (expr), 1); bp_pack_value (bp, DECL_IS_MALLOC (expr), 1); - bp_pack_value (bp, DECL_IS_OPERATOR_NEW_P (expr), 1); + bp_pack_value (bp, FUNCTION_DECL_DECL_TYPE (expr), 2); bp_pack_value (bp, DECL_IS_OPERATOR_DELETE_P (expr), 1); bp_pack_value (bp, DECL_DECLARED_INLINE_P (expr), 1); bp_pack_value (bp, DECL_STATIC_CHAIN (expr), 1); diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 0ec92b0..ca1539e 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1214,14 +1214,14 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap, } } - if (phi_p + if ((phi_p || gimple_could_trap_p (stmt_info->stmt)) && (gimple_bb (first_stmt_info->stmt) != gimple_bb (stmt_info->stmt))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "Build SLP failed: different BB for PHI " - "in %G", stmt); + "or possibly trapping operation in %G", stmt); /* Mismatch. */ continue; } @@ -3111,7 +3111,7 @@ set_function_decl_type (tree decl, function_decl_type t, bool set) { gcc_assert (FUNCTION_DECL_DECL_TYPE (decl) == NONE || FUNCTION_DECL_DECL_TYPE (decl) == t); - decl->function_decl.decl_type = t; + FUNCTION_DECL_DECL_TYPE (decl) = t; } else if (FUNCTION_DECL_DECL_TYPE (decl) == t) FUNCTION_DECL_DECL_TYPE (decl) = NONE; @@ -3126,7 +3126,7 @@ set_function_decl_type (tree decl, function_decl_type t, bool set) C++ operator new, meaning that it returns a pointer for which we should not use type based aliasing. */ #define DECL_IS_OPERATOR_NEW_P(NODE) \ - (FUNCTION_DECL_CHECK (NODE)->function_decl.decl_type == OPERATOR_NEW) + (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == OPERATOR_NEW) #define DECL_IS_REPLACEABLE_OPERATOR_NEW_P(NODE) \ (DECL_IS_OPERATOR_NEW_P (NODE) && DECL_IS_REPLACEABLE_OPERATOR (NODE)) @@ -3137,7 +3137,7 @@ set_function_decl_type (tree decl, function_decl_type t, bool set) /* Nonzero in a FUNCTION_DECL means this function should be treated as C++ operator delete. */ #define DECL_IS_OPERATOR_DELETE_P(NODE) \ - (FUNCTION_DECL_CHECK (NODE)->function_decl.decl_type == OPERATOR_DELETE) + (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == OPERATOR_DELETE) #define DECL_SET_IS_OPERATOR_DELETE(NODE, VAL) \ set_function_decl_type (FUNCTION_DECL_CHECK (NODE), OPERATOR_DELETE, VAL) @@ -3288,7 +3288,7 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree); /* In FUNCTION_DECL, this is set if this function is a lambda function. */ #define DECL_LAMBDA_FUNCTION_P(NODE) \ - (FUNCTION_DECL_CHECK (NODE)->function_decl.decl_type == LAMBDA_FUNCTION) + (FUNCTION_DECL_DECL_TYPE (FUNCTION_DECL_CHECK (NODE)) == LAMBDA_FUNCTION) #define DECL_SET_LAMBDA_FUNCTION(NODE, VAL) \ set_function_decl_type (FUNCTION_DECL_CHECK (NODE), LAMBDA_FUNCTION, VAL) |