https://gcc.gnu.org/g:e225950d8d82c679d440198d7082b243a61908d0

commit e225950d8d82c679d440198d7082b243a61908d0
Author: Kwok Cheung Yeung <kcye...@baylibre.com>
Date:   Wed Mar 12 19:38:39 2025 +0000

    openmp: Add macros for iterator element access
    
    gcc/c/
    
            * c-parser.cc (c_parser_omp_iterators): Use macros for accessing
            iterator elements.
            (c_parser_omp_clause_affinity): Likewise.
            (c_parser_omp_clause_depend): Likewise.
            (c_parser_omp_clause_map): Likewise.
            (c_parser_omp_clause_from_to): Likewise.
            * c-typeck.cc (c_omp_finish_iterators): Likewise.
    
    gcc/cp/
    
            * parser.cc (cp_parser_omp_iterators): Use macros for accessing
            iterator elements.
            (cp_parser_omp_clause_affinity): Likewise.
            (cp_parser_omp_clause_depend): Likewise.
            (cp_parser_omp_clause_from_to): Likewise.
            (cp_parser_omp_clause_map): Likewise.
            * semantics.cc (cp_omp_finish_iterators): Likewise.
    
    gcc/fortran/
    
            * trans-openmp.cc (gfc_trans_omp_array_section): Use macros for
            accessing iterator elements.
            (handle_iterator): Likewise.
            (gfc_trans_omp_clauses): Likewise.
    
    gcc/
    
            * gimplify.cc (gimplify_omp_affinity): Use macros for accessing
            iterator elements.
            (compute_omp_iterator_count): Likewise.
            (build_omp_iterator_loop): Likewise.
            (remove_unused_omp_iterator_vars): Likewise.
            (build_omp_iterators_loops): Likewise.
            (enter_omp_iterator_loop_context_1): Likewise.
            (extract_base_bit_offset): Likewise.
            * omp-low.cc (lower_omp_map_iterator_expr): Likewise.
            (lower_omp_map_iterator_size): Likewise.
            (allocate_omp_iterator_elems): Likewise.
            (free_omp_iterator_elems): Likewise.
            * tree-inline.cc (copy_tree_body_r): Likewise.
            * tree-pretty-print.cc (dump_omp_iterators): Likewise.
            * tree.h (OMP_ITERATORS_VAR, OMP_ITERATORS_BEGIN, OMP_ITERATORS_END,
            OMP_ITERATORS_STEP, OMP_ITERATORS_ORIG_STEP, OMP_ITERATORS_BLOCK,
            OMP_ITERATORS_LABEL, OMP_ITERATORS_INDEX, OMP_ITERATORS_ELEMS,
            OMP_ITERATORS_COUNT, OMP_ITERATORS_EXPANDED_P): New macros.

Diff:
---
 gcc/ChangeLog.omp           | 21 ++++++++++++
 gcc/c/ChangeLog.omp         | 10 ++++++
 gcc/c/c-parser.cc           | 16 +++++-----
 gcc/c/c-typeck.cc           | 24 +++++++-------
 gcc/cp/ChangeLog.omp        | 10 ++++++
 gcc/cp/parser.cc            | 16 +++++-----
 gcc/cp/semantics.cc         | 26 +++++++--------
 gcc/fortran/ChangeLog.omp   |  7 ++++
 gcc/fortran/trans-openmp.cc | 38 +++++++++++-----------
 gcc/gimplify.cc             | 78 ++++++++++++++++++++++-----------------------
 gcc/omp-low.cc              | 17 +++++-----
 gcc/tree-inline.cc          |  4 +--
 gcc/tree-pretty-print.cc    | 20 ++++++------
 gcc/tree.h                  | 13 ++++++++
 14 files changed, 181 insertions(+), 119 deletions(-)

diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index 0470a69cab03..a1103c0d135d 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,24 @@
+2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
+
+       * gimplify.cc (gimplify_omp_affinity): Use macros for accessing
+       iterator elements.
+       (compute_omp_iterator_count): Likewise.
+       (build_omp_iterator_loop): Likewise.
+       (remove_unused_omp_iterator_vars): Likewise.
+       (build_omp_iterators_loops): Likewise.
+       (enter_omp_iterator_loop_context_1): Likewise.
+       (extract_base_bit_offset): Likewise.
+       * omp-low.cc (lower_omp_map_iterator_expr): Likewise.
+       (lower_omp_map_iterator_size): Likewise.
+       (allocate_omp_iterator_elems): Likewise.
+       (free_omp_iterator_elems): Likewise.
+       * tree-inline.cc (copy_tree_body_r): Likewise.
+       * tree-pretty-print.cc (dump_omp_iterators): Likewise.
+       * tree.h (OMP_ITERATORS_VAR, OMP_ITERATORS_BEGIN, OMP_ITERATORS_END,
+       OMP_ITERATORS_STEP, OMP_ITERATORS_ORIG_STEP, OMP_ITERATORS_BLOCK,
+       OMP_ITERATORS_LABEL, OMP_ITERATORS_INDEX, OMP_ITERATORS_ELEMS,
+       OMP_ITERATORS_COUNT, OMP_ITERATORS_EXPANDED_P): New macros.
+
 2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
 
        * gimplify.cc (omp_iterator_elems_length): New.
diff --git a/gcc/c/ChangeLog.omp b/gcc/c/ChangeLog.omp
index 80a771f50207..452c95f2a94c 100644
--- a/gcc/c/ChangeLog.omp
+++ b/gcc/c/ChangeLog.omp
@@ -1,3 +1,13 @@
+2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
+
+       * c-parser.cc (c_parser_omp_iterators): Use macros for accessing
+       iterator elements.
+       (c_parser_omp_clause_affinity): Likewise.
+       (c_parser_omp_clause_depend): Likewise.
+       (c_parser_omp_clause_map): Likewise.
+       (c_parser_omp_clause_from_to): Likewise.
+       * c-typeck.cc (c_omp_finish_iterators): Likewise.
+
 2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
 
        * c-typeck.cc (handle_omp_array_sections): Add extra argument.  Set
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 55636680718e..c78c17a3a5cc 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -19158,10 +19158,10 @@ c_parser_omp_iterators (c_parser *parser)
       pushdecl (iter_var);
 
       *last = make_tree_vec (6);
-      TREE_VEC_ELT (*last, 0) = iter_var;
-      TREE_VEC_ELT (*last, 1) = begin;
-      TREE_VEC_ELT (*last, 2) = end;
-      TREE_VEC_ELT (*last, 3) = step;
+      OMP_ITERATORS_VAR (*last) = iter_var;
+      OMP_ITERATORS_BEGIN (*last) = begin;
+      OMP_ITERATORS_END (*last) = end;
+      OMP_ITERATORS_STEP (*last) = step;
       last = &TREE_CHAIN (*last);
 
       if (c_parser_next_token_is (parser, CPP_COMMA))
@@ -19226,7 +19226,7 @@ c_parser_omp_clause_affinity (c_parser *parser, tree 
list)
       tree block = pop_scope ();
       if (iterators != error_mark_node)
        {
-         TREE_VEC_ELT (iterators, 5) = block;
+         OMP_ITERATORS_BLOCK (iterators) = block;
          for (tree c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
            OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
                                                   OMP_CLAUSE_DECL (c));
@@ -19343,7 +19343,7 @@ c_parser_omp_clause_depend (c_parser *parser, tree list)
          if (iterators == error_mark_node)
            iterators = NULL_TREE;
          else
-           TREE_VEC_ELT (iterators, 5) = block;
+           OMP_ITERATORS_BLOCK (iterators) = block;
        }
 
       for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
@@ -19679,7 +19679,7 @@ c_parser_omp_clause_map (c_parser *parser, tree list, 
enum gomp_map_kind kind)
       if (iterators == error_mark_node)
        iterators = NULL_TREE;
       else
-       TREE_VEC_ELT (iterators, 5) = block;
+       OMP_ITERATORS_BLOCK (iterators) = block;
     }
 
   for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
@@ -20125,7 +20125,7 @@ c_parser_omp_clause_from_to (c_parser *parser, enum 
omp_clause_code kind,
       if (iterators == error_mark_node)
        iterators = NULL_TREE;
       else
-       TREE_VEC_ELT (iterators, 5) = block;
+       OMP_ITERATORS_BLOCK (iterators) = block;
     }
 
   if (iterators)
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 78272d582357..0f62cef0be06 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -15018,10 +15018,10 @@ c_omp_finish_iterators (tree iter)
   bool ret = false;
   for (tree it = iter; it; it = TREE_CHAIN (it))
     {
-      tree var = TREE_VEC_ELT (it, 0);
-      tree begin = TREE_VEC_ELT (it, 1);
-      tree end = TREE_VEC_ELT (it, 2);
-      tree step = TREE_VEC_ELT (it, 3);
+      tree var = OMP_ITERATORS_VAR (it);
+      tree begin = OMP_ITERATORS_BEGIN (it);
+      tree end = OMP_ITERATORS_END (it);
+      tree step = OMP_ITERATORS_STEP (it);
       tree orig_step;
       tree type = TREE_TYPE (var);
       location_t loc = DECL_SOURCE_LOCATION (var);
@@ -15095,10 +15095,10 @@ c_omp_finish_iterators (tree iter)
       tree it2;
       for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
        {
-         tree var2 = TREE_VEC_ELT (it2, 0);
-         tree begin2 = TREE_VEC_ELT (it2, 1);
-         tree end2 = TREE_VEC_ELT (it2, 2);
-         tree step2 = TREE_VEC_ELT (it2, 3);
+         tree var2 = OMP_ITERATORS_VAR (it2);
+         tree begin2 = OMP_ITERATORS_BEGIN (it2);
+         tree end2 = OMP_ITERATORS_END (it2);
+         tree step2 = OMP_ITERATORS_STEP (it2);
          tree type2 = TREE_TYPE (var2);
          location_t loc2 = DECL_SOURCE_LOCATION (var2);
          struct c_find_omp_var_s data = { var, &pset };
@@ -15133,10 +15133,10 @@ c_omp_finish_iterators (tree iter)
          ret = true;
          continue;
        }
-      TREE_VEC_ELT (it, 1) = begin;
-      TREE_VEC_ELT (it, 2) = end;
-      TREE_VEC_ELT (it, 3) = step;
-      TREE_VEC_ELT (it, 4) = orig_step;
+      OMP_ITERATORS_BEGIN (it) = begin;
+      OMP_ITERATORS_END (it) = end;
+      OMP_ITERATORS_STEP (it) = step;
+      OMP_ITERATORS_ORIG_STEP (it) = orig_step;
     }
   return ret;
 }
