]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/59992 (Compilation of insn-recog.c too slow due to var-tracking)
authorJakub Jelinek <jakub@redhat.com>
Thu, 6 Feb 2014 15:47:12 +0000 (16:47 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 6 Feb 2014 15:47:12 +0000 (16:47 +0100)
PR debug/59992
* var-tracking.c (adjust_mems): Before adding a SET
to amd->side_effects, adjust it's SET_SRC using
simplify_replace_fn_rtx.

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

From-SVN: r207562

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr59992.c [new file with mode: 0644]
gcc/var-tracking.c

index c5f02802385f6d219c4fedb5544ecbc08dcb34c1..fcbc4567793dfe01b09ffcd879cfa22f85e527e4 100644 (file)
@@ -1,3 +1,10 @@
+2014-02-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/59992
+       * var-tracking.c (adjust_mems): Before adding a SET
+       to amd->side_effects, adjust it's SET_SRC using
+       simplify_replace_fn_rtx.
+
 2014-02-06  Alan Modra  <amodra@gmail.com>
 
        PR target/60032
index 80892ee74e72b843cd338592d8a5746d9ffd0eb9..e0daf52824c2df658c935f7e3877f8ab35de0def 100644 (file)
@@ -1,3 +1,8 @@
+2014-02-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/59992
+       * gcc.dg/pr59992.c: New test.
+
 2014-02-06  Marc Glisse  <marc.glisse@inria.fr>
 
        * g++.dg/cpp0x/constexpr-attribute2.C: Restrict to target
diff --git a/gcc/testsuite/gcc.dg/pr59992.c b/gcc/testsuite/gcc.dg/pr59992.c
new file mode 100644 (file)
index 0000000..5434a2f
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR debug/59992 */
+/* { dg-do compile } */
+/* { dg-require-effective-target run_expensive_tests } */
+/* { dg-options "-O2 -g" } */
+/* { dg-timeout-factor 16.0 } */
+
+#define A(n) if (p[n]) { extern void foo##n (int, int, double, int, int); foo##n (p[n], 5, 8.0, p[n] + p[n + 1], 9); return; }
+#define B(n) A(n##0) A(n##1) A(n##2) A(n##3) A(n##4) A(n##5) A(n##6) A(n##7) A(n##8) A(n##9)
+#define C(n) B(n##0) B(n##1) B(n##2) B(n##3) B(n##4) B(n##5) B(n##6) B(n##7) B(n##8) B(n##9)
+#define D(n) C(n##0) C(n##1) C(n##2) C(n##3) C(n##4) C(n##5) C(n##6) C(n##7) C(n##8) C(n##9)
+#define E(n) D(n##0) D(n##1) D(n##2) D(n##3) D(n##4) D(n##5) D(n##6) D(n##7) D(n##8) D(n##9)
+
+void
+foo (int *p)
+{
+  E(1)
+}
index cfa785079f64a386be4de274679c56fdaf2cd958..a13cac79f37b1690b70f0c403d157c057810a08e 100644 (file)
@@ -1067,10 +1067,13 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
                                        ? GET_MODE_SIZE (amd->mem_mode)
                                        : -GET_MODE_SIZE (amd->mem_mode),
                                        GET_MODE (loc)));
+      store_save = amd->store;
+      amd->store = false;
+      tem = simplify_replace_fn_rtx (tem, old_rtx, adjust_mems, data);
+      amd->store = store_save;
       amd->side_effects = alloc_EXPR_LIST (0,
                                           gen_rtx_SET (VOIDmode,
-                                                       XEXP (loc, 0),
-                                                       tem),
+                                                       XEXP (loc, 0), tem),
                                           amd->side_effects);
       return addr;
     case PRE_MODIFY:
@@ -1080,10 +1083,14 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
        addr = XEXP (loc, 0);
       gcc_assert (amd->mem_mode != VOIDmode);
       addr = simplify_replace_fn_rtx (addr, old_rtx, adjust_mems, data);
+      store_save = amd->store;
+      amd->store = false;
+      tem = simplify_replace_fn_rtx (XEXP (loc, 1), old_rtx,
+                                    adjust_mems, data);
+      amd->store = store_save;
       amd->side_effects = alloc_EXPR_LIST (0,
                                           gen_rtx_SET (VOIDmode,
-                                                       XEXP (loc, 0),
-                                                       XEXP (loc, 1)),
+                                                       XEXP (loc, 0), tem),
                                           amd->side_effects);
       return addr;
     case SUBREG: