From: Janis Johnson Date: Thu, 21 Jul 2005 21:57:05 +0000 (+0000) Subject: re PR target/20191 (ICE in reload_cse_simplify_operands, on powerpc linux) X-Git-Tag: releases/gcc-3.4.5~315 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f781b87609c8322fc9426a399396f42ef5aa8c3a;p=thirdparty%2Fgcc.git re PR target/20191 (ICE in reload_cse_simplify_operands, on powerpc linux) PR target/20191 Backport from mainline: 2004-04-23 Dale Johannesen * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8ded4f05c372..6cf42ad2ebf0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2005-07-21 Janis Johnson + + PR target/20191 + Backport from mainline: + + 2004-04-23 Dale Johannesen + + * 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 PR rtl-optimization/22167 diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 3b062ce7cde5..2271dece64ac 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7839,8 +7839,8 @@ }") (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)" @@ -7854,10 +7854,11 @@ 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") @@ -8114,8 +8115,8 @@ ; 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))" @@ -8129,11 +8130,12 @@ 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" "") @@ -8191,7 +8193,7 @@ # # # - nop" + {cror 0,0,0|nop}" [(set_attr "type" "load,store,*,*,*,*,*,*,*") (set_attr "length" "4,4,4,4,4,8,12,16,4")]) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b7d49cb314eb..15e86a758579 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-07-21 Janis Johnson + + PR target/20191 + * gcc.c-torture/compile/20050721-1.c: New test. + 2005-07-21 Richard Sandiford 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 index 000000000000..25a781ddd5ad --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20050721-1.c @@ -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; +}