its find out, the problematic optimization that crash seem "-funswitch-loops". A compile of ffmpeg with -O2 + all other optimization options from -O3 work, (see second output) See also the Mail i write before http://gcc.gnu.org/ml/gcc/2009-06/msg00229.html $ make_68k_v4 /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.0.exe -V 4.4.0 -DHAVE_AV_CONFIG_H -I.. -I"/bin/ffmpeg8" --save-temps -mnobitfield -m68060 -std=c99 -Wdeclaration-afte r-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_ SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-fram e-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrit e-strings -Wundef -O3 -c -o mpegvideo.o mpegvideo.c mpegvideo.c: In function 'init_rl': mpegvideo.c:760: warning: pointer targets in assignment differ in signedness mpegvideo.c:765: warning: pointer targets in assignment differ in signedness mpegvideo.c: In function 'MPV_motion_lowres': mpegvideo.c:1707: error: insn does not satisfy its constraints: (insn 937 3765 3766 59 mpegvideo.c:1488 (set (reg:SI 0 d0 [931]) (plus:SI (mem/f:SI (reg:SI 9 a1) [7 S4 A16]) (reg:SI 0 d0 [931]))) 131 {*addsi3_internal} (nil)) mpegvideo.c:1707: internal compiler error: in reload_cse_simplify_operands, at p ostreload.c:396 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. ------------------------------------------------------------------------ Compiles fine with -O2 + all optimalizations from -O3 except "-funswitch-loops": $ make_68k_v4 /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.0.exe -V 4.4.0 -DHAVE_AV_CONFIG_H -I.. -I"/bin/ffmpeg8" --save-temps -mnobitfield -m68060 -std=c99 -Wdeclaration-afte r-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_ SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-fram e-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrit e-strings -Wundef -O2 -finline-functions -fgcse-after-reload -fpredictive-common ing -ftree-vectorize -c -o mpegvideo.o mpegvideo.c mpegvideo.c: In function 'init_rl': mpegvideo.c:760: warning: pointer targets in assignment differ in signedness mpegvideo.c:765: warning: pointer targets in assignment differ in signedness In file included from mpegvideo.c:34: mpegvideo_common.h: In function 'MPV_motion': mpegvideo_common.h:674: warning: dereferencing pointer '({anonymous})' does brea k strict-aliasing rules mpegvideo_common.h:674: note: initialized from here mpegvideo_common.h:675: warning: dereferencing pointer '({anonymous})' does brea k strict-aliasing rules mpegvideo_common.h:675: note: initialized from here mpegvideo_common.h:677: warning: dereferencing pointer '({anonymous})' does brea k strict-aliasing rules mpegvideo_common.h:677: note: initialized from here mpegvideo_common.h:678: warning: dereferencing pointer '({anonymous})' does brea k strict-aliasing rules mpegvideo_common.h:678: note: initialized from here here is snippet of .i file.full file have size 2476 kb.please let me know if you need more info or send me fixes, i can compile new gcc # 1594 "mpegvideo.c" static inline void MPV_motion_lowres(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int dir, uint8_t **ref_picture, h264_chroma_mc_func *pix_op) { int mx, my; int mb_x, mb_y, i; const int lowres= s->avctx->lowres; const int block_s= 8>>lowres; mb_x = s->mb_x; mb_y = s->mb_y; switch(s->mv_type) { case 0: mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, 0, 0, ref_picture, pix_op, s->mv[dir][0][0], s->mv[dir][0][1], 2*block_s); break; case 1: mx = 0; my = 0; for(i=0;i<4;i++) { hpel_motion_lowres(s, dest_y + ((i & 1) + (i >> 1) * s->linesize)*block_s, ref_picture[0], 0, 0, (2*mb_x + (i & 1))*block_s, (2*mb_y + (i >>1))*block_s, s->width, s->height, s->linesize, s->h_edge_pos >> lowres, s->v_edge_pos >> lowres, block_s, block_s, pix_op, s->mv[dir][i][0], s->mv[dir][i][1]); mx += s->mv[dir][i][0]; my += s->mv[dir][i][1]; } if(!0 || !(s->flags&0x2000)) chroma_4mv_motion_lowres(s, dest_cb, dest_cr, ref_picture, pix_op, mx, my); break; case 3: if (s->picture_structure == 3) { mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, 0, s->field_select[dir][0], ref_picture, pix_op, s->mv[dir][0][0], s->mv[dir][0][1], block_s); mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, 1, s->field_select[dir][1], ref_picture, pix_op, s->mv[dir][1][0], s->mv[dir][1][1], block_s); } else { if(s->picture_structure != s->field_select[dir][0] + 1 && s->pict_type != 3 && !s->first_field){ ref_picture= s->current_picture_ptr->data; } mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, 0, s->field_select[dir][0], ref_picture, pix_op, s->mv[dir][0][0], s->mv[dir][0][1], 2*block_s); } break; case 2: for(i=0; i<2; i++){ uint8_t ** ref2picture; if(s->picture_structure == s->field_select[dir][i] + 1 || s->pict_type == 3 || s->first_field){ ref2picture= ref_picture; }else{ ref2picture= s->current_picture_ptr->data; } mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, 0, s->field_select[dir][i], ref2picture, pix_op, s->mv[dir][i][0], s->mv[dir][i][1] + 2*block_s*i, block_s); dest_y += 2*block_s*s->linesize; dest_cb+= (2*block_s>>s->chroma_y_shift)*s->uvlinesize; dest_cr+= (2*block_s>>s->chroma_y_shift)*s->uvlinesize; } break; case 4: if(s->picture_structure == 3){ for(i=0; i<2; i++){ int j; for(j=0; j<2; j++){ mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, j, j^i, ref_picture, pix_op, s->mv[dir][2*i + j][0], s->mv[dir][2*i + j][1], block_s); } pix_op = s->dsp.avg_h264_chroma_pixels_tab; } }else{ for(i=0; i<2; i++){ mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, 0, s->picture_structure != i+1, ref_picture, pix_op, s->mv[dir][2*i][0],s->mv[dir][2*i][1],2*block_s); pix_op = s->dsp.avg_h264_chroma_pixels_tab; if(!s->first_field){ ref_picture = s->current_picture_ptr->data; } } } break; default: ((void) 0); } } static inline void put_dct(MpegEncContext *s, DCTELEM *block, int i, uint8_t *dest, int line_size, int qscale) { s->dct_unquantize_intra(s, block, i, qscale); s->dsp.idct_put (dest, line_size, block); } static inline void add_dct(MpegEncContext *s, DCTELEM *block, int i, uint8_t *dest, int line_size) { if (s->block_last_index[i] >= 0) { s->dsp.idct_add (dest, line_size, block); } } static inline void add_dequant_dct(MpegEncContext *s, DCTELEM *block, int i, uint8_t *dest, int line_size, int qscale) { if (s->block_last_index[i] >= 0) { s->dct_unquantize_inter(s, block, i, qscale); s->dsp.idct_add (dest, line_size, block); } } void ff_clean_intra_table_entries(MpegEncContext *s) { int wrap = s->b8_stride; int xy = s->block_index[0]; s->dc_val[0][xy ] = s->dc_val[0][xy + 1 ] = s->dc_val[0][xy + wrap] = s->dc_val[0][xy + 1 + wrap] = 1024; memset(s->ac_val[0][xy ], 0, 32 * sizeof(int16_t)); memset(s->ac_val[0][xy + wrap], 0, 32 * sizeof(int16_t)); if (s->msmpeg4_version>=3) { s->coded_block[xy ] = s->coded_block[xy + 1 ] = s->coded_block[xy + wrap] = s->coded_block[xy + 1 + wrap] = 0; } wrap = s->mb_stride; xy = s->mb_x + s->mb_y * wrap; s->dc_val[1][xy] = s->dc_val[2][xy] = 1024; memset(s->ac_val[1][xy], 0, 16 * sizeof(int16_t)); memset(s->ac_val[2][xy], 0, 16 * sizeof(int16_t)); s->mbintra_table[xy]= 0; } # 1779 "mpegvideo.c" static __attribute__((always_inline)) inline void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], int lowres_flag, int is_mpeg12) { const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; if(0 && s->avctx->xvmc_acceleration){ ff_xvmc_decode_mb(s); return; } if(s->avctx->debug&0x00000040) { int i,j; DCTELEM *dct = &s->current_picture.dct_coeff[mb_xy*64*6]; for(i=0; i<6; i++) for(j=0; j<64; j++) *dct++ = block[i][s->dsp.idct_permutation[j]]; } s->current_picture.qscale_table[mb_xy]= s->qscale; if (!s->mb_intra) { if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) { if(s->mbintra_table[mb_xy]) ff_clean_intra_table_entries(s); } else { s->last_dc[0] = s->last_dc[1] = s->last_dc[2] = 128 << s->intra_dc_precision; } } else if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) s->mbintra_table[mb_xy]=1; if ((s->flags&0x8000) || !(s->encoding && (s->intra_only || s->pict_type==3) && s->avctx->mb_decision != 2)) { uint8_t *dest_y, *dest_cb, *dest_cr; int dct_linesize, dct_offset; op_pixels_func (*op_pix)[4]; qpel_mc_func (*op_qpix)[16]; const int linesize= s->current_picture.linesize[0]; const int uvlinesize= s->current_picture.linesize[1]; const int readable= s->pict_type != 3 || s->encoding || s->avctx->draw_horiz_band || lowres_flag; const int block_size= lowres_flag ? 8>>s->avctx->lowres : 8; if(!s->encoding){ uint8_t *mbskip_ptr = &s->mbskip_table[mb_xy]; const int age= s->current_picture.age; ((void) 0); if (s->mb_skipped) { s->mb_skipped= 0; ((void) 0); (*mbskip_ptr) ++; if(*mbskip_ptr >99) *mbskip_ptr= 99; if (*mbskip_ptr >= age && s->current_picture.reference){ return; } } else if(!s->current_picture.reference){ (*mbskip_ptr) ++; if(*mbskip_ptr >99) *mbskip_ptr= 99; } else{ *mbskip_ptr = 0; } } dct_linesize = linesize << s->interlaced_dct; dct_offset =(s->interlaced_dct)? linesize : linesize*block_size; if(readable){ dest_y= s->dest[0]; dest_cb= s->dest[1]; dest_cr= s->dest[2]; }else{ dest_y = s->b_scratchpad; dest_cb= s->b_scratchpad+16*linesize; dest_cr= s->b_scratchpad+32*linesize; } if (!s->mb_intra) { if(!s->encoding){ if(lowres_flag){ h264_chroma_mc_func *op_pix = s->dsp.put_h264_chroma_pixels_tab; if (s->mv_dir & 1) { MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, s->last_picture.data, op_pix); op_pix = s->dsp.avg_h264_chroma_pixels_tab; } if (s->mv_dir & 2) { MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, s->next_picture.data, op_pix); } }else{ op_qpix= s->me.qpel_put; if ((!s->no_rounding) || s->pict_type==3){ op_pix = s->dsp.put_pixels_tab; }else{ op_pix = s->dsp.put_no_rnd_pixels_tab; } if (s->mv_dir & 1) { MPV_motion(s, dest_y, dest_cb, dest_cr, 0, s->last_picture.data, op_pix, op_qpix); op_pix = s->dsp.avg_pixels_tab; op_qpix= s->me.qpel_avg; } if (s->mv_dir & 2) { MPV_motion(s, dest_y, dest_cb, dest_cr, 1, s->next_picture.data, op_pix, op_qpix); } } } if(s->hurry_up>1) goto skip_idct; if(s->avctx->skip_idct){ if( (s->avctx->skip_idct >= AVDISCARD_NONREF && s->pict_type == 3) ||(s->avctx->skip_idct >= AVDISCARD_NONKEY && s->pict_type != 1) || s->avctx->skip_idct >= AVDISCARD_ALL) goto skip_idct; } if(s->encoding || !( s->h263_msmpeg4 || s->codec_id==CODEC_ID_MPEG1VIDEO || s->codec_id==CODEC_ID_MPEG2VIDEO || (s->codec_id==CODEC_ID_MPEG4 && !s->mpeg_quant))){ add_dequant_dct(s, block[0], 0, dest_y , dct_linesize, s->qscale); add_dequant_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->qscale); add_dequant_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->qscale); add_dequant_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize, s->qscale); if(!0 || !(s->flags&0x2000)){ if (s->chroma_y_shift){ add_dequant_dct(s, block[4], 4, dest_cb, uvlinesize, s->chroma_qscale); add_dequant_dct(s, block[5], 5, dest_cr, uvlinesize, s->chroma_qscale); }else{ dct_linesize >>= 1; dct_offset >>=1; add_dequant_dct(s, block[4], 4, dest_cb, dct_linesize, s->chroma_qscale); add_dequant_dct(s, block[5], 5, dest_cr, dct_linesize, s->chroma_qscale); add_dequant_dct(s, block[6], 6, dest_cb + dct_offset, dct_linesize, s->chroma_qscale); add_dequant_dct(s, block[7], 7, dest_cr + dct_offset, dct_linesize, s->chroma_qscale); } } } else if(is_mpeg12 || (s->codec_id != CODEC_ID_WMV2)){ add_dct(s, block[0], 0, dest_y , dct_linesize); add_dct(s, block[1], 1, dest_y + block_size, dct_linesize); add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize); add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize); if(!0 || !(s->flags&0x2000)){ if(s->chroma_y_shift){ add_dct(s, block[4], 4, dest_cb, uvlinesize); add_dct(s, block[5], 5, dest_cr, uvlinesize); }else{ dct_linesize = uvlinesize << s->interlaced_dct; dct_offset =(s->interlaced_dct)? uvlinesize : uvlinesize*8; add_dct(s, block[4], 4, dest_cb, dct_linesize); add_dct(s, block[5], 5, dest_cr, dct_linesize); add_dct(s, block[6], 6, dest_cb+dct_offset, dct_linesize); add_dct(s, block[7], 7, dest_cr+dct_offset, dct_linesize); if(!s->chroma_x_shift){ add_dct(s, block[8], 8, dest_cb+8, dct_linesize); add_dct(s, block[9], 9, dest_cr+8, dct_linesize); add_dct(s, block[10], 10, dest_cb+8+dct_offset, dct_linesize); add_dct(s, block[11], 11, dest_cr+8+dct_offset, dct_linesize); } } } } else if ((1 || 1)) { ff_wmv2_add_mb(s, block, dest_y, dest_cb, dest_cr); } } else { if(s->encoding || !(s->codec_id==CODEC_ID_MPEG1VIDEO || s->codec_id==CODEC_ID_MPEG2VIDEO)){ put_dct(s, block[0], 0, dest_y , dct_linesize, s->qscale); put_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->qscale); put_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->qscale); put_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize, s->qscale); if(!0 || !(s->flags&0x2000)){ if(s->chroma_y_shift){ put_dct(s, block[4], 4, dest_cb, uvlinesize, s->chroma_qscale); put_dct(s, block[5], 5, dest_cr, uvlinesize, s->chroma_qscale); }else{ dct_offset >>=1; dct_linesize >>=1; put_dct(s, block[4], 4, dest_cb, dct_linesize, s->chroma_qscale); put_dct(s, block[5], 5, dest_cr, dct_linesize, s->chroma_qscale); put_dct(s, block[6], 6, dest_cb + dct_offset, dct_linesize, s->chroma_qscale); put_dct(s, block[7], 7, dest_cr + dct_offset, dct_linesize, s->chroma_qscale); } } }else{ s->dsp.idct_put(dest_y , dct_linesize, block[0]); s->dsp.idct_put(dest_y + block_size, dct_linesize, block[1]); s->dsp.idct_put(dest_y + dct_offset , dct_linesize, block[2]); s->dsp.idct_put(dest_y + dct_offset + block_size, dct_linesize, block[3]); if(!0 || !(s->flags&0x2000)){ if(s->chroma_y_shift){ s->dsp.idct_put(dest_cb, uvlinesize, block[4]); s->dsp.idct_put(dest_cr, uvlinesize, block[5]); }else{ dct_linesize = uvlinesize << s->interlaced_dct; dct_offset =(s->interlaced_dct)? uvlinesize : uvlinesize*8; s->dsp.idct_put(dest_cb, dct_linesize, block[4]); s->dsp.idct_put(dest_cr, dct_linesize, block[5]); s->dsp.idct_put(dest_cb + dct_offset, dct_linesize, block[6]); s->dsp.idct_put(dest_cr + dct_offset, dct_linesize, block[7]); if(!s->chroma_x_shift){ s->dsp.idct_put(dest_cb + 8, dct_linesize, block[8]); s->dsp.idct_put(dest_cr + 8, dct_linesize, block[9]); s->dsp.idct_put(dest_cb + 8 + dct_offset, dct_linesize, block[10]); s->dsp.idct_put(dest_cr + 8 + dct_offset, dct_linesize, block[11]); } } } } } skip_idct: if(!readable){ s->dsp.put_pixels_tab[0][0](s->dest[0], dest_y , linesize,16); s->dsp.put_pixels_tab[s->chroma_x_shift][0](s->dest[1], dest_cb, uvlinesize,16 >> s->chroma_y_shift); s->dsp.put_pixels_tab[s->chroma_x_shift][0](s->dest[2], dest_cr, uvlinesize,16 >> s->chroma_y_shift); } } }
*** Bug 40415 has been marked as a duplicate of this bug. ***
Could be a duplicate of one of PR30064, PR34439, PR37053.
Subject: gcc 4.4.0 error at postreload.c:396 (In reply to comment #2) > Could be a duplicate of one of PR30064, PR34439, PR37053. I compiled the provided testcases as stated in the appropriate PR with the following result: The testcase for PR30064 does ICE with 3.4.6 and 4.[012].0, it doesn't ICE with 4.[34].0. The testcase for PR34439 does ICE with 3.4.6 when not optimizing, does always ICE with 4.[012].0. No ICE with 4.[34].0. The testcase for PR37053 does ICE with 2.95.x without optimization, 3.[34].6 and 4.[012].0 always ICE, 4.[34].0 does ICE with optimization.
i get report of more info about -funswitch-loops The -funswitch-loops Option seem work on gcc 4.3.0 and above not good for speed.It generate much larger code(wma123) and code is slower in many case (try out ffmpeg H264 decode)i get report from a Athlon 2600+ with single channel ram running amiga emulator. But on my System use a AMD64 3000+ and Dual Channel ram running amiga emulator -funswitch-loops cause only large files but no slowdown. but i guess on a real 68k CPU without 2. level cache, -funswitch-loops is more not optimal. gcc 3.4.0 have too this option set on -O3 or i am wrong ? and here the speed is better. Is there a way to tweak some values on backend for specific CPU so -funswitch-loops works 3.4.0(maybe unroll not so much loops ? for now best solution for speed (H264 decode work on the system with single Channel ram same ot little faster as 3.4.0 build.) is let disable -funswitch-loops disable as far i get speedvalue reports. here are some values that show too slowdown on compilers 4.2.4 and 4.3.0 but on X86 http://multimedia.cx/eggs/compiler-performance-profiling-with-ffmpeg/ The GCC 4.4.0 does allow change the compiler switches in sourceline. maybe somebody can tell if can get more precise information with that feature, what codeline cause the fault. the furtherdevelop of Blitz basic (called amiblitz)can for example can set optimize on every sourceline.this help lot to find sourceline that make problem in peephole optimizer. But Amiblitz of course have not such a longlooking ahead peephole optimizer as gcc. but maybe this gcc 4.4.0 feature can help in any way,to get more precise error place ? I can then test and report more.
the problem happen on a gcc4.4.1 (the release) too,this is output. $ make_68k_v4 /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.1.exe -V 4.4.1 -DHAVE_AV_CONFIG_H -I. -I"/bin/ffmpeg8" -mnobitfield -m68060 -std=c99 -Wdeclaration-after-stat ement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE =200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-poin ter -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-stri ngs -Wundef -O3 -s -c -o libavcodec/mpegvideo.o libavcodec/mpegvideo.c libavcodec/mpegvideo.c: In function 'init_rl': libavcodec/mpegvideo.c:760: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c:765: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c: In function 'MPV_motion_lowres': libavcodec/mpegvideo.c:1707: error: insn does not satisfy its constraints: (insn 937 3765 3766 59 libavcodec/mpegvideo.c:1488 (set (reg:SI 0 d0 [931]) (plus:SI (mem/f:SI (reg:SI 9 a1) [7 S4 A16]) (reg:SI 0 d0 [931]))) 131 {*addsi3_internal} (nil)) libavcodec/mpegvideo.c:1707: internal compiler error: in reload_cse_simplify_ope rands, at postreload.c:396 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions.
I check now more to find the instruction line that cause the ICE.Its this call.It compile when i remove in 1 statement the 2 (2*mb_x + (i & 1))*block_s -> (mb_x + (i & 1))*block_s But of course the program work. it also compile when i let the 2 in first par in but remove it on second. case 1: mx = 0; my = 0; for(i=0;i<4;i++) { hpel_motion_lowres(s, dest_y + ((i & 1) + (i >> 1) * s->linesize)*block_s, ref_picture[0], 0, 0, (2*mb_x + (i & 1))*block_s, (2*mb_y + (i >>1))*block_s, s->width, s->height, s->linesize, s->h_edge_pos >> lowres, s->v_edge_pos >> lowres, block_s, block_s, pix_op, s->mv[dir][i][0], s->mv[dir][i][1]); mx += s->mv[dir][i][0]; my += s->mv[dir][i][1]; }
The problem is not with "-funswitch-loops" optimization. I get no ICE with these options (-O2 -fipa-cp-clone -finline-functions -fgcse-after-reload -ftree-vectorize -fpredictive-commoning): OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wundef -O2 -fipa-cp-clone -finline-functions -fgcse-after-reload -ftree-vectorize -fpredictive-commoning I get ICE with -O3: OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wundef -O3 Also, ICE happens ONLY with -m68060 flag! When I use "-m68020 -m6881" or -m68040 there is no ICE!
(In reply to comment #7) > The problem is not with "-funswitch-loops" optimization. > > I get no ICE with these options (-O2 -fipa-cp-clone -finline-functions > -fgcse-after-reload -ftree-vectorize -fpredictive-commoning): > > OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement > -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE > -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common > -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls > -Wcast-qual -Wwrite-strings -Wundef -O2 -fipa-cp-clone -finline-functions > -fgcse-after-reload -ftree-vectorize -fpredictive-commoning > > I get ICE with -O3: > > OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement > -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE > -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common > -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls > -Wcast-qual -Wwrite-strings -Wundef -O3 > > Also, ICE happens ONLY with -m68060 flag! When I use "-m68020 -m6881" or > -m68040 there is no ICE! > Sorry, I forgot to add "-funswitch-loops" option, so again: The problem is not with "-funswitch-loops" optimization. I get no ICE with these options (-O2 -fipa-cp-clone -finline-functions -fgcse-after-reload -ftree-vectorize -fpredictive-commoning -funswitch-loops): OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wundef -O2 -fipa-cp-clone -finline-functions -fgcse-after-reload -ftree-vectorize -fpredictive-commoning -funswitch-loops I get ICE with -O3: OPTFLAGS= -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wundef -O3 Also, ICE happens ONLY with -m68060 flag! When I use "-m68020 -m6881" or -m68040 there is no ICE!
Created attachment 18390 [details] preprocessed file -O3
Created attachment 18391 [details] asm output -O3
It ICEs also... with -m68020 -m68881 -Os options: /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.1.exe -V 4.4.1 -DHAVE_AV_CONFIG_H -I. -I"/bin/ffmpeg8" -mnobitfield -m68020 -m68881 -std=c99 -Wdeclaration-after-stat ement -Wdisabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE =200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-poin ter -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-stri ngs -Wundef -Os -c -o libavcodec/mpegvideo.o libavcodec/mpegvideo.c libavcodec/mpegvideo.c: In function 'init_rl': libavcodec/mpegvideo.c:760: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c:765: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c: In function 'MPV_motion_lowres': libavcodec/mpegvideo.c:1707: error: insn does not satisfy its constraints: (insn 647 2733 2734 49 libavcodec/mpegvideo.c:1488 (set (reg/v/f:SI 7 d7 [orig:2 93 ptr_y ] [293]) (plus:SI (mem/f:SI (reg:SI 8 a0) [7 S4 A16]) (reg:SI 7 d7 [637]))) 131 {*addsi3_internal} (nil)) libavcodec/mpegvideo.c:1707: internal compiler error: in reload_cse_simplify_ope rands, at postreload.c:396 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. with -m68040 -Os options: /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.1.exe -V 4.4.1 -DHAVE_AV_CONFIG_H -I. -I"/bin/ffmpeg8" -mnobitfield -m68040 -std=c99 -Wdeclaration-after-statement -W disabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wal l -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wun def -Os -c -o libavcodec/mpegvideo.o libavcodec/mpegvideo.c libavcodec/mpegvideo.c: In function 'init_rl': libavcodec/mpegvideo.c:760: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c:765: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c: In function 'MPV_motion_lowres': libavcodec/mpegvideo.c:1707: error: insn does not satisfy its constraints: (insn 647 2733 2734 49 libavcodec/mpegvideo.c:1488 (set (reg/v/f:SI 7 d7 [orig:2 93 ptr_y ] [293]) (plus:SI (mem/f:SI (reg:SI 8 a0) [7 S4 A16]) (reg:SI 7 d7 [637]))) 131 {*addsi3_internal} (nil)) libavcodec/mpegvideo.c:1707: internal compiler error: in reload_cse_simplify_ope rands, at postreload.c:396 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. with -m68060 -Os options: /usr/local/amiga/bin/m68k-amigaos-gcc-4.4.1.exe -V 4.4.1 -DHAVE_AV_CONFIG_H -I. -I"/bin/ffmpeg8" -mnobitfield -m68060 -std=c99 -Wdeclaration-after-statement -W disabled-optimization -fno-math-errno -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-common -fomit-frame-pointer -Wal l -Wno-switch -Wpointer-arith -Wredundant-decls -Wcast-qual -Wwrite-strings -Wun def -Os -c -o libavcodec/mpegvideo.o libavcodec/mpegvideo.c libavcodec/mpegvideo.c: In function 'init_rl': libavcodec/mpegvideo.c:760: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c:765: warning: pointer targets in assignment differ in sig nedness libavcodec/mpegvideo.c: In function 'MPV_motion_lowres': libavcodec/mpegvideo.c:1707: error: insn does not satisfy its constraints: (insn 637 2688 2689 49 libavcodec/mpegvideo.c:1488 (set (reg/v/f:SI 7 d7 [orig:2 89 ptr_y ] [289])
ICE confirmed with a gcc-4.4.1 cross to m68k-linux. Applying the PR37053 and PR41064 fixes eliminated the ICE. The mpegvideo.i test case does not compile as-is for me, as the compiler complains about a syntax error: libavcodec/mpegvideo.c:89: error: expected ';', ',' or ')' before 'p' That's the ff_find_start_code() function head. Commenting out the restrict key words eliminated that problem, leaving only the ICE to deal with.
Fixed in 4.5.0.
I compile gcc 4.4.2 20090825 and test. problem is still in. Is this fix in gcc4.4.2 too ?. >The mpegvideo.i test case does not compile as-is for me, as the compiler >complains about a syntax error: >libavcodec/mpegvideo.c:89: error: expected ';', ',' or ')' before 'p' because ffmpeg use cpu specific code, you must configure first for crosscompile.This line is used for the 68k compilers run on cygwin. ./configure --arch=m68k --enable-cross-compile --cross-prefix=m68k-amigaos- --extra-cflags="-mnobitfield -m68060"
(In reply to comment #14) > I compile gcc 4.4.2 20090825 and test. > > problem is still in. > > Is this fix in gcc4.4.2 too ?. No, so far these fixes have only been applied to trunk aka gcc-4.5. They are easily backported to 4.4 and 4.3 however (I've done that for my 4.4/4.3 trees).
m68k-amigaos is not a supported target.
> m68k-amigaos is not a supported target. LOL! So you prefere to not get any bugreports? I reported a few bugs which were next confirmed on the other hardware and after some time fixed, no matter if I use unsupported m68-amigaos target or not. I think that there is no chance to see any m68k-specific bugs fixed, so I will not waste my time in the future. Please don't forget to close the rest of my bugreports, because I also used m68k-amigaos unsupported target. You may also chage status from FIXED to INVALID if you prefere...
True, it is P5 but it is not invalid. Andreas, if you want to close this as invalid you should first follow the target deprecation process and propose to remove the target for 4.6.
The Problem is fixed in GCC4.5.0.
Adding dependencies on the patches that fix the bug.
Subject: Re: gcc 4.4.0 error at postreload.c:396 On Tue, 29 Dec 2009, bonzini at gnu dot org wrote: > True, it is P5 but it is not invalid. Andreas, if you want to close this as > invalid you should first follow the target deprecation process and propose to > remove the target for 4.6. It is not a question of deprecation. There is no m68k-amigaos support in FSF GCC and I don't think there ever has been. Thus the submitter is using a version of GCC with an unknown set of third-party modifications. They should report any bugs to the provider of that modified version of GCC. That provider should determine whether the bugs are present in unmodified FSF GCC for some m68k-* target supported by FSF GCC, and pass on the reports to GCC Bugzilla (referencing the target supported by FSF GCC) if so. The bug reporting instructions are quite explicit that bugs in non-FSF versions of GCC do nto go here.
>There is no m68k-amigaos support in >FSF GCC and I don't think there ever has been. There is support for m68k-amigaos in FSF GCC. search in gcc source for name amigaos and on changelog.lib you find this Wed Sep 10 15:14:20 1997 Jeffrey A Law (law@cygnus.com) * config.sub: Use "amigaos" instread of "amigados". Still recognize "amigados" for backward compatibility. Sun Sep 7 23:18:32 1997 Fred Fish <fnf@ninemoons.com> * INSTALL: Change 'amigados' to 'amigaos' to match current usage. * install.texi (Configurations): Likewise. * config.sub: Likewise. In file configure you find more. Now seem m68k-amigaos should remove, where is decicde if a target is remove or not ? --------------- But its true that amigaos cant build without changes from FSF GCC configfiles.But there are no C or C++ source changes need. I fear to submit the changes, not that m68k-amigaos get remove, because the amiga OS change offical to PPC CPU since 7 years, but the PPC amigaos is not on FSF GCC and they have only old compilers m68k-amigaos is still used today and new programs are written with GCC 4.5.0 and there are users that use it See here the uploads of the last 14 days.The yellow Symbol is m68k-amigaos http://aminet.net/ To get m68k-amigaos compile is very easy, so i compile actual compiler and when a problem occur we try to find it near and report it.We verify very carefully, because we know a wrong bugreport increase the risc that m68k-amigaos os maybe remove. To get amigaos compile i have a small readme text file, that explain the steps what lines must add to the configure files of Gcc and the platform specific files that need copy and work always because of the GGC backend API add in gcc-x.x.x/gcc/config.gcc (search for m68k) m68k-*-amigaos*) tmake_file=m68k/t-amigaos tm_file="${tm_file} m68k/amigaos.h" tm_p_file="${tm_p_file} m68k/amigaos-protos.h" tm_defines="TARGET_AMIGAOS TARGET_DEFAULT=0" # 68040 extra_objs=amigaos.o gnu_ld=yes ;; in gcc-x.x.x/gcc/config/m68k dir add files (from the 4.3.2 source) amigaos.h amigaos.c t-amigaos x-amigaos xm-amigaos.h amigaos-protos.h host-amigaos.c in dir gcc-x.x.x//gcc add file amigacollect2.c thats enough to build the gcc.more steps are need, to build the libs, libgcc libstdc++ when you want new to build libgcc: add in libgcc/config.host 68k cpu and later amigaos.see file from 4.3.2 or use same. the dir amigaos must add in libstdc++-v3/config (see 4.3.2 source) now you can compile all. when you get assembler error in atomicity.h change line with the cas so that, the \n is last char. "cas.l %0 , %1 , %2 \n" for build libstdc++ with the crosscompilers you need do this steps too in libstdc++/configure after (search for "GLIBCXX_IS_NATIVE=true") """" if test $hostos = $targetos -o $targetos = darwin ; then GLIBCXX_IS_NATIVE=true fi ;; """" add this lines """ *-*-amigaos*) LDFLAGS="${LDFLAGS-ld} -noixemul" ;; """" search for "Base decisions on target environment" """" # Base decisions on target environment. case "${host}" in """" add this lines """ m68k-*-amigaos*) #os_include_dir="usr/local/amiga/m68k-amigaos/include" ;; """ in gccx.x.x/libiberty/configure after this lines """" Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi """" add this line LDFLAGS="${LDFLAGS-ld} -noixemul"
You need a proper patch, not instructions. However, it's clear from the bugreport and the patches required to fix it, that it is not important whether the target is m68k-amigaos or another OS.
(In reply to comment #23) > You need a proper patch, not instructions. > > However, it's clear from the bugreport and the patches required to fix it, that > it is not important whether the target is m68k-amigaos or another OS. > Yes i know, and i can do a diff, but are there chances that this changes are add or is m68k-amigaos going to remove complete in 4.6 ? Wy can not the code stay in as long it work well ? m68k-amigaos is a m68k bsd a.out Build that use sjlj Exception Handling on C++. So there is no special support Code for AOS need and it work well with newest compilers. The only that need add to compile GCC and g++ is this. add in gcc-x.x.x/gcc/config.gcc (search for m68k) m68k-*-amigaos*) tmake_file=m68k/t-amigaos tm_file="${tm_file} m68k/amigaos.h" tm_p_file="${tm_p_file} m68k/amigaos-protos.h" tm_defines="TARGET_AMIGAOS TARGET_DEFAULT=0" # 68040 extra_objs=amigaos.o gnu_ld=yes ;; more add in config files is only need for libgcc and libstdc++ When report a Bug, we can also compare the asm Code with a better support 68k Target, thats no Problem, but we thought because of same C Code all work same. But i like know what 68k target Andreas or other GCC Developer for 68k use and what configure Options they use so i can build a cygwin Version for this compilers. Or is there a binary build for cygwin and these 68k Compilers here ?
Adding target support without at least libgcc makes little sense. The small part in config.guess/config.sub is not going to be removed, since those files are just imported in GCC and are handled as a separate project. People use m68k-elf or m68k-uclinux to build cross compilers. The former can be built easily using a combined tree.
GCC 4.5.0 is being released. Deferring to 4.5.1.
GCC 4.5.1 is being released, adjusting target milestone.
Same ICE, marking as duplicate. *** This bug has been marked as a duplicate of bug 37053 ***