]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/60851 (ICE: in extract_constrain_insn_cached, at recog.c:2117...
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 24 Mar 2015 07:12:03 +0000 (08:12 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 24 Mar 2015 07:12:03 +0000 (08:12 +0100)
PR rtl-optimization/60851
* recog.c (constrain_operands): Accept a pseudo register before reload
for LRA enabled targets.

testsuite/ChangeLog:

PR rtl-optimization/60851
* gcc.target/i386/pr60851.c: New test.

From-SVN: r221617

gcc/ChangeLog
gcc/recog.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr60851.c [new file with mode: 0644]

index 7f67788f613b64472b0d6ac93b0fe9c3463e809b..e33ff9f3f9b87e459422de8129496cffb6c96844 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/60851
+       * recog.c (constrain_operands): Accept a pseudo register before reload
+       for LRA enabled targets.
+
 2015-03-23  Yvan Roux  <yvan.roux@linaro.org>
 
        Backport from trunk r220616.
index 0481d7dbbfd1c7c2f628a56cf78f54ae7886b5f5..be305de33cc07c181f6dd0d385735eeb3a03b8f0 100644 (file)
@@ -2627,9 +2627,14 @@ constrain_operands (int strict)
                      break;
                    win = 1;
                  }
-               /* Before reload, accept what reload can turn into mem.  */
+               /* Before reload, accept what reload can turn into mem.  */
                else if (strict < 0 && CONSTANT_P (op))
                  win = 1;
+               /* Before reload, accept a pseudo,
+                  since LRA can turn it into a mem.  */
+               else if (strict < 0 && targetm.lra_p () && REG_P (op)
+                        && REGNO (op) >= FIRST_PSEUDO_REGISTER)
+                 win = 1;
                /* During reload, accept a pseudo  */
                else if (reload_in_progress && REG_P (op)
                         && REGNO (op) >= FIRST_PSEUDO_REGISTER)
@@ -2708,6 +2713,10 @@ constrain_operands (int strict)
                    /* Before reload, accept what reload can handle.  */
                    || (strict < 0
                        && (CONSTANT_P (op) || MEM_P (op)))
+                   /* Before reload, accept a pseudo,
+                      since LRA can turn it into a mem.  */
+                   || (strict < 0 && targetm.lra_p () && REG_P (op)
+                       && REGNO (op) >= FIRST_PSEUDO_REGISTER)
                    /* During reload, accept a pseudo  */
                    || (reload_in_progress && REG_P (op)
                        && REGNO (op) >= FIRST_PSEUDO_REGISTER))
@@ -2739,8 +2748,12 @@ constrain_operands (int strict)
                           /* Every memory operand can be reloaded to fit.  */
                           && ((strict < 0 && MEM_P (op))
                               /* Before reload, accept what reload can turn
-                                 into mem.  */
+                                 into mem.  */
                               || (strict < 0 && CONSTANT_P (op))
+                              /* Before reload, accept a pseudo,
+                                 since LRA can turn it into a mem.  */
+                              || (strict < 0 && targetm.lra_p () && REG_P (op)
+                                  && REGNO (op) >= FIRST_PSEUDO_REGISTER)
                               /* During reload, accept a pseudo  */
                               || (reload_in_progress && REG_P (op)
                                   && REGNO (op) >= FIRST_PSEUDO_REGISTER)))
index 9ed091171fd5de13c5ee9e8d44b4d37b70ef2ce0..0b61978ea3b28e44794eb0973073d51c63562930 100644 (file)
@@ -1,4 +1,9 @@
-2015-03-20  Andre Vehreschild  <vehre@gmx.de>
+2015-03-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/60851
+       * gcc.target/i386/pr60851.c: New test.
+
+2015-03-23  Andre Vehreschild  <vehre@gmx.de>
 
        Backport from mainline
        PR fortran/60255
diff --git a/gcc/testsuite/gcc.target/i386/pr60851.c b/gcc/testsuite/gcc.target/i386/pr60851.c
new file mode 100644 (file)
index 0000000..3b8d35d
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -flive-range-shrinkage -mtune=bdver4 -mdispatch-scheduler" } */
+
+long double ld (char c)
+{
+  return c;
+}