Bug 39932 - [4.5 Regression] Revision 146831 caused many test failures
Summary: [4.5 Regression] Revision 146831 caused many test failures
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.5.0
: P3 normal
Target Milestone: 4.5.0
Assignee: Richard Biener
URL:
Keywords:
Depends on: 39958 39959 39960 39969 42749
Blocks:
  Show dependency treegraph
 
Reported: 2009-04-27 16:09 UTC by H.J. Lu
Modified: 2010-01-15 16:05 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2009-04-28 21:42:36


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2009-04-27 16:09:08 UTC
On Linux/x86-64, revision 146839 gave

FAIL: gcc.dg/pr34989-1.c (internal compiler error)
FAIL: gcc.dg/pr34989-1.c (internal compiler error)
FAIL: gcc.dg/pr34989-1.c (test for excess errors)
FAIL: gcc.dg/pr34989-1.c (test for excess errors)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (internal compiler error)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (internal compiler error)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (test for excess errors)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (test for excess errors)
FAIL: gcc.dg/vect/pr32421.c (internal compiler error)
FAIL: gcc.dg/vect/pr32421.c (internal compiler error)
FAIL: gcc.dg/vect/pr32421.c (test for excess errors)
FAIL: gcc.dg/vect/pr32421.c (test for excess errors)
FAIL: gcc.target/i386/pr37101.c (internal compiler error)
FAIL: gcc.target/i386/pr37101.c (internal compiler error)
FAIL: gcc.target/i386/pr37101.c (test for excess errors)
FAIL: gcc.target/i386/pr37101.c (test for excess errors)
FAIL: libgomp.c++/task-4.C  -O  (internal compiler error)
FAIL: libgomp.c++/task-4.C  -O  (internal compiler error)
FAIL: libgomp.c++/task-4.C  -O  (test for excess errors)
FAIL: libgomp.c++/task-4.C  -O  (test for excess errors)
ERROR: gcc.target/i386/pr37101.c: error executing dg-final: couldn't open "pr37101.s": no such file or directory
ERROR: gcc.target/i386/pr37101.c: error executing dg-final: couldn't open "pr37101.s": no such file or directory

Revision 146829 is OK.
Comment 1 H.J. Lu 2009-04-27 17:22:54 UTC
Revision 146831:

http://gcc.gnu.org/ml/gcc-cvs/2009-04/msg01473.html

is the cause.
Comment 2 H.J. Lu 2009-04-27 21:33:31 UTC
On Linux/ia64, revision 146841 gave
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O1  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O2  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O3 -fomit-frame-pointer  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O3 -fomit-frame-pointer -funroll-loops  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -O3 -g  (internal compiler error)
FAIL: gcc.c-torture/execute/20050604-1.c compilation,  -Os  (internal compiler error)
FAIL: gcc.dg/pr32912-2.c (internal compiler error)
FAIL: gcc.dg/pr32912-2.c (test for excess errors)
FAIL: gcc.dg/pr32912-3.c (internal compiler error)
FAIL: gcc.dg/pr32912-3.c (test for excess errors)
FAIL: gcc.dg/pr32912-3.c scan-tree-dump-not optimized "~{": dump file does not exist
FAIL: gcc.dg/pr34989-1.c (internal compiler error)
FAIL: gcc.dg/pr34989-1.c (test for excess errors)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (internal compiler error)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O1  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O1  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O2  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O2  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer -funroll-loops  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -fomit-frame-pointer -funroll-loops  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -g  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -O3 -g  (test for excess errors)
FAIL: gcc.dg/torture/pr21817-1.c  -Os  (internal compiler error)
FAIL: gcc.dg/torture/pr21817-1.c  -Os  (test for excess errors)
FAIL: libgomp.c++/task-4.C  -O  (internal compiler error)
FAIL: libgomp.c++/task-4.C  -O  (test for excess errors)

Revision 146825 is OK.
Comment 3 Steve Ellcey 2009-04-28 21:10:13 UTC
There error I get on cc.c-torture/execute/20050604-1.c and gcc.dg/torture/pr21817-1.c with optimization level 1 or greater is:

x.c:6: error: invalid expression for min lvalue
D.2000_6 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>;

pr21817.c is pretty small already but I did cut it down to:

typedef float v4sf __attribute__((vector_size(16)));
v4sf value;
void foo(void)
{
      value += (v4sf){1e9f,1e9f,1e9f,1e9f};
}

