Noticed the following in 200.sixtrack benchmark from CPU2000.
SUBROUTINE DFACT(N,A,IDIN,IR,IFAIL,DET,JFAIL)
IMPLICIT REAL*8 (A-H,O-Z)
INTEGER IR(9), IPAIRF
REAL*8 A(IDIN,9),DET, ZERO, ONE,X,Y,TF
DO 144 J = 1, N
K = IR(5)
123 DO 124 L = 1, N
TF = A(J,L)
A(J,L) = A(K,L)
A(K,L) = TF
124 CONTINUE
144 CONTINUE
RETURN
END
Compiling with -O2 -m64 results in poor code for the outer loop exit test (-m32
is fine, as are 4.3 and earlier versions).
4.3:
...
bdnz .L4 #inner loop exit
cmpw 7,7,3
addi 11,11,1
beqlr 7
mainline:
...
bdnz .L4 #inner loop exit
addi 11,8,-1
addi 3,3,1
rldicl 11,11,0,32
addi 11,11,2
add 11,12,11
add 11,11,0
cmpd 7,3,11
bne 7,.L5
--
Summary: IV-opts creating poor code for loop exit test
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pthaugen at gcc dot gnu dot org
GCC build triplet: powerpc64-linux
GCC host triplet: powerpc64-linux
GCC target triplet: powerpc64-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38258