Problem with CLN on Alpha - solved
Richard B. Kreckel
kreckel at thep.physik.uni-mainz.de
Tue Feb 13 14:00:23 CET 2001
On Mon, 12 Feb 101 maxa at frodo.jia.czn.cz wrote:
> Thank you very much for the static library. I compared your and my library
> and I find some differences (for example: "nm cl_prin_globals.o"):
>
> correct:
> 00000000000001a0 T _GLOBAL_$D$cl_module__cl_prin_globals__firstglobalfun
> U _GLOBAL_$D$cl_module__cl_st_null__firstglobalfun
> 0000000000000160 T _GLOBAL_$I$cl_module__cl_prin_globals__firstglobalfun
> U _GLOBAL_$I$cl_module__cl_st_null__firstglobalfun
>
> wrong:
> 00000000000001a0 t _GLOBAL_$D$_3cln$default_print_flags
> U _GLOBAL_$D$cl_module__cl_prin_globals__firstglobalfun
> U _GLOBAL_$D$cl_module__cl_st_null__firstglobalfun
> 0000000000000160 t _GLOBAL_$I$_3cln$default_print_flags
> U _GLOBAL_$I$cl_module__cl_prin_globals__firstglobalfun
> U _GLOBAL_$I$cl_module__cl_st_null__firstglobalfun
>
> And since you mentioned the optimization, I tried different levels, and the
> solution is here! G++ miscompiles CLN if no optimization (-O0) is used and if
> too much optimization (-O3) is used. So, when I switched back to -O2 level, all
> is fine. Great!
Thank you very much for finding out what causes the problem. It is well
known that the PROVIDE/REQUIRE macros defined in include/cln/modules.h
cannot work with -O0. This is why the CLN configure script sets CXXFLAGS
to -O (equivalent to -O1) if you haven't specified it. This is in
contrast to other configure scripts which set it to -O2 -g. But -O2
doesn't help CLN much. The main differerence between -O1 and -O2 is the
enhanced scheduling. But since an awful amount of code in CLN is of the
if (((long)p & 3) == 0)
*((int*)p)++
kind, scheduling cannot take much effect at such short basic block
sizes. Inlining, in contrast, as switched on with -O1 helps a lot. I
still have to find out what goes wrong with -O3.
Regards
-richy.
--
Richard Kreckel
<Richard.Kreckel at Uni-Mainz.DE>
<http://wwwthep.physik.uni-mainz.de/~kreckel/>
More information about the GiNaC-devel
mailing list