This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Futher lto streaming cleanups


On Sun, May 29, 2011 at 12:29 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
> Hi,
> this patch makes us to use enum and variable length i/o at places it fits.
> Only non-standard thing is stremaing of built_in_class that does not allow adding
> LAST field or we get warning that the type no longer fits in the bitfield.

Please make it a #define with a comment then.

Ok with that change.

Thanks,
Richard.

> Bootstrapped/regtested x86_64-linux, OK?
>
> Honza
>
> ? ? ? ?* lto-streamer-out.c (pack_ts_fixed_cst_value_fields,
> ? ? ? ?pack_ts_decl_common_value_fields, pack_ts_decl_with_vis_value_fields,
> ? ? ? ?pack_ts_function_decl_value_fields, lto_output_builtin_tree,
> ? ? ? ?output_cfg, output_gimple_stmt): Use enum and variable length i/o.
> ? ? ? ?* lto-streamer-in.c (input_cfg, input_gimple_stmt,
> ? ? ? ?unpack_ts_fixed_cst_value_fields, unpack_ts_decl_common_value_fields,
> ? ? ? ?unpack_ts_decl_with_vis_value_fields,
> ? ? ? ?unpack_ts_type_common_value_fields, unpack_ts_block_value_fields,
> ? ? ? ?lto_get_builtin_tree): Use enum and variable length i/o.
> ? ? ? ?* basic-block.h (profile_status_d): Add PROFILE_LAST.
> ? ? ? ?* lto-streamer.h (bp_pack_int_in_range, bp_unpack_int_in_range):
> ? ? ? ?New functions.
> ? ? ? ?(bp_pack_enum, bp_unpack_enum): New macros.
> Index: lto-streamer-out.c
> ===================================================================
> *** lto-streamer-out.c ?(revision 174377)
> --- lto-streamer-out.c ?(working copy)
> *************** static void
> *** 372,380 ****
> ?pack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?struct fixed_value fv = TREE_FIXED_CST (expr);
> ! ? bp_pack_value (bp, fv.data.low, HOST_BITS_PER_WIDE_INT);
> ! ? bp_pack_value (bp, fv.data.high, HOST_BITS_PER_WIDE_INT);
> ! ? bp_pack_value (bp, fv.mode, HOST_BITS_PER_INT);
> ?}
>
>
> --- 372,380 ----
> ?pack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?struct fixed_value fv = TREE_FIXED_CST (expr);
> ! ? bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, fv.mode);
> ! ? bp_pack_var_len_int (bp, fv.data.low);
> ! ? bp_pack_var_len_int (bp, fv.data.high);
> ?}
>
>
> *************** pack_ts_fixed_cst_value_fields (struct b
> *** 384,390 ****
> ?static void
> ?pack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? bp_pack_value (bp, DECL_MODE (expr), 8);
> ? ?bp_pack_value (bp, DECL_NONLOCAL (expr), 1);
> ? ?bp_pack_value (bp, DECL_VIRTUAL_P (expr), 1);
> ? ?bp_pack_value (bp, DECL_IGNORED_P (expr), 1);
> --- 384,390 ----
> ?static void
> ?pack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, DECL_MODE (expr));
> ? ?bp_pack_value (bp, DECL_NONLOCAL (expr), 1);
> ? ?bp_pack_value (bp, DECL_VIRTUAL_P (expr), 1);
> ? ?bp_pack_value (bp, DECL_IGNORED_P (expr), 1);
> *************** pack_ts_decl_common_value_fields (struct
> *** 395,401 ****
> ? ?bp_pack_value (bp, DECL_DEBUG_EXPR_IS_FROM (expr), 1);
> ? ?bp_pack_value (bp, DECL_EXTERNAL (expr), 1);
> ? ?bp_pack_value (bp, DECL_GIMPLE_REG_P (expr), 1);
> ! ? bp_pack_value (bp, DECL_ALIGN (expr), HOST_BITS_PER_INT);
>
> ? ?if (TREE_CODE (expr) == LABEL_DECL)
> ? ? ?{
> --- 395,401 ----
> ? ?bp_pack_value (bp, DECL_DEBUG_EXPR_IS_FROM (expr), 1);
> ? ?bp_pack_value (bp, DECL_EXTERNAL (expr), 1);
> ? ?bp_pack_value (bp, DECL_GIMPLE_REG_P (expr), 1);
> ! ? bp_pack_var_len_unsigned (bp, DECL_ALIGN (expr));
>
> ? ?if (TREE_CODE (expr) == LABEL_DECL)
> ? ? ?{
> *************** pack_ts_decl_common_value_fields (struct
> *** 403,409 ****
> ? ? ? ? always assume an initial value of -1 so that the
> ? ? ? ? label_to_block_map is recreated by gimple_set_bb. ?*/
> ? ? ? ?bp_pack_value (bp, DECL_ERROR_ISSUED (expr), 1);
> ! ? ? ? bp_pack_value (bp, EH_LANDING_PAD_NR (expr), HOST_BITS_PER_INT);
> ? ? ?}
>
> ? ?if (TREE_CODE (expr) == FIELD_DECL)
> --- 403,409 ----
> ? ? ? ? always assume an initial value of -1 so that the
> ? ? ? ? label_to_block_map is recreated by gimple_set_bb. ?*/
> ? ? ? ?bp_pack_value (bp, DECL_ERROR_ISSUED (expr), 1);
> ! ? ? ? bp_pack_var_len_unsigned (bp, EH_LANDING_PAD_NR (expr));
> ? ? ?}
>
> ? ?if (TREE_CODE (expr) == FIELD_DECL)
> *************** pack_ts_decl_with_vis_value_fields (stru
> *** 460,466 ****
> ? ? ?}
>
> ? ?if (VAR_OR_FUNCTION_DECL_P (expr))
> ! ? ? bp_pack_value (bp, DECL_INIT_PRIORITY (expr), HOST_BITS_PER_SHORT);
> ?}
>
>
> --- 460,466 ----
> ? ? ?}
>
> ? ?if (VAR_OR_FUNCTION_DECL_P (expr))
> ! ? ? bp_pack_var_len_unsigned (bp, DECL_INIT_PRIORITY (expr));
> ?}
>
>
> *************** pack_ts_function_decl_value_fields (stru
> *** 474,481 ****
> ? ? ? should never be handled here. ?*/
> ? ?gcc_assert (!lto_stream_as_builtin_p (expr));
>
> ! ? bp_pack_value (bp, DECL_FUNCTION_CODE (expr), 11);
> ! ? bp_pack_value (bp, DECL_BUILT_IN_CLASS (expr), 2);
> ? ?bp_pack_value (bp, DECL_STATIC_CONSTRUCTOR (expr), 1);
> ? ?bp_pack_value (bp, DECL_STATIC_DESTRUCTOR (expr), 1);
> ? ?bp_pack_value (bp, DECL_UNINLINABLE (expr), 1);
> --- 474,481 ----
> ? ? ? should never be handled here. ?*/
> ? ?gcc_assert (!lto_stream_as_builtin_p (expr));
>
> ! ? bp_pack_enum (bp, built_in_class, BUILT_IN_NORMAL + 1,
> ! ? ? ? ? ? ? ? DECL_BUILT_IN_CLASS (expr));
> ? ?bp_pack_value (bp, DECL_STATIC_CONSTRUCTOR (expr), 1);
> ? ?bp_pack_value (bp, DECL_STATIC_DESTRUCTOR (expr), 1);
> ? ?bp_pack_value (bp, DECL_UNINLINABLE (expr), 1);
> *************** pack_ts_function_decl_value_fields (stru
> *** 492,499 ****
> ? ?bp_pack_value (bp, DECL_DISREGARD_INLINE_LIMITS (expr), 1);
> ? ?bp_pack_value (bp, DECL_PURE_P (expr), 1);
> ? ?bp_pack_value (bp, DECL_LOOPING_CONST_OR_PURE_P (expr), 1);
> ? ?if (DECL_STATIC_DESTRUCTOR (expr))
> ! ? ? bp_pack_value (bp, DECL_FINI_PRIORITY (expr), HOST_BITS_PER_SHORT);
> ?}
>
>
> --- 492,501 ----
> ? ?bp_pack_value (bp, DECL_DISREGARD_INLINE_LIMITS (expr), 1);
> ? ?bp_pack_value (bp, DECL_PURE_P (expr), 1);
> ? ?bp_pack_value (bp, DECL_LOOPING_CONST_OR_PURE_P (expr), 1);
> + ? if (DECL_BUILT_IN_CLASS (expr) != NOT_BUILT_IN)
> + ? ? bp_pack_value (bp, DECL_FUNCTION_CODE (expr), 11);
> ? ?if (DECL_STATIC_DESTRUCTOR (expr))
> ! ? ? bp_pack_var_len_unsigned (bp, DECL_FINI_PRIORITY (expr));
> ?}
>
>
> *************** pack_ts_function_decl_value_fields (stru
> *** 503,510 ****
> ?static void
> ?pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? bp_pack_value (bp, TYPE_PRECISION (expr), 10);
> ! ? bp_pack_value (bp, TYPE_MODE (expr), 8);
> ? ?bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
> ? ?bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1);
> ? ?bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
> --- 505,511 ----
> ?static void
> ?pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? bp_pack_enum (bp, machine_mode, MAX_MACHINE_MODE, TYPE_MODE (expr));
> ? ?bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
> ? ?bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1);
> ? ?bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
> *************** pack_ts_type_common_value_fields (struct
> *** 515,520 ****
> --- 516,522 ----
> ? ?bp_pack_value (bp, TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr), 2);
> ? ?bp_pack_value (bp, TYPE_USER_ALIGN (expr), 1);
> ? ?bp_pack_value (bp, TYPE_READONLY (expr), 1);
> + ? bp_pack_var_len_unsigned (bp, TYPE_PRECISION (expr));
> ? ?bp_pack_var_len_unsigned (bp, TYPE_ALIGN (expr));
> ? ?bp_pack_var_len_int (bp, TYPE_ALIAS_SET (expr) == 0 ? 0 : -1);
> ?}
> *************** static void
> *** 527,533 ****
> ?pack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?bp_pack_value (bp, BLOCK_ABSTRACT (expr), 1);
> ! ? bp_pack_value (bp, BLOCK_NUMBER (expr), 31);
> ?}
>
> ?/* Pack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL structure
> --- 529,535 ----
> ?pack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?bp_pack_value (bp, BLOCK_ABSTRACT (expr), 1);
> ! ? /* BLOCK_NUMBER is recomputed. ?*/
> ?}
>
> ?/* Pack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL structure
> *************** lto_output_builtin_tree (struct output_b
> *** 1339,1345 ****
> ? ? ? ? ? "functions on this target");
>
> ? ?output_record_start (ob, LTO_builtin_decl);
> ! ? output_uleb128 (ob, DECL_BUILT_IN_CLASS (expr));
> ? ?output_uleb128 (ob, DECL_FUNCTION_CODE (expr));
>
> ? ?if (DECL_ASSEMBLER_NAME_SET_P (expr))
> --- 1341,1348 ----
> ? ? ? ? ? "functions on this target");
>
> ? ?output_record_start (ob, LTO_builtin_decl);
> ! ? lto_output_enum (ob->main_stream, built_in_class, BUILT_IN_NORMAL + 1,
> ! ? ? ? ? ? ? ? ? ?DECL_BUILT_IN_CLASS (expr));
> ? ?output_uleb128 (ob, DECL_FUNCTION_CODE (expr));
>
> ? ?if (DECL_ASSEMBLER_NAME_SET_P (expr))
> *************** output_cfg (struct output_block *ob, str
> *** 1660,1666 ****
>
> ? ?ob->main_stream = ob->cfg_stream;
>
> ! ? output_uleb128 (ob, profile_status_for_function (fn));
>
> ? ?/* Output the number of the highest basic block. ?*/
> ? ?output_uleb128 (ob, last_basic_block_for_function (fn));
> --- 1663,1670 ----
>
> ? ?ob->main_stream = ob->cfg_stream;
>
> ! ? lto_output_enum (ob->main_stream, profile_status_d, PROFILE_LAST,
> ! ? ? ? ? ? ? ? ? ?profile_status_for_function (fn));
>
> ? ?/* Output the number of the highest basic block. ?*/
> ? ?output_uleb128 (ob, last_basic_block_for_function (fn));
> *************** output_gimple_stmt (struct output_block
> *** 1734,1745 ****
>
> ? ?/* Emit the tuple header. ?*/
> ? ?bp = bitpack_create (ob->main_stream);
> ! ? bp_pack_value (&bp, gimple_num_ops (stmt), sizeof (unsigned) * 8);
> ? ?bp_pack_value (&bp, gimple_no_warning_p (stmt), 1);
> ? ?if (is_gimple_assign (stmt))
> ? ? ?bp_pack_value (&bp, gimple_assign_nontemporal_move_p (stmt), 1);
> ? ?bp_pack_value (&bp, gimple_has_volatile_ops (stmt), 1);
> ! ? bp_pack_value (&bp, stmt->gsbase.subcode, 16);
> ? ?lto_output_bitpack (&bp);
>
> ? ?/* Emit location information for the statement. ?*/
> --- 1738,1749 ----
>
> ? ?/* Emit the tuple header. ?*/
> ? ?bp = bitpack_create (ob->main_stream);
> ! ? bp_pack_var_len_unsigned (&bp, gimple_num_ops (stmt));
> ? ?bp_pack_value (&bp, gimple_no_warning_p (stmt), 1);
> ? ?if (is_gimple_assign (stmt))
> ? ? ?bp_pack_value (&bp, gimple_assign_nontemporal_move_p (stmt), 1);
> ? ?bp_pack_value (&bp, gimple_has_volatile_ops (stmt), 1);
> ! ? bp_pack_var_len_unsigned (&bp, stmt->gsbase.subcode);
> ? ?lto_output_bitpack (&bp);
>
> ? ?/* Emit location information for the statement. ?*/
> *************** output_gimple_stmt (struct output_block
> *** 1808,1814 ****
> ? ? ? ?if (is_gimple_call (stmt))
> ? ? ? ?{
> ? ? ? ? ?if (gimple_call_internal_p (stmt))
> ! ? ? ? ? ? output_sleb128 (ob, (int) gimple_call_internal_fn (stmt));
> ? ? ? ? ?else
> ? ? ? ? ? ?lto_output_tree_ref (ob, gimple_call_fntype (stmt));
> ? ? ? ?}
> --- 1812,1819 ----
> ? ? ? ?if (is_gimple_call (stmt))
> ? ? ? ?{
> ? ? ? ? ?if (gimple_call_internal_p (stmt))
> ! ? ? ? ? ? lto_output_enum (ob->main_stream, internal_fn,
> ! ? ? ? ? ? ? ? ? ? ? ? ? ? ?IFN_LAST, gimple_call_internal_fn (stmt));
> ? ? ? ? ?else
> ? ? ? ? ? ?lto_output_tree_ref (ob, gimple_call_fntype (stmt));
> ? ? ? ?}
> Index: lto-streamer-in.c
> ===================================================================
> *** lto-streamer-in.c ? (revision 174377)
> --- lto-streamer-in.c ? (working copy)
> *************** input_cfg (struct lto_input_block *ib, s
> *** 798,805 ****
> ? ?init_empty_tree_cfg_for_function (fn);
> ? ?init_ssa_operands ();
>
> ! ? profile_status_for_function (fn) =
> ! ? ? (enum profile_status_d) lto_input_uleb128 (ib);
>
> ? ?bb_count = lto_input_uleb128 (ib);
>
> --- 798,804 ----
> ? ?init_empty_tree_cfg_for_function (fn);
> ? ?init_ssa_operands ();
>
> ! ? profile_status_for_function (fn) = lto_input_enum (ib, profile_status_d, PROFILE_LAST);
>
> ? ?bb_count = lto_input_uleb128 (ib);
>
> *************** input_gimple_stmt (struct lto_input_bloc
> *** 960,972 ****
>
> ? ?/* Read the tuple header. ?*/
> ? ?bp = lto_input_bitpack (ib);
> ! ? num_ops = bp_unpack_value (&bp, sizeof (unsigned) * 8);
> ? ?stmt = gimple_alloc (code, num_ops);
> ? ?stmt->gsbase.no_warning = bp_unpack_value (&bp, 1);
> ? ?if (is_gimple_assign (stmt))
> ? ? ?stmt->gsbase.nontemporal_move = bp_unpack_value (&bp, 1);
> ? ?stmt->gsbase.has_volatile_ops = bp_unpack_value (&bp, 1);
> ! ? stmt->gsbase.subcode = bp_unpack_value (&bp, 16);
>
> ? ?/* Read location information. ?*/
> ? ?gimple_set_location (stmt, lto_input_location (ib, data_in));
> --- 959,971 ----
>
> ? ?/* Read the tuple header. ?*/
> ? ?bp = lto_input_bitpack (ib);
> ! ? num_ops = bp_unpack_var_len_unsigned (&bp);
> ? ?stmt = gimple_alloc (code, num_ops);
> ? ?stmt->gsbase.no_warning = bp_unpack_value (&bp, 1);
> ? ?if (is_gimple_assign (stmt))
> ? ? ?stmt->gsbase.nontemporal_move = bp_unpack_value (&bp, 1);
> ? ?stmt->gsbase.has_volatile_ops = bp_unpack_value (&bp, 1);
> ! ? stmt->gsbase.subcode = bp_unpack_var_len_unsigned (&bp);
>
> ? ?/* Read location information. ?*/
> ? ?gimple_set_location (stmt, lto_input_location (ib, data_in));
> *************** input_gimple_stmt (struct lto_input_bloc
> *** 1090,1096 ****
> ? ? ? ?{
> ? ? ? ? ?if (gimple_call_internal_p (stmt))
> ? ? ? ? ? ?gimple_call_set_internal_fn
> ! ? ? ? ? ? ? (stmt, (enum internal_fn) lto_input_sleb128 (ib));
> ? ? ? ? ?else
> ? ? ? ? ? ?gimple_call_set_fntype (stmt, lto_input_tree (ib, data_in));
> ? ? ? ?}
> --- 1089,1095 ----
> ? ? ? ?{
> ? ? ? ? ?if (gimple_call_internal_p (stmt))
> ? ? ? ? ? ?gimple_call_set_internal_fn
> ! ? ? ? ? ? ? (stmt, lto_input_enum (ib, internal_fn, IFN_LAST));
> ? ? ? ? ?else
> ? ? ? ? ? ?gimple_call_set_fntype (stmt, lto_input_tree (ib, data_in));
> ? ? ? ?}
> *************** unpack_ts_fixed_cst_value_fields (struct
> *** 1638,1646 ****
> ?{
> ? ?struct fixed_value fv;
>
> ! ? fv.data.low = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
> ! ? fv.data.high = (HOST_WIDE_INT) bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);
> ! ? fv.mode = (enum machine_mode) bp_unpack_value (bp, HOST_BITS_PER_INT);
> ? ?TREE_FIXED_CST (expr) = fv;
> ?}
>
> --- 1637,1645 ----
> ?{
> ? ?struct fixed_value fv;
>
> ! ? fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
> ! ? fv.data.low = bp_unpack_var_len_int (bp);
> ! ? fv.data.high = bp_unpack_var_len_int (bp);
> ? ?TREE_FIXED_CST (expr) = fv;
> ?}
>
> *************** unpack_ts_fixed_cst_value_fields (struct
> *** 1651,1657 ****
> ?static void
> ?unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? DECL_MODE (expr) = (enum machine_mode) bp_unpack_value (bp, 8);
> ? ?DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> --- 1650,1656 ----
> ?static void
> ?unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? DECL_MODE (expr) = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
> ? ?DECL_NONLOCAL (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_VIRTUAL_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_IGNORED_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> *************** unpack_ts_decl_common_value_fields (stru
> *** 1662,1673 ****
> ? ?DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? DECL_ALIGN (expr) = (unsigned) bp_unpack_value (bp, HOST_BITS_PER_INT);
>
> ? ?if (TREE_CODE (expr) == LABEL_DECL)
> ? ? ?{
> ? ? ? ?DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? ? ? EH_LANDING_PAD_NR (expr) = (int) bp_unpack_value (bp, HOST_BITS_PER_INT);
>
> ? ? ? ?/* Always assume an initial value of -1 for LABEL_DECL_UID to
> ? ? ? ? force gimple_set_bb to recreate label_to_block_map. ?*/
> --- 1661,1672 ----
> ? ?DECL_DEBUG_EXPR_IS_FROM (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? DECL_ALIGN (expr) = (unsigned) bp_unpack_var_len_unsigned (bp);
>
> ? ?if (TREE_CODE (expr) == LABEL_DECL)
> ? ? ?{
> ? ? ? ?DECL_ERROR_ISSUED (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? ? ? EH_LANDING_PAD_NR (expr) = (int) bp_unpack_var_len_unsigned (bp);
>
> ? ? ? ?/* Always assume an initial value of -1 for LABEL_DECL_UID to
> ? ? ? ? force gimple_set_bb to recreate label_to_block_map. ?*/
> *************** unpack_ts_decl_with_vis_value_fields (st
> *** 1730,1736 ****
> ? ?if (VAR_OR_FUNCTION_DECL_P (expr))
> ? ? ?{
> ? ? ? ?priority_type p;
> ! ? ? ? p = (priority_type) bp_unpack_value (bp, HOST_BITS_PER_SHORT);
> ? ? ? ?SET_DECL_INIT_PRIORITY (expr, p);
> ? ? ?}
> ?}
> --- 1729,1735 ----
> ? ?if (VAR_OR_FUNCTION_DECL_P (expr))
> ? ? ?{
> ? ? ? ?priority_type p;
> ! ? ? ? p = (priority_type) bp_unpack_var_len_unsigned (bp);
> ? ? ? ?SET_DECL_INIT_PRIORITY (expr, p);
> ? ? ?}
> ?}
> *************** unpack_ts_decl_with_vis_value_fields (st
> *** 1742,1749 ****
> ?static void
> ?unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp, 11);
> ! ? DECL_BUILT_IN_CLASS (expr) = (enum built_in_class) bp_unpack_value (bp, 2);
> ? ?DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
> --- 1741,1748 ----
> ?static void
> ?unpack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ! ? DECL_BUILT_IN_CLASS (expr) = bp_unpack_enum (bp, built_in_class,
> ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?BUILT_IN_NORMAL + 1);
> ? ?DECL_STATIC_CONSTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_STATIC_DESTRUCTOR (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_UNINLINABLE (expr) = (unsigned) bp_unpack_value (bp, 1);
> *************** unpack_ts_function_decl_value_fields (st
> *** 1761,1770 ****
> ? ?DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?if (DECL_STATIC_DESTRUCTOR (expr))
> ? ? ?{
> ! ? ? ? ?priority_type p = (priority_type) bp_unpack_value (bp, HOST_BITS_PER_SHORT);
> ! ? ? ? ?SET_DECL_FINI_PRIORITY (expr, p);
> ? ? ?}
> ?}
>
> --- 1760,1783 ----
> ? ?DECL_DISREGARD_INLINE_LIMITS (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?DECL_LOOPING_CONST_OR_PURE_P (expr) = (unsigned) bp_unpack_value (bp, 1);
> + ? if (DECL_BUILT_IN_CLASS (expr) != NOT_BUILT_IN)
> + ? ? {
> + ? ? ? DECL_FUNCTION_CODE (expr) = (enum built_in_function) bp_unpack_value (bp, 11);
> + ? ? ? if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_NORMAL
> + ? ? ? ? && DECL_FUNCTION_CODE (expr) >= END_BUILTINS)
> + ? ? ? fatal_error ("machine independent builtin code out of range");
> + ? ? ? else if (DECL_BUILT_IN_CLASS (expr) == BUILT_IN_MD)
> + ? ? ? {
> + ? ? ? ? ? tree result = targetm.builtin_decl (DECL_FUNCTION_CODE (expr), true);
> + ? ? ? ? if (!result || result == error_mark_node)
> + ? ? ? ? ? fatal_error ("target specific builtin not available");
> + ? ? ? }
> + ? ? }
> ? ?if (DECL_STATIC_DESTRUCTOR (expr))
> ? ? ?{
> ! ? ? ? priority_type p;
> ! ? ? ? p = (priority_type) bp_unpack_var_len_unsigned (bp);
> ! ? ? ? SET_DECL_FINI_PRIORITY (expr, p);
> ? ? ?}
> ?}
>
> *************** unpack_ts_type_common_value_fields (stru
> *** 1777,1784 ****
> ?{
> ? ?enum machine_mode mode;
>
> ! ? TYPE_PRECISION (expr) = (unsigned) bp_unpack_value (bp, 10);
> ! ? mode = (enum machine_mode) bp_unpack_value (bp, 8);
> ? ?SET_TYPE_MODE (expr, mode);
> ? ?TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
> --- 1790,1796 ----
> ?{
> ? ?enum machine_mode mode;
>
> ! ? mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
> ? ?SET_TYPE_MODE (expr, mode);
> ? ?TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1);
> *************** unpack_ts_type_common_value_fields (stru
> *** 1791,1796 ****
> --- 1803,1809 ----
> ? ? ? ?= (unsigned) bp_unpack_value (bp, 2);
> ? ?TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
> ? ?TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
> + ? TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp);
> ? ?TYPE_ALIGN (expr) = bp_unpack_var_len_unsigned (bp);
> ? ?TYPE_ALIAS_SET (expr) = bp_unpack_var_len_int (bp);
> ?}
> *************** static void
> *** 1803,1809 ****
> ?unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? BLOCK_NUMBER (expr) = (unsigned) bp_unpack_value (bp, 31);
> ?}
>
> ?/* Unpack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL
> --- 1816,1822 ----
> ?unpack_ts_block_value_fields (struct bitpack_d *bp, tree expr)
> ?{
> ? ?BLOCK_ABSTRACT (expr) = (unsigned) bp_unpack_value (bp, 1);
> ! ? /* BLOCK_NUMBER is recomputed. ?*/
> ?}
>
> ?/* Unpack all the non-pointer fields of the TS_TRANSLATION_UNIT_DECL
> *************** lto_get_builtin_tree (struct lto_input_b
> *** 2603,2616 ****
> ? ?const char *asmname;
> ? ?tree result;
>
> ! ? fclass = (enum built_in_class) lto_input_uleb128 (ib);
> ? ?gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
>
> ? ?fcode = (enum built_in_function) lto_input_uleb128 (ib);
>
> ? ?if (fclass == BUILT_IN_NORMAL)
> ? ? ?{
> ! ? ? ? gcc_assert (fcode < END_BUILTINS);
> ? ? ? ?result = built_in_decls[fcode];
> ? ? ? ?gcc_assert (result);
> ? ? ?}
> --- 2616,2630 ----
> ? ?const char *asmname;
> ? ?tree result;
>
> ! ? fclass = lto_input_enum (ib, built_in_class, BUILT_IN_NORMAL + 1);
> ? ?gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD);
>
> ? ?fcode = (enum built_in_function) lto_input_uleb128 (ib);
>
> ? ?if (fclass == BUILT_IN_NORMAL)
> ? ? ?{
> ! ? ? ? if (fcode >= END_BUILTINS)
> ! ? ? ? fatal_error ("machine independent builtin code out of range");
> ? ? ? ?result = built_in_decls[fcode];
> ? ? ? ?gcc_assert (result);
> ? ? ?}
> Index: basic-block.h
> ===================================================================
> *** basic-block.h ? ? ? (revision 174377)
> --- basic-block.h ? ? ? (working copy)
> *************** enum profile_status_d
> *** 283,289 ****
> ?{
> ? ?PROFILE_ABSENT,
> ? ?PROFILE_GUESSED,
> ! ? PROFILE_READ
> ?};
>
> ?/* A structure to group all the per-function control flow graph data.
> --- 283,290 ----
> ?{
> ? ?PROFILE_ABSENT,
> ? ?PROFILE_GUESSED,
> ! ? PROFILE_READ,
> ! ? PROFILE_LAST ? ? ? ?/* Last value, used by profile streaming. ?*/
> ?};
>
> ?/* A structure to group all the per-function control flow graph data.
> Index: lto-streamer.h
> ===================================================================
> *** lto-streamer.h ? ? ?(revision 174377)
> --- lto-streamer.h ? ? ?(working copy)
> *************** lto_input_int_in_range (struct lto_input
> *** 1262,1267 ****
> --- 1262,1308 ----
> ? ?return val;
> ?}
>
> +
> + /* Output VAL into BP and verify it is in range MIN...MAX that is supposed
> + ? ?to be compile time constant.
> + ? ?Be host independent, limit range to 31bits. ?*/
> +
> + static inline void
> + bp_pack_int_in_range (struct bitpack_d *bp,
> + ? ? ? ? ? ? ? ? ? ? HOST_WIDE_INT min,
> + ? ? ? ? ? ? ? ? ? ? HOST_WIDE_INT max,
> + ? ? ? ? ? ? ? ? ? ? HOST_WIDE_INT val)
> + {
> + ? HOST_WIDE_INT range = max - min;
> + ? int nbits = floor_log2 (range) + 1;
> +
> + ? gcc_checking_assert (val >= min && val <= max && range > 0
> + ? ? ? ? ? ? ? ? ? ? ?&& range < 0x7fffffff);
> +
> + ? val -= min;
> + ? bp_pack_value (bp, val, nbits);
> + }
> +
> + /* Input VAL into BP and verify it is in range MIN...MAX that is supposed
> + ? ?to be compile time constant. ?PURPOSE is used for error reporting. ?*/
> +
> + static inline HOST_WIDE_INT
> + bp_unpack_int_in_range (struct bitpack_d *bp,
> + ? ? ? ? ? ? ? ? ? ? ? const char *purpose,
> + ? ? ? ? ? ? ? ? ? ? ? HOST_WIDE_INT min,
> + ? ? ? ? ? ? ? ? ? ? ? HOST_WIDE_INT max)
> + {
> + ? HOST_WIDE_INT range = max - min;
> + ? int nbits = floor_log2 (range) + 1;
> + ? HOST_WIDE_INT val = bp_unpack_value (bp, nbits);
> +
> + ? gcc_checking_assert (range > 0 && range < 0x7fffffff);
> +
> + ? if (val < min || val > max)
> + ? ? lto_value_range_error (purpose, val, min, max);
> + ? return val;
> + }
> +
> ?/* Output VAL of type "enum enum_name" into OBS.
> ? ? Assume range 0...ENUM_LAST - 1. ?*/
> ?#define lto_output_enum(obs,enum_name,enum_last,val) \
> *************** lto_input_int_in_range (struct lto_input
> *** 1273,1276 ****
> --- 1314,1328 ----
> ? ?(enum enum_name)lto_input_int_in_range ((ib), #enum_name, 0, \
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(enum_last) - 1)
>
> + /* Output VAL of type "enum enum_name" into BP.
> + ? ?Assume range 0...ENUM_LAST - 1. ?*/
> + #define bp_pack_enum(bp,enum_name,enum_last,val) \
> + ? bp_pack_int_in_range ((bp), 0, (int)(enum_last) - 1, (int)(val))
> +
> + /* Input enum of type "enum enum_name" from BP.
> + ? ?Assume range 0...ENUM_LAST - 1. ?*/
> + #define bp_unpack_enum(bp,enum_name,enum_last) \
> + ? (enum enum_name)bp_unpack_int_in_range ((bp), #enum_name, 0, \
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (int)(enum_last) - 1)
> +
> ?#endif /* GCC_LTO_STREAMER_H ?*/
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]