re PR target/88188 (ICE in print_operand, at config/rs6000/rs6000.c)
authorJakub Jelinek <jakub@redhat.com>
Tue, 27 Nov 2018 15:40:57 +0000 (16:40 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 27 Nov 2018 15:40:57 +0000 (16:40 +0100)
PR target/88188
* config/rs6000/rs6000.c (print_operand) <case 'D'>: Use
output_operand_lossage instead of gcc_assert.
<case 't'>: Likewise.
<case 'z'>: Likewise.
<case 'V'>: Use output_operand_lossage instead of gcc_unreachable.

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

From-SVN: r266515

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/phi-opt-11.c
gcc/testsuite/gcc.target/powerpc/pr88188.c [new file with mode: 0644]

index 96215ee5cd79465142d1296dfc523d966e37677b..aea7767bde68b01b18527e72f48f269637843a44 100644 (file)
@@ -1,3 +1,12 @@
+2018-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/88188
+       * config/rs6000/rs6000.c (print_operand) <case 'D'>: Use
+       output_operand_lossage instead of gcc_assert.
+       <case 't'>: Likewise.
+       <case 'z'>: Likewise.
+       <case 'V'>: Use output_operand_lossage instead of gcc_unreachable.
+
 2018-11-27  Jeff Law  <law@redhat.com>
 
        * config/riscv/riscv (riscv_block_mvoe_straight): Use RETURN_BEGIN
index 276526381f1124ba07561aaf4bb977d46d26cd42..965488caabfe5057353da222e7802e1092be4d00 100644 (file)
@@ -20644,7 +20644,11 @@ print_operand (FILE *file, rtx x, int code)
 
     case 'D':
       /* Like 'J' but get to the GT bit only.  */
-      gcc_assert (REG_P (x));
+      if (!REG_P (x))
+       {
+         output_operand_lossage ("invalid %%D value");
+         return;
+       }
 
       /* Bit 1 is GT bit.  */
       i = 4 * (REGNO (x) - CR0_REGNO) + 1;
@@ -20900,7 +20904,11 @@ print_operand (FILE *file, rtx x, int code)
 
     case 't':
       /* Like 'J' but get to the OVERFLOW/UNORDERED bit.  */
-      gcc_assert (REG_P (x) && GET_MODE (x) == CCmode);
+      if (!REG_P (x) || GET_MODE (x) != CCmode)
+       {
+         output_operand_lossage ("invalid %%t value");
+         return;
+       }
 
       /* Bit 3 is OV bit.  */
       i = 4 * (REGNO (x) - CR0_REGNO) + 3;
@@ -20989,7 +20997,7 @@ print_operand (FILE *file, rtx x, int code)
          fputs ("lge", file);  /* 5 */
          break;
        default:
-         gcc_unreachable ();
+         output_operand_lossage ("invalid %%V value");
        }
       break;
 
@@ -21059,7 +21067,11 @@ print_operand (FILE *file, rtx x, int code)
         names.  If we are configured for System V (or the embedded ABI) on
         the PowerPC, do not emit the period, since those systems do not use
         TOCs and the like.  */
-      gcc_assert (GET_CODE (x) == SYMBOL_REF);
+      if (!SYMBOL_REF_P (x))
+       {
+         output_operand_lossage ("invalid %%z value");
+         return;
+       }
 
       /* For macho, check to see if we need a stub.  */
       if (TARGET_MACHO)
index e6bc1f8ce21785927de86e413c31f16bf17c4285..bf09d5c573029cc066390f960f1d3a52b6da01d9 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/88188
+       * gcc.target/powerpc/pr88188.c: New test.
+
 2018-11-27  Martin Liska  <mliska@suse.cz>
 
        * gfortran.dg/simd-builtins-1.f90: New test.
index 1d06be0e19efb302d1377ac11ed4edd871f50d8a..cccb06927df6cf0e34b2cc2637f12d381806739f 100644 (file)
@@ -23,5 +23,5 @@ int h(int a, int b, int c, int d)
  return a;
 }
 
-/* { dg-final { scan-tree-dump-times "if" 0 "optimized" { target { ! logical_op_short_circuit } } } } */
-/* { dg-final { scan-tree-dump-times "if" 2 "optimized" { target logical_op_short_circuit } } } */
+/* { dg-final { scan-tree-dump-times "if" 0 "optimized" { target { { ! logical_op_short_circuit } || branch_cost } } } } */
+/* { dg-final { scan-tree-dump-times "if" 2 "optimized" { target { logical_op_short_circuit && { ! branch_cost } } } } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr88188.c b/gcc/testsuite/gcc.target/powerpc/pr88188.c
new file mode 100644 (file)
index 0000000..5af08e5
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/88188 */
+/* { dg-do compile } */
+
+int m;
+
+void
+foo (void)
+{
+  __asm volatile ("%D0" : : "m" (m));  /* { dg-error "invalid %D value" } */
+  __asm volatile ("%t0" : : "m" (m));  /* { dg-error "invalid %t value" } */
+  __asm volatile ("%V0" : : "r" (0));  /* { dg-error "invalid %V value" } */
+  __asm volatile ("%z0" : : "r" (0));  /* { dg-error "invalid %z value" } */
+}