From c35533d7e97fda61c50be8b8260157956cf388e2 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Wed, 9 May 2018 14:12:33 +0200 Subject: regcprop: Avoid REG_CFA_REGISTER notes (PR85645) Changing a SET that has a REG_CFA_REGISTER note is wrong if we are changing the SET_DEST, or if the REG_CFA_REGISTER has nil as its argument, and maybe some other cases. It's never really useful to propagate into such an instruction, so let's just bail whenever we see such a note. PR rtl-optimization/85645 * regcprop.c (copyprop_hardreg_forward_1): Don't propagate into an insn that has a REG_CFA_REGISTER note. From-SVN: r260074 --- gcc/ChangeLog | 6 ++++++ gcc/regcprop.c | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 83d01ed..580f41b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-05-09 Segher Boessenkool + + PR rtl-optimization/85645 + * regcprop.c (copyprop_hardreg_forward_1): Don't propagate into an + insn that has a REG_CFA_REGISTER note. + 2018-05-09 Richard Sandiford * cfgexpand.c (expand_clobber): New function. diff --git a/gcc/regcprop.c b/gcc/regcprop.c index a664f76..1813242 100644 --- a/gcc/regcprop.c +++ b/gcc/regcprop.c @@ -848,6 +848,12 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd) && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set))) set = NULL; } + + /* We need to keep CFI info correct, and the same on all paths, + so we cannot normally replace the registers REG_CFA_REGISTER + refers to. Bail. */ + if (REG_NOTE_KIND (link) == REG_CFA_REGISTER) + goto did_replacement; } /* Special-case plain move instructions, since we may well -- cgit v1.1