re PR target/89438 (ICE in glibc/sysdeps/ieee754/dbl-64/e_pow.c (internal compiler...
authorJakub Jelinek <jakub@redhat.com>
Mon, 25 Feb 2019 09:51:27 +0000 (10:51 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 25 Feb 2019 09:51:27 +0000 (10:51 +0100)
PR target/89438
* config/arm.vfp.md (*negdf2_vfp): Use
gen_int_mode (0x80000000, SImode) instead of GEN_INT (0x80000000).
* config/arm/neon.md (neon_copysignf<mode>): Likewise.

* gcc.dg/pr89438.c: New test.

From-SVN: r269185

gcc/ChangeLog
gcc/config/arm/neon.md
gcc/config/arm/vfp.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr89438.c [new file with mode: 0644]

index 2185019488027af62741404f2f05f4bb4adc4697..932861814adda972cdd8d7752b27488d262d0111 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/89438
+       * config/arm.vfp.md (*negdf2_vfp): Use
+       gen_int_mode (0x80000000, SImode) instead of GEN_INT (0x80000000).
+       * config/arm/neon.md (neon_copysignf<mode>): Likewise.
+
 2019-02-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/89445
index de9ae43849038b3cf75feceec36429d5c40c63f2..c68ae57f6a83e429c4070a57a684941523c598bc 100644 (file)
   "{
      rtx v_bitmask_cast;
      rtx v_bitmask = gen_reg_rtx (<VCVTF:V_cmp_result>mode);
-     rtx c = GEN_INT (0x80000000);
+     rtx c = gen_int_mode (0x80000000, SImode);
 
      emit_move_insn (v_bitmask,
                     gen_const_vec_duplicate (<VCVTF:V_cmp_result>mode, c));
index e1c39744ceba6754a6150c36e63b9763b8eb813a..e0aaa7b00bb41c046da4531a293e123c94e8b9a4 100644 (file)
   if (REGNO (operands[0]) == REGNO (operands[1]))
     {
       operands[0] = gen_highpart (SImode, operands[0]);
-      operands[1] = gen_rtx_XOR (SImode, operands[0], GEN_INT (0x80000000));
+      operands[1] = gen_rtx_XOR (SImode, operands[0],
+                                gen_int_mode (0x80000000, SImode));
     }
   else
     {
       rtx in_hi, in_lo, out_hi, out_lo;
 
       in_hi = gen_rtx_XOR (SImode, gen_highpart (SImode, operands[1]),
-                          GEN_INT (0x80000000));
+                          gen_int_mode (0x80000000, SImode));
       in_lo = gen_lowpart (SImode, operands[1]);
       out_hi = gen_highpart (SImode, operands[0]);
       out_lo = gen_lowpart (SImode, operands[0]);
index e55b591a8b02722a23404b91b00d175ce12e8fc0..f872fc4c8f83405cd850f7691e17a0eb1025607b 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/89438
+       * gcc.dg/pr89438.c: New test.
+
 2019-02-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/84585
diff --git a/gcc/testsuite/gcc.dg/pr89438.c b/gcc/testsuite/gcc.dg/pr89438.c
new file mode 100644 (file)
index 0000000..2db4623
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/89438 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g -w" } */
+
+struct S { double b, c; struct T { double d, e; } f[16]; } g;
+int h, i, j;
+double k;
+
+double
+foo (void)
+{
+  int m;
+  if (j)
+    return k;
+  long a, p = a - 80;
+  double b, n;
+  n = b * h + g.f[p].e;
+  m = n;
+  double o = 1 ? m : 1.0;
+  k = i ? -o : o;
+  return k;
+}