On Sat, Feb 21, 2009 at 9:46 PM, john skaller
<[email protected]> wrote:
> Check generated code to see if the usage of these is inlined.
> Also check if the nested procedures slow things down.
> No stack frames should be created: loop_ is tail rec.
Yep, it was completely inlined and turned into a bunch of gotos. I
don't really see anything obvious. The algorithm itself is pretty
straightforward. I'm not sure if there's really that much we could do
to that g++ isn't able to do. Here's what was generated. Can you see
anything missing?
void FLX_REGPARM _init_(FLX_APAR_DECL_ONLY){
timeval tv;
int y;
int x;
int _i6480_v6480_i;
double bailout;
double zi;
double zr;
int i;
double zr2;
double zi2;
_a2309t_7191 _urv6394;
timeval _i6503_v6503_tv;
_a2309t_7191 _urv6556;
PTF runs = 1;
PTF max_iterations = 99888;
/*Lazy inline call to get_time<5200>*/
{
timeval* _tmp7299 = & tv ;
gettimeofday(_tmp7299, NULL);
}
PTF start_time = (static_cast<double>((tv.tv_sec))) +
(static_cast<double>((tv.tv_usec))) / 1.0e6 ;
PTF iter = 1;
_mandelbrot_9:;
/*Lazy inline call to le<1333>*/
/*Lazy inline call to gt<6988>*/
if(FLX_UNLIKELY(!!(PTF runs < PTF iter ) )) goto _mandelbrot_10;
/*Lazy inline call to mandelbrot<5219>*/
y = -39;
_6464:;
/*Lazy inline call to le<1333>*/
/*Lazy inline call to gt<1327>*/
if(FLX_UNLIKELY(!!(38 < y ) )) goto _6477;
if(!(PTF iter == 1 ) ) goto _6466;
std::cout << std::endl;
_6466:;
x = -39;
_6467:;
/*Lazy inline call to le<1333>*/
/*Lazy inline call to gt<1327>*/
if(FLX_UNLIKELY(!!(38 < x ) )) goto _6476;
/*Lazy inline call to iterate<5207>*/
bailout = 4.0;
/*Eager inline call to loop_<5210>*/
zi = 0.0;
zr = 0.0;
i = 1;
_6468:;
/*Lazy inline call to le<1333>*/
/*Lazy inline call to gt<1327>*/
/*begin match*/
/*match case 1:|case 1*/
if(!(!(PTF max_iterations < i ) ==1) ) goto _6470;
/*begin match*/
/*match case 1:zr2*/
zr2 = zr * zr ;
/*begin match*/
/*match case 1:zi2*/
zi2 = zi * zi ;
/*Lazy inline call to le<1333>*/
/*Lazy inline call to gt<1327>*/
/*begin match*/
/*match case 1:|case 1*/
if(!(!(bailout < zi2 + zr2 ) ==1) ) goto _6469;
/*parallel assignment*/
zi = zr * zi * 2.0 + (static_cast<double>(x)) / 40.0 ;
i = i + 1 ;
zr = zr2 - zi2 + ((static_cast<double>(y)) / 40.0 - 0.5 ) ;
goto _6468;
/*match case 2:any*/
_6469:;
_i6480_v6480_i = i;
goto _6471;
/*match case 2:any*/
_6470:;
_i6480_v6480_i = 0;
_6471:;
if(!(PTF iter == 1 ) ) goto _6475;
/*begin match*/
/*match case 1:|case 1*/
if(!(0 == _i6480_v6480_i ==1) ) goto _6472;
_urv6394 = (_a2309t_7191)("*");
goto _6473;
/*match case 2:any*/
_6472:;
_urv6394 = (_a2309t_7191)(" ");
_6473:;
/*Lazy inline call to print<3359>*/
/*Lazy inline call to str<3835>*/
*(&std::cout)<<_urv6394;
_6475:;
{
int* _tmp7300 = (int*)&x;
++*_tmp7300;
}
goto _6467;
_6476:;
{
int* _tmp7301 = (int*)&y;
++*_tmp7301;
}
goto _6464;
_6477:;
{
int* _tmp7302 = (int*)&PTF iter;
++*_tmp7302;
}
goto _mandelbrot_9;
_mandelbrot_10:;
std::cout << std::endl;
/*Lazy inline call to get_time<5200>*/
{
timeval* _tmp7303 = & _i6503_v6503_tv ;
gettimeofday(_tmp7303, NULL);
}
/*Lazy inline call to println<3365>*/
/*Lazy inline call to str<2421>*/
/*begin match*/
/*match case 1:|case 1*/
if(!(std::isnan(((static_cast<double>((_i6503_v6503_tv.tv_sec)))
+ (static_cast<double>((_i6503_v6503_tv.tv_usec))) / 1.0e6 - PTF
start_time ))==1) ) goto _6557;
_urv6556 = (_a2309t_7191)("nan");
goto _end_inline_str_6562;
/*match case 2:any*/
_6557:;
/*begin match*/
/*match case 1:|case 1*/
if(!(std::isinf(((static_cast<double>((_i6503_v6503_tv.tv_sec)))
+ (static_cast<double>((_i6503_v6503_tv.tv_usec))) / 1.0e6 - PTF
start_time ))==1) ) goto _6559;
/*Lazy inline call to gt<1327>*/
/*begin match*/
/*match case 1:|case 1*/
if(!(0.0 < (static_cast<double>((_i6503_v6503_tv.tv_sec))) +
(static_cast<double>((_i6503_v6503_tv.tv_usec))) / 1.0e6 - PTF
start_time ==1) ) goto _6558;
_urv6556 = (_a2309t_7191)("+inf");
goto _end_inline_str_6562;
/*match case 2:any*/
_6558:;
_urv6556 = (_a2309t_7191)("-inf");
goto _end_inline_str_6562;
/*match case 2:any*/
_6559:;
_urv6556 =
flx::rtl::strutil::str<double>(((static_cast<double>((_i6503_v6503_tv.tv_sec)))
+ (static_cast<double>((_i6503_v6503_tv.tv_usec))) / 1.0e6 - PTF
start_time ));
_end_inline_str_6562:;
*(&std::cout)<<_urv6556;
*(&std::cout)<<std::endl;
}
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language