aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-streamer-out.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-11-29 11:36:10 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-11-29 11:36:10 +0100
commitc193f58b676e48bd96c62864a2da7843419e22e8 (patch)
tree03e83d5dac4b9d1257c9b47f47f7a4c745098503 /gcc/tree-streamer-out.c
parentfad7652e6e9077252612963bc5a0e35015df3753 (diff)
downloadgcc-c193f58b676e48bd96c62864a2da7843419e22e8.zip
gcc-c193f58b676e48bd96c62864a2da7843419e22e8.tar.gz
gcc-c193f58b676e48bd96c62864a2da7843419e22e8.tar.bz2
re PR lto/59326 (FAIL: gcc.dg/vect/vect-simd-clone-*.c)
PR lto/59326 * tree-core.h (enum omp_clause_schedule_kind): Add OMP_CLAUSE_SCHEDULE_LAST. (enum omp_clause_default_kind): Add OMP_CLAUSE_DEFAULT_LAST. (enum omp_clause_depend_kind): Add OMP_CLAUSE_DEPEND_LAST. (enum omp_clause_map_kind): Add OMP_CLAUSE_MAP_LAST. (enum omp_clause_proc_bind_kind): Add OMP_CLAUSE_PROC_BIND_LAST. * lto-streamer-out.c (lto_is_streamable): Allow streaming OMP_CLAUSE. (DFS_write_tree_body): Handle OMP_CLAUSE. * tree-streamer-out.c (pack_ts_omp_clause_value_fields): New function. (streamer_pack_tree_bitfields): Call it for OMP_CLAUSE. (write_ts_omp_clause_tree_pointers): New function. (streamer_write_tree_body): Call it for OMP_CLAUSE. (streamer_write_tree_header): For OMP_CLAUSE stream OMP_CLAUSE_CODE. * tree-streamer-in.c (unpack_ts_omp_clause_value_fields): New function. (unpack_value_fields): Call it for OMP_CLAUSE. (streamer_alloc_tree): Handle OMP_CLAUSE. (lto_input_ts_omp_clause_tree_pointers): New function. (streamer_read_tree_body): Call it for OMP_CLAUSE. lto/ * lto.c (mentions_vars_p_omp_clause): New function. (mentions_vars_p): Call it for OMP_CLAUSE. Remove break; after return stmts. From-SVN: r205512
Diffstat (limited to 'gcc/tree-streamer-out.c')
-rw-r--r--gcc/tree-streamer-out.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c
index 51a2c2b..b86092a 100644
--- a/gcc/tree-streamer-out.c
+++ b/gcc/tree-streamer-out.c
@@ -390,6 +390,46 @@ pack_ts_optimization (struct bitpack_d *bp, tree expr)
}
+/* Pack all the non-pointer fields of the TS_OMP_CLAUSE structure
+ of expression EXPR into bitpack BP. */
+
+static void
+pack_ts_omp_clause_value_fields (struct output_block *ob,
+ struct bitpack_d *bp, tree expr)
+{
+ stream_output_location (ob, bp, OMP_CLAUSE_LOCATION (expr));
+ switch (OMP_CLAUSE_CODE (expr))
+ {
+ case OMP_CLAUSE_DEFAULT:
+ bp_pack_enum (bp, omp_clause_default_kind, OMP_CLAUSE_DEFAULT_LAST,
+ OMP_CLAUSE_DEFAULT_KIND (expr));
+ break;
+ case OMP_CLAUSE_SCHEDULE:
+ bp_pack_enum (bp, omp_clause_schedule_kind, OMP_CLAUSE_SCHEDULE_LAST,
+ OMP_CLAUSE_SCHEDULE_KIND (expr));
+ break;
+ case OMP_CLAUSE_DEPEND:
+ bp_pack_enum (bp, omp_clause_depend_kind, OMP_CLAUSE_DEPEND_LAST,
+ OMP_CLAUSE_DEPEND_KIND (expr));
+ break;
+ case OMP_CLAUSE_MAP:
+ bp_pack_enum (bp, omp_clause_map_kind, OMP_CLAUSE_MAP_LAST,
+ OMP_CLAUSE_MAP_KIND (expr));
+ break;
+ case OMP_CLAUSE_PROC_BIND:
+ bp_pack_enum (bp, omp_clause_proc_bind_kind, OMP_CLAUSE_PROC_BIND_LAST,
+ OMP_CLAUSE_PROC_BIND_KIND (expr));
+ break;
+ case OMP_CLAUSE_REDUCTION:
+ bp_pack_enum (bp, tree_code, MAX_TREE_CODES,
+ OMP_CLAUSE_REDUCTION_CODE (expr));
+ break;
+ default:
+ break;
+ }
+}
+
+
/* Pack all the bitfields in EXPR into a bit pack. */
void
@@ -451,6 +491,9 @@ streamer_pack_tree_bitfields (struct output_block *ob,
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
bp_pack_var_len_unsigned (bp, CONSTRUCTOR_NELTS (expr));
+
+ if (code == OMP_CLAUSE)
+ pack_ts_omp_clause_value_fields (ob, bp, expr);
}
@@ -853,6 +896,29 @@ write_ts_constructor_tree_pointers (struct output_block *ob, tree expr,
}
}
+
+/* Write all pointer fields in the TS_OMP_CLAUSE structure of EXPR
+ to output block OB. If REF_P is true, write a reference to EXPR's
+ pointer fields. */
+
+static void
+write_ts_omp_clause_tree_pointers (struct output_block *ob, tree expr,
+ bool ref_p)
+{
+ int i;
+ for (i = 0; i < omp_clause_num_ops[OMP_CLAUSE_CODE (expr)]; i++)
+ stream_write_tree (ob, OMP_CLAUSE_OPERAND (expr, i), ref_p);
+ if (OMP_CLAUSE_CODE (expr) == OMP_CLAUSE_REDUCTION)
+ {
+ /* We don't stream these right now, handle it if streaming
+ of them is needed. */
+ gcc_assert (OMP_CLAUSE_REDUCTION_GIMPLE_INIT (expr) == NULL);
+ gcc_assert (OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (expr) == NULL);
+ }
+ stream_write_tree (ob, OMP_CLAUSE_CHAIN (expr), ref_p);
+}
+
+
/* Write all pointer fields in EXPR to output block OB. If REF_P is true,
the leaves of EXPR are emitted as references. */
@@ -915,6 +981,9 @@ streamer_write_tree_body (struct output_block *ob, tree expr, bool ref_p)
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
write_ts_constructor_tree_pointers (ob, expr, ref_p);
+
+ if (code == OMP_CLAUSE)
+ write_ts_omp_clause_tree_pointers (ob, expr, ref_p);
}
@@ -963,6 +1032,8 @@ streamer_write_tree_header (struct output_block *ob, tree expr)
streamer_write_uhwi (ob, BINFO_N_BASE_BINFOS (expr));
else if (TREE_CODE (expr) == CALL_EXPR)
streamer_write_uhwi (ob, call_expr_nargs (expr));
+ else if (TREE_CODE (expr) == OMP_CLAUSE)
+ streamer_write_uhwi (ob, OMP_CLAUSE_CODE (expr));
}