+2016-07-07 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-06-07 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/71423
+ * match.pd ((X | ~Y) -> Y <= X): Properly invert the comparison
+ for signed ops.
+
+ 2016-06-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71452
+ * tree-ssa.c (non_rewritable_lvalue_p): Make sure that the
+ type used for the SSA rewrite has enough precision to cover
+ the dynamic type of the location.
+
+ 2016-06-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71522
+ * tree-ssa.c (non_rewritable_lvalue_p): Do not rewrite non-float
+ copying into float copying.
+
2016-07-01 Eric Botcazou <ebotcazou@adacore.com>
* config/arm/arm.c (arm_function_ok_for_sibcall): Add another check
(ne (bit_and:c (bit_not @0) @1) integer_zerop)
(if (INTEGRAL_TYPE_P (TREE_TYPE (@1))
&& TYPE_PRECISION (TREE_TYPE (@1)) == 1)
- (lt @0 @1)))
+ (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
+ (lt @0 @1))
+ (gt @0 @1)))
(simplify
(ne (bit_ior:c (bit_not @0) @1) integer_zerop)
(if (INTEGRAL_TYPE_P (TREE_TYPE (@1))
&& TYPE_PRECISION (TREE_TYPE (@1)) == 1)
- (le @0 @1)))
+ (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
+ (le @0 @1))
+ (ge @0 @1)))
/* ~~x -> x */
(simplify
+2016-07-07 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-06-07 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/71423
+ * gcc.dg/torture/pr71423.c: New testcase.
+
+ 2016-06-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71452
+ * gcc.dg/torture/pr71452.c: New testcase.
+
+ 2016-06-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71522
+ * gcc.dg/torture/pr71522.c: New testcase.
+
2016-06-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/71693
--- /dev/null
+// { dg-do run }
+
+int main()
+{
+ bool b;
+ *(char *)&b = 123;
+ if (*(char *)&b != 123)
+ __builtin_abort ();
+ return 0;
+}
--- /dev/null
+/* { dg-do run } */
+
+struct S1
+{
+ int f1:1;
+};
+
+volatile struct S1 b = { 0 };
+
+int
+main ()
+{
+ char c = b.f1;
+ b.f1 = 1;
+
+ if (b.f1 > -1 || c)
+ __builtin_abort ();
+
+ return 0;
+}
--- /dev/null
+/* { dg-do run } */
+
+int main()
+{
+ _Bool b;
+ *(char *)&b = 123;
+ if (*(char *)&b != 123)
+ __builtin_abort ();
+ return 0;
+}
--- /dev/null
+/* { dg-do run } */
+
+#if __SIZEOF_LONG_DOUBLE__ == 16
+#define STR "AAAAAAAAAAAAAAA"
+#elif __SIZEOF_LONG_DOUBLE__ == 12
+#define STR "AAAAAAAAAAA"
+#elif __SIZEOF_LONG_DOUBLE__ == 8
+#define STR "AAAAAAA"
+#elif __SIZEOF_LONG_DOUBLE__ == 4
+#define STR "AAA"
+#else
+#define STR "A"
+#endif
+
+int main()
+{
+ long double d;
+ char s[sizeof d];
+
+ __builtin_memcpy(&d, STR, sizeof d);
+ __builtin_memcpy(&s, &d, sizeof s);
+
+ if (__builtin_strncmp (s, STR, sizeof s) != 0)
+ __builtin_abort ();
+
+ return 0;
+}
tree decl = TREE_OPERAND (TREE_OPERAND (lhs, 0), 0);
if (DECL_P (decl)
&& DECL_SIZE (decl) == TYPE_SIZE (TREE_TYPE (lhs))
+ /* If the dynamic type of the decl has larger precision than
+ the decl itself we can't use the decls type for SSA rewriting. */
+ && ((! INTEGRAL_TYPE_P (TREE_TYPE (decl))
+ || compare_tree_int (DECL_SIZE (decl),
+ TYPE_PRECISION (TREE_TYPE (decl))) == 0)
+ || (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
+ && (TYPE_PRECISION (TREE_TYPE (decl))
+ >= TYPE_PRECISION (TREE_TYPE (lhs)))))
+ /* Make sure we are not re-writing non-float copying into float
+ copying as that can incur normalization. */
+ && (! FLOAT_TYPE_P (TREE_TYPE (decl))
+ || types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (decl)))
&& (TREE_THIS_VOLATILE (decl) == TREE_THIS_VOLATILE (lhs)))
return false;
}