testsuite: Add test case for pack/unpack bifs at soft-float [PR105334]
authorKewen Lin <linkw@linux.ibm.com>
Thu, 28 Apr 2022 03:34:27 +0000 (22:34 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Thu, 28 Apr 2022 03:34:27 +0000 (22:34 -0500)
This patch is to add the test coverage for the two recent fixes
r12-8091 and r12-8226 from Segher, aix is skipped since it takes
soft-float and long-double-128 incompatible.

PR target/105334

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr105334.c: New test.

gcc/testsuite/gcc.target/powerpc/pr105334.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.target/powerpc/pr105334.c b/gcc/testsuite/gcc.target/powerpc/pr105334.c
new file mode 100644 (file)
index 0000000..7664e03
--- /dev/null
@@ -0,0 +1,31 @@
+/* Skip this on aix, since it takes soft-float and long-double-128
+   incompatible and warns it.  */
+/* { dg-skip-if "aix long-double-128 soft-float" { powerpc*-*-aix* } } */
+/* { dg-options "-mlong-double-128 -msoft-float" } */
+
+/* Verify there is no ICE.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <math.h>
+
+#define PACK __builtin_pack_ibm128
+#define UNPACK __builtin_unpack_ibm128
+#define LDOUBLE __ibm128
+
+extern LDOUBLE bar (LDOUBLE);
+
+int
+main (void)
+{
+  double high = pow (2.0, 60);
+  double low = 2.0;
+  LDOUBLE a = ((LDOUBLE) high) + ((LDOUBLE) low);
+  double x0 = UNPACK (a, 0);
+  double x1 = UNPACK (a, 1);
+  LDOUBLE b = PACK (x0, x1);
+  LDOUBLE c = bar (b);
+
+  return c > a;
+}
+