diff options
author | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-21 18:55:13 +0000 |
---|---|---|
committer | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-21 18:55:13 +0000 |
commit | bf1f8fbc605e7217a2793f417e54ef3946a655ad (patch) | |
tree | 7a1b19b42f86a47fffcfe11926a453b8d560f7dd /gcc/df-scan.c | |
parent | 772236db27f9c3dcb7a28a0d26d6134b63dffe18 (diff) | |
download | gcc-bf1f8fbc605e7217a2793f417e54ef3946a655ad.tar.gz |
2008-04-24 Richard Sandiford <rsandifo@nildram.co.uk>
Kenneth Zadeck <zadeck@naturalbridge.com>
* dbgcnt.def (ra_byte_scan): Added.
* dbgcnt.c (dbg_cnt): Added code to print message to dump_file
when the last hit happens for a counter.
* timevar.def (TV_DF_BYTE_LR): New variable.
* tree-pass.h (pass_fast_rtl_byte_dce): New pass.
* passes.c (pass_fast_rtl_byte_dce): New pass.
* fwprop.c (update_df): Added mode to call df_ref_create.
Renamed DF_REF_WIDTH and DF_REF_OFFSET to DF_REF_EXTRACT_WIDTH and
DF_REF_EXTRACT_OFFSET.
* df.h (DF_BYTE_LR, DF_BYTE_LR_BB_INFO, DF_BYTE_LR_IN,
DF_BYTE_LR_OUT, df_byte_lr): New macro.
(df_mm): New enum.
(df_ref_extract): Added mode field.
(DF_REF_WIDTH, DF_REF_OFFSET) Renamed to DF_REF_EXTRACT_WIDTH and
DF_REF_EXTRACT_OFFSET.
(DF_REF_EXTRACT_MODE): New macro.
(df_byte_lr_bb_info): New structure.
(df_print_byte_regset, df_compute_accessed_bytes,
df_byte_lr_add_problem, df_byte_lr_get_regno_start,
df_byte_lr_get_regno_len, df_byte_lr_simulate_defs,
df_byte_lr_simulate_uses,
df_byte_lr_simulate_artificial_refs_at_top,
df_byte_lr_simulate_artificial_refs_at_end,
df_compute_accessed_bytes): New function.
(df_ref_create): Add parameter.
(df_byte_lr_get_bb_info): New inline function.
* df-scan.c (df_ref_record, df_uses_record,
df_ref_create_structure): Added mode parameter.
(df_ref_create, df_notes_rescan, df_ref_record, df_def_record_1,
df_defs_record, df_uses_record, df_get_conditional_uses,
df_get_call_refs, df_insn_refs_collect, df_bb_refs_collect,
df_entry_block_defs_collect, df_exit_block_uses_collect):
Added mode parameter to calls to df_ref_record, df_uses_record,
df_ref_create_structure.
(df_ref_equal_p, df_ref_compare): Added test for modes.
(df_ref_create_structure): Added code to set mode. Renamed
DF_REF_WIDTH and DF_REF_OFFSET to DF_REF_EXTRACT_WIDTH and
DF_REF_EXTRACT_OFFSET.
* df-core.c (df_print_byte_regset): New function.
* df-byte-scan.c: New file.
* df-problems.c (df_rd_transfer_function): Removed unnecessary
calls to BITMAP_FREE.
(df_byte_lr_problem_data, df_problem problem_BYTE_LR): New structure.
(df_byte_lr_get_regno_start, df_byte_lr_get_regno_len,
df_byte_lr_set_bb_info, df_byte_lr_free_bb_info,
df_byte_lr_check_regs, df_byte_lr_expand_bitmap,
df_byte_lr_alloc, df_byte_lr_reset, df_byte_lr_bb_local_compute,
df_byte_lr_local_compute, df_byte_lr_init,
df_byte_lr_confluence_0, df_byte_lr_confluence_n,
df_byte_lr_transfer_function, df_byte_lr_free,
df_byte_lr_top_dump, df_byte_lr_bottom_dump,
df_byte_lr_add_problem, df_byte_lr_simulate_defs,
df_byte_lr_simulate_uses,
df_byte_lr_simulate_artificial_refs_at_top,
df_byte_lr_simulate_artificial_refs_at_end): New function.
* dce.c (byte_dce_process_block): New function.
(dce_process_block): au is now passed in rather than computed
locally. Changed loops that look at artificial defs to not look
for conditional or partial ones, because there never are any.
(fast_dce): Now is able to drive byte_dce_process_block or
dce_process_block depending on the kind of dce being done.
(rest_of_handle_fast_dce): Add parameter to fast_dce.
(rest_of_handle_fast_byte_dce): New function.
(rtl_opt_pass pass_fast_rtl_byte_dce): New pass.
* Makefile.in (df-byte-scan.o, debugcnt.o): Added dependencies.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134523 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/df-scan.c')
-rw-r--r-- | gcc/df-scan.c | 177 |
1 files changed, 106 insertions, 71 deletions
diff --git a/gcc/df-scan.c b/gcc/df-scan.c index f50097ac26c..4a733d6955c 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -95,7 +95,7 @@ static struct df_mw_hardreg * df_null_mw_rec[1]; static void df_ref_record (struct df_collection_rec *, rtx, rtx *, basic_block, rtx, enum df_ref_type, - enum df_ref_flags, int, int); + enum df_ref_flags, int, int, enum machine_mode); static void df_def_record_1 (struct df_collection_rec *, rtx, basic_block, rtx, enum df_ref_flags); @@ -104,11 +104,13 @@ static void df_defs_record (struct df_collection_rec *, enum df_ref_flags); static void df_uses_record (struct df_collection_rec *, rtx *, enum df_ref_type, - basic_block, rtx, enum df_ref_flags, int, int); + basic_block, rtx, enum df_ref_flags, + int, int, enum machine_mode); static struct df_ref *df_ref_create_structure (struct df_collection_rec *, rtx, rtx *, basic_block, rtx, enum df_ref_type, - enum df_ref_flags, int, int); + enum df_ref_flags, + int, int, enum machine_mode); static void df_insn_refs_collect (struct df_collection_rec*, basic_block, rtx); @@ -616,16 +618,16 @@ df_scan_blocks (void) LOC within INSN of BB. This function is only used externally. If the REF_FLAGS field contain DF_REF_SIGN_EXTRACT or - DF_REF_ZERO_EXTRACT. WIDTH and OFFSET are used to access the fields - if they were constants. Otherwise they should be -1 if those flags - were set. */ + DF_REF_ZERO_EXTRACT. WIDTH, OFFSET and MODE are used to access the + fields if they were constants. Otherwise they should be -1 if + those flags were set. */ struct df_ref * df_ref_create (rtx reg, rtx *loc, rtx insn, basic_block bb, enum df_ref_type ref_type, enum df_ref_flags ref_flags, - int width, int offset) + int width, int offset, enum machine_mode mode) { struct df_ref *ref; struct df_reg_info **reg_info; @@ -640,7 +642,8 @@ df_ref_create (rtx reg, rtx *loc, rtx insn, /* You cannot hack artificial refs. */ gcc_assert (insn); ref = df_ref_create_structure (NULL, reg, loc, bb, insn, - ref_type, ref_flags, width, offset); + ref_type, ref_flags, + width, offset, mode); if (DF_REF_TYPE (ref) == DF_REF_REG_DEF) { @@ -2066,7 +2069,7 @@ df_notes_rescan (rtx insn) case REG_EQUAL: df_uses_record (&collection_rec, &XEXP (note, 0), DF_REF_REG_USE, - bb, insn, DF_REF_IN_NOTE, -1, -1); + bb, insn, DF_REF_IN_NOTE, -1, -1, 0); default: break; } @@ -2142,8 +2145,9 @@ df_ref_equal_p (struct df_ref *ref1, struct df_ref *ref2) compared in the next set of tests. */ if ((DF_REF_FLAGS_IS_SET (ref1, DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) && (DF_REF_FLAGS_IS_SET (ref2, DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) - && ((DF_REF_OFFSET (ref1) != DF_REF_OFFSET (ref2)) - || (DF_REF_WIDTH (ref1) != DF_REF_WIDTH (ref2)))) + && ((DF_REF_EXTRACT_OFFSET (ref1) != DF_REF_EXTRACT_OFFSET (ref2)) + || (DF_REF_EXTRACT_WIDTH (ref1) != DF_REF_EXTRACT_WIDTH (ref2)) + || (DF_REF_EXTRACT_MODE (ref1) != DF_REF_EXTRACT_MODE (ref2)))) return false; return (ref1 == ref2) || @@ -2199,10 +2203,12 @@ df_ref_compare (const void *r1, const void *r2) at ref1. */ if (DF_REF_FLAGS_IS_SET (ref1, DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) { - if (DF_REF_OFFSET (ref1) != DF_REF_OFFSET (ref2)) - return DF_REF_OFFSET (ref1) - DF_REF_OFFSET (ref2); - if (DF_REF_WIDTH (ref1) != DF_REF_WIDTH (ref2)) - return DF_REF_WIDTH (ref1) - DF_REF_WIDTH (ref2); + if (DF_REF_EXTRACT_OFFSET (ref1) != DF_REF_EXTRACT_OFFSET (ref2)) + return DF_REF_EXTRACT_OFFSET (ref1) - DF_REF_EXTRACT_OFFSET (ref2); + if (DF_REF_EXTRACT_WIDTH (ref1) != DF_REF_EXTRACT_WIDTH (ref2)) + return DF_REF_EXTRACT_WIDTH (ref1) - DF_REF_EXTRACT_WIDTH (ref2); + if (DF_REF_EXTRACT_MODE (ref1) != DF_REF_EXTRACT_MODE (ref2)) + return DF_REF_EXTRACT_MODE (ref1) - DF_REF_EXTRACT_MODE (ref2); } return 0; } @@ -2583,7 +2589,7 @@ df_refs_add_to_chains (struct df_collection_rec *collection_rec, /* Allocate a ref and initialize its fields. If the REF_FLAGS field contain DF_REF_SIGN_EXTRACT or - DF_REF_ZERO_EXTRACT. WIDTH and OFFSET are used to access the fields + DF_REF_ZERO_EXTRACT. WIDTH, OFFSET and MODE are used to access the fields if they were constants. Otherwise they should be -1 if those flags were set. */ @@ -2593,7 +2599,7 @@ df_ref_create_structure (struct df_collection_rec *collection_rec, basic_block bb, rtx insn, enum df_ref_type ref_type, enum df_ref_flags ref_flags, - int width, int offset) + int width, int offset, enum machine_mode mode) { struct df_ref *this_ref; int regno = REGNO (GET_CODE (reg) == SUBREG ? SUBREG_REG (reg) : reg); @@ -2603,8 +2609,9 @@ df_ref_create_structure (struct df_collection_rec *collection_rec, if (ref_flags & (DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) { this_ref = pool_alloc (problem_data->ref_extract_pool); - DF_REF_WIDTH (this_ref) = width; - DF_REF_OFFSET (this_ref) = offset; + DF_REF_EXTRACT_WIDTH (this_ref) = width; + DF_REF_EXTRACT_OFFSET (this_ref) = offset; + DF_REF_EXTRACT_MODE (this_ref) = mode; } else this_ref = pool_alloc (problem_data->ref_pool); @@ -2659,9 +2666,9 @@ df_ref_create_structure (struct df_collection_rec *collection_rec, at address LOC within INSN of BB. If the REF_FLAGS field contain DF_REF_SIGN_EXTRACT or - DF_REF_ZERO_EXTRACT. WIDTH and OFFSET are used to access the fields - if they were constants. Otherwise they should be -1 if those flags - were set. */ + DF_REF_ZERO_EXTRACT. WIDTH, OFFSET and MODE are used to access the + fields if they were constants. Otherwise they should be -1 if + those flags were set. */ static void @@ -2670,7 +2677,7 @@ df_ref_record (struct df_collection_rec *collection_rec, basic_block bb, rtx insn, enum df_ref_type ref_type, enum df_ref_flags ref_flags, - int width, int offset) + int width, int offset, enum machine_mode mode) { unsigned int regno; @@ -2719,7 +2726,8 @@ df_ref_record (struct df_collection_rec *collection_rec, for (i = regno; i < endregno; i++) { ref = df_ref_create_structure (collection_rec, regno_reg_rtx[i], loc, - bb, insn, ref_type, ref_flags, width, offset); + bb, insn, ref_type, ref_flags, + width, offset, mode); gcc_assert (ORIGINAL_REGNO (DF_REF_REG (ref)) == i); } @@ -2728,7 +2736,7 @@ df_ref_record (struct df_collection_rec *collection_rec, { struct df_ref *ref; ref = df_ref_create_structure (collection_rec, reg, loc, bb, insn, - ref_type, ref_flags, width, offset); + ref_type, ref_flags, width, offset, mode); } } @@ -2764,6 +2772,7 @@ df_def_record_1 (struct df_collection_rec *collection_rec, rtx dst; int offset = -1; int width = -1; + enum machine_mode mode = 0; /* We may recursively call ourselves on EXPR_LIST when dealing with PARALLEL construct. */ @@ -2808,6 +2817,7 @@ df_def_record_1 (struct df_collection_rec *collection_rec, { width = INTVAL (XEXP (dst, 1)); offset = INTVAL (XEXP (dst, 2)); + mode = GET_MODE (dst); } loc = &XEXP (dst, 0); @@ -2818,13 +2828,15 @@ df_def_record_1 (struct df_collection_rec *collection_rec, if (REG_P (dst)) { df_ref_record (collection_rec, - dst, loc, bb, insn, DF_REF_REG_DEF, flags, width, offset); + dst, loc, bb, insn, DF_REF_REG_DEF, flags, + width, offset, mode); /* We want to keep sp alive everywhere - by making all writes to sp also use of sp. */ if (REGNO (dst) == STACK_POINTER_REGNUM) df_ref_record (collection_rec, - dst, NULL, bb, insn, DF_REF_REG_USE, flags, width, offset); + dst, NULL, bb, insn, DF_REF_REG_USE, flags, + width, offset, mode); } else if (GET_CODE (dst) == SUBREG && REG_P (SUBREG_REG (dst))) { @@ -2834,7 +2846,8 @@ df_def_record_1 (struct df_collection_rec *collection_rec, flags |= DF_REF_SUBREG; df_ref_record (collection_rec, - dst, loc, bb, insn, DF_REF_REG_DEF, flags, width, offset); + dst, loc, bb, insn, DF_REF_REG_DEF, flags, + width, offset, mode); } } @@ -2873,15 +2886,15 @@ df_defs_record (struct df_collection_rec *collection_rec, /* Process all the registers used in the rtx at address LOC. If the REF_FLAGS field contain DF_REF_SIGN_EXTRACT or - DF_REF_ZERO_EXTRACT. WIDTH and LOWER are used to access the fields - if they were constants. Otherwise they should be -1 if those flags - were set. */ + DF_REF_ZERO_EXTRACT. WIDTH, OFFSET and MODE are used to access the + fields if they were constants. Otherwise they should be -1 if + those flags were set. */ static void df_uses_record (struct df_collection_rec *collection_rec, rtx *loc, enum df_ref_type ref_type, basic_block bb, rtx insn, enum df_ref_flags flags, - int width, int offset) + int width, int offset, enum machine_mode mode) { RTX_CODE code; rtx x; @@ -2912,7 +2925,8 @@ df_uses_record (struct df_collection_rec *collection_rec, if (MEM_P (XEXP (x, 0))) df_uses_record (collection_rec, &XEXP (XEXP (x, 0), 0), - DF_REF_REG_MEM_STORE, bb, insn, flags, width, offset); + DF_REF_REG_MEM_STORE, bb, insn, flags, + width, offset, mode); /* If we're clobbering a REG then we have a def so ignore. */ return; @@ -2920,7 +2934,8 @@ df_uses_record (struct df_collection_rec *collection_rec, case MEM: df_uses_record (collection_rec, &XEXP (x, 0), DF_REF_REG_MEM_LOAD, - bb, insn, flags & DF_REF_IN_NOTE, width, offset); + bb, insn, flags & DF_REF_IN_NOTE, + width, offset, mode); return; case SUBREG: @@ -2930,14 +2945,16 @@ df_uses_record (struct df_collection_rec *collection_rec, if (!REG_P (SUBREG_REG (x))) { loc = &SUBREG_REG (x); - df_uses_record (collection_rec, loc, ref_type, bb, insn, flags, width, offset); + df_uses_record (collection_rec, loc, ref_type, bb, insn, flags, + width, offset, mode); return; } /* ... Fall through ... */ case REG: df_ref_record (collection_rec, - x, loc, bb, insn, ref_type, flags, width, offset); + x, loc, bb, insn, ref_type, flags, + width, offset, mode); return; case SIGN_EXTRACT: @@ -2951,6 +2968,7 @@ df_uses_record (struct df_collection_rec *collection_rec, { width = INTVAL (XEXP (x, 1)); offset = INTVAL (XEXP (x, 2)); + mode = GET_MODE (x); if (code == ZERO_EXTRACT) flags |= DF_REF_ZERO_EXTRACT; @@ -2958,7 +2976,8 @@ df_uses_record (struct df_collection_rec *collection_rec, flags |= DF_REF_SIGN_EXTRACT; df_uses_record (collection_rec, - &XEXP (x, 0), ref_type, bb, insn, flags, width, offset); + &XEXP (x, 0), ref_type, bb, insn, flags, + width, offset, mode); return; } } @@ -2969,7 +2988,8 @@ df_uses_record (struct df_collection_rec *collection_rec, rtx dst = SET_DEST (x); gcc_assert (!(flags & DF_REF_IN_NOTE)); df_uses_record (collection_rec, - &SET_SRC (x), DF_REF_REG_USE, bb, insn, flags, width, offset); + &SET_SRC (x), DF_REF_REG_USE, bb, insn, flags, + width, offset, mode); switch (GET_CODE (dst)) { @@ -2978,7 +2998,8 @@ df_uses_record (struct df_collection_rec *collection_rec, { df_uses_record (collection_rec, &SUBREG_REG (dst), DF_REF_REG_USE, bb, insn, - flags | DF_REF_READ_WRITE | DF_REF_SUBREG, width, offset); + flags | DF_REF_READ_WRITE | DF_REF_SUBREG, + width, offset, mode); break; } /* Fall through. */ @@ -2990,7 +3011,8 @@ df_uses_record (struct df_collection_rec *collection_rec, break; case MEM: df_uses_record (collection_rec, &XEXP (dst, 0), - DF_REF_REG_MEM_STORE, bb, insn, flags, width, offset); + DF_REF_REG_MEM_STORE, bb, insn, flags, + width, offset, mode); break; case STRICT_LOW_PART: { @@ -3001,7 +3023,8 @@ df_uses_record (struct df_collection_rec *collection_rec, df_uses_record (collection_rec, (GET_CODE (dst) == SUBREG) ? &SUBREG_REG (dst) : temp, DF_REF_REG_USE, bb, insn, - DF_REF_READ_WRITE | DF_REF_STRICT_LOW_PART, width, offset); + DF_REF_READ_WRITE | DF_REF_STRICT_LOW_PART, + width, offset, mode); } break; case ZERO_EXTRACT: @@ -3011,18 +3034,22 @@ df_uses_record (struct df_collection_rec *collection_rec, { width = INTVAL (XEXP (dst, 1)); offset = INTVAL (XEXP (dst, 2)); + mode = GET_MODE (dst); } else { df_uses_record (collection_rec, &XEXP (dst, 1), - DF_REF_REG_USE, bb, insn, flags, width, offset); + DF_REF_REG_USE, bb, insn, flags, + width, offset, mode); df_uses_record (collection_rec, &XEXP (dst, 2), - DF_REF_REG_USE, bb, insn, flags, width, offset); + DF_REF_REG_USE, bb, insn, flags, + width, offset, mode); } df_uses_record (collection_rec, &XEXP (dst, 0), DF_REF_REG_USE, bb, insn, - DF_REF_READ_WRITE | DF_REF_ZERO_EXTRACT, width, offset); + DF_REF_READ_WRITE | DF_REF_ZERO_EXTRACT, + width, offset, mode); } break; @@ -3072,7 +3099,8 @@ df_uses_record (struct df_collection_rec *collection_rec, for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++) df_uses_record (collection_rec, &ASM_OPERANDS_INPUT (x, j), - DF_REF_REG_USE, bb, insn, flags, width, offset); + DF_REF_REG_USE, bb, insn, flags, + width, offset, mode); return; } break; @@ -3087,7 +3115,8 @@ df_uses_record (struct df_collection_rec *collection_rec, /* Catch the def of the register being modified. */ df_ref_record (collection_rec, XEXP (x, 0), &XEXP (x, 0), bb, insn, DF_REF_REG_DEF, - flags | DF_REF_READ_WRITE | DF_REF_PRE_POST_MODIFY, width, offset); + flags | DF_REF_READ_WRITE | DF_REF_PRE_POST_MODIFY, + width, offset, mode); /* ... Fall through to handle uses ... */ @@ -3111,7 +3140,8 @@ df_uses_record (struct df_collection_rec *collection_rec, goto retry; } df_uses_record (collection_rec, &XEXP (x, i), ref_type, - bb, insn, flags, width, offset); + bb, insn, flags, + width, offset, mode); } else if (fmt[i] == 'E') { @@ -3119,7 +3149,8 @@ df_uses_record (struct df_collection_rec *collection_rec, for (j = 0; j < XVECLEN (x, i); j++) df_uses_record (collection_rec, &XVECEXP (x, i, j), ref_type, - bb, insn, flags, width, offset); + bb, insn, flags, + width, offset, mode); } } } @@ -3141,19 +3172,21 @@ df_get_conditional_uses (struct df_collection_rec *collection_rec) { int width = -1; int offset = -1; + enum machine_mode mode = 0; struct df_ref *use; if (DF_REF_FLAGS_IS_SET (ref, DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) { - width = DF_REF_WIDTH (ref); - offset = DF_REF_OFFSET (ref); + width = DF_REF_EXTRACT_WIDTH (ref); + offset = DF_REF_EXTRACT_OFFSET (ref); + mode = DF_REF_EXTRACT_MODE (ref); } use = df_ref_create_structure (collection_rec, DF_REF_REG (ref), DF_REF_LOC (ref), DF_REF_BB (ref), DF_REF_INSN (ref), DF_REF_REG_USE, DF_REF_FLAGS (ref) & ~DF_REF_CONDITIONAL, - width, offset); + width, offset, mode); DF_REF_REGNO (use) = DF_REF_REGNO (ref); } } @@ -3191,7 +3224,7 @@ df_get_call_refs (struct df_collection_rec * collection_rec, { if (GET_CODE (XEXP (note, 0)) == USE) df_uses_record (collection_rec, &XEXP (XEXP (note, 0), 0), - DF_REF_REG_USE, bb, insn, flags, -1, -1); + DF_REF_REG_USE, bb, insn, flags, -1, -1, 0); else if (GET_CODE (XEXP (note, 0)) == CLOBBER) { if (REG_P (XEXP (XEXP (note, 0), 0))) @@ -3203,13 +3236,14 @@ df_get_call_refs (struct df_collection_rec * collection_rec, } else df_uses_record (collection_rec, &XEXP (note, 0), - DF_REF_REG_USE, bb, insn, flags, -1, -1); + DF_REF_REG_USE, bb, insn, flags, -1, -1, 0); } } /* The stack ptr is used (honorarily) by a CALL insn. */ df_ref_record (collection_rec, regno_reg_rtx[STACK_POINTER_REGNUM], - NULL, bb, insn, DF_REF_REG_USE, DF_REF_CALL_STACK_USAGE | flags, -1, -1); + NULL, bb, insn, DF_REF_REG_USE, DF_REF_CALL_STACK_USAGE | flags, + -1, -1, 0); /* Calls may also reference any of the global registers, so they are recorded as used. */ @@ -3217,9 +3251,9 @@ df_get_call_refs (struct df_collection_rec * collection_rec, if (global_regs[i]) { df_ref_record (collection_rec, regno_reg_rtx[i], - NULL, bb, insn, DF_REF_REG_USE, flags, -1, -1); + NULL, bb, insn, DF_REF_REG_USE, flags, -1, -1, 0); df_ref_record (collection_rec, regno_reg_rtx[i], - NULL, bb, insn, DF_REF_REG_DEF, flags, -1, -1); + NULL, bb, insn, DF_REF_REG_DEF, flags, -1, -1, 0); } is_sibling_call = SIBLING_CALL_P (insn); @@ -3232,7 +3266,8 @@ df_get_call_refs (struct df_collection_rec * collection_rec, || refers_to_regno_p (ui, ui+1, crtl->return_rtx, NULL))) df_ref_record (collection_rec, regno_reg_rtx[ui], - NULL, bb, insn, DF_REF_REG_DEF, DF_REF_MAY_CLOBBER | flags, -1, -1); + NULL, bb, insn, DF_REF_REG_DEF, DF_REF_MAY_CLOBBER | flags, + -1, -1, 0); } BITMAP_FREE (defs_generated); @@ -3270,7 +3305,7 @@ df_insn_refs_collect (struct df_collection_rec* collection_rec, case REG_EQUAL: df_uses_record (collection_rec, &XEXP (note, 0), DF_REF_REG_USE, - bb, insn, DF_REF_IN_NOTE, -1, -1); + bb, insn, DF_REF_IN_NOTE, -1, -1, 0); break; case REG_NON_LOCAL_GOTO: /* The frame ptr is used by a non-local goto. */ @@ -3278,13 +3313,13 @@ df_insn_refs_collect (struct df_collection_rec* collection_rec, regno_reg_rtx[FRAME_POINTER_REGNUM], NULL, bb, insn, - DF_REF_REG_USE, 0, -1, -1); + DF_REF_REG_USE, 0, -1, -1, 0); #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM df_ref_record (collection_rec, regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], NULL, bb, insn, - DF_REF_REG_USE, 0, -1, -1); + DF_REF_REG_USE, 0, -1, -1, 0); #endif break; default: @@ -3298,7 +3333,8 @@ df_insn_refs_collect (struct df_collection_rec* collection_rec, /* Record the register uses. */ df_uses_record (collection_rec, - &PATTERN (insn), DF_REF_REG_USE, bb, insn, 0, -1, -1); + &PATTERN (insn), DF_REF_REG_USE, bb, insn, 0, + -1, -1, 0); /* DF_REF_CONDITIONAL needs corresponding USES. */ if (is_cond_exec) @@ -3381,7 +3417,7 @@ df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb) if (regno == INVALID_REGNUM) break; df_ref_record (collection_rec, regno_reg_rtx[regno], NULL, - bb, NULL, DF_REF_REG_DEF, DF_REF_AT_TOP, -1, -1); + bb, NULL, DF_REF_REG_DEF, DF_REF_AT_TOP, -1, -1, 0); } } #endif @@ -3405,7 +3441,7 @@ df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (EH_USES (i)) df_ref_record (collection_rec, regno_reg_rtx[i], NULL, - bb, NULL, DF_REF_REG_USE, DF_REF_AT_TOP, -1, -1); + bb, NULL, DF_REF_REG_USE, DF_REF_AT_TOP, -1, -1, 0); } #endif @@ -3413,7 +3449,7 @@ df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb) non-local goto. */ if (bb->flags & BB_NON_LOCAL_GOTO_TARGET) df_ref_record (collection_rec, hard_frame_pointer_rtx, NULL, - bb, NULL, DF_REF_REG_DEF, DF_REF_AT_TOP, -1, -1); + bb, NULL, DF_REF_REG_DEF, DF_REF_AT_TOP, -1, -1, 0); /* Add the artificial uses. */ if (bb->index >= NUM_FIXED_BLOCKS) @@ -3427,7 +3463,7 @@ df_bb_refs_collect (struct df_collection_rec *collection_rec, basic_block bb) EXECUTE_IF_SET_IN_BITMAP (au, 0, regno, bi) { df_ref_record (collection_rec, regno_reg_rtx[regno], NULL, - bb, NULL, DF_REF_REG_USE, 0, -1, -1); + bb, NULL, DF_REF_REG_USE, 0, -1, -1, 0); } } @@ -3720,7 +3756,7 @@ df_entry_block_defs_collect (struct df_collection_rec *collection_rec, EXECUTE_IF_SET_IN_BITMAP (entry_block_defs, 0, i, bi) { df_ref_record (collection_rec, regno_reg_rtx[i], NULL, - ENTRY_BLOCK_PTR, NULL, DF_REF_REG_DEF, 0, -1, -1); + ENTRY_BLOCK_PTR, NULL, DF_REF_REG_DEF, 0, -1, -1, 0); } df_canonize_collection_rec (collection_rec); @@ -3881,7 +3917,7 @@ df_exit_block_uses_collect (struct df_collection_rec *collection_rec, bitmap exi EXECUTE_IF_SET_IN_BITMAP (exit_block_uses, 0, i, bi) df_ref_record (collection_rec, regno_reg_rtx[i], NULL, - EXIT_BLOCK_PTR, NULL, DF_REF_REG_USE, 0, -1, -1); + EXIT_BLOCK_PTR, NULL, DF_REF_REG_USE, 0, -1, -1, 0); #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM /* It is deliberate that this is not put in the exit block uses but @@ -3891,7 +3927,7 @@ df_exit_block_uses_collect (struct df_collection_rec *collection_rec, bitmap exi && bb_has_eh_pred (EXIT_BLOCK_PTR) && fixed_regs[ARG_POINTER_REGNUM]) df_ref_record (collection_rec, regno_reg_rtx[ARG_POINTER_REGNUM], NULL, - EXIT_BLOCK_PTR, NULL, DF_REF_REG_USE, 0, -1, -1); + EXIT_BLOCK_PTR, NULL, DF_REF_REG_USE, 0, -1, -1, 0); #endif df_canonize_collection_rec (collection_rec); @@ -4363,9 +4399,8 @@ df_exit_block_bitmap_verify (bool abort_if_fail) } -/* Return true if df_ref information for all insns in all BLOCKS are - correct and complete. If BLOCKS is null, all blocks are - checked. */ +/* Return true if df_ref information for all insns in all blocks are + correct and complete. */ void df_scan_verify (void) |