Mercurial > hg > CbC > CbC_gcc
diff gcc/lto-streamer-in.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/lto-streamer-in.c Fri Oct 27 22:46:09 2017 +0900 +++ b/gcc/lto-streamer-in.c Thu Oct 25 07:37:49 2018 +0900 @@ -1,6 +1,6 @@ /* Read the GIMPLE representation from a file stream. - Copyright (C) 2009-2017 Free Software Foundation, Inc. + Copyright (C) 2009-2018 Free Software Foundation, Inc. Contributed by Kenneth Zadeck <zadeck@naturalbridge.com> Re-implemented by Diego Novillo <dnovillo@google.com> @@ -825,6 +825,7 @@ /* Read OMP SIMD related info. */ loop->safelen = streamer_read_hwi (ib); + loop->unroll = streamer_read_hwi (ib); loop->dont_vectorize = streamer_read_hwi (ib); loop->force_vectorize = streamer_read_hwi (ib); loop->simduid = stream_read_tree (ib, data_in); @@ -1012,6 +1013,14 @@ /* Input the function start and end loci. */ fn->function_start_locus = stream_input_location_now (&bp, data_in); fn->function_end_locus = stream_input_location_now (&bp, data_in); + + /* Restore the instance discriminators if present. */ + int instance_number = bp_unpack_value (&bp, 1); + if (instance_number) + { + instance_number = bp_unpack_value (&bp, sizeof (int) * CHAR_BIT); + maybe_create_decl_to_instance_map ()->put (fn->decl, instance_number); + } } @@ -1125,46 +1134,55 @@ Similarly remove all IFN_*SAN_* internal calls */ if (!flag_wpa) { - if (!MAY_HAVE_DEBUG_STMTS && is_gimple_debug (stmt)) + if (is_gimple_debug (stmt) + && (gimple_debug_nonbind_marker_p (stmt) + ? !MAY_HAVE_DEBUG_MARKER_STMTS + : !MAY_HAVE_DEBUG_BIND_STMTS)) remove = true; if (is_gimple_call (stmt) && gimple_call_internal_p (stmt)) { + bool replace = false; switch (gimple_call_internal_fn (stmt)) { case IFN_UBSAN_NULL: if ((flag_sanitize & (SANITIZE_NULL | SANITIZE_ALIGNMENT)) == 0) - remove = true; + replace = true; break; case IFN_UBSAN_BOUNDS: if ((flag_sanitize & SANITIZE_BOUNDS) == 0) - remove = true; + replace = true; break; case IFN_UBSAN_VPTR: if ((flag_sanitize & SANITIZE_VPTR) == 0) - remove = true; + replace = true; break; case IFN_UBSAN_OBJECT_SIZE: if ((flag_sanitize & SANITIZE_OBJECT_SIZE) == 0) - remove = true; + replace = true; break; case IFN_UBSAN_PTR: if ((flag_sanitize & SANITIZE_POINTER_OVERFLOW) == 0) - remove = true; + replace = true; break; case IFN_ASAN_MARK: if ((flag_sanitize & SANITIZE_ADDRESS) == 0) - remove = true; + replace = true; break; case IFN_TSAN_FUNC_EXIT: if ((flag_sanitize & SANITIZE_THREAD) == 0) - remove = true; + replace = true; break; default: break; } - gcc_assert (!remove || gimple_call_lhs (stmt) == NULL_TREE); + if (replace) + { + gimple_call_set_internal_fn (as_a <gcall *> (stmt), + IFN_NOP); + update_stmt (stmt); + } } } if (remove) @@ -1179,6 +1197,13 @@ { gsi_next (&bsi); stmts[gimple_uid (stmt)] = stmt; + + /* Remember that the input function has begin stmt + markers, so that we know to expect them when emitting + debug info. */ + if (!cfun->debug_nonbind_markers + && gimple_debug_nonbind_marker_p (stmt)) + cfun->debug_nonbind_markers = true; } } } @@ -1192,6 +1217,7 @@ gimple_set_body (fn_decl, bb_seq (ei_edge (ei)->dest)); } + update_max_bb_count (); fixup_call_stmt_edges (node, stmts); execute_all_ipa_stmt_fixups (node, stmts); @@ -1599,10 +1625,10 @@ { enum mode_class mclass = bp_unpack_enum (&bp, mode_class, MAX_MODE_CLASS); - unsigned int size = bp_unpack_value (&bp, 8); - unsigned int prec = bp_unpack_value (&bp, 16); + poly_uint16 size = bp_unpack_poly_value (&bp, 16); + poly_uint16 prec = bp_unpack_poly_value (&bp, 16); machine_mode inner = (machine_mode) bp_unpack_value (&bp, 8); - unsigned int nunits = bp_unpack_value (&bp, 8); + poly_uint16 nunits = bp_unpack_poly_value (&bp, 16); unsigned int ibit = 0, fbit = 0; unsigned int real_fmt_len = 0; const char *real_fmt_name = NULL; @@ -1633,14 +1659,14 @@ pass ? mr = (machine_mode) (mr + 1) : mr = GET_MODE_WIDER_MODE (mr).else_void ()) if (GET_MODE_CLASS (mr) != mclass - || GET_MODE_SIZE (mr) != size - || GET_MODE_PRECISION (mr) != prec + || maybe_ne (GET_MODE_SIZE (mr), size) + || maybe_ne (GET_MODE_PRECISION (mr), prec) || (inner == m ? GET_MODE_INNER (mr) != mr : GET_MODE_INNER (mr) != table[(int) inner]) || GET_MODE_IBIT (mr) != ibit || GET_MODE_FBIT (mr) != fbit - || GET_MODE_NUNITS (mr) != nunits) + || maybe_ne (GET_MODE_NUNITS (mr), nunits)) continue; else if ((mclass == MODE_FLOAT || mclass == MODE_DECIMAL_FLOAT) && strcmp (REAL_MODE_FORMAT (mr)->name, real_fmt_name) != 0) @@ -1657,6 +1683,7 @@ { switch (mclass) { + case MODE_VECTOR_BOOL: case MODE_VECTOR_INT: case MODE_VECTOR_FLOAT: case MODE_VECTOR_FRACT: