+2019-04-18 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR middle-end/85164
+ * combine.c (force_int_to_mode): Cast the argument rather than
+ the result of known_alignment.
+ * rtlanal.c (rtx_addr_can_trap_p_1): Use known_subrange_p.
+
2019-04-18 Richard Biener <rguenther@suse.de>
PR debug/90131
/* If X is (minus C Y) where C's least set bit is larger than any bit
in the mask, then we may replace with (neg Y). */
if (poly_int_rtx_p (XEXP (x, 0), &const_op0)
- && (unsigned HOST_WIDE_INT) known_alignment (const_op0) > mask)
+ && known_alignment (poly_uint64 (const_op0)) > mask)
{
x = simplify_gen_unary (NEG, xmode, XEXP (x, 1), xmode);
return force_to_mode (x, mode, mask, next_select);
return (!known_size_p (decl_size) || known_eq (decl_size, 0)
? maybe_ne (offset, 0)
- : maybe_gt (offset + size, decl_size));
+ : !known_subrange_p (offset, size, 0, decl_size));
}
return 0;
+2019-04-18 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR middle-end/85164
+ * gcc.dg/pr85164-1.c, gcc.dg/pr85164-2.c: New tests.
+
2019-04-18 Richard Biener <rguenther@suse.de>
PR debug/90131
--- /dev/null
+/* { dg-options "-O2 -w" } */
+a[];
+b;
+c() {
+ unsigned long d;
+ b = a[d - 1 >> 3];
+}
--- /dev/null
+/* { dg-options "-O2 -w" } */
+int a;
+long b;
+void c() { b = -9223372036854775807L - 1 - a; }