]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/70963 (vec_cts/vec_ctf intrinsics produce wrong results for...
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 10 May 2016 16:09:28 +0000 (16:09 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Tue, 10 May 2016 16:09:28 +0000 (16:09 +0000)
[gcc]

2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

Backport from mainline
2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/70963
* config/rs6000/vsx.md (vsx_xvcvdpsxds_scale): Generate correct
code for a zero scale factor.
(vsx_xvcvdpuxds_scale): Likewise.

[gcc/testsuite]

2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

Backport from mainline
2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/70963
* gcc.target/powerpc/pr70963.c: New.

From-SVN: r236091

gcc/ChangeLog
gcc/config/rs6000/vsx.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr70963.c [new file with mode: 0644]

index 2b0cd592778b21251680dfc0ee7f27fbb4cd2c4e..0673d21d709950a4c8fac635c5240e50b956b7ce 100644 (file)
@@ -1,3 +1,13 @@
+2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/70963
+       * config/rs6000/vsx.md (vsx_xvcvdpsxds_scale): Generate correct
+       code for a zero scale factor.
+       (vsx_xvcvdpuxds_scale): Likewise.
+
 2016-05-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
        Backport from mainline
index 985077b82a65f7e137ac29357b1be0f8d4b36ef9..4b1fa9f0387db57c1f7ad9518e23335ad628cf9e 100644 (file)
 {
   rtx op0 = operands[0];
   rtx op1 = operands[1];
-  rtx tmp = gen_reg_rtx (V2DFmode);
-  int scale = INTVAL(operands[2]);
-  if (scale != 0)
-    rs6000_scale_v2df (tmp, op1, scale);
+  rtx tmp;
+  int scale = INTVAL (operands[2]);
+  if (scale == 0)
+    tmp = op1;
+  else
+    {
+      tmp  = gen_reg_rtx (V2DFmode);
+      rs6000_scale_v2df (tmp, op1, scale);
+    }
   emit_insn (gen_vsx_xvcvdpsxds (op0, tmp));
   DONE;
 })
 {
   rtx op0 = operands[0];
   rtx op1 = operands[1];
-  rtx tmp = gen_reg_rtx (V2DFmode);
-  int scale = INTVAL(operands[2]);
-  if (scale != 0)
-    rs6000_scale_v2df (tmp, op1, scale);
+  rtx tmp;
+  int scale = INTVAL (operands[2]);
+  if (scale == 0)
+    tmp = op1;
+  else
+    {
+      tmp = gen_reg_rtx (V2DFmode);
+      rs6000_scale_v2df (tmp, op1, scale);
+    }
   emit_insn (gen_vsx_xvcvdpuxds (op0, tmp));
   DONE;
 })
index 19b066b214da1de723e1426b3bf8096bdc34014c..506bc4a42e3b82833f1ab1453ff6cf4ff5e2a17b 100644 (file)
@@ -1,3 +1,11 @@
+2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/70963
+       * gcc.target/powerpc/pr70963.c: New.
+
 2016-05-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        Backport from trunk.
diff --git a/gcc/testsuite/gcc.target/powerpc/pr70963.c b/gcc/testsuite/gcc.target/powerpc/pr70963.c
new file mode 100644 (file)
index 0000000..b5d8316
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-options "-maltivec" } */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <altivec.h>
+
+static int failed;
+static void test (void);
+
+static void check (int result, const char *name)
+{
+  if (!result)
+    {
+      failed++;
+      printf ("fail %s\n", name);
+    }
+}
+    
+int main (void)
+{
+  test ();
+  if (failed)
+    abort ();
+  return 0;
+}
+
+vector double x = { 81.0, 76.0 };
+vector long long y = { 81, 76 };
+
+static void test()
+{
+  vector long long a = vec_cts (x, 0);
+  vector double b = vec_ctf (a, 0);
+  vector long long c = __builtin_vsx_xvcvdpuxds_scale (x, 0);
+  vector double d = vec_ctf (c, 0);
+  check (vec_all_eq (a, y), "vec_cts");
+  check (vec_all_eq (b, x), "vec_ctf");
+  check (vec_all_eq (c, y), "xvcvdpuxds");
+  check (vec_all_eq (d, x), "vec_ctf unsigned");
+}