2018-06-25 Jakub Jelinek <jakub@redhat.com>
Backported from mainline
+ 2018-04-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/85167
+ * shrink-wrap.c (move_insn_for_shrink_wrap): Don't set bb_uses and
+ bb_defs if *split_p, instead preinitialize it to NULL.
+
2018-03-23 Jakub Jelinek <jakub@redhat.com>
PR inline-asm/85022
struct dead_debug_local *debug)
{
rtx set, src, dest;
- bitmap live_out, live_in, bb_uses, bb_defs;
+ bitmap live_out, live_in, bb_uses = NULL, bb_defs = NULL;
unsigned int i, dregno, end_dregno;
unsigned int sregno = FIRST_PSEUDO_REGISTER;
unsigned int end_sregno = FIRST_PSEUDO_REGISTER;
/* Check whether BB uses DEST or clobbers DEST. We need to add
INSN to BB if so. Either way, DEST is no longer live on entry,
except for any part that overlaps SRC (next loop). */
- bb_uses = &DF_LR_BB_INFO (bb)->use;
- bb_defs = &DF_LR_BB_INFO (bb)->def;
+ if (!*split_p)
+ {
+ bb_uses = &DF_LR_BB_INFO (bb)->use;
+ bb_defs = &DF_LR_BB_INFO (bb)->def;
+ }
if (df_live)
{
for (i = dregno; i < end_dregno; i++)
Backported from mainline
2018-04-03 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/85167
+ * gcc.dg/pr85167.c: New test.
+
PR c++/85147
* g++.dg/cpp0x/pr85147.C: New test.
--- /dev/null
+/* PR rtl-optimization/85167 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+struct A { long b; };
+int c, d, e;
+int bar (void);
+
+int
+foo (void)
+{
+ long g;
+ for (; g == c ? 0 : (e = 1); g = ((struct A *)g)->b)
+ if (bar ())
+ return d;
+}