Bug 33597

Summary: Internal compiler error while compiling libswscale from ffmpeg
Product: gcc Reporter: İsmail Dönmez <ismail>
Component: tree-optimizationAssignee: Uroš Bizjak <ubizjak>
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs
Priority: P3    
Version: 4.3.0   
Target Milestone: 4.3.0   
URL: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg02085.html
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2007-09-30 10:28:58
Attachments: rgb2rgb.s produced with -save-temps
Corresponding *.i file

Description İsmail Dönmez 2007-09-29 22:57:28 UTC
Specs:

Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --prefix=/usr/lib/gcc-snapshot --disable-libgcj --disable-libssp --disable-nls --disable-werror --disable-checking --enable-clocale=gnu --enable-__cxa_atexit --enable-languages=c,c++,fortran,objc --enable-libstdcxx-allocator=new --enable-shared --enable-ssp --enable-threads=posix --enable-version-specific-runtime-libs --without-included-gettext --without-system-libunwind --with-system-zlib
Thread model: posix
gcc version 4.3.0 20070928 (experimental) (GCC)


And internal compiler error :

[/packages/mplayer/libswscale]> cc  -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_ISOC9X_SOURCE -I.. -I.. -I../libavutil -Wdisabled-optimization -Wno-pointer-sign -Wdeclaration-after-statement -I. -I.. -I../libavutil -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -march=native -mtune=native -pipe -ffast-math -fomit-frame-pointer -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H -I/usr/include/  -I/usr/include/SDL  -D_REENTRANT  -I/usr/include/freetype2 -I/usr/include  -c -o rgb2rgb.o rgb2rgb.c
rgb2rgb_template.c: In function 'rgb15to24_C':
rgb2rgb_template.c:936: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

rgb2rgb.s is attached.
Comment 1 İsmail Dönmez 2007-09-29 22:58:03 UTC
Created attachment 14269 [details]
rgb2rgb.s produced with -save-temps
Comment 2 Andrew Pinski 2007-09-29 22:59:55 UTC
The .i file is important and not the .s file.
Comment 3 İsmail Dönmez 2007-09-29 23:03:18 UTC
Created attachment 14270 [details]
Corresponding *.i file
Comment 4 Uroš Bizjak 2007-09-30 10:03:40 UTC
segfaults with -ftree-vectorize in SLP.

reduced testcase:

--cut here--
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;

void
rgb15to24_C (const uint8_t * src, uint8_t * dst, long src_size)
{
  const uint16_t *end;
  const uint16_t *s = (uint16_t *)src;
  uint8_t *d = (uint8_t *)dst;

  end = s + src_size/2;
  while (s < end)
    {
      uint16_t bgr = *s++;

      *d++ = (bgr&0x1F)<<3;
      *d++ = (bgr&0x3E0)>>2;
      *d++ = (bgr&0x7C00)>>7;
    }
}
--cut here--

gcc -O2 -ftree-vectorize -msse2:

t.c: In function �rgb15to24_C�:
t.c:6: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

Program received signal SIGSEGV, Segmentation fault.
0x0000000000a94d24 in vect_build_slp_tree (loop_vinfo=0x1039cc0, 
    node=0x7fffb8b97da0, group_size=3, slp_impossible=0x7fffb8b97e3f "", 
    inside_cost=0x7fffb8b97e38, outside_cost=0x7fffb8b97e34, 
    ncopies_for_cost=3) at ../../gcc-svn/trunk/gcc/tree-vect-analyze.c:2700
2700                  if (!VECTOR_MODE_P (optab_op2_mode))


#0  0x0000000000a94d24 in vect_build_slp_tree (loop_vinfo=0x1039cc0, 
    node=0x7fffb8b97da0, group_size=3, slp_impossible=0x7fffb8b97e3f "", 
    inside_cost=0x7fffb8b97e38, outside_cost=0x7fffb8b97e34, 
    ncopies_for_cost=3) at ../../gcc-svn/trunk/gcc/tree-vect-analyze.c:2700
#1  0x0000000000a94f73 in vect_build_slp_tree (loop_vinfo=0x1039cc0, 
    node=0x7fffb8b97e28, group_size=3, slp_impossible=0x7fffb8b97e3f "", 
    inside_cost=0x7fffb8b97e38, outside_cost=0x7fffb8b97e34, 
    ncopies_for_cost=3) at ../../gcc-svn/trunk/gcc/tree-vect-analyze.c:2870
#2  0x0000000000a955e3 in vect_analyze_slp_instance (loop_vinfo=0x1039cc0, 
    stmt=<value optimized out>)
    at ../../gcc-svn/trunk/gcc/tree-vect-analyze.c:3000
#3  0x0000000000a993e0 in vect_analyze_loop (loop=<value optimized out>)
    at ../../gcc-svn/trunk/gcc/tree-vect-analyze.c:3045
#4  0x00000000007f82ce in vectorize_loops ()
    at ../../gcc-svn/trunk/gcc/tree-vectorizer.c:2501

Confirmed on x86_64 and i686/sse2.
Comment 5 Uroš Bizjak 2007-09-30 10:28:58 UTC
Patch in testing:

--cut here--
Index: tree-vect-analyze.c
===================================================================
--- tree-vect-analyze.c (revision 128890)
+++ tree-vect-analyze.c (working copy)
@@ -2696,6 +2696,13 @@
                  return false;
                }
              icode = (int) optab->handlers[(int) vec_mode].insn_code;
+             if (icode == CODE_FOR_nothing)
+               {
+                 if (vect_print_dump_info (REPORT_SLP))
+                   fprintf (vect_dump,
+                            "Build SLP failed: op not supported by target.");
+                 return false;
+               }
              optab_op2_mode = insn_data[icode].operand[2].mode;
              if (!VECTOR_MODE_P (optab_op2_mode))
                {
--cut here--
Comment 6 Ira Rosen 2007-09-30 10:37:31 UTC
(In reply to comment #5)
> Patch in testing:

Thanks for fixing this! 
(I've just started to test the exact same patch :))

Ira
Comment 7 İsmail Dönmez 2007-09-30 11:30:25 UTC
Fix summary , swcale -> swscale . Thanks for the fast fix!
Comment 8 uros 2007-09-30 12:45:46 UTC
Subject: Bug 33597

Author: uros
Date: Sun Sep 30 12:45:32 2007
New Revision: 128891

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=128891
Log:
        PR tree-optimization/33597
        * tree-vect-analyze.c (vect_build_slp_tree): Check if optab handler
        for LSHIFT_EXPR and RSHIFT_EXPR is available for vec_mode.

testsuite/ChangeLog:

        PR tree-optimization/33597
        * gcc.dg/vect/pr33597.c: New testcase.


Added:
    trunk/gcc/testsuite/gcc.dg/vect/pr33597.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-vect-analyze.c

Comment 9 Uroš Bizjak 2007-09-30 12:47:16 UTC
Fixed.