aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2010-11-10 20:08:27 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2010-11-10 12:08:27 -0800
commitc204d113c0f4fb764de0482320fcfa98af651607 (patch)
treed984c938b2229ed019403ce490a8feadc6d4b9ae /gcc/tree-inline.c
parente6a054481d2586056b845639c8e26158169c027f (diff)
downloadgcc-c204d113c0f4fb764de0482320fcfa98af651607.zip
gcc-c204d113c0f4fb764de0482320fcfa98af651607.tar.gz
gcc-c204d113c0f4fb764de0482320fcfa98af651607.tar.bz2
Check preferred vector mode for vector type in estimate_move_cost.
gcc/ 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. gcc/testsuite/ 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. From-SVN: r166552
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c10
1 files changed, 10 insertions, 0 deletions
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))