diff --git a/gcc/cp/ChangeLog.omp b/gcc/cp/ChangeLog.omp
index 95e2b32e60e3..9dde3721faad 100644
--- a/gcc/cp/ChangeLog.omp
+++ b/gcc/cp/ChangeLog.omp
@@ -1,3 +1,13 @@
+2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
+
+       * parser.cc (cp_parser_omp_iterators): Use macros for accessing
+       iterator elements.
+       (cp_parser_omp_clause_affinity): Likewise.
+       (cp_parser_omp_clause_depend): Likewise.
+       (cp_parser_omp_clause_from_to): Likewise.
+       (cp_parser_omp_clause_map): Likewise.
+       * semantics.cc (cp_omp_finish_iterators): Likewise.
+
 2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
 
        * semantics.cc (handle_omp_array_sections): Add extra argument.  Set
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index a13b0a9dc025..a085c6b93cb5 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -42119,10 +42119,10 @@ cp_parser_omp_iterators (cp_parser *parser)
       pushdecl (iter_var);
 
       *last = make_tree_vec (6);
-      TREE_VEC_ELT (*last, 0) = iter_var;
-      TREE_VEC_ELT (*last, 1) = begin;
-      TREE_VEC_ELT (*last, 2) = end;
-      TREE_VEC_ELT (*last, 3) = step;
+      OMP_ITERATORS_VAR (*last) = iter_var;
+      OMP_ITERATORS_BEGIN (*last) = begin;
+      OMP_ITERATORS_END (*last) = end;
+      OMP_ITERATORS_STEP (*last) = step;
       last = &TREE_CHAIN (*last);
 
       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
@@ -42196,7 +42196,7 @@ cp_parser_omp_clause_affinity (cp_parser *parser, tree 
list)
       tree block = poplevel (1, 1, 0);
       if (iterators != error_mark_node)
        {
-         TREE_VEC_ELT (iterators, 5) = block;
+         OMP_ITERATORS_BLOCK (iterators) = block;
          for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
            OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
                                                   OMP_CLAUSE_DECL (c));
@@ -42321,7 +42321,7 @@ cp_parser_omp_clause_depend (cp_parser *parser, tree 
list, location_t loc)
          if (iterators == error_mark_node)
            iterators = NULL_TREE;
          else
-           TREE_VEC_ELT (iterators, 5) = block;
+           OMP_ITERATORS_BLOCK (iterators) = block;
        }
 
       for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
@@ -42611,7 +42611,7 @@ cp_parser_omp_clause_from_to (cp_parser *parser, enum 
omp_clause_code kind,
       if (iterators == error_mark_node)
        iterators = NULL_TREE;
       else
-       TREE_VEC_ELT (iterators, 5) = block;
+       OMP_ITERATORS_BLOCK (iterators) = block;
     }
 
   if (iterators)
@@ -42901,7 +42901,7 @@ cp_parser_omp_clause_map (cp_parser *parser, tree list, 
enum gomp_map_kind kind)
       if (iterators == error_mark_node)
        iterators = NULL_TREE;
       else
-       TREE_VEC_ELT (iterators, 5) = block;
+       OMP_ITERATORS_BLOCK (iterators) = block;
     }
 
   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc
index e7c2e69e0e26..986a9cbe4188 100644
--- a/gcc/cp/semantics.cc
+++ b/gcc/cp/semantics.cc
@@ -7286,10 +7286,10 @@ cp_omp_finish_iterators (tree iter)
   bool ret = false;
   for (tree it = iter; it; it = TREE_CHAIN (it))
     {
-      tree var = TREE_VEC_ELT (it, 0);
-      tree begin = TREE_VEC_ELT (it, 1);
-      tree end = TREE_VEC_ELT (it, 2);
-      tree step = TREE_VEC_ELT (it, 3);
+      tree var = OMP_ITERATORS_VAR (it);
+      tree begin = OMP_ITERATORS_BEGIN (it);
+      tree end = OMP_ITERATORS_END (it);
+      tree step = OMP_ITERATORS_STEP (it);
       tree orig_step;
       tree type = TREE_TYPE (var);
       location_t loc = DECL_SOURCE_LOCATION (var);
@@ -7387,10 +7387,10 @@ cp_omp_finish_iterators (tree iter)
       tree it2;
       for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
        {
-         tree var2 = TREE_VEC_ELT (it2, 0);
-         tree begin2 = TREE_VEC_ELT (it2, 1);
-         tree end2 = TREE_VEC_ELT (it2, 2);
-         tree step2 = TREE_VEC_ELT (it2, 3);
+         tree var2 = OMP_ITERATORS_VAR (it2);
+         tree begin2 = OMP_ITERATORS_BEGIN (it2);
+         tree end2 = OMP_ITERATORS_END (it2);
+         tree step2 = OMP_ITERATORS_STEP (it2);
          location_t loc2 = DECL_SOURCE_LOCATION (var2);
          if (cp_walk_tree (&begin2, find_omp_placeholder_r, var, &pset))
            {
@@ -7416,14 +7416,14 @@ cp_omp_finish_iterators (tree iter)
          ret = true;
          continue;
        }
-      TREE_VEC_ELT (it, 1) = begin;
-      TREE_VEC_ELT (it, 2) = end;
+      OMP_ITERATORS_BEGIN (it) = begin;
+      OMP_ITERATORS_END (it) = end;
       if (processing_template_decl)
-       TREE_VEC_ELT (it, 3) = orig_step;
+       OMP_ITERATORS_STEP (it) = orig_step;
       else
        {
-         TREE_VEC_ELT (it, 3) = step;
-         TREE_VEC_ELT (it, 4) = orig_step;
+         OMP_ITERATORS_STEP (it) = step;
+         OMP_ITERATORS_ORIG_STEP (it) = orig_step;
        }
     }
   return ret;
diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp
index e1533c56b347..d10c2f883cb6 100644
--- a/gcc/fortran/ChangeLog.omp
+++ b/gcc/fortran/ChangeLog.omp
@@ -1,3 +1,10 @@
+2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
+
+       * trans-openmp.cc (gfc_trans_omp_array_section): Use macros for
+       accessing iterator elements.
+       (handle_iterator): Likewise.
+       (gfc_trans_omp_clauses): Likewise.
+
 2025-04-17  Kwok Cheung Yeung  <kcye...@baylibre.com>
 
        * trans-openmp.cc (gfc_trans_omp_clauses): Disable strided updates
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index 8154e7850509..f94de6a425cb 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -4145,10 +4145,10 @@ gfc_trans_omp_array_section (stmtblock_t *block, 
toc_directive cd,
 
   for (tree it = iterator; it; it = TREE_CHAIN (it))
     {
-      ptr = simplify_replace_tree (ptr, TREE_VEC_ELT (it, 0),
-                                  TREE_VEC_ELT (it, 1));
-      ptr2 = simplify_replace_tree (ptr2, TREE_VEC_ELT (it, 0),
-                                   TREE_VEC_ELT (it, 1));
+      ptr = simplify_replace_tree (ptr, OMP_ITERATORS_VAR (it),
+                                  OMP_ITERATORS_BEGIN (it));
+      ptr2 = simplify_replace_tree (ptr2, OMP_ITERATORS_VAR (it),
+                                   OMP_ITERATORS_BEGIN (it));
     }
   ptr = fold_build2 (MINUS_EXPR, ptrdiff_type_node, ptr,
                     fold_convert (ptrdiff_type_node, ptr2));
@@ -4278,7 +4278,7 @@ handle_iterator (gfc_namespace *ns, stmtblock_t 
*iter_block, tree block)
       tree last = make_tree_vec (6);
       tree iter_var = gfc_get_symbol_decl (sym);
       tree type = TREE_TYPE (iter_var);
-      TREE_VEC_ELT (last, 0) = iter_var;
+      OMP_ITERATORS_VAR (last) = iter_var;
       DECL_CHAIN (iter_var) = BLOCK_VARS (block);
       BLOCK_VARS (block) = iter_var;
 
@@ -4288,18 +4288,18 @@ handle_iterator (gfc_namespace *ns, stmtblock_t 
*iter_block, tree block)
       gfc_conv_expr (&se, c->expr);
       gfc_add_block_to_block (iter_block, &se.pre);
       gfc_add_block_to_block (iter_block, &se.post);
-      TREE_VEC_ELT (last, 1) = fold_convert (type,
-                                            gfc_evaluate_now (se.expr,
-                                                              iter_block));
+      OMP_ITERATORS_BEGIN (last) = fold_convert (type,
+                                                gfc_evaluate_now (se.expr,
+                                                                  iter_block));
       /* end */
       c = gfc_constructor_next (c);
       gfc_init_se (&se, NULL);
       gfc_conv_expr (&se, c->expr);
       gfc_add_block_to_block (iter_block, &se.pre);
       gfc_add_block_to_block (iter_block, &se.post);
-      TREE_VEC_ELT (last, 2) = fold_convert (type,
-                                            gfc_evaluate_now (se.expr,
-                                                              iter_block));
+      OMP_ITERATORS_END (last) = fold_convert (type,
+                                              gfc_evaluate_now (se.expr,
+                                                                iter_block));
       /* step */
       c = gfc_constructor_next (c);
       tree step;
@@ -4316,9 +4316,9 @@ handle_iterator (gfc_namespace *ns, stmtblock_t 
*iter_block, tree block)
        }
       else
        step = build_int_cst (type, 1);
-      TREE_VEC_ELT (last, 3) = step;
+      OMP_ITERATORS_STEP (last) = step;
       /* orig_step */
-      TREE_VEC_ELT (last, 4) = save_expr (step);
+      OMP_ITERATORS_ORIG_STEP (last) = save_expr (step);
       TREE_CHAIN (last) = list;
       list = last;
     }
@@ -5078,7 +5078,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
              if (iterator && prev->u2.ns != n->u2.ns)
                { 
                  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-                 TREE_VEC_ELT (iterator, 5) = tree_block;
+                 OMP_ITERATORS_BLOCK (iterator) = tree_block;
                  for (tree c = omp_clauses; c != prev_clauses;
                       c = OMP_CLAUSE_CHAIN (c))
                    OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
@@ -5235,7 +5235,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
          if (iterator)
            { 
              BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-             TREE_VEC_ELT (iterator, 5) = tree_block;
+             OMP_ITERATORS_BLOCK (iterator) = tree_block;
              for (tree c = omp_clauses; c != prev_clauses;
                   c = OMP_CLAUSE_CHAIN (c))
                OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
@@ -5255,7 +5255,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
                {
                  /* Finish previous iterator group.  */
                  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-                 TREE_VEC_ELT (iterator, 5) = tree_block;
+                 OMP_ITERATORS_BLOCK (iterator) = tree_block;
                  for (tree c = omp_clauses; c != prev_clauses;
                       c = OMP_CLAUSE_CHAIN (c))
                    if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
@@ -6400,7 +6400,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
            {
              /* Finish last iterator group.  */
              BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-             TREE_VEC_ELT (iterator, 5) = tree_block;
+             OMP_ITERATORS_BLOCK (iterator) = tree_block;
              for (tree c = omp_clauses; c != prev_clauses;
                   c = OMP_CLAUSE_CHAIN (c))
                if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
@@ -6423,7 +6423,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
                {
                  /* Finish previous iterator group.  */
                  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-                 TREE_VEC_ELT (iterator, 5) = tree_block;
+                 OMP_ITERATORS_BLOCK (iterator) = tree_block;
                  for (tree c = omp_clauses; c != prev_clauses;
                       c = OMP_CLAUSE_CHAIN (c))
                    OMP_CLAUSE_ITERATORS (c) = iterator;
@@ -6705,7 +6705,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, 
gfc_omp_clauses *clauses,
            {
              /* Finish last iterator group.  */
              BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
-             TREE_VEC_ELT (iterator, 5) = tree_block;
+             OMP_ITERATORS_BLOCK (iterator) = tree_block;
              for (tree c = omp_clauses; c != prev_clauses;
                c = OMP_CLAUSE_CHAIN (c))
              OMP_CLAUSE_ITERATORS (c) = iterator;
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 44d50a67d4bb..f075eb337d0d 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -9441,19 +9441,19 @@ gimplify_omp_affinity (tree *list_p, gimple_seq *pre_p)
                  }
                for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
                  {
-                   if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
+                   if (gimplify_expr (&OMP_ITERATORS_BEGIN (it), pre_p, NULL,
                                       is_gimple_val, fb_rvalue) == GS_ERROR
-                       || gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
+                       || gimplify_expr (&OMP_ITERATORS_END (it), pre_p, NULL,
                                          is_gimple_val, fb_rvalue) == GS_ERROR
-                       || gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
+                       || gimplify_expr (&OMP_ITERATORS_STEP (it), pre_p, NULL,
                                          is_gimple_val, fb_rvalue) == GS_ERROR
-                       || (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
-                                          is_gimple_val, fb_rvalue)
+                       || (gimplify_expr (&OMP_ITERATORS_ORIG_STEP (it), pre_p,
+                                          NULL, is_gimple_val, fb_rvalue)
                            == GS_ERROR))
                      return;
                  }
            last_iter = TREE_PURPOSE (t);
-           tree block = TREE_VEC_ELT (TREE_PURPOSE (t), 5);
+           tree block = OMP_ITERATORS_BLOCK (TREE_PURPOSE (t));
            last_bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
                                NULL, block);
            last_body = &BIND_EXPR_BODY (last_bind);
@@ -9461,10 +9461,10 @@ gimplify_omp_affinity (tree *list_p, gimple_seq *pre_p)
            location_t loc = OMP_CLAUSE_LOCATION (c);
            for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
              {
-               tree var = TREE_VEC_ELT (it, 0);
-               tree begin = TREE_VEC_ELT (it, 1);
-               tree end = TREE_VEC_ELT (it, 2);
-               tree step = TREE_VEC_ELT (it, 3);
+               tree var = OMP_ITERATORS_VAR (it);
+               tree begin = OMP_ITERATORS_BEGIN (it);
+               tree end = OMP_ITERATORS_END (it);
+               tree step = OMP_ITERATORS_STEP (it);
                loc = DECL_SOURCE_LOCATION (var);
                tree tem = build2_loc (loc, MODIFY_EXPR, void_type_node,
                                       var, begin);
@@ -9541,20 +9541,20 @@ compute_omp_iterator_count (tree it, gimple_seq *pre_p)
   tree tcnt = size_one_node;
   for (; it; it = TREE_CHAIN (it))
     {
-      if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
+      if (gimplify_expr (&OMP_ITERATORS_BEGIN (it), pre_p, NULL,
                         is_gimple_val, fb_rvalue) == GS_ERROR
-         || gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
+         || gimplify_expr (&OMP_ITERATORS_END (it), pre_p, NULL,
                            is_gimple_val, fb_rvalue) == GS_ERROR
-         || gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
+         || gimplify_expr (&OMP_ITERATORS_STEP (it), pre_p, NULL,
                            is_gimple_val, fb_rvalue) == GS_ERROR
-         || (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
+         || (gimplify_expr (&OMP_ITERATORS_ORIG_STEP (it), pre_p, NULL,
                             is_gimple_val, fb_rvalue) == GS_ERROR))
        return NULL_TREE;
-      tree var = TREE_VEC_ELT (it, 0);
-      tree begin = TREE_VEC_ELT (it, 1);
-      tree end = TREE_VEC_ELT (it, 2);
-      tree step = TREE_VEC_ELT (it, 3);
-      tree orig_step = TREE_VEC_ELT (it, 4);
+      tree var = OMP_ITERATORS_VAR (it);
+      tree begin = OMP_ITERATORS_BEGIN (it);
+      tree end = OMP_ITERATORS_END (it);
+      tree step = OMP_ITERATORS_STEP (it);
+      tree orig_step = OMP_ITERATORS_ORIG_STEP (it);
       tree type = TREE_TYPE (var);
       tree stype = TREE_TYPE (step);
       location_t loc = DECL_SOURCE_LOCATION (var);
@@ -9622,7 +9622,7 @@ build_omp_iterator_loop (tree it, gimple_seq *pre_p, tree 
*last_bind)
 {
   if (*last_bind)
     gimplify_and_add (*last_bind, pre_p);
-  tree block = TREE_VEC_ELT (it, 5);
+  tree block = OMP_ITERATORS_BLOCK (it);
   tree block_stmts = lang_GNU_Fortran () ? BLOCK_SUBBLOCKS (block) : NULL_TREE;
   *last_bind = build3 (BIND_EXPR, void_type_node,
                       BLOCK_VARS (block), NULL, block);
@@ -9630,12 +9630,12 @@ build_omp_iterator_loop (tree it, gimple_seq *pre_p, 
tree *last_bind)
   tree *p = &BIND_EXPR_BODY (*last_bind);
   for (; it; it = TREE_CHAIN (it))
     {
-      tree var = TREE_VEC_ELT (it, 0);
-      tree begin = TREE_VEC_ELT (it, 1);
-      tree end = TREE_VEC_ELT (it, 2);
-      tree step = TREE_VEC_ELT (it, 3);
-      tree orig_step = TREE_VEC_ELT (it, 4);
-      block = TREE_VEC_ELT (it, 5);
+      tree var = OMP_ITERATORS_VAR (it);
+      tree begin = OMP_ITERATORS_BEGIN (it);
+      tree end = OMP_ITERATORS_END (it);
+      tree step = OMP_ITERATORS_STEP (it);
+      tree orig_step = OMP_ITERATORS_ORIG_STEP (it);
+      block = OMP_ITERATORS_BLOCK (it);
       tree type = TREE_TYPE (var);
       location_t loc = DECL_SOURCE_LOCATION (var);
       /* Emit:
@@ -9766,7 +9766,7 @@ remove_unused_omp_iterator_vars (tree *list_p)
       bool need_new_iterators = false;
       for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
        {
-         tree var = TREE_VEC_ELT (it, 0);
+         tree var = OMP_ITERATORS_VAR (it);
          tree t = walk_tree (&OMP_CLAUSE_DECL (c), find_var_decl, var, NULL);
          if (t == NULL_TREE)
            t = walk_tree (&OMP_CLAUSE_SIZE (c), find_var_decl, var, NULL);
@@ -9819,7 +9819,7 @@ remove_unused_omp_iterator_vars (tree *list_p)
          for (tree it = OMP_CLAUSE_ITERATORS (c); it && i < vars.length();
               it = TREE_CHAIN (it))
            {
-             tree var = TREE_VEC_ELT (it, 0);
+             tree var = OMP_ITERATORS_VAR (it);
              if (var == vars[i])
                {
                  *new_iters_p = copy_omp_iterator (it);
@@ -9827,13 +9827,13 @@ remove_unused_omp_iterator_vars (tree *list_p)
                                            DECL_NAME (var), TREE_TYPE (var));
                  DECL_ARTIFICIAL (*new_vars_p) = 1;
                  DECL_CONTEXT (*new_vars_p) = DECL_CONTEXT (var);
-                 TREE_VEC_ELT (*new_iters_p, 0) = *new_vars_p;
+                 OMP_ITERATORS_VAR (*new_iters_p) = *new_vars_p;
                  new_iters_p = &TREE_CHAIN (*new_iters_p);
                  new_vars_p = &DECL_CHAIN (*new_vars_p);
                  i++;
                }
            }
-         tree old_block = TREE_VEC_ELT (OMP_CLAUSE_ITERATORS (c), 5);
+         tree old_block = OMP_ITERATORS_BLOCK (OMP_CLAUSE_ITERATORS (c));
          tree new_block = make_node (BLOCK);
          BLOCK_VARS (new_block) = new_vars;
          if (BLOCK_SUBBLOCKS (old_block))
@@ -9841,7 +9841,7 @@ remove_unused_omp_iterator_vars (tree *list_p)
              BLOCK_SUBBLOCKS (new_block) = BLOCK_SUBBLOCKS (old_block);
              BLOCK_SUBBLOCKS (old_block) = NULL_TREE;
            }
-         TREE_VEC_ELT (new_iters, 5) = new_block;
+         OMP_ITERATORS_BLOCK (new_iters) = new_block;
          new_iterators.safe_push (new_iters);
          iter_vars.safe_push (vars.copy ());
          OMP_CLAUSE_ITERATORS (c) = new_iters;
@@ -9852,7 +9852,7 @@ remove_unused_omp_iterator_vars (tree *list_p)
       for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
        {
          tree old_var = vars[i++];
-         tree new_var = TREE_VEC_ELT (it, 0);
+         tree new_var = OMP_ITERATORS_VAR (it);
          remap_omp_iterator_var (&OMP_CLAUSE_DECL (c), old_var, new_var);
          remap_omp_iterator_var (&OMP_CLAUSE_SIZE (c), old_var, new_var);
        }
@@ -9958,10 +9958,10 @@ build_omp_iterators_loops (tree *list_p, gimple_seq 
*loops_seq_p)
       int elem_count = TREE_VEC_LENGTH (OMP_CLAUSE_ITERATORS (c));
       tree new_iterator = copy_omp_iterator (OMP_CLAUSE_ITERATORS (c),
                                             elem_count + 4);
-      TREE_VEC_ELT (new_iterator, elem_count) = loop.body_label;
-      TREE_VEC_ELT (new_iterator, elem_count + 1) = loop.index;
-      TREE_VEC_ELT (new_iterator, elem_count + 2) = elems;
-      TREE_VEC_ELT (new_iterator, elem_count + 3) = loop.count;
+      OMP_ITERATORS_LABEL (new_iterator) = loop.body_label;
+      OMP_ITERATORS_INDEX (new_iterator) = loop.index;
+      OMP_ITERATORS_ELEMS (new_iterator) = elems;
+      OMP_ITERATORS_COUNT (new_iterator) = loop.count;
       TREE_CHAIN (new_iterator) = TREE_CHAIN (OMP_CLAUSE_ITERATORS (c));
       OMP_CLAUSE_ITERATORS (c) = new_iterator;
 
@@ -10012,7 +10012,7 @@ enter_omp_iterator_loop_context_1 (tree iterator, 
gimple_seq *loops_seq_p)
          {
            glabel *label_stmt = as_a<glabel *> (stmt);
            tree label = gimple_label_label (label_stmt);
-           if (label == TREE_VEC_ELT (iterator, 6))
+           if (label == OMP_ITERATORS_LABEL (iterator))
              return loops_seq_p;
          }
          break;
@@ -10584,8 +10584,8 @@ extract_base_bit_offset (tree base, poly_int64 *bitposp,
         E.g. "array[i].field" gives "16" (say), not "i * 32 + 16".  */
       tree it;
       for (it = iterator; it; it = TREE_CHAIN (it))
-       base = simplify_replace_tree (base, TREE_VEC_ELT (it, 0),
-                                     TREE_VEC_ELT (it, 1));
+       base = simplify_replace_tree (base, OMP_ITERATORS_VAR (it),
+                                     OMP_ITERATORS_BEGIN (it));
     }
 
   base = get_inner_reference (base, &bitsize, &bitpos, &offset, &mode,
diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index d8522fb8aa79..f05015f62288 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -13669,8 +13669,8 @@ lower_omp_map_iterator_expr (tree expr, tree c, 
gomp_target *stmt)
     return expr;
 
   tree iterator = OMP_CLAUSE_ITERATORS (c);
-  tree index = TREE_VEC_ELT (iterator, 7);
-  tree elems = TREE_VEC_ELT (iterator, 8);
+  tree index = OMP_ITERATORS_INDEX (iterator);
+  tree elems = OMP_ITERATORS_ELEMS (iterator);
   gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
 
    /* IN LOOP BODY:  */
@@ -13706,8 +13706,8 @@ lower_omp_map_iterator_size (tree size, tree c, 
gomp_target *stmt)
     return size;
 
   tree iterator = OMP_CLAUSE_ITERATORS (c);
-  tree index = TREE_VEC_ELT (iterator, 7);
-  tree elems = TREE_VEC_ELT (iterator, 8);
+  tree index = OMP_ITERATORS_INDEX (iterator);
+  tree elems = OMP_ITERATORS_ELEMS (iterator);
   gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
 
   /* IN LOOP BODY:  */
@@ -13741,10 +13741,11 @@ allocate_omp_iterator_elems (tree clauses, gimple_seq 
loops_seq)
       if (!OMP_CLAUSE_HAS_ITERATORS (c))
        continue;
       tree iters = OMP_CLAUSE_ITERATORS (c);
-      tree elems = TREE_VEC_ELT (iters, 8);
+      tree elems = OMP_ITERATORS_ELEMS (iters);
       if (!POINTER_TYPE_P (TREE_TYPE (elems)))
        continue;
-      tree arr_length = omp_iterator_elems_length (TREE_VEC_ELT (iters, 9));
+      tree arr_length
+       = omp_iterator_elems_length (OMP_ITERATORS_COUNT (iters));
       tree call = builtin_decl_explicit (BUILT_IN_MALLOC);
       tree size = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MULT_EXPR,
                                   size_type_node, arr_length,
@@ -13753,7 +13754,7 @@ allocate_omp_iterator_elems (tree clauses, gimple_seq 
loops_seq)
                                      size);
 
       /* Find the first statement '<index> = -1' in the pre-loop statements.  
*/
-      tree index = TREE_VEC_ELT (iters, 7);
+      tree index = OMP_ITERATORS_INDEX (iters);
       gimple_stmt_iterator gsi;
       for (gsi = gsi_start (loops_seq); !gsi_end_p (gsi); gsi_next (&gsi))
        {
@@ -13778,7 +13779,7 @@ free_omp_iterator_elems (tree clauses, gimple_seq *seq)
     {
       if (!OMP_CLAUSE_HAS_ITERATORS (c))
        continue;
-      tree elems = TREE_VEC_ELT (OMP_CLAUSE_ITERATORS (c), 8);
+      tree elems = OMP_ITERATORS_ELEMS (OMP_CLAUSE_ITERATORS (c));
       if (!POINTER_TYPE_P (TREE_TYPE (elems)))
        continue;
       tree call = builtin_decl_explicit (BUILT_IN_FREE);
diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc
index 92cc734d9461..546bad2823dd 100644
--- a/gcc/tree-inline.cc
+++ b/gcc/tree-inline.cc
@@ -1462,8 +1462,8 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void 
*data)
              for (int i = 0; i <= 4; i++)
                walk_tree (&TREE_VEC_ELT (TREE_PURPOSE (t), i),
                           copy_tree_body_r, id, NULL);
-             if (TREE_VEC_ELT (TREE_PURPOSE (t), 5))
-               remap_block (&TREE_VEC_ELT (TREE_PURPOSE (t), 5), id);
+             if (OMP_ITERATORS_BLOCK (TREE_PURPOSE (t)))
+               remap_block (&OMP_ITERATORS_BLOCK (TREE_PURPOSE (t)), id);
              walk_tree (&TREE_VALUE (t), copy_tree_body_r, id, NULL);
            }
        }
diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc
index 4307c56df11c..f4fd25ca0737 100644
--- a/gcc/tree-pretty-print.cc
+++ b/gcc/tree-pretty-print.cc
@@ -437,27 +437,27 @@ dump_omp_iterators (pretty_printer *pp, tree iter, int 
spc, dump_flags_t flags)
     {
       if (it != iter)
        pp_string (pp, ", ");
-      dump_generic_node (pp, TREE_TYPE (TREE_VEC_ELT (it, 0)), spc, flags,
+      dump_generic_node (pp, TREE_TYPE (OMP_ITERATORS_VAR (it)), spc, flags,
                         false);
       pp_space (pp);
-      dump_generic_node (pp, TREE_VEC_ELT (it, 0), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_VAR (it), spc, flags, false);
       pp_equal (pp);
-      dump_generic_node (pp, TREE_VEC_ELT (it, 1), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_BEGIN (it), spc, flags, false);
       pp_colon (pp);
-      dump_generic_node (pp, TREE_VEC_ELT (it, 2), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_END (it), spc, flags, false);
       pp_colon (pp);
-      dump_generic_node (pp, TREE_VEC_ELT (it, 3), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_STEP (it), spc, flags, false);
     }
-  if (TREE_VEC_LENGTH (iter) > 6)
+  if (OMP_ITERATORS_EXPANDED_P (iter))
     {
       pp_string (pp, ", loop_label=");
-      dump_generic_node (pp, TREE_VEC_ELT (iter, 6), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_LABEL (iter), spc, flags, false);
       pp_string (pp, ", index=");
-      dump_generic_node (pp, TREE_VEC_ELT (iter, 7), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_INDEX (iter), spc, flags, false);
       pp_string (pp, ", elems=");
-      dump_generic_node (pp, TREE_VEC_ELT (iter, 8), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_ELEMS (iter), spc, flags, false);
       pp_string (pp, ", elems_count=");
-      dump_generic_node (pp, TREE_VEC_ELT (iter, 9), spc, flags, false);
+      dump_generic_node (pp, OMP_ITERATORS_COUNT (iter), spc, flags, false);
     }
   pp_right_paren (pp);
 }
diff --git a/gcc/tree.h b/gcc/tree.h
index e6268c1eb076..bbaee8b6a7d2 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1644,6 +1644,19 @@ class auto_suppress_location_wrappers
                                              OMP_CLAUSE_FROM,          \
                                              OMP_CLAUSE_MAP), 2)
 
+#define OMP_ITERATORS_VAR(NODE)                TREE_VEC_ELT (NODE, 0)
+#define OMP_ITERATORS_BEGIN(NODE)      TREE_VEC_ELT (NODE, 1)
+#define OMP_ITERATORS_END(NODE)                TREE_VEC_ELT (NODE, 2)
+#define OMP_ITERATORS_STEP(NODE)       TREE_VEC_ELT (NODE, 3)
+#define OMP_ITERATORS_ORIG_STEP(NODE)  TREE_VEC_ELT (NODE, 4)
+#define OMP_ITERATORS_BLOCK(NODE)      TREE_VEC_ELT (NODE, 5)
+#define OMP_ITERATORS_LABEL(NODE)      TREE_VEC_ELT (NODE, 6)
+#define OMP_ITERATORS_INDEX(NODE)      TREE_VEC_ELT (NODE, 7)
+#define OMP_ITERATORS_ELEMS(NODE)      TREE_VEC_ELT (NODE, 8)
+#define OMP_ITERATORS_COUNT(NODE)      TREE_VEC_ELT (NODE, 9)
+
+#define OMP_ITERATORS_EXPANDED_P(NODE) (TREE_VEC_LENGTH (NODE) > 6)
+
 /* True on OMP_FOR and other OpenMP/OpenACC looping constructs if the loop nest
    is non-rectangular.  */
 #define OMP_FOR_NON_RECTANGULAR(NODE) \

Reply via email to