egcs-2.92.02 19980905 (m68k-next-nextstep3): Address of hoisted loadclobbered

Toon Moene toon@moene.indiv.nluug.nl
Tue Sep 8 13:05:00 GMT 1998


Compile the following with flags:

/usr/snp/bin/g77 -g -O3 -funroll-loops -fforce-addr  
-fomit-frame-pointer -S -funix-intrinsics-hide a.f

      subroutine MXVA( A, IA, JA, X, INCX, Y, INCY, M, N )
      implicit none
      integer  i, j, ia, ja, incx, incy, m, n
      double precision   a(*), x(*), y(*)
      if ( m    .le. 0 .or.
     ,     n    .le. 0 .or.
     ,     ia   .eq. 0 .or.
     ,     ja   .eq. 0 .or.
     ,     incx .eq. 0 .or.
     ,     incy .eq. 0     ) then
         write(0,*)'MXVA - ARGUMENT ERROR; ABORT'
         call abort
      endif
      do i = 1, m
         y((i-1)*incy+1) = 0.0
         do j = 1, n
            y((i-1)*incy+1) = y((i-1)*incy+1) +
     +         a((i-1)*ia+(j-1)*ja+1) * x((j-1)*incx+1)
         enddo
      enddo
      end

An excerpt from the assmebly output, around the unrolled inner loop:

        fmoved a4@,fp1		<-- Load hoisted
        movel d4,d0
        movel sp@(60),a4	<-- Bleeeccchhhh
        mulsl a4@,d0
	...
        fmoved fp1,a4@		<-- Store sunk

which, of course, results in a Segmentation Violation.

Hope this is complete enough,
Toon.



More information about the Gcc mailing list