aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2008-10-08 10:37:02 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2008-10-08 03:37:02 -0700
commit54723b46231868447f68ed5322d916bd05bffae3 (patch)
tree104fc5c7bfed600e4090eb5700cc9699279c7e43 /gcc
parentddd5eeb13ccd898861dbe4827b190f48aac0971d (diff)
downloadgcc-54723b46231868447f68ed5322d916bd05bffae3.zip
gcc-54723b46231868447f68ed5322d916bd05bffae3.tar.gz
gcc-54723b46231868447f68ed5322d916bd05bffae3.tar.bz2
i386.c (initial_ix86_tune_features): Add X86_TUNE_USE_VECTOR_FP_CONVERTS.
2008-10-08 H.J. Lu <hongjiu.lu@intel.com> * 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.h3
-rw-r--r--gcc/config/i386/i386.md4
4 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5fa5070..9fc2a98 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
2008-10-08 H.J. Lu <hongjiu.lu@intel.com>
+ * 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 <hongjiu.lu@intel.com>
+
* config/i386/i386.md: Add missing gen_sse2_cvtdq2p to convert
splitter.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index be37117..a3d4951 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 81a282e..32f793b 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 0c3442c..ff5b679 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)