[comp.unix.ultrix] C optimizer problem -- does DEC have a response?

mf@ircam.ircam.fr (Michel Fingerhut) (08/26/90)

Several public domain large packages of software fail to run correctly
when compiled with any of the -O options of cc (under ultrix 3.1 that I
know of, and 4.0 according to reports in this group).  This is notably
true of TeX, and true (according to my experience) with perl.

I had reported my problem (perl) to the local Dec branch several months
ago, but there still seems to be a major problem around: IS THE OPTIMIZED
OUTPUT OF CC  W R O N G ?  That's important to know, no?  So please Dec,
if you hear me, what is the situation?  Did you compile your kernel, for
instance, with optimization or without?  Is it safe?

PS: We had also reported a cryptic error message from the compiler (in
another situation) namely:
	libmld: Internal: st_pdn_idn: idn (-8) less than 0 or greater than max (3170)
and never got a reply what it was all about.

emv@math.lsa.umich.edu (Edward Vielmetti) (08/27/90)

In article <1990Aug25.231005.29864@ircam.ircam.fr> mf@ircam.ircam.fr (Michel Fingerhut) writes:

   Several public domain large packages of software fail to run correctly
   when compiled with any of the -O options of cc (under ultrix 3.1 that I
   know of, and 4.0 according to reports in this group).  This is notably
   true of TeX, and true (according to my experience) with perl.

There are some known limitations of the mips c compiler, including
the way it deals with volatile & some non-ansi behavior.  You have
not yet convinced me that it is the optimizer which is at fault.

Perl compiled here under Ultrix 4.0, fully optimized, after I dealt
with a few small problems (like not having enough memory....)

--Ed

Edward Vielmetti, U of Michigan math dept <emv@math.lsa.umich.edu>

D. Allen [CGL]) (08/27/90)

>Perl compiled here under Ultrix 4.0, fully optimized, after I dealt
>with a few small problems (like not having enough memory....)

Perl compiled here on a DECsystem 5400 under Ultrix 3.1C using -O
-DLANGUAGE_C fails self-tests op.eval #7 and op.s #40.  It works fine
if I remove the -O.
-- 
-IAN! (Ian! D. Allen) idallen@watcgl.uwaterloo.ca idallen@watcgl.waterloo.edu
 [129.97.128.64]  Computer Graphics Lab/University of Waterloo/Ontario/Canada

hooft@finch.prl.philips.nl (Peter van Hooft 44327) (08/27/90)

In <1990Aug26.214532.17118@watcgl.waterloo.edu> idallen@watcgl.waterloo.edu (Ian! D. Allen [CGL]) writes:

>>Perl compiled here under Ultrix 4.0, fully optimized, after I dealt
>>with a few small problems (like not having enough memory....)

>Perl compiled here on a DECsystem 5400 under Ultrix 3.1C using -O
>-DLANGUAGE_C fails self-tests op.eval #7 and op.s #40.  It works fine
>if I remove the -O.
>-- 
>-IAN! (Ian! D. Allen) idallen@watcgl.uwaterloo.ca idallen@watcgl.waterloo.edu
> [129.97.128.64]  Computer Graphics Lab/University of Waterloo/Ontario/Canada

You should ``undef'' volatile in config.sh. The optimizer obviously does funny things
with volatile variables.
There's the connection :-)




Peter van Hooft (hooft@apolloway.prl.philips.nl)

mf@ircam.ircam.fr (Michel Fingerhut) (08/27/90)

I mentioned the problems with PERL UNDER ULTRIX 3.1 (confirmed by at least
one other message in this newsgroup) and TEX UNDER 4.0 (according to a report
in this group).  Your response about PERL UNDER ULTRIX 4.0 did not convince
me yet that the compiler is not at fault.

Moveover, you write that "Perl compiled here under Ultrix 4.0 fully
optimized".  Well, it "compiled" here too, WITHOUT ANY ERROR MESSAGES,
nothing, it merely failed some of the validation tests.  Without any
optimizations, it compiled yet again without any error messages, but
passed all the tests.  I think I can safely infer that there is a
SERIOUS problem with the optimizer or some other part of the mips
compiler.

Finally you mention that "There are some known limitations of the mips c
compiler, including the way it deals with volatile & some non-ansi behavior."
Either there are limitations, in which case the compiler should complain if
these are exceeded, or else there are bugs (e.g.: different behaviors with
different main memory sizes).

evans@decvaxdec.com (Marc Evans) (08/28/90)

|> I mentioned the problems with PERL UNDER ULTRIX 3.1 (confirmed by at least
|> one other message in this newsgroup) and TEX UNDER 4.0 (according to
a report
|> in this group).  Your response about PERL UNDER ULTRIX 4.0 did not
convince
|> me yet that the compiler is not at fault.
|> 
|> Moveover, you write that "Perl compiled here under Ultrix 4.0 fully
|> optimized".  Well, it "compiled" here too, WITHOUT ANY ERROR
MESSAGES,
|> nothing, it merely failed some of the validation tests.  Without any
|> optimizations, it compiled yet again without any error messages, but
|> passed all the tests.  I think I can safely infer that there is a
|> SERIOUS problem with the optimizer or some other part of the mips
|> compiler.
|> 
|> Finally you mention that "There are some known limitations of the
mips c
|> compiler, including the way it deals with volatile & some non-ansi
behavior."
|> Either there are limitations, in which case the compiler should
complain if
|> these are exceeded, or else there are bugs (e.g.: different behaviors
with
|> different main memory sizes).

Who are you quoting? I know that I posted anm article about the DEC
compiler for
the MIPS architecture. I don't have a copy of the article handy, but I
intended
to say that the version of the compiler which is successful is 2.1,
which
cooresponds to the mipsco version 2.10. The *standard* version of the
compiler
shipped with ULTRIX 4.0 is 2.0. One way to determine which version you
are using
is to 'ls -l /usr/bin/cc' and see where the symbolic link points. The
way that
you get the 2.1 compiler is to order the XPG3 patches for ULTRIX 4.0,
which
should be available soon (at the very least in field test).

I will agree that the 2.0 version of the compiler has many problems when
it comes
to -O* compilation. Perl tends to find some of these problems. As far as
certain
ANSI features, yes, it does complain about the ones it doesn't know how
to
handle, such as 'const'. 'volatile' however, it does attempt to handle,
but
appears to have problems. Therefore, when building perl set the volatile
flag
in config.sh to undef and you shouldn't have any problems.

- Marc
--
========================================================================
====
Marc Evans - WB1GRH - evans@decvax.DEC.COM  | Synergytics    
(603)635-8876
      Unix and X Software Contractor        | 21 Hinds Ln, Pelham, NH
03076
========================================================================
====