diff gcc/testsuite/gcc.dg/tree-ssa/vrp96.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp96.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,52 @@
+/* PR tree-optimization/65170 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+typedef unsigned __int128 T;
+extern void link_error (void);
+extern void required_check (void);
+
+T
+foo (T b, T c)
+{
+  T a;
+  b &= 0xffffffffffffffffULL;
+  c &= 0xffffffffffffffffULL;
+  if (b < 7 || c < 7)
+    return 0;
+  a = b * c;
+  if (a < 49 || a > (((T) 0xfffffffffffffffeULL << 64) | 1))
+    link_error ();
+  return a;
+}
+
+T
+bar (T b, T c)
+{
+  T a;
+  b &= 0xffffffffffffffffULL;
+  c &= 0xffffffffffffffffULL;
+  if (b < 7 || c < 7)
+    return 0;
+  a = b * c;
+  if (a == 49)
+    required_check ();
+  return a;
+}
+
+T
+baz (T b, T c)
+{
+  T a;
+  b &= 0xffffffffffffffffULL;
+  c &= 0xffffffffffffffffULL;
+  if (b < 7 || c < 7)
+    return 0;
+  a = b * c;
+  if (a == (((T) 0xfffffffffffffffeULL << 64) | 1))
+    required_check ();
+  return a;
+}
+
+/* { dg-final { scan-tree-dump-not "link_error" "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "required_check" 2 "vrp1" } } */