]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/20191 (ICE in reload_cse_simplify_operands, on powerpc linux)
authorJanis Johnson <janis187@us.ibm.com>
Thu, 21 Jul 2005 21:57:05 +0000 (21:57 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Thu, 21 Jul 2005 21:57:05 +0000 (21:57 +0000)
PR target/20191
Backport from mainline:

2004-04-23  Dale Johannesen  <dalej@apple.com>

* config/rs6000.md (movsf_hardfloat): Add POWER form of nop.
(movdf_hardfloat64):  Ditto.
(movdf_softfloat64):  Ditto.

* config/rs6000.md (movsf_hardfloat): Accept CTR-to-CTR copy.
(movdf_hardfloat64):  Ditto.

testsuite:
PR target/20191
* gcc.c-torture/compile/20050721-1.c: New test.

From-SVN: r102251

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20050721-1.c [new file with mode: 0644]

index 8ded4f05c372f7e63dc09d50f80e84c5bf31160e..6cf42ad2ebf04a43d6c67fbce6560a7697379911 100644 (file)
@@ -1,3 +1,17 @@
+2005-07-21  Janis Johnson  <janis187@us.ibm.com>
+
+       PR target/20191
+       Backport from mainline:
+
+       2004-04-23  Dale Johannesen  <dalej@apple.com>
+
+       * config/rs6000.md (movsf_hardfloat): Add POWER form of nop.
+       (movdf_hardfloat64):  Ditto.
+       (movdf_softfloat64):  Ditto.
+
+       * config/rs6000.md (movsf_hardfloat): Accept CTR-to-CTR copy.
+       (movdf_hardfloat64):  Ditto.
+
 2005-07-21  Richard Sandiford  <richard@codesourcery.com>
 
        PR rtl-optimization/22167
index 3b062ce7cde5651abba5d8602c9a4507d728c851..2271dece64acfa639601f60754abc2391685c4ff 100644 (file)
 }")
 
 (define_insn "*movsf_hardfloat"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!cl,!q,!r,!r,!r")
-       (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,r,h,G,Fn"))]
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!cl,!q,!r,!h,!r,!r")
+       (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,r,h,0,G,Fn"))]
   "(gpc_reg_operand (operands[0], SFmode)
    || gpc_reg_operand (operands[1], SFmode))
    && (TARGET_HARD_FLOAT && TARGET_FPRS)"
    mt%0 %1
    mt%0 %1
    mf%1 %0
+   {cror 0,0,0|nop}
    #
    #"
-  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,mtjmpr,*,*,*")
-   (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8")])
+  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,mtjmpr,*,*,*,*")
+   (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,8")])
 
 (define_insn "*movsf_softfloat"
   [(set (match_operand:SF 0 "nonimmediate_operand" "=r,cl,q,r,r,m,r,r,r,r,r,*h")
 ; ld/std require word-aligned displacements -> 'Y' constraint.
 ; List Y->r and r->Y before r->r for reload.
 (define_insn "*movdf_hardfloat64"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,b,!r,f,f,m,!cl,!r,!r,!r,!r")
-       (match_operand:DF 1 "input_operand" "r,Y,m,r,f,m,f,r,h,G,H,F"))]
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,b,!r,f,f,m,!cl,!r,!h,!r,!r,!r")
+       (match_operand:DF 1 "input_operand" "r,Y,m,r,f,m,f,r,h,0,G,H,F"))]
   "TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
    && (gpc_reg_operand (operands[0], DFmode)
        || gpc_reg_operand (operands[1], DFmode))"
    stfd%U0%X0 %1,%0
    mt%0 %1
    mf%1 %0
+   {cror 0,0,0|nop}
    #
    #
    #"
-  [(set_attr "type" "store,load,load,*,fp,fpload,fpstore,mtjmpr,*,*,*,*")
-   (set_attr "length" "4,4,8,4,4,4,4,4,4,8,12,16")])
+  [(set_attr "type" "store,load,load,*,fp,fpload,fpstore,mtjmpr,*,*,*,*,*")
+   (set_attr "length" "4,4,8,4,4,4,4,4,4,4,8,12,16")])
 
 (define_split
   [(set (match_operand:DF 0 "base_reg_operand" "")
    #
    #
    #
-   nop"
+   {cror 0,0,0|nop}"
   [(set_attr "type" "load,store,*,*,*,*,*,*,*")
    (set_attr "length" "4,4,4,4,4,8,12,16,4")])
 \f
index b7d49cb314eb20499ac758413748dec9227b09df..15e86a758579d4b2e9c4d5dc077601fb3f601fab 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-21  Janis Johnson  <janis187@us.ibm.com>
+
+       PR target/20191
+       * gcc.c-torture/compile/20050721-1.c: New test.
+
 2005-07-21  Richard Sandiford  <richard@codesourcery.com>
 
        PR rtl-optimization/22167
diff --git a/gcc/testsuite/gcc.c-torture/compile/20050721-1.c b/gcc/testsuite/gcc.c-torture/compile/20050721-1.c
new file mode 100644 (file)
index 0000000..25a781d
--- /dev/null
@@ -0,0 +1,57 @@
+/* Test for PR target/20191.  */
+
+struct S1;
+
+struct S1 {
+  struct S1 *next;
+  float x;
+};
+
+struct S2 {
+  float y;
+};
+
+extern int func_ex1 (float);
+
+extern int f;
+extern float n;
+extern struct S1 *bp1;
+extern struct S2 *bp2;
+
+inline float
+func1 (int f, struct S2 *p2)
+{
+  float a;
+
+  if (f)
+    a = n >= p2->y ? n : p2->y;
+  else
+    a = n;
+  return a;
+}
+
+inline float
+func2 (struct S1 *p1, struct S2 *p2)
+{
+  float a, b;
+
+  if(n <= 1.0)
+    b = func1 (f, p2);
+  else
+    {
+       a = n <= p1->x ? 0.0 : p1->x;
+       b = a >= p2->y ? a : p2->y;
+    }
+  return(b);
+}
+
+void
+func3 (struct S1 *p)
+{
+  float a = 0.0;
+
+  if (f)
+    a = func2 (bp1, bp2);
+  if (func_ex1 (a))
+    bp1 = p;
+}