It is not clear if we have generated bad gimple or if the verifier is wrong.
Comment 4 Andrew Pinski 2009-04-28 21:18:46 UTC
(In reply to comment #3)
> There error I get on cc.c-torture/execute/20050604-1.c and
> gcc.dg/torture/pr21817-1.c with optimization level 1 or greater is:
> 
> x.c:6: error: invalid expression for min lvalue
> D.2000_6 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>;
> 
> pr21817.c is pretty small already but I did cut it down to:
> 
> typedef float v4sf __attribute__((vector_size(16)));
> v4sf value;
> void foo(void)
> {
>       value += (v4sf){1e9f,1e9f,1e9f,1e9f};
> }
> 
> It is not clear if we have generated bad gimple or if the verifier is wrong.

Part of both, CONSTRUCTOR for VECTOR_TYPE with CONSTANT set is a valid invariant but really BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64> should simplify to just 1.0e+9.
Comment 5 rguenther@suse.de 2009-04-28 21:21:39 UTC
Subject: Re:  [4.5 Regression] Revision 146831 caused
 many test failures

On Tue, 28 Apr 2009, pinskia at gcc dot gnu dot org wrote:

> (In reply to comment #3)
> > There error I get on cc.c-torture/execute/20050604-1.c and
> > gcc.dg/torture/pr21817-1.c with optimization level 1 or greater is:
> > 
> > x.c:6: error: invalid expression for min lvalue
> > D.2000_6 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>;
> > 
> > pr21817.c is pretty small already but I did cut it down to:
> > 
> > typedef float v4sf __attribute__((vector_size(16)));
> > v4sf value;
> > void foo(void)
> > {
> >       value += (v4sf){1e9f,1e9f,1e9f,1e9f};
> > }
> > 
> > It is not clear if we have generated bad gimple or if the verifier is wrong.
> 
> Part of both, CONSTRUCTOR for VECTOR_TYPE with CONSTANT set is a valid
> invariant but really BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>
> should simplify to just 1.0e+9.

It indeed doesn't look invalid from a first glance.  But shouldn't this
be VECTOR_CST instead of CONSTRUCTOR?  The question is of course what
the type of D.2000 is.  floats are certainly not 64bits at least.

Richard.
Comment 6 Steve Ellcey 2009-04-28 21:25:47 UTC
;; Function foo (foo)

foo ()
{
  vector float D.2002;
  vector float D.2001;
  vector float D.2000;
  vector float D.1999;
  vector float D.1998;
  vector float D.1997;
  v4sf value.1;
  v4sf value.0;
<bb 2>:
  value.0_2 = value;
  D.1997_3 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 0>;
  D.1998_4 = BIT_FIELD_REF <value.0_2, 64, 0>;
  D.1999_5 = D.1997_3 + D.1998_4;
  D.2000_6 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>;
  D.2001_7 = BIT_FIELD_REF <value.0_2, 64, 64>;
  D.2002_8 = D.2000_6 + D.2001_7;
  value.1_9 = {D.1999_5, D.2002_8};
  value = value.1_9;
  return;

}

Comment 7 rguenther@suse.de 2009-04-28 21:35:53 UTC
Subject: Re:  [4.5 Regression] Revision 146831 caused
 many test failures

On Tue, 28 Apr 2009, sje at cup dot hp dot com wrote:

> ------- Comment #6 from sje at cup dot hp dot com  2009-04-28 21:25 -------
> ;; Function foo (foo)
> 
> foo ()
> {
>   vector float D.2002;
>   vector float D.2001;
>   vector float D.2000;
>   vector float D.1999;
>   vector float D.1998;
>   vector float D.1997;
>   v4sf value.1;
>   v4sf value.0;
> <bb 2>:
>   value.0_2 = value;
>   D.1997_3 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 0>;
>   D.1998_4 = BIT_FIELD_REF <value.0_2, 64, 0>;
>   D.1999_5 = D.1997_3 + D.1998_4;
>   D.2000_6 = BIT_FIELD_REF <{ 1.0e+9, 1.0e+9, 1.0e+9, 1.0e+9 }, 64, 64>;
>   D.2001_7 = BIT_FIELD_REF <value.0_2, 64, 64>;
>   D.2002_8 = D.2000_6 + D.2001_7;
>   value.1_9 = {D.1999_5, D.2002_8};
>   value = value.1_9;
>   return;

That looks all odd.  vector float is supposedly v2sf here.  Especially
the definition of value.1_9 looks odd.

I suppose this is our generic vector support at work?

Richard.
Comment 8 Richard Biener 2009-04-28 21:42:36 UTC
Ok, so one issue with the verifier is that it doesn't distinguish between
lvalues and rvalues when verifying verify_types_in_gimple_reference.  I will
fix this.
Comment 9 Richard Biener 2009-04-29 14:20:34 UTC
The only expected fails left should now be

FAIL: gcc.dg/pr34989-1.c (internal compiler error)
FAIL: gcc.dg/pr34989-1.c (internal compiler error)
FAIL: gcc.dg/pr34989-1.c (test for excess errors)
FAIL: gcc.dg/pr34989-1.c (test for excess errors)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (internal compiler error)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (internal compiler error)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (test for excess errors)
FAIL: gcc.dg/struct/wo_prof_double_malloc.c (test for excess errors)

all --combine ones, and

FAIL: libgomp.c++/task-4.C  -O  (internal compiler error)
FAIL: libgomp.c++/task-4.C  -O  (internal compiler error)
FAIL: libgomp.c++/task-4.C  -O  (test for excess errors)
FAIL: libgomp.c++/task-4.C  -O  (test for excess errors)

a bug wrt missing gimplification of VLA array type bounds.

This bug is now very confusing (as are all "revision blabla caused many regression" bugs).

I will open two new bugs for the above and close this one.