From 0e51e769b52cb4c91339a0eef5fa6a70c0ee2dde Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 21 Nov 2008 21:19:34 +0000 Subject: [PATCH] caller-save.c (insert_one_insn): Take into account REG_INC notes for the liveness computation of the new insn. * caller-save.c (insert_one_insn): Take into account REG_INC notes for the liveness computation of the new insn. From-SVN: r142099 --- gcc/ChangeLog | 5 +++++ gcc/caller-save.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc1f691ed066..1f0b3fc24390 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-11-21 Eric Botcazou + + * caller-save.c (insert_one_insn): Take into account REG_INC notes + for the liveness computation of the new insn. + 2008-11-21 DJ Delorie * config/stormy16/stormy16.md (movqi_internal, movhi_internal): diff --git a/gcc/caller-save.c b/gcc/caller-save.c index 2d0925a4686e..002f76054a1f 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -1216,10 +1216,12 @@ insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat) /* ??? It would be nice if we could exclude the already / still saved registers from the live sets. */ COPY_REG_SET (&new_chain->live_throughout, &chain->live_throughout); - /* Registers that die in CHAIN->INSN still live in the new insn. */ + /* Registers that die in CHAIN->INSN still live in the new insn. + Likewise for those which are autoincremented or autodecremented. */ for (link = REG_NOTES (chain->insn); link; link = XEXP (link, 1)) { - if (REG_NOTE_KIND (link) == REG_DEAD) + enum reg_note kind = REG_NOTE_KIND (link); + if (kind == REG_DEAD || kind == REG_INC) { rtx reg = XEXP (link, 0); int regno, i; -- 2.47.3