From 54723b46231868447f68ed5322d916bd05bffae3 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 8 Oct 2008 10:37:02 +0000 Subject: [PATCH] i386.c (initial_ix86_tune_features): Add X86_TUNE_USE_VECTOR_FP_CONVERTS. 2008-10-08 H.J. Lu * config/i386/i386.c (initial_ix86_tune_features): Add X86_TUNE_USE_VECTOR_FP_CONVERTS. * config/i386/i386.h (ix86_tune_indices): Likewise. (TARGET_USE_VECTOR_FP_CONVERTS): New. * config/i386/i386.md: Check TARGET_USE_VECTOR_FP_CONVERTS instead of (TARGET_USE_VECTOR_CONVERTS || TARGET_GENERIC) for FP to FP splitters. From-SVN: r140972 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/i386/i386.c | 4 ++++ gcc/config/i386/i386.h | 3 +++ gcc/config/i386/i386.md | 4 ++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fa5070d58b..9fc2a98f50a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2008-10-08 H.J. Lu + + * config/i386/i386.c (initial_ix86_tune_features): Add + X86_TUNE_USE_VECTOR_FP_CONVERTS. + * config/i386/i386.h (ix86_tune_indices): Likewise. + (TARGET_USE_VECTOR_FP_CONVERTS): New. + + * config/i386/i386.md: Check TARGET_USE_VECTOR_FP_CONVERTS + instead of (TARGET_USE_VECTOR_CONVERTS || TARGET_GENERIC) + for FP to FP splitters. + 2008-10-08 H.J. Lu * config/i386/i386.md: Add missing gen_sse2_cvtdq2p to convert diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index be371173fa2..a3d4951fafe 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1434,6 +1434,10 @@ static unsigned int initial_ix86_tune_features[X86_TUNE_LAST] = { replacement is long decoded, so this split helps here as well. */ m_K6, + /* X86_TUNE_USE_VECTOR_FP_CONVERTS: Prefer vector packed SSE conversion + from FP to FP. */ + m_AMDFAM10 | m_GENERIC, + /* X86_TUNE_USE_VECTOR_CONVERTS: Prefer vector packed SSE conversion from integer to FP. */ m_AMDFAM10, diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 81a282e0553..32f793b1cf7 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -292,6 +292,7 @@ enum ix86_tune_indices { X86_TUNE_MOVE_M1_VIA_OR, X86_TUNE_NOT_UNPAIRABLE, X86_TUNE_NOT_VECTORMODE, + X86_TUNE_USE_VECTOR_FP_CONVERTS, X86_TUNE_USE_VECTOR_CONVERTS, X86_TUNE_FUSE_CMP_AND_BRANCH, @@ -375,6 +376,8 @@ extern unsigned char ix86_tune_features[X86_TUNE_LAST]; #define TARGET_MOVE_M1_VIA_OR ix86_tune_features[X86_TUNE_MOVE_M1_VIA_OR] #define TARGET_NOT_UNPAIRABLE ix86_tune_features[X86_TUNE_NOT_UNPAIRABLE] #define TARGET_NOT_VECTORMODE ix86_tune_features[X86_TUNE_NOT_VECTORMODE] +#define TARGET_USE_VECTOR_FP_CONVERTS \ + ix86_tune_features[X86_TUNE_USE_VECTOR_FP_CONVERTS] #define TARGET_USE_VECTOR_CONVERTS \ ix86_tune_features[X86_TUNE_USE_VECTOR_CONVERTS] #define TARGET_FUSE_CMP_AND_BRANCH \ diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0c3442c0f40..ff5b679ed6f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4216,7 +4216,7 @@ [(set (match_operand:DF 0 "register_operand" "") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))] - "(TARGET_USE_VECTOR_CONVERTS || TARGET_GENERIC) + "TARGET_USE_VECTOR_FP_CONVERTS && optimize_insn_for_speed_p () && reload_completed && SSE_REG_P (operands[0])" [(set (match_dup 2) @@ -4356,7 +4356,7 @@ [(set (match_operand:SF 0 "register_operand" "") (float_truncate:SF (match_operand:DF 1 "nonimmediate_operand" "")))] - "(TARGET_USE_VECTOR_CONVERTS || TARGET_GENERIC) + "TARGET_USE_VECTOR_FP_CONVERTS && optimize_insn_for_speed_p () && reload_completed && SSE_REG_P (operands[0])" [(set (match_dup 2)