From f838e3ccf8d2849980e9d0f70aa60ecd2eb5772c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 27 May 2021 23:54:52 -0400 Subject: c++: 'this' adjustment for devirtualized call My patch for 95719 made us do a better job of finding the actual virtual function we want to call, but didn't update the 'this' pointer adjustment to match. PR c++/100797 PR c++/95719 gcc/cp/ChangeLog: * call.c (build_over_call): Adjust base_binfo in resolves_to_fixed_type_p case. gcc/testsuite/ChangeLog: * g++.dg/inherit/virtual15.C: New test. --- gcc/cp/call.c | 22 ++++++++++++++++++---- gcc/testsuite/g++.dg/inherit/virtual15.C | 18 ++++++++++++++++++ gcc/testsuite/g++.dg/inherit/virtual15a.C | 19 +++++++++++++++++++ 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/inherit/virtual15.C create mode 100644 gcc/testsuite/g++.dg/inherit/virtual15a.C (limited to 'gcc') 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/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 (); +} -- cgit v1.1 From f7a07f5a5d8065e7f11133dd1f4ad3510ab2195b Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 28 May 2021 14:26:06 +0200 Subject: tree-optimization/100778 - avoid cross-BB vectorization of trapping op This avoids vectorizing a possibly trapping operation when lanes are handled in different BBs. I spotted this when working on the originally reported issue in PR100778. 2021-05-28 Richard Biener PR tree-optimization/100778 * tree-vect-slp.c (vect_build_slp_tree_1): Prevent possibly trapping ops in different BBs. * gcc.dg/vect/bb-slp-pr100778-1.c: New testcase. --- gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c | 18 ++++++++++++++++++ gcc/tree-vect-slp.c | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c (limited to 'gcc') 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-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; } -- cgit v1.1 From 0f54cc9c63842ddfa921530cb499743cafc9b177 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 2 Apr 2021 22:20:43 -0400 Subject: tree-iterator: C++11 range-for and tree_stmt_iterator Like my recent patch to add ovl_range and lkp_range in the C++ front end, this patch adds the tsi_range adaptor for using C++11 range-based 'for' with a STATEMENT_LIST, e.g. for (tree stmt : tsi_range (stmt_list)) { ... } This also involves adding some operators to tree_stmt_iterator that are needed for range-for iterators, and should also be useful in code that uses the iterators directly. The patch updates the suitable loops in the C++ front end, but does not touch any loops elsewhere in the compiler. gcc/ChangeLog: * tree-iterator.h (struct tree_stmt_iterator): Add operator++, operator--, operator*, operator==, and operator!=. (class tsi_range): New. gcc/cp/ChangeLog: * 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. --- gcc/cp/constexpr.c | 42 ++++++++++++++---------------------------- gcc/cp/coroutines.cc | 10 ++++------ gcc/cp/module.cc | 5 ++--- gcc/cp/pt.c | 5 ++--- gcc/cp/semantics.c | 5 ++--- gcc/tree-iterator.h | 36 +++++++++++++++++++++++++++++++----- 6 files changed, 55 insertions(+), 48 deletions(-) (limited to 'gcc') 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 **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/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/pt.c b/gcc/cp/pt.c index bb22d68..b476ca8 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; } 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/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 @@ -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 -- cgit v1.1 From 48166757dcf46d92cf1795dd7333dda7030179c8 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sat, 29 May 2021 00:16:29 +0000 Subject: Daily bump. --- gcc/ChangeLog | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 10 +++++++ gcc/c/ChangeLog | 26 +++++++++++++++++ gcc/cp/ChangeLog | 41 +++++++++++++++++++++++++++ gcc/fortran/ChangeLog | 25 +++++++++++++++++ gcc/testsuite/ChangeLog | 66 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 243 insertions(+), 1 deletion(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 290e374..24c27bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,77 @@ +2021-05-28 Jason Merrill + + * tree-iterator.h (struct tree_stmt_iterator): Add operator++, + operator--, operator*, operator==, and operator!=. + (class tsi_range): New. + +2021-05-28 Richard Biener + + 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 + + PR ipa/100791 + * tree-inline.c (copy_bb): When processing __builtin_va_arg_pack + copy fntype from original call. + +2021-05-28 Martin Liska + + PR gcov-profile/100751 + * doc/gcov.texi: Revert partially a hunk that was wrong. + +2021-05-28 Cooper Qu + + * 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 + + PR middle-end/99928 + * tree.h (OMP_CLAUSE_MAP_IMPLICIT): Define. + +2021-05-28 Tobias Burnus + + * 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 + Richard Biener + + * match.pd : + When generating popcount directly fails, try doing it in two halves. + +2021-05-28 Bernd Edlinger + + * Makefile.in (generated_files): Add gimple-match.c and + generic-match.c + +2021-05-28 Joern Rennecke + + * gensupport.c (alter_predicate_for_insn): Handle MATCH_DUP. + +2021-05-28 Joern Rennecke + + * gensupport.c (alter_constraints): Add MATCH_SCRATCH case. + +2021-05-28 Kewen Lin + + 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 * config/i386/mmx.md (addv2sf3): Do not call diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 2fcc100..cc21e7a 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20210528 +20210529 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 + + 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 + + * c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_AFFINITY. + 2021-05-25 Martin Liska PR tree-optimization/92860 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 + + PR c/100803 + * gimple-parser.c (c_parser_gimple_paren_condition): Diagnose + invalid if conditions. + +2021-05-28 Jakub Jelinek + + 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 + + * 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 PR c/100653 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 + + * 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 + + 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 + + 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 + + * 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 PR c++/100716 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d261101..2fc8b6f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,28 @@ +2021-05-28 Tobias Burnus + + * 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 PR fortran/100602 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 27e5f67..cbe655f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,69 @@ +2021-05-28 Richard Biener + + PR tree-optimization/100778 + * gcc.dg/vect/bb-slp-pr100778-1.c: New testcase. + +2021-05-28 Jason Merrill + + 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 + + PR ipa/100791 + * gcc.dg/pr100791.c: New testcase. + +2021-05-28 Richard Biener + + PR c/100803 + * gcc.dg/gimplefe-error-11.c: New testcase. + +2021-05-28 Jakub Jelinek + + 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 + + * 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 + Richard Biener + + * 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 + + 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 PR c++/100716 -- cgit v1.1 From 2364b584552208ce715fa4fd44c510b7e5210d1e Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Fri, 28 May 2021 22:17:51 +0200 Subject: Fix i686 bootstrap by temporarily disabling exporting of global ranges. The patch converting evrp to the get_range_query(fun) API broke i686 bootstrap (commit 57bf37515). The problem seems to be in a subsequent pass that has more up-to-date global ranges. I won't be able to look at this until next week, so I am reverting the problematic bit of the patch-- the exporting of global ranges once evrp finishes. The use of the new API remains. Reverting the behavior shouldn't be a problem as we never used to export global ranges from ranger. This was new behavior in the patchset. Tested on x86-64 Linux with a bootstrap and regtest, and on x86-32 with only a bootstrap and the configure flags from the PR: --enable-clocale=gnu --with-system-zlib --with-demangler-in-ld --with-fpmath=sse --enable-languages=c,c++ --enable-cet i686-linux --enable-bootstrap --with-fpmath=sse --disable-libcc1 --disable-libcilkrts --disable-libsanitizer gcc/ChangeLog: PR tree-optimization/100787 * gimple-ssa-evrp.c: Disable exporting of global ranges. gcc/testsuite/ChangeLog: * gcc.dg/Wstringop-overflow-55.c: * gcc.dg/pr80776-1.c: --- gcc/gimple-ssa-evrp.c | 6 ++++-- gcc/testsuite/gcc.dg/Wstringop-overflow-55.c | 8 ++++---- gcc/testsuite/gcc.dg/pr80776-1.c | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'gcc') 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/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/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 *-*-* } } */ } -- cgit v1.1 From 5d21c0cbda0c4b109366f51534f328145da4c21f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 29 May 2021 10:05:38 +0200 Subject: openmp: Add shared to parallel for linear on parallel master taskloop simd [PR99928] I forgot to add default(none) and defaultmap(none) wherever possible on the testcases to make sure none of the required clauses are added implicitly (because in that case it doesn't work with these none arguments of those default* clauses or works differently with other default* settings. And that revealed we didn't add shared on parallel for linear clause on parallel master taskloop simd, so this patch fixes that too. 2021-05-29 Jakub Jelinek 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. * 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. --- gcc/gimplify.c | 8 ++-- gcc/testsuite/c-c++-common/gomp/pr99928-1.c | 56 ++++++++++++++-------------- gcc/testsuite/c-c++-common/gomp/pr99928-10.c | 56 ++++++++++++++-------------- gcc/testsuite/c-c++-common/gomp/pr99928-13.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-14.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-2.c | 50 ++++++++++++------------- gcc/testsuite/c-c++-common/gomp/pr99928-3.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-4.c | 16 ++++---- gcc/testsuite/c-c++-common/gomp/pr99928-5.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-6.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-7.c | 22 +++++------ gcc/testsuite/c-c++-common/gomp/pr99928-8.c | 56 ++++++++++++++-------------- gcc/testsuite/c-c++-common/gomp/pr99928-9.c | 56 ++++++++++++++-------------- 13 files changed, 216 insertions(+), 214 deletions(-) (limited to 'gcc') 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/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]++; } -- cgit v1.1 From 12bb62fbb47bd2848746da53c72ed068a4274daf Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sat, 29 May 2021 09:37:30 -0600 Subject: [committed][PR bootstrap/100730] Fix warnings in H8 target files gcc/ * 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. --- gcc/config/h8300/h8300.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'gcc') 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. */ -- cgit v1.1 From ade5ac7c7966c8e88a25f448fa737457364935a4 Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Fri, 28 May 2021 14:26:02 +0200 Subject: diagnostics: Fix sporadic test failure it turns out to be reproducible this way: COLUMNS=80 make check-gcc-c RUNTESTFLAGS="plugin.exp=diagnostic*" Running /home/ed/gnu/gcc-trunk/gcc/testsuite/gcc.dg/plugin/plugin.exp ... FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c -fplugin=./diagnostic_plugin_test_tree_expression_range.so 1 blank line(s) in output FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c -fplugin=./diagnostic_plugin_test_tree_expression_range.so expected multiline pattern lines 550-551 not found: " __builtin_types_compatible_p \(long, int\) \+ f \(i\)\);.*\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\^~~~~~~\n" FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c -fplugin=./diagnostic_plugin_test_tree_expression_range.so (test for excess errors) a lot more errors happen with COLUMNS=20. 2021-05-29 Bernd Edlinger * 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. --- gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c | 2 ++ gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c | 2 ++ gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c | 2 ++ gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_string_literals.c | 2 ++ .../gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c | 2 ++ 5 files changed, 10 insertions(+) (limited to 'gcc') 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, -- cgit v1.1 From 1a87f8381085de50726634e8cb4a651c05b272b5 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sun, 30 May 2021 00:16:26 +0000 Subject: Daily bump. --- gcc/ChangeLog | 20 ++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/testsuite/ChangeLog | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24c27bf..05e1640 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,23 @@ +2021-05-29 Jeff Law + + * 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 + + 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 + + PR tree-optimization/100787 + * gimple-ssa-evrp.c: Disable exporting of global ranges. + 2021-05-28 Jason Merrill * tree-iterator.h (struct tree_stmt_iterator): Add operator++, diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index cc21e7a..30eeb73 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20210529 +20210530 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cbe655f..f8eedd47 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,37 @@ +2021-05-29 Bernd Edlinger + + * 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 + + 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 + + * gcc.dg/Wstringop-overflow-55.c: + * gcc.dg/pr80776-1.c: + 2021-05-28 Richard Biener PR tree-optimization/100778 -- cgit v1.1 From a8f588be038317bf1e9c71f7e626a3d23255ab37 Mon Sep 17 00:00:00 2001 From: Gerald Pfeifer Date: Sun, 30 May 2021 15:27:53 +0200 Subject: Fortran: Fix typo in documentation of BOZ gcc/fortran/ChangeLog: 2021-05-30 Gerald Pfeifer * gfortran.texi (BOZ literal constants): Fix typo. --- gcc/fortran/gfortran.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc') 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 -- cgit v1.1 From e21e93407202e62a10c372595076c593c561bb11 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Mon, 31 May 2021 00:16:25 +0000 Subject: Daily bump. --- gcc/DATESTAMP | 2 +- gcc/fortran/ChangeLog | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'gcc') diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 30eeb73..9bfad84 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20210530 +20210531 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2fc8b6f..95857cc 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2021-05-30 Gerald Pfeifer + + * gfortran.texi (BOZ literal constants): Fix typo. + 2021-05-28 Tobias Burnus * dump-parse-tree.c (show_iterator): New. -- cgit v1.1 From df4e0359dad239854af0ea9eacb8e7e3719557d0 Mon Sep 17 00:00:00 2001 From: Peter Bergner Date: Sun, 30 May 2021 22:45:55 -0500 Subject: rs6000: MMA test case ICEs using -O3 [PR99842] The mma_assemble_input_operand predicate does not accept reg+reg indexed addresses which can lead to ICEs. The lxv and lxvp instructions have indexed forms (lxvx and lxvpx), so the simple solution is to just allow indexed addresses in the predicate. 2021-05-30 Peter Bergner gcc/ PR target/99842 * config/rs6000/predicates.md(mma_assemble_input_operand): Allow indexed form addresses. gcc/testsuite/ PR target/99842 * g++.target/powerpc/pr99842.C: New. --- gcc/config/rs6000/predicates.md | 3 +- gcc/testsuite/g++.target/powerpc/pr99842.C | 188 +++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.target/powerpc/pr99842.C (limited to 'gcc') 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/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 struct e; +template struct e { + typedef h f; +}; +template struct ac; +template struct ac : ac {}; +template struct l; +template class n; +template class o; +template class ag; +template class af; +template struct ad; +template struct an { + typedef n::ai, ac::aj> f; +}; +template struct am { typedef o f; }; +template ::ao, + typename = typename ac::av> +struct ak; +template struct ak { + typedef typename am::f f; +}; +template struct aq; +template struct aq { typedef ar at; }; +template ap bf(const typename ad::f *); +template ap aw(typename ad::f *ax) { return bf(ax); } +typedef __attribute__((altivec(vector__))) double au; +template <> struct ad { typedef double f; }; +template <> au bf(const double *ax) { return __builtin_vec_vsx_ld(0, ax); } +template struct az {}; +template class o : public l { +public: + typedef typename ac::ah ah; + template al &operator+=(const o &); +}; +template struct l {}; +template struct ac> { + typedef typename ba::ah ah; + enum { ai, aj }; +}; +template +class af + : public ak< + af, const n>, + n, bd>, + int, int>::f {}; +template struct be; +template void bi(bj, bg bm, g) { + typename an::f bk(bm); +} +template void bl(bj, bg bm, g bp) { + be::bn(a, bm, bp); +} +template struct bo; +class bs { +public: + bs(double *, int); + double &operator()(int, int) { return bq[br]; } + template bw bt(int i, int j) { + double &bu = operator()(i, j); + return aw(&bu); + } + double *bq; + int br; +}; +class ca : public bs { +public: + ca(double *by, int bz) : bs(by, bz) {} +}; +template class ce : public am::f { +protected: + template void cb(l) { + af, const n>, + n> + cc; + bl(0, cc, az()); + } + template void ch(long); + template void ch(l cf) { cb(cf); } +}; +template +struct ac> { + typedef cg ah; + typedef int av; +}; +template +class n : public ce> { +public: + template n(ab p) { n::template ch(p); } +}; +template struct ac> { + typedef ba ao; + typedef typename e::f ah; + typedef typename aq::av, typename ac::av, bc>::at av; +}; +template class cm; +template +class ag + : public cm::av, typename ac::av, int>::at> { +}; +template +class cm : public ak, n>>::f {}; +template +template +al &o::operator+=(const o &) { + af, const n>, + n> + co; + bi(0, co, int()); +} +enum { cp }; +template struct cq; +template struct cr { + enum { q }; + enum { ae = cq::at }; +}; +template <> struct cq { + enum { at = d }; +}; +struct t { + template static void bn(ba, bb, s) { + typedef typename bb::ah x; + x u; + bo::bn(0, 0, ca(0, 0), ca(&u, 1), 0, 0, 0); + } +}; +template ::ae> struct cu; +template +struct be, az> { + static void bn(cd, af bm, az) { + ag, const n> da; + cu::cv(c, da, bm); + } +}; +template struct cw { + template + static void + cv(bj, ag, const n>, + n bx) { + double alpha; + ag, const n> bh; + al::cx(c, bh, bx, alpha); + } +}; +template struct cu : cw> { + template static void cx(s, ba, bb bx, typename af::ah) { + ba cz; + t::bn(cz, bx, c); + } +}; +template +void db(__vector_quad *, __vector_pair &, dj); +template +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(0, j), + (__attribute__((altivec(vector__))) char)bh.bt(0, j)); + db(&df, dh, v); + __vector_pair di; + __builtin_mma_assemble_pair( + &di, (__attribute__((altivec(vector__))) char)bh.bt(0, j), + (__attribute__((altivec(vector__))) char)bh.bt(0, j)); + db(&dg, di, v); +} +template struct bo { + static void bn(bv, bv, w bh, cy, double, bv, double) { + dc(bh); + } +}; +void dm() { + n dk(1), y(0); + y += dk; +} -- cgit v1.1 From ef8176e0fac935c095cc39f4ecdfd43cdb8cb3f3 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 21 May 2021 11:33:30 +0200 Subject: c++/88601 - [C/C++] __builtin_shufflevector support This adds support for the clang __builtin_shufflevector extension to the C and C++ frontends. The builtin is lowered to VEC_PERM_EXPR. Because VEC_PERM_EXPR does not support different sized vector inputs or result or the special permute index of -1 (don't-care) c_build_shufflevector applies lowering by widening inputs and output to the widest vector, replacing -1 by a defined index and subsetting the final vector if we produced a wider result than desired. Code generation thus can be sub-optimal, followup patches will aim to fix that by recovering from part of the missing features during RTL expansion and by relaxing the constraints of the GIMPLE IL with regard to VEC_PERM_EXPR. 2021-05-21 Richard Biener PR c++/88601 gcc/c-family/ * c-common.c: Include tree-vector-builder.h and vec-perm-indices.h. (c_common_reswords): Add __builtin_shufflevector. (c_build_shufflevector): New funtion. * c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR. (c_build_shufflevector): Declare. gcc/c/ * c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR. * c-parser.c (c_parser_postfix_expression): Likewise. gcc/cp/ * cp-objcp-common.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR. * cp-tree.h (build_x_shufflevector): Declare. * parser.c (cp_parser_postfix_expression): Handle RID_BUILTIN_SHUFFLEVECTOR. * pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR. * typeck.c (build_x_shufflevector): Build either a lowered VEC_PERM_EXPR or an unlowered shufflevector via a temporary internal function IFN_SHUFFLEVECTOR. gcc/ * internal-fn.c (expand_SHUFFLEVECTOR): Define. * internal-fn.def (SHUFFLEVECTOR): New. * internal-fn.h (expand_SHUFFLEVECTOR): Declare. * doc/extend.texi: Document __builtin_shufflevector. gcc/testsuite/ * c-c++-common/builtin-shufflevector-2.c: New testcase. * c-c++-common/torture/builtin-shufflevector-1.c: Likewise. * g++.dg/ext/builtin-shufflevector-1.C: Likewise. * g++.dg/ext/builtin-shufflevector-2.C: Likewise. --- gcc/c-family/c-common.c | 139 +++++++++++++++++++++ gcc/c-family/c-common.h | 4 +- gcc/c/c-decl.c | 1 + gcc/c/c-parser.c | 38 ++++++ gcc/cp/cp-objcp-common.c | 1 + gcc/cp/cp-tree.h | 3 + gcc/cp/parser.c | 15 +++ gcc/cp/pt.c | 9 ++ gcc/cp/typeck.c | 36 ++++++ gcc/doc/extend.texi | 28 +++++ gcc/internal-fn.c | 6 + gcc/internal-fn.def | 3 + gcc/internal-fn.h | 1 + .../c-c++-common/builtin-shufflevector-2.c | 18 +++ .../c-c++-common/torture/builtin-shufflevector-1.c | 49 ++++++++ gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C | 18 +++ gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C | 12 ++ 17 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/c-c++-common/builtin-shufflevector-2.c create mode 100644 gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c create mode 100644 gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C create mode 100644 gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C (limited to 'gcc') 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 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, 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/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 *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 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/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 *, + 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/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 *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 b476ca8..3130280 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -20397,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/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 *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 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/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/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/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 +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::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 +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; -- cgit v1.1 From 21d7bba242f1a7349adc6a57aa4c874f7bb159f8 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 24 May 2021 11:18:21 +0200 Subject: LTO: stream properly FUNCTION_DECL_DECL_TYPE. gcc/lto/ChangeLog: * lto-common.c (compare_tree_sccs_1): Compare FUNCTION_DECL_DECL_TYPE. gcc/ChangeLog: * tree-streamer-in.c (unpack_ts_function_decl_value_fields): Unpack FUNCTION_DECL_DECL_TYPE. * tree-streamer-out.c (pack_ts_function_decl_value_fields): Stream FUNCTION_DECL_DECL_TYPE instead of DECL_IS_OPERATOR_NEW_P. * tree.h (set_function_decl_type): Use FUNCTION_DECL_DECL_TYPE macro. (DECL_IS_OPERATOR_NEW_P): Likewise. (DECL_IS_OPERATOR_DELETE_P): Likewise. (DECL_LAMBDA_FUNCTION_P): Likewise. --- gcc/lto/lto-common.c | 2 +- gcc/tree-streamer-in.c | 2 +- gcc/tree-streamer-out.c | 2 +- gcc/tree.h | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'gcc') 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/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.h b/gcc/tree.h index 5935d0e..260a3ae 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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 **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) -- cgit v1.1