]> gcc.gnu.org Git - gcc.git/commitdiff
re PR rtl-optimization/88948 (ICE in elimination_costs_in_insn, at reload1.c:3640...
authorUros Bizjak <ubizjak@gmail.com>
Sun, 27 Jan 2019 17:42:58 +0000 (18:42 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Sun, 27 Jan 2019 17:42:58 +0000 (18:42 +0100)
PR target/88948
* rtl.h (prepare_copy_insn): New prototype.
* gcse.c (prepare_copy_insn): New function, split out from
process_insert_insn.
(process_insert_insn): Use prepare_copy_insn.
* store-motion.c (replace_store_insn): Use prepare_copy_insn
instead of gen_move_insn.

testsuite/ChangeLog:

PR target/88948
* gcc.target/i386/pr88948.c: New test.

From-SVN: r268312

gcc/ChangeLog
gcc/gcse.c
gcc/rtl.h
gcc/store-motion.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr88948.c [new file with mode: 0644]

index db6435c58eb7c162227dbb99a35016cfa141dba0..07bebd6c7a2ab69d03ef3382cdce7a7ba9d6cdcc 100644 (file)
@@ -1,3 +1,13 @@
+2019-01-27  Uroš Bizjak  <ubizjak@gmail.com>
+
+       PR target/88948
+       * rtl.h (prepare_copy_insn): New prototype.
+       * gcse.c (prepare_copy_insn): New function, split out from
+       process_insert_insn.
+       (process_insert_insn): Use prepare_copy_insn.
+       * store-motion.c (replace_store_insn): Use prepare_copy_insn
+       instead of gen_move_insn.
+
 2019-01-24  Uroš Bizjak  <ubizjak@gmail.com>
 
        PR target/88998
index 38b957728577f070b7bbea5d52a766f940f4fc85..3eace228e491c47c0d5329f08d5d7dedeaa513fd 100644 (file)
@@ -1963,14 +1963,11 @@ pre_expr_reaches_here_p (basic_block occr_bb, struct gcse_expr *expr, basic_bloc
   return rval;
 }
 \f
-/* Generate RTL to copy an EXPR to its `reaching_reg' and return it.  */
+/* Generate RTL to copy an EXP to REG and return it.  */
 
-static rtx_insn *
-process_insert_insn (struct gcse_expr *expr)
+rtx_insn *
+prepare_copy_insn (rtx reg, rtx exp)
 {
-  rtx reg = expr->reaching_reg;
-  /* Copy the expression to make sure we don't have any sharing issues.  */
-  rtx exp = copy_rtx (expr->expr);
   rtx_insn *pat;
 
   start_sequence ();
@@ -1996,6 +1993,18 @@ process_insert_insn (struct gcse_expr *expr)
   return pat;
 }
 
+/* Generate RTL to copy an EXPR to its `reaching_reg' and return it.  */
+
+static rtx_insn *
+process_insert_insn (struct gcse_expr *expr)
+{
+  rtx reg = expr->reaching_reg;
+  /* Copy the expression to make sure we don't have any sharing issues.  */
+  rtx exp = copy_rtx (expr->expr);
+
+  return prepare_copy_insn (reg, exp);
+}
+
 /* Add EXPR to the end of basic block BB.
 
    This is used by both the PRE and code hoisting.  */
index 05372cf8c95bcd7ba1e8c3b645f8aa8919f913ff..e6eeea55bdfa99cef91ddc4fa553bf7fa2665d40 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3666,6 +3666,9 @@ extern void init_lower_subreg (void);
 /* In gcse.c */
 extern bool can_copy_p (machine_mode);
 extern bool can_assign_to_reg_without_clobbers_p (rtx, machine_mode);
+extern rtx_insn *prepare_copy_insn (rtx, rtx);
+
+/* In cprop.c */
 extern rtx fis_get_condition (rtx_insn *);
 
 /* In ira.c */
index 927de1b1a917beff21783bc5c980297fd42a982b..8c7e0df975f684f003db1bfc3a827cd43f368c8c 100644 (file)
@@ -907,8 +907,7 @@ replace_store_insn (rtx reg, rtx_insn *del, basic_block bb,
   rtx_insn *insn;
   rtx mem, note, set;
 
-  mem = smexpr->pattern;
-  insn = gen_move_insn (reg, SET_SRC (single_set (del)));
+  insn = prepare_copy_insn (reg, SET_SRC (single_set (del)));
 
   unsigned int i;
   rtx_insn *temp;
@@ -941,6 +940,7 @@ replace_store_insn (rtx reg, rtx_insn *del, basic_block bb,
   /* Now we must handle REG_EQUAL notes whose contents is equal to the mem;
      they are no longer accurate provided that they are reached by this
      definition, so drop them.  */
+  mem = smexpr->pattern;
   for (; insn != NEXT_INSN (BB_END (bb)); insn = NEXT_INSN (insn))
     if (NONDEBUG_INSN_P (insn))
       {
index acb417983cdd6ab3034feb231467429d6852fcf5..ac19a5ebc6846e507b3893653580b10e5b099009 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-27  Uroš Bizjak  <ubizjak@gmail.com>
+
+       PR target/88948
+       * gcc.target/i386/pr88948.c: New test.
+
 2019-01-26  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/array34.adb: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr88948.c b/gcc/testsuite/gcc.target/i386/pr88948.c
new file mode 100644 (file)
index 0000000..5b50803
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR rtl-optimization/88948 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fgcse-sm -msse3 -mfpmath=387" } */
+
+#include "../../gcc.c-torture/execute/stdarg-3.c"
This page took 0.103758 seconds and 5 git commands to generate.