diff options
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.target/i386/recip-vec-sqrtf-avx.c | 2 | ||||
| -rw-r--r-- | gcc/tree-inline.c | 10 |
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cad8716..1bb3d88 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-10 H.J. Lu <hongjiu.lu@intel.com> + + PR tree-optimization/46414 + * tree-inline.c (estimate_move_cost): Check preferred vector + mode for vector type. + 2010-11-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * config/alpha/osf5.h (ASM_SPEC): Remove -nocpp. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ba0a4c1..b00c673 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-11-10 H.J. Lu <hongjiu.lu@intel.com> + + PR tree-optimization/46414 + * gcc.target/i386/recip-vec-sqrtf-avx.c: Updated for loop + unrolling. + 2010-11-10 Tobias Burnus <burnus@net-b.de> 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 506df88..5a8e696 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 fc470a7..2c05835 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)) |
