diff options
Diffstat (limited to 'gcc/fwprop.c')
-rw-r--r-- | gcc/fwprop.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 1e0327230bb..089c571a635 100644 --- a/gcc/fwprop.c +++ b/gcc/fwprop.c @@ -642,17 +642,25 @@ update_df (rtx insn, rtx *loc, struct df_ref **use_rec, enum df_ref_type type, { struct df_ref *use = *use_rec; struct df_ref *orig_use = use, *new_use; + int width = -1; + int offset = -1; rtx *new_loc = find_occurrence (loc, DF_REF_REG (orig_use)); use_rec++; if (!new_loc) continue; + if (DF_REF_FLAGS_IS_SET (orig_use, DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT)) + { + width = DF_REF_WIDTH (orig_use); + offset = DF_REF_OFFSET (orig_use); + } + /* Add a new insn use. Use the original type, because it says if the use was within a MEM. */ new_use = df_ref_create (DF_REF_REG (orig_use), new_loc, insn, BLOCK_FOR_INSN (insn), - type, DF_REF_FLAGS (orig_use) | new_flags); + type, DF_REF_FLAGS (orig_use) | new_flags, width, offset); /* Set up the use-def chain. */ df_chain_copy (new_use, DF_REF_CHAIN (orig_use)); |