------- Comment #5 from dfranke at gcc dot gnu dot org  2010-05-09 18:31 -------
This improved at some point. We still create the temporary array, but the
optimizer got smarter:

$> gfortran-svn -O3 -fdump-tree-optimized -Warray-temporaries -c pr33341.f90 
pr33341.f90:5.8:

  foo = all((/ a, b, c /) /= d)
        1
Warning: Creating array temporary at (1)

$> cat  pr33341.f90.142t.optimized 

;; Function foo (foo_)

foo (integer(kind=4) & restrict a, integer(kind=4) & restrict b,
integer(kind=4) & restrict c, integer(kind=4) & restrict d)
{
  logical(kind=4) test.0;
  integer(kind=4) D.1525;
  integer(kind=4) D.1533;
  integer(kind=4) D.1532;
  integer(kind=4) D.1531;

<bb 2>:
  D.1531_7 = *a_6(D);
  D.1532_11 = *b_10(D);
  D.1533_15 = *c_14(D);
  D.1525_17 = *d_16(D);
  if (D.1531_7 == D.1525_17)
    goto <bb 5>;
  else
    goto <bb 3>;

<bb 3>:
  if (D.1532_11 == D.1525_17)
    goto <bb 5>;
  else
    goto <bb 4>;

<bb 4>:
  test.0_32 = D.1533_15 != D.1525_17;

<bb 5>:
  # test.0_1 = PHI <0(2), 0(3), test.0_32(4)>
  return test.0_1;

}

Should we keep the PR open to (eventually) eliminate the temporary or does this
count as fixed?


-- 

dfranke at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |WAITING


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33341

Reply via email to