From: H.J. Lu Date: Wed, 10 Nov 2010 20:08:27 +0000 (+0000) Subject: Check preferred vector mode for vector type in estimate_move_cost. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c204d113c0f4fb764de0482320fcfa98af651607;p=gcc.git Check preferred vector mode for vector type in estimate_move_cost. gcc/ 2010-11-10 H.J. Lu PR tree-optimization/46414 * tree-inline.c (estimate_move_cost): Check preferred vector mode for vector type. gcc/testsuite/ 2010-11-10 H.J. Lu PR tree-optimization/46414 * gcc.target/i386/recip-vec-sqrtf-avx.c: Updated for loop unrolling. From-SVN: r166552 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cad87164fe7..1bb3d887c6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-10 H.J. Lu + + PR tree-optimization/46414 + * tree-inline.c (estimate_move_cost): Check preferred vector + mode for vector type. + 2010-11-10 Rainer Orth * config/alpha/osf5.h (ASM_SPEC): Remove -nocpp. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ba0a4c12979..b00c673d3d9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-11-10 H.J. Lu + + PR tree-optimization/46414 + * gcc.target/i386/recip-vec-sqrtf-avx.c: Updated for loop + unrolling. + 2010-11-10 Tobias Burnus PR fortran/46411 diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c index 506df88f956..5a8e6967b42 100644 --- a/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c +++ b/gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c @@ -32,4 +32,4 @@ void t3(void) } /* Last loop is small enough to be fully unrolled. */ -/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 4 } } */ +/* { dg-final { scan-assembler-times "vrsqrtps\[ \\t\]+\[^\n\]*%ymm" 6 } } */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index fc470a7637e..2c05835052f 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -3249,6 +3249,16 @@ estimate_move_cost (tree type) gcc_assert (!VOID_TYPE_P (type)); + if (TREE_CODE (type) == VECTOR_TYPE) + { + enum machine_mode inner = TYPE_MODE (TREE_TYPE (type)); + enum machine_mode simd + = targetm.vectorize.preferred_simd_mode (inner); + int simd_mode_size = GET_MODE_SIZE (simd); + return ((GET_MODE_SIZE (TYPE_MODE (type)) + simd_mode_size - 1) + / simd_mode_size); + } + size = int_size_in_bytes (type); if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (!optimize_size))