comparison gcc/var-tracking.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 /* Variable tracking routines for the GNU compiler. 1 /* Variable tracking routines for the GNU compiler.
2 Copyright (C) 2002-2018 Free Software Foundation, Inc. 2 Copyright (C) 2002-2020 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it 6 GCC is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by 7 under the terms of the GNU General Public License as published by
109 #include "reload.h" 109 #include "reload.h"
110 #include "calls.h" 110 #include "calls.h"
111 #include "tree-dfa.h" 111 #include "tree-dfa.h"
112 #include "tree-ssa.h" 112 #include "tree-ssa.h"
113 #include "cselib.h" 113 #include "cselib.h"
114 #include "params.h"
115 #include "tree-pretty-print.h" 114 #include "tree-pretty-print.h"
116 #include "rtl-iter.h" 115 #include "rtl-iter.h"
117 #include "fibonacci_heap.h" 116 #include "fibonacci_heap.h"
118 #include "print-rtl.h" 117 #include "print-rtl.h"
118 #include "function-abi.h"
119 119
120 typedef fibonacci_heap <long, basic_block_def> bb_heap_t; 120 typedef fibonacci_heap <long, basic_block_def> bb_heap_t;
121 typedef fibonacci_node <long, basic_block_def> bb_heap_node_t; 121 typedef fibonacci_node <long, basic_block_def> bb_heap_node_t;
122 122
123 /* var-tracking.c assumes that tree code with the same value as VALUE rtx code 123 /* var-tracking.c assumes that tree code with the same value as VALUE rtx code
927 or -1 if the replacement shouldn't be done. */ 927 or -1 if the replacement shouldn't be done. */
928 static poly_int64 hard_frame_pointer_adjustment = -1; 928 static poly_int64 hard_frame_pointer_adjustment = -1;
929 929
930 /* Data for adjust_mems callback. */ 930 /* Data for adjust_mems callback. */
931 931
932 struct adjust_mem_data 932 class adjust_mem_data
933 { 933 {
934 public:
934 bool store; 935 bool store;
935 machine_mode mem_mode; 936 machine_mode mem_mode;
936 HOST_WIDE_INT stack_adjust; 937 HOST_WIDE_INT stack_adjust;
937 auto_vec<rtx> side_effects; 938 auto_vec<rtx> side_effects;
938 }; 939 };
1028 /* Helper function for adjusting used MEMs. */ 1029 /* Helper function for adjusting used MEMs. */
1029 1030
1030 static rtx 1031 static rtx
1031 adjust_mems (rtx loc, const_rtx old_rtx, void *data) 1032 adjust_mems (rtx loc, const_rtx old_rtx, void *data)
1032 { 1033 {
1033 struct adjust_mem_data *amd = (struct adjust_mem_data *) data; 1034 class adjust_mem_data *amd = (class adjust_mem_data *) data;
1034 rtx mem, addr = loc, tem; 1035 rtx mem, addr = loc, tem;
1035 machine_mode mem_mode_save; 1036 machine_mode mem_mode_save;
1036 bool store_save; 1037 bool store_save;
1037 scalar_int_mode tem_mode, tem_subreg_mode; 1038 scalar_int_mode tem_mode, tem_subreg_mode;
1038 poly_int64 size; 1039 poly_int64 size;
1236 adjust_mem_data amd; 1237 adjust_mem_data amd;
1237 amd.mem_mode = VOIDmode; 1238 amd.mem_mode = VOIDmode;
1238 amd.stack_adjust = -VTI (bb)->out.stack_adjust; 1239 amd.stack_adjust = -VTI (bb)->out.stack_adjust;
1239 1240
1240 amd.store = true; 1241 amd.store = true;
1241 note_stores (PATTERN (insn), adjust_mem_stores, &amd); 1242 note_stores (insn, adjust_mem_stores, &amd);
1242 1243
1243 amd.store = false; 1244 amd.store = false;
1244 if (GET_CODE (PATTERN (insn)) == PARALLEL 1245 if (GET_CODE (PATTERN (insn)) == PARALLEL
1245 && asm_noperands (PATTERN (insn)) > 0 1246 && asm_noperands (PATTERN (insn)) > 0
1246 && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET) 1247 && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == SET)
4897 static void 4898 static void
4898 dataflow_set_clear_at_call (dataflow_set *set, rtx_insn *call_insn) 4899 dataflow_set_clear_at_call (dataflow_set *set, rtx_insn *call_insn)
4899 { 4900 {
4900 unsigned int r; 4901 unsigned int r;
4901 hard_reg_set_iterator hrsi; 4902 hard_reg_set_iterator hrsi;
4902 HARD_REG_SET invalidated_regs; 4903
4903 4904 HARD_REG_SET callee_clobbers
4904 get_call_reg_set_usage (call_insn, &invalidated_regs, 4905 = insn_callee_abi (call_insn).full_reg_clobbers ();
4905 regs_invalidated_by_call); 4906
4906 4907 EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, r, hrsi)
4907 EXECUTE_IF_SET_IN_HARD_REG_SET (invalidated_regs, 0, r, hrsi)
4908 var_regno_delete (set, r); 4908 var_regno_delete (set, r);
4909 4909
4910 if (MAY_HAVE_DEBUG_BIND_INSNS) 4910 if (MAY_HAVE_DEBUG_BIND_INSNS)
4911 { 4911 {
4912 set->traversed_vars = set->vars; 4912 set->traversed_vars = set->vars;
5841 /* We use this to keep too-complex expressions from being emitted as 5841 /* We use this to keep too-complex expressions from being emitted as
5842 location notes, and then to debug information. Users can trade 5842 location notes, and then to debug information. Users can trade
5843 compile time for ridiculously complex expressions, although they're 5843 compile time for ridiculously complex expressions, although they're
5844 seldom useful, and they may often have to be discarded as not 5844 seldom useful, and they may often have to be discarded as not
5845 representable anyway. */ 5845 representable anyway. */
5846 #define EXPR_USE_DEPTH (PARAM_VALUE (PARAM_MAX_VARTRACK_EXPR_DEPTH)) 5846 #define EXPR_USE_DEPTH (param_max_vartrack_expr_depth)
5847 5847
5848 /* Attempt to reverse the EXPR operation in the debug info and record 5848 /* Attempt to reverse the EXPR operation in the debug info and record
5849 it in the cselib table. Say for reg1 = reg2 + 6 even when reg2 is 5849 it in the cselib table. Say for reg1 = reg2 + 6 even when reg2 is
5850 no longer live we can express its value as VAL - 6. */ 5850 no longer live we can express its value as VAL - 6. */
5851 5851
5901 for (l = v->locs, count = 0; l; l = l->next, count++) 5901 for (l = v->locs, count = 0; l; l = l->next, count++)
5902 if (CONSTANT_P (l->loc) 5902 if (CONSTANT_P (l->loc)
5903 && (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0))) 5903 && (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0)))
5904 return; 5904 return;
5905 /* Avoid creating too large locs lists. */ 5905 /* Avoid creating too large locs lists. */
5906 else if (count == PARAM_VALUE (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE)) 5906 else if (count == param_max_vartrack_reverse_op_size)
5907 return; 5907 return;
5908 5908
5909 switch (GET_CODE (src)) 5909 switch (GET_CODE (src))
5910 { 5910 {
5911 case NOT: 5911 case NOT:
6290 #ifndef PCC_STATIC_STRUCT_RETURN 6290 #ifndef PCC_STATIC_STRUCT_RETURN
6291 if (aggregate_value_p (TREE_TYPE (type), type) 6291 if (aggregate_value_p (TREE_TYPE (type), type)
6292 && targetm.calls.struct_value_rtx (type, 0) == 0) 6292 && targetm.calls.struct_value_rtx (type, 0) == 0)
6293 { 6293 {
6294 tree struct_addr = build_pointer_type (TREE_TYPE (type)); 6294 tree struct_addr = build_pointer_type (TREE_TYPE (type));
6295 machine_mode mode = TYPE_MODE (struct_addr); 6295 function_arg_info arg (struct_addr, /*named=*/true);
6296 rtx reg; 6296 rtx reg;
6297 INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl, 6297 INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl,
6298 nargs + 1); 6298 nargs + 1);
6299 reg = targetm.calls.function_arg (args_so_far, mode, 6299 reg = targetm.calls.function_arg (args_so_far, arg);
6300 struct_addr, true); 6300 targetm.calls.function_arg_advance (args_so_far, arg);
6301 targetm.calls.function_arg_advance (args_so_far, mode,
6302 struct_addr, true);
6303 if (reg == NULL_RTX) 6301 if (reg == NULL_RTX)
6304 { 6302 {
6305 for (; link; link = XEXP (link, 1)) 6303 for (; link; link = XEXP (link, 1))
6306 if (GET_CODE (XEXP (link, 0)) == USE 6304 if (GET_CODE (XEXP (link, 0)) == USE
6307 && MEM_P (XEXP (XEXP (link, 0), 0))) 6305 && MEM_P (XEXP (XEXP (link, 0), 0)))
6315 #endif 6313 #endif
6316 INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl, 6314 INIT_CUMULATIVE_ARGS (args_so_far_v, type, NULL_RTX, fndecl,
6317 nargs); 6315 nargs);
6318 if (obj_type_ref && TYPE_ARG_TYPES (type) != void_list_node) 6316 if (obj_type_ref && TYPE_ARG_TYPES (type) != void_list_node)
6319 { 6317 {
6320 machine_mode mode;
6321 t = TYPE_ARG_TYPES (type); 6318 t = TYPE_ARG_TYPES (type);
6322 mode = TYPE_MODE (TREE_VALUE (t)); 6319 function_arg_info arg (TREE_VALUE (t), /*named=*/true);
6323 this_arg = targetm.calls.function_arg (args_so_far, mode, 6320 this_arg = targetm.calls.function_arg (args_so_far, arg);
6324 TREE_VALUE (t), true);
6325 if (this_arg && !REG_P (this_arg)) 6321 if (this_arg && !REG_P (this_arg))
6326 this_arg = NULL_RTX; 6322 this_arg = NULL_RTX;
6327 else if (this_arg == NULL_RTX) 6323 else if (this_arg == NULL_RTX)
6328 { 6324 {
6329 for (; link; link = XEXP (link, 1)) 6325 for (; link; link = XEXP (link, 1))
6386 rtx mem = x; 6382 rtx mem = x;
6387 cselib_val *val; 6383 cselib_val *val;
6388 6384
6389 if (!frame_pointer_needed) 6385 if (!frame_pointer_needed)
6390 { 6386 {
6391 struct adjust_mem_data amd; 6387 class adjust_mem_data amd;
6392 amd.mem_mode = VOIDmode; 6388 amd.mem_mode = VOIDmode;
6393 amd.stack_adjust = -VTI (bb)->out.stack_adjust; 6389 amd.stack_adjust = -VTI (bb)->out.stack_adjust;
6394 amd.store = true; 6390 amd.store = true;
6395 mem = simplify_replace_fn_rtx (mem, NULL_RTX, adjust_mems, 6391 mem = simplify_replace_fn_rtx (mem, NULL_RTX, adjust_mems,
6396 &amd); 6392 &amd);
6427 call_arguments 6423 call_arguments
6428 = gen_rtx_EXPR_LIST (VOIDmode, item, call_arguments); 6424 = gen_rtx_EXPR_LIST (VOIDmode, item, call_arguments);
6429 } 6425 }
6430 if (t && t != void_list_node) 6426 if (t && t != void_list_node)
6431 { 6427 {
6432 tree argtype = TREE_VALUE (t);
6433 machine_mode mode = TYPE_MODE (argtype);
6434 rtx reg; 6428 rtx reg;
6435 if (pass_by_reference (&args_so_far_v, mode, argtype, true)) 6429 function_arg_info arg (TREE_VALUE (t), /*named=*/true);
6436 { 6430 apply_pass_by_reference_rules (&args_so_far_v, arg);
6437 argtype = build_pointer_type (argtype); 6431 reg = targetm.calls.function_arg (args_so_far, arg);
6438 mode = TYPE_MODE (argtype); 6432 if (TREE_CODE (arg.type) == REFERENCE_TYPE
6439 } 6433 && INTEGRAL_TYPE_P (TREE_TYPE (arg.type))
6440 reg = targetm.calls.function_arg (args_so_far, mode,
6441 argtype, true);
6442 if (TREE_CODE (argtype) == REFERENCE_TYPE
6443 && INTEGRAL_TYPE_P (TREE_TYPE (argtype))
6444 && reg 6434 && reg
6445 && REG_P (reg) 6435 && REG_P (reg)
6446 && GET_MODE (reg) == mode 6436 && GET_MODE (reg) == arg.mode
6447 && (GET_MODE_CLASS (mode) == MODE_INT 6437 && (GET_MODE_CLASS (arg.mode) == MODE_INT
6448 || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT) 6438 || GET_MODE_CLASS (arg.mode) == MODE_PARTIAL_INT)
6449 && REG_P (x) 6439 && REG_P (x)
6450 && REGNO (x) == REGNO (reg) 6440 && REGNO (x) == REGNO (reg)
6451 && GET_MODE (x) == mode 6441 && GET_MODE (x) == arg.mode
6452 && item) 6442 && item)
6453 { 6443 {
6454 machine_mode indmode 6444 machine_mode indmode
6455 = TYPE_MODE (TREE_TYPE (argtype)); 6445 = TYPE_MODE (TREE_TYPE (arg.type));
6456 rtx mem = gen_rtx_MEM (indmode, x); 6446 rtx mem = gen_rtx_MEM (indmode, x);
6457 cselib_val *val = cselib_lookup (mem, indmode, 0, VOIDmode); 6447 cselib_val *val = cselib_lookup (mem, indmode, 0, VOIDmode);
6458 if (val && cselib_preserved_value_p (val)) 6448 if (val && cselib_preserved_value_p (val))
6459 { 6449 {
6460 item = gen_rtx_CONCAT (indmode, mem, val->val_rtx); 6450 item = gen_rtx_CONCAT (indmode, mem, val->val_rtx);
6490 } 6480 }
6491 break; 6481 break;
6492 } 6482 }
6493 } 6483 }
6494 } 6484 }
6495 targetm.calls.function_arg_advance (args_so_far, mode, 6485 targetm.calls.function_arg_advance (args_so_far, arg);
6496 argtype, true);
6497 t = TREE_CHAIN (t); 6486 t = TREE_CHAIN (t);
6498 } 6487 }
6499 } 6488 }
6500 6489
6501 /* Add debug arguments. */ 6490 /* Add debug arguments. */
6640 n1 = VTI (bb)->mos.length (); 6629 n1 = VTI (bb)->mos.length ();
6641 /* This will record NEXT_INSN (insn), such that we can 6630 /* This will record NEXT_INSN (insn), such that we can
6642 insert notes before it without worrying about any 6631 insert notes before it without worrying about any
6643 notes that MO_USEs might emit after the insn. */ 6632 notes that MO_USEs might emit after the insn. */
6644 cui.store_p = true; 6633 cui.store_p = true;
6645 note_stores (PATTERN (insn), add_stores, &cui); 6634 note_stores (insn, add_stores, &cui);
6646 n2 = VTI (bb)->mos.length () - 1; 6635 n2 = VTI (bb)->mos.length () - 1;
6647 mos = VTI (bb)->mos.address (); 6636 mos = VTI (bb)->mos.address ();
6648 6637
6649 /* Order the MO_VAL_USEs first (note_stores does nothing 6638 /* Order the MO_VAL_USEs first (note_stores does nothing
6650 on DEBUG_INSNs, so there are no MO_VAL_LOCs from this 6639 on DEBUG_INSNs, so there are no MO_VAL_LOCs from this
7062 edge e; 7051 edge e;
7063 int *bb_order; 7052 int *bb_order;
7064 int *rc_order; 7053 int *rc_order;
7065 int i; 7054 int i;
7066 int htabsz = 0; 7055 int htabsz = 0;
7067 int htabmax = PARAM_VALUE (PARAM_MAX_VARTRACK_SIZE); 7056 int htabmax = param_max_vartrack_size;
7068 bool success = true; 7057 bool success = true;
7069 7058
7070 timevar_push (TV_VAR_TRACKING_DATAFLOW); 7059 timevar_push (TV_VAR_TRACKING_DATAFLOW);
7071 /* Compute reverse completion order of depth first search of the CFG 7060 /* Compute reverse completion order of depth first search of the CFG
7072 so that the data-flow runs faster. */ 7061 so that the data-flow runs faster. */
7180 if (htabmax && htabsz > htabmax) 7169 if (htabmax && htabsz > htabmax)
7181 { 7170 {
7182 if (MAY_HAVE_DEBUG_BIND_INSNS) 7171 if (MAY_HAVE_DEBUG_BIND_INSNS)
7183 inform (DECL_SOURCE_LOCATION (cfun->decl), 7172 inform (DECL_SOURCE_LOCATION (cfun->decl),
7184 "variable tracking size limit exceeded with " 7173 "variable tracking size limit exceeded with "
7185 "-fvar-tracking-assignments, retrying without"); 7174 "%<-fvar-tracking-assignments%>, retrying without");
7186 else 7175 else
7187 inform (DECL_SOURCE_LOCATION (cfun->decl), 7176 inform (DECL_SOURCE_LOCATION (cfun->decl),
7188 "variable tracking size limit exceeded"); 7177 "variable tracking size limit exceeded");
7189 success = false; 7178 success = false;
7190 break; 7179 break;
7330 /* Print the information about variables from hash table VARS to dump file. */ 7319 /* Print the information about variables from hash table VARS to dump file. */
7331 7320
7332 static void 7321 static void
7333 dump_vars (variable_table_type *vars) 7322 dump_vars (variable_table_type *vars)
7334 { 7323 {
7335 if (vars->elements () > 0) 7324 if (!vars->is_empty ())
7336 { 7325 {
7337 fprintf (dump_file, "Variables:\n"); 7326 fprintf (dump_file, "Variables:\n");
7338 vars->traverse <void *, dump_var_tracking_slot> (NULL); 7327 vars->traverse <void *, dump_var_tracking_slot> (NULL);
7339 } 7328 }
7340 } 7329 }
8059 } 8048 }
8060 8049
8061 8050
8062 /* Structure for passing some other parameters to function 8051 /* Structure for passing some other parameters to function
8063 vt_expand_loc_callback. */ 8052 vt_expand_loc_callback. */
8064 struct expand_loc_callback_data 8053 class expand_loc_callback_data
8065 { 8054 {
8055 public:
8066 /* The variables and values active at this point. */ 8056 /* The variables and values active at this point. */
8067 variable_table_type *vars; 8057 variable_table_type *vars;
8068 8058
8069 /* Stack of values and debug_exprs under expansion, and their 8059 /* Stack of values and debug_exprs under expansion, and their
8070 children. */ 8060 children. */
8326 8316
8327 static inline rtx 8317 static inline rtx
8328 vt_expand_var_loc_chain (variable *var, bitmap regs, void *data, 8318 vt_expand_var_loc_chain (variable *var, bitmap regs, void *data,
8329 bool *pendrecp) 8319 bool *pendrecp)
8330 { 8320 {
8331 struct expand_loc_callback_data *elcd 8321 class expand_loc_callback_data *elcd
8332 = (struct expand_loc_callback_data *) data; 8322 = (class expand_loc_callback_data *) data;
8333 location_chain *loc, *next; 8323 location_chain *loc, *next;
8334 rtx result = NULL; 8324 rtx result = NULL;
8335 int first_child, result_first_child, last_child; 8325 int first_child, result_first_child, last_child;
8336 bool pending_recursion; 8326 bool pending_recursion;
8337 rtx loc_from = NULL; 8327 rtx loc_from = NULL;
8465 static rtx 8455 static rtx
8466 vt_expand_loc_callback (rtx x, bitmap regs, 8456 vt_expand_loc_callback (rtx x, bitmap regs,
8467 int max_depth ATTRIBUTE_UNUSED, 8457 int max_depth ATTRIBUTE_UNUSED,
8468 void *data) 8458 void *data)
8469 { 8459 {
8470 struct expand_loc_callback_data *elcd 8460 class expand_loc_callback_data *elcd
8471 = (struct expand_loc_callback_data *) data; 8461 = (class expand_loc_callback_data *) data;
8472 decl_or_value dv; 8462 decl_or_value dv;
8473 variable *var; 8463 variable *var;
8474 rtx result, subreg; 8464 rtx result, subreg;
8475 bool pending_recursion = false; 8465 bool pending_recursion = false;
8476 bool from_empty = false; 8466 bool from_empty = false;
8489 GET_MODE (SUBREG_REG (x)), 8479 GET_MODE (SUBREG_REG (x)),
8490 SUBREG_BYTE (x)); 8480 SUBREG_BYTE (x));
8491 8481
8492 /* Invalid SUBREGs are ok in debug info. ??? We could try 8482 /* Invalid SUBREGs are ok in debug info. ??? We could try
8493 alternate expansions for the VALUE as well. */ 8483 alternate expansions for the VALUE as well. */
8494 if (!result) 8484 if (!result && GET_MODE (subreg) != VOIDmode)
8495 result = gen_rtx_raw_SUBREG (GET_MODE (x), subreg, SUBREG_BYTE (x)); 8485 result = gen_rtx_raw_SUBREG (GET_MODE (x), subreg, SUBREG_BYTE (x));
8496 8486
8497 return result; 8487 return result;
8498 8488
8499 case DEBUG_EXPR: 8489 case DEBUG_EXPR:
8623 equivalences in VARS, updating their CUR_LOCs in the process. */ 8613 equivalences in VARS, updating their CUR_LOCs in the process. */
8624 8614
8625 static rtx 8615 static rtx
8626 vt_expand_loc (rtx loc, variable_table_type *vars) 8616 vt_expand_loc (rtx loc, variable_table_type *vars)
8627 { 8617 {
8628 struct expand_loc_callback_data data; 8618 class expand_loc_callback_data data;
8629 rtx result; 8619 rtx result;
8630 8620
8631 if (!MAY_HAVE_DEBUG_BIND_INSNS) 8621 if (!MAY_HAVE_DEBUG_BIND_INSNS)
8632 return loc; 8622 return loc;
8633 8623
8645 in VARS, updating their CUR_LOCs in the process. */ 8635 in VARS, updating their CUR_LOCs in the process. */
8646 8636
8647 static rtx 8637 static rtx
8648 vt_expand_1pvar (variable *var, variable_table_type *vars) 8638 vt_expand_1pvar (variable *var, variable_table_type *vars)
8649 { 8639 {
8650 struct expand_loc_callback_data data; 8640 class expand_loc_callback_data data;
8651 rtx loc; 8641 rtx loc;
8652 8642
8653 gcc_checking_assert (var->onepart && var->n_var_parts == 1); 8643 gcc_checking_assert (var->onepart && var->n_var_parts == 1);
8654 8644
8655 if (!dv_changed_p (var->dv)) 8645 if (!dv_changed_p (var->dv))
9058 shared_hash *vars) 9048 shared_hash *vars)
9059 { 9049 {
9060 emit_note_data data; 9050 emit_note_data data;
9061 variable_table_type *htab = shared_hash_htab (vars); 9051 variable_table_type *htab = shared_hash_htab (vars);
9062 9052
9063 if (!changed_variables->elements ()) 9053 if (changed_variables->is_empty ())
9064 return; 9054 return;
9065 9055
9066 if (MAY_HAVE_DEBUG_BIND_INSNS) 9056 if (MAY_HAVE_DEBUG_BIND_INSNS)
9067 process_changed_values (htab); 9057 process_changed_values (htab);
9068 9058
9536 vt_emit_notes (void) 9526 vt_emit_notes (void)
9537 { 9527 {
9538 basic_block bb; 9528 basic_block bb;
9539 dataflow_set cur; 9529 dataflow_set cur;
9540 9530
9541 gcc_assert (!changed_variables->elements ()); 9531 gcc_assert (changed_variables->is_empty ());
9542 9532
9543 /* Free memory occupied by the out hash tables, as they aren't used 9533 /* Free memory occupied by the out hash tables, as they aren't used
9544 anymore. */ 9534 anymore. */
9545 FOR_EACH_BB_FN (bb, cfun) 9535 FOR_EACH_BB_FN (bb, cfun)
9546 dataflow_set_clear (&VTI (bb)->out); 9536 dataflow_set_clear (&VTI (bb)->out);