diff options
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -8423,6 +8423,19 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, expand_decl_rtl: gcc_assert (decl_rtl); decl_rtl = copy_rtx (decl_rtl); + /* Record writes to register variables. */ + if (modifier == EXPAND_WRITE && REG_P (decl_rtl) + && REGNO (decl_rtl) < FIRST_PSEUDO_REGISTER) + { + int i = REGNO (decl_rtl); + int nregs = hard_regno_nregs[i][GET_MODE (decl_rtl)]; + while (nregs) + { + SET_HARD_REG_BIT (crtl->asm_clobbers, i); + i++; + nregs--; + } + } /* Ensure variable marked as used even if it doesn't go through a parser. If it hasn't be used yet, write out an external |