[comp.org.decus] better ratfor ?

btb@ncoast.UUCP (Brad Banko) (11/20/86)

Hello,
	Does anybody know of a good ratfor preprocessor... one that doesn't
have some of the problems that our 3 have.... one that knows about f77?
	As an example, the ratfor for loop:

		for (i=1; i<=n; i = i + 1)

translates into the horrible:

		i = 1
		if (.not. (i .le. n)) goto (end of loop)
		...
		i = i + 1 (goto if)
		(end of loop)

rather than into the much more efficient:

		i = 1
		if (i .gt. n) goto (end of loop)
		...
		i = i + 1 (etc.)
		(end of loop)

this may not seem like much, but I have benchmarked the above optimization
change against the original code from a ratfor version of sieve, and it 
makes a factor of 2 difference... who knows how much more could be improved?
(Incidentally, the ratfor fortran sieve ran 5 times slower than either the
f77, or C sieve, so in other words, a ratfor preprocessor that knows about
f77 could translate ratfor whiles and fors into f77 do whiles and dos... 
resulting in much quicker code.)

	We have a huge programming system all written in rat4... (Gipsy
image processing software), running on a lil' 11/750... 

	If you know of a "modern" rat4 we could get our hands on, I would
appreciate it...  I would also appreciate it if someone could tell me if
the above code is necessary in some way that I am not thinking of?

	Also, if you, or someone you know has any experience with the
Gipsy (General Image Processing System) software originally developed at
Virginia Polytechnic Institute, please send me email... this package was
originally developed to run on IBM systems, but has been ported (sort of)
to VMS...  We need help!

	Thanks,

-- 
			Brad Banko
			...!decvax!cwruecmp!ncoast!btb
			Cleveland, Ohio

ken@rochester.ARPA (SKY) (11/21/86)

I guess you didn't get my mail, Brad.

Changing the code generation for F77 is easy for both the yacc/C and
portable Ratfor version. I can mail you the Ratfor version if you
like.  If you have only binaries, well that is another story.

	Ken

zben@umd5 (Ben Cranston) (11/24/86)

In article <1724@ncoast.UUCP> btb@ncoast.UUCP (Brad Banko) writes:
> As an example, the ratfor for loop:
>  for (i=1; i<=n; i = i + 1)
>translates into the horrible:

>		i = 1
>		if (.not. (i .le. n)) goto (end of loop)
>		...
>		i = i + 1 (goto if)
>		(end of loop)

> rather than into the much more efficient:

>		i = 1
>		if (i .gt. n) goto (end of loop)
>		...
>		i = i + 1 (etc.)
>		(end of loop)

Gosh, any Fortran compiler that doesn't produce the same or similar code
for these two cases sure seems suspect - are you sure there isn't an
"optimize" switch that you could invoke?
-- 
                    umd5.UUCP    <= {seismo!umcp-cs,ihnp4!rlgvax}!cvl!umd5!zben
Ben Cranston zben @ umd2.UMD.EDU    Kingdom of Merryland Sperrows 1100/92
                    umd2.BITNET     "via HASP with RSCS"