public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: optimization/2463: If-test to sort a 2-D array fails with g77 -O2
@ 2002-02-07 13:30 toon
0 siblings, 0 replies; 2+ messages in thread
From: toon @ 2002-02-07 13:30 UTC (permalink / raw)
To: gcc-bugs, gcc-prs, mast, nobody
Synopsis: If-test to sort a 2-D array fails with g77 -O2
State-Changed-From-To: analyzed->closed
State-Changed-By: toon
State-Changed-When: Thu Feb 7 13:30:12 2002
State-Changed-Why:
Fixed for 3.1 by Richard Henderson
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=2463
^ permalink raw reply [flat|nested] 2+ messages in thread
* optimization/2463: If-test to sort a 2-D array fails with g77 -O2
@ 2001-04-02 15:46 mast
0 siblings, 0 replies; 2+ messages in thread
From: mast @ 2001-04-02 15:46 UTC (permalink / raw)
To: gcc-gnats
>Number: 2463
>Category: optimization
>Synopsis: If-test to sort a 2-D array fails with g77 -O2
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Mon Apr 02 15:46:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: David Mastronarde
>Release: gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
Pentium III or AMD Athlon processors under Red Hat Linux 7.0 workstation
class installation, running tcsh as shell.
>Description:
The code performs a simple sort on the elements in
a 2-D array. The decision on whether to swap a
pair of columns is based on:
if(idir*(dat(1,ii)-dat(1,jj)).lt.0.) then
With optimization -O0 or -O1, the array is sorted
correctly. With -O2 or higher, the sort fails.
The compilation command is
g77 -O2 -o g77bug g77bug.f
>How-To-Repeat:
c The array to be ordered - it has to be 2-dimensional for this
c code to fail. The array doesn't need to be dimensioned oversize
c
real*4 dat(2,100)
real*4 curval,baseval/1.6356/
c
c set idir -1 to order - to +, idir 1 to order in reverse order
c
idir=-1
inddisp=30
c
c This just fills the array with numbers
c between -0.5 and 0.5 that are not in order
c
do i=1,inddisp
curval=i*baseval
dat(1,i)=curval - nint(curval)
dat(2,i)=i
enddo
c
print *,'data before'
do i=1,inddisp
write(*,'(2f10.4)')(dat(kk,i),kk=1,2)
enddo
c
do ii=1,inddisp-1
do jj=ii+1,inddisp
c
c the simple if test fails with optimization 2 or 3
c the explicit compound test (commented out) works
c
c if((idir.gt.0.and. dat(1,ii).lt.dat(1,jj)).or.
c & (idir.lt.0.and. dat(1,ii).gt.dat(1,jj)))then
if(idir*(dat(1,ii)-dat(1,jj)).lt.0.) then
c
c The print statement also makes it work right
c
c print *,'swapping',ii,jj
c
c doing the swap with a do loop fails
c doing it explicitly with individual elements works
c
do kk=1,2
tmp=dat(kk,ii)
dat(kk,ii)=dat(kk,jj)
dat(kk,jj)=tmp
enddo
endif
enddo
enddo
c
print *,'data after'
do i=1,inddisp
write(*,'(2f10.4)')(dat(kk,i),kk=1,2)
enddo
call exit
end
>Fix:
The code indicates several changes which avert the problem,
as well as a simple workaround. However, there is no a
priori way to know that there is a problem of this nature
which needs working around in a given program.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="g77bug.f"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="g77bug.f"
YwkgIFRoZSBhcnJheSB0byBiZSBvcmRlcmVkIC0gaXQgaGFzIHRvIGJlIDItZGltZW5zaW9uYWwg
Zm9yIHRoaXMKYwkgIGNvZGUgdG8gZmFpbC4gIFRoZSBhcnJheSBkb2Vzbid0IG5lZWQgdG8gYmUg
ZGltZW5zaW9uZWQgb3ZlcnNpemUKYwoJcmVhbCo0IGRhdCgyLDEwMCkKCXJlYWwqNCBjdXJ2YWws
YmFzZXZhbC8xLjYzNTYvCmMKYwkgIHNldCBpZGlyIC0xIHRvIG9yZGVyIC0gdG8gKywgaWRpciAx
IHRvIG9yZGVyIGluIHJldmVyc2Ugb3JkZXIKYwoJaWRpcj0tMQoJaW5kZGlzcD0zMApjCSAgCmMJ
ICBUaGlzIGp1c3QgZmlsbHMgdGhlIGFycmF5IHdpdGggbnVtYmVycwpjCSAgYmV0d2VlbiAtMC41
IGFuZCAwLjUgdGhhdCBhcmUgbm90IGluIG9yZGVyCmMKCWRvIGk9MSxpbmRkaXNwCgkgIGN1cnZh
bD1pKmJhc2V2YWwKCSAgZGF0KDEsaSk9Y3VydmFsIC0gbmludChjdXJ2YWwpCgkgIGRhdCgyLGkp
PWkKCWVuZGRvCmMKCXByaW50ICosJ2RhdGEgYmVmb3JlJwoJZG8gaT0xLGluZGRpc3AKCSAgd3Jp
dGUoKiwnKDJmMTAuNCknKShkYXQoa2ssaSksa2s9MSwyKQoJZW5kZG8KYwoJZG8gaWk9MSxpbmRk
aXNwLTEKCSAgZG8gamo9aWkrMSxpbmRkaXNwCmMJCSAgICAKYwkgICAgICB0aGUgc2ltcGxlIGlm
IHRlc3QgZmFpbHMgd2l0aCBvcHRpbWl6YXRpb24gMiBvciAzCmMJICAgICAgdGhlIGV4cGxpY2l0
IGNvbXBvdW5kIHRlc3QgKGNvbW1lbnRlZCBvdXQpIHdvcmtzCmMKYwkgICAgaWYoKGlkaXIuZ3Qu
MC5hbmQuIGRhdCgxLGlpKS5sdC5kYXQoMSxqaikpLm9yLgpjICAgICAmCQkoaWRpci5sdC4wLmFu
ZC4gZGF0KDEsaWkpLmd0LmRhdCgxLGpqKSkpdGhlbgoJICAgIGlmKGlkaXIqKGRhdCgxLGlpKS1k
YXQoMSxqaikpLmx0LjAuKSB0aGVuCmMJCQpjCQlUaGUgcHJpbnQgc3RhdGVtZW50IGFsc28gbWFr
ZXMgaXQgd29yayByaWdodApjCmMJICAgICAgcHJpbnQgKiwnc3dhcHBpbmcnLGlpLGpqCmMJCQpj
CQlkb2luZyB0aGUgc3dhcCB3aXRoIGEgZG8gbG9vcCBmYWlscwpjCQlkb2luZyBpdCBleHBsaWNp
dGx5IHdpdGggaW5kaXZpZHVhbCBlbGVtZW50cyB3b3JrcwpjCgkgICAgICBkbyBraz0xLDIKCQl0
bXA9ZGF0KGtrLGlpKQoJCWRhdChrayxpaSk9ZGF0KGtrLGpqKQoJCWRhdChrayxqaik9dG1wCgkg
ICAgICBlbmRkbwoJICAgIGVuZGlmCgkgIGVuZGRvCgllbmRkbwpjCglwcmludCAqLCdkYXRhIGFm
dGVyJwoJZG8gaT0xLGluZGRpc3AKCSAgd3JpdGUoKiwnKDJmMTAuNCknKShkYXQoa2ssaSksa2s9
MSwyKQoJZW5kZG8KCWNhbGwgZXhpdAoJZW5kCg==
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2002-02-07 21:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-07 13:30 optimization/2463: If-test to sort a 2-D array fails with g77 -O2 toon
-- strict thread matches above, loose matches on Subject: below --
2001-04-02 15:46 mast
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).