This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, I observed some kind of a memory leak while gcc-3.4.4, built with crosstool-0.38 for ARM, is trying to compile libavcodec/snow.c, especially this part: ----------8<---------- static void spatial_decompose97i(DWTELEM *buffer, int width, int height, int stride){ int y; DWTELEM *b0= buffer + mirror(-4-1, height-1)*stride; DWTELEM *b1= buffer + mirror(-4 , height-1)*stride; DWTELEM *b2= buffer + mirror(-4+1, height-1)*stride; DWTELEM *b3= buffer + mirror(-4+2, height-1)*stride; for(y=-4; y<height; y+=2){ DWTELEM *b4= buffer + mirror(y+3, height-1)*stride; DWTELEM *b5= buffer + mirror(y+4, height-1)*stride; {START_TIMER if(b3 <= b5) horizontal_decompose97i(b4, width); if(y+4 < height) horizontal_decompose97i(b5, width); if(width>400){ STOP_TIMER("horizontal_decompose97i") }} {START_TIMER if(b3 <= b5) vertical_decompose97iH0(b3, b4, b5, width); if(b2 <= b4) vertical_decompose97iL0(b2, b3, b4, width); if(b1 <= b3) vertical_decompose97iH1(b1, b2, b3, width); if(b0 <= b2) vertical_decompose97iL1(b0, b1, b2, width); if(width>400){ STOP_TIMER("vertical_decompose97i") }} b0=b2; b1=b3; b2=b4; b3=b5; } } void ff_spatial_dwt(DWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count){ int level; for(level=0; level<decomposition_count; level++){ switch(type){ case 0: spatial_decompose97i(buffer, width>>level, height>>level, stride<<level); break; case 1: spatial_decompose53i(buffer, width>>level, height>>level, stride<<level); break; case 2: spatial_decomposeX (buffer, width>>level, height>>level, stride<<level); break; } } } ----------8<---------- When the compiler (cc1) hits the code in ff_spatial_dwt(), memory consumption goes up until the OOM killer does it's work. This was not the case with gcc-3.3.3, built with crosstool as well. Disabling one of the "case [0|1|2]" lines in ff_spatial_dwt() makes the bug go away, as well as changing the optimisation from -O4 to -O2 (-O3 does still crash). I'm not sure if it is reproducable with patchless compilers, but before I try it and spend hours with toolchain compiling, I'd like to ask if anyone has seen a similar problem before. Robert -- Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de Pengutronix - Linux Solutions for Science and Industry Handelsregister: Amtsgericht Hildesheim, HRA 2686 Hannoversche Str. 2, 31134 Hildesheim, Germany Phone: +49-5121-206917-0 | Fax: +49-5121-206917-9 ------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |