Backported from mainline
2019-03-14 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/89679
+ * expmed.c (expand_mult_const): Don't add a REG_EQUAL note if it
+ would contain a paradoxical SUBREG.
+
PR tree-optimization/89703
* tree-ssa-strlen.c (valid_builtin_call): Punt if stmt call types
aren't compatible also with builtin_decl_explicit. Check pure
tem = gen_lowpart (nmode, op0);
}
- insn = get_last_insn ();
- set_dst_reg_note (insn, REG_EQUAL,
- gen_rtx_MULT (nmode, tem,
- gen_int_mode (val_so_far, nmode)),
- accum_inner);
+ /* Don't add a REG_EQUAL note if tem is a paradoxical SUBREG.
+ In that case, only the low bits of accum would be guaranteed to
+ be equal to the content of the REG_EQUAL note, the upper bits
+ can be anything. */
+ if (!paradoxical_subreg_p (tem))
+ {
+ insn = get_last_insn ();
+ set_dst_reg_note (insn, REG_EQUAL,
+ gen_rtx_MULT (nmode, tem,
+ gen_int_mode (val_so_far,
+ nmode)),
+ accum_inner);
+ }
}
}
Backported from mainline
2019-03-14 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/89679
+ * gcc.dg/pr89679.c: New test.
+
PR tree-optimization/89703
* gcc.c-torture/compile/pr89703-1.c: New test.
* gcc.c-torture/compile/pr89703-2.c: New test.
--- /dev/null
+/* PR rtl-optimization/89679 */
+/* { dg-do run } */
+/* { dg-options "-Og -frerun-cse-after-loop -fno-tree-fre" } */
+
+unsigned short g;
+
+void
+foo (unsigned long long x)
+{
+ if (x != 0xffff)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+#if __SIZEOF_SHORT__ == 2 && __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8
+ unsigned short d = 0;
+ unsigned long long x, c = ~0;
+ c = c >> d;
+ __builtin_memset (&d, c, 2);
+ x = d + g;
+ foo (x);
+#endif
+ return 0;
+}