re PR tree-optimization/51799 (Compiler ICE in vect_is_simple_use_1)
PR tree-optimization/51799 * tree-vect-patterns.c (vect_recog_over_widening_pattern): Check that the last operation is a type demotion. From-SVN: r183126
This commit is contained in:
parent
869eea243d
commit
82db3d43de
|
@ -1,3 +1,9 @@
|
|||
2012-01-12 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/51799
|
||||
* tree-vect-patterns.c (vect_recog_over_widening_pattern): Check
|
||||
that the last operation is a type demotion.
|
||||
|
||||
2012-01-12 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (*zero_extendsidi2_rex64): Correct movl template.
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2012-01-12 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/51799
|
||||
* gcc.dg/vect/pr51799.c: New test.
|
||||
* gcc.dg/vect/vect-widen-shift-u8.c: Expect two widening shift
|
||||
patterns.
|
||||
|
||||
2012-01-12 Dominique d'Humieres <dominiq@lps.ens.fr>
|
||||
Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned char uint8_t;
|
||||
typedef signed short int16_t;
|
||||
typedef unsigned long uint32_t;
|
||||
void
|
||||
f0a (uint32_t * __restrict__ result, int8_t * __restrict__ arg1,
|
||||
uint32_t * __restrict__ arg4, int8_t temp_6)
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < 416; idx += 1)
|
||||
{
|
||||
result[idx] = (uint8_t)(((arg1[idx] << 7) + arg4[idx]) * temp_6);
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
|
@ -59,7 +59,6 @@ int main (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 1 "vect" { target vect_widen_shift } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 2 "vect" { target vect_widen_shift } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
||||
|
|
|
@ -1186,13 +1186,15 @@ vect_recog_over_widening_pattern (VEC (gimple, heap) **stmts,
|
|||
{
|
||||
use_lhs = gimple_assign_lhs (use_stmt);
|
||||
use_type = TREE_TYPE (use_lhs);
|
||||
/* Support only type promotion or signedess change. Check that USE_TYPE
|
||||
is not bigger than the original type. */
|
||||
/* Support only type demotion or signedess change. */
|
||||
if (!INTEGRAL_TYPE_P (use_type)
|
||||
|| TYPE_PRECISION (new_type) > TYPE_PRECISION (use_type)
|
||||
|| TYPE_PRECISION (type) < TYPE_PRECISION (use_type))
|
||||
|| TYPE_PRECISION (type) <= TYPE_PRECISION (use_type))
|
||||
return NULL;
|
||||
|
||||
/* Check that NEW_TYPE is not bigger than the conversion result. */
|
||||
if (TYPE_PRECISION (new_type) > TYPE_PRECISION (use_type))
|
||||
return NULL;
|
||||
|
||||
if (TYPE_UNSIGNED (new_type) != TYPE_UNSIGNED (use_type)
|
||||
|| TYPE_PRECISION (new_type) != TYPE_PRECISION (use_type))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue