This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, vectorizer]: Fix PR tree-optimization/33597: ICE while compiling libswcale from ffmpeg
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 30 Sep 2007 13:27:14 +0200
- Subject: [PATCH, vectorizer]: Fix PR tree-optimization/33597: ICE while compiling libswcale from ffmpeg
Hello!
We forgot to check if optab is available in requested mode. Attached
patch introduces this missing check.
Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu.
OK for mainline?
2007-09-30 Uros Bizjak <ubizjak@gmail.com>
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:
2007-09-30 Uros Bizjak <ubizjak@gmail.com>
PR tree-optimization/33597
* gcc.dg/vect/pr33597.c: New testcase.
Uros.
Index: testsuite/gcc.dg/vect/pr33597.c
===================================================================
--- testsuite/gcc.dg/vect/pr33597.c (revision 0)
+++ testsuite/gcc.dg/vect/pr33597.c (revision 0)
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+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;
+ }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
Index: tree-vect-analyze.c
===================================================================
--- tree-vect-analyze.c (revision 128890)
+++ tree-vect-analyze.c (working copy)
@@ -2696,6 +2696,13 @@ vect_build_slp_tree (loop_vec_info loop_
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))
{