diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2007-09-30 14:45:32 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2007-09-30 14:45:32 +0200 |
commit | 94a73152cc79020dbcb1f6874bdd0661c2a4a30b (patch) | |
tree | 73e0fba4c2a3214d2d3cb31d5f41dbc16fee3a08 /gcc | |
parent | dc472c59a52d068c37cb0c14e94564da8729f232 (diff) | |
download | gcc-94a73152cc79020dbcb1f6874bdd0661c2a4a30b.zip gcc-94a73152cc79020dbcb1f6874bdd0661c2a4a30b.tar.gz gcc-94a73152cc79020dbcb1f6874bdd0661c2a4a30b.tar.bz2 |
re PR tree-optimization/33597 (Internal compiler error while compiling libswscale from ffmpeg)
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.
From-SVN: r128891
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr33597.c | 24 | ||||
-rw-r--r-- | gcc/tree-vect-analyze.c | 7 |
4 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a80d07f..ea66227 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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. + 2007-09-28 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.c (ix86_expand_move): Use can_create_pseudo_p () diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1964b5c..ef5e04a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-09-30 Uros Bizjak <ubizjak@gmail.com> + + PR tree-optimization/33597 + * gcc.dg/vect/pr33597.c: New testcase. + 2007-09-29 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/sse5-convert.c: Fix target selector and rename to... diff --git a/gcc/testsuite/gcc.dg/vect/pr33597.c b/gcc/testsuite/gcc.dg/vect/pr33597.c new file mode 100644 index 0000000..7fdcde0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr33597.c @@ -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" } } */ diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c index 86ca6b6..92ef5be 100644 --- a/gcc/tree-vect-analyze.c +++ b/gcc/tree-vect-analyze.c @@ -2696,6 +2696,13 @@ vect_build_slp_tree (loop_vec_info loop_vinfo, slp_tree *node, 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)) { |