aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2015-07-18 01:41:11 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-07-18 01:41:11 +0200
commit736cad254a59b12856fd0c18a37b47c781d41531 (patch)
treee891247314c69e6d521f61962eaffc95bd840b80 /gcc
parentf6f6b749d69f22218545b95433579fdb2af285e6 (diff)
downloadgcc-736cad254a59b12856fd0c18a37b47c781d41531.zip
gcc-736cad254a59b12856fd0c18a37b47c781d41531.tar.gz
gcc-736cad254a59b12856fd0c18a37b47c781d41531.tar.bz2
i386.md (pushsf splitter): Pass curr_insn to find_constant_src.
* config/i386/i386.md (pushsf splitter): Pass curr_insn to find_constant_src. FAIL if find_constant_src returns NULL_RTX. (mem->fpreg splitters): Ditto. (general_operand->nonimmediate_operand splitter): Use explicit modes. Disable DFmode for TARGET_64BIT. From-SVN: r225975
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.md72
2 files changed, 54 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6d58319..f0854ae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-07-18 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (pushsf splitter): Pass curr_insn to
+ find_constant_src. FAIL if find_constant_src returns NULL_RTX.
+ (mem->fpreg splitters): Ditto.
+ (general_operand->nonimmediate_operand splitter): Use explicit modes.
+ Disable DFmode for TARGET_64BIT.
+
2015-07-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/66906
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index ea98a36..18d0503 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2987,9 +2987,14 @@
(define_split
[(set (match_operand:SF 0 "push_operand")
(match_operand:SF 1 "memory_operand"))]
- "reload_completed
- && (operands[2] = find_constant_src (insn))"
- [(set (match_dup 0) (match_dup 2))])
+ "reload_completed"
+ [(set (match_dup 0) (match_dup 2))]
+{
+ operands[2] = find_constant_src (curr_insn);
+
+ if (operands[2] == NULL_RTX)
+ FAIL;
+})
(define_split
[(set (match_operand 0 "push_operand")
@@ -3083,6 +3088,14 @@
]
(const_string "TI")))])
+(define_split
+ [(set (match_operand:TF 0 "nonimmediate_operand")
+ (match_operand:TF 1 "general_operand"))]
+ "reload_completed
+ && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+ [(const_int 0)]
+ "ix86_split_long_move (operands); DONE;")
+
;; Possible store forwarding (partial memory) stall
;; in alternatives 4, 6, 7 and 8.
(define_insn "*movxf_internal"
@@ -3149,6 +3162,14 @@
]
(const_string "*")))])
+(define_split
+ [(set (match_operand:XF 0 "nonimmediate_operand")
+ (match_operand:XF 1 "general_operand"))]
+ "reload_completed
+ && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+ [(const_int 0)]
+ "ix86_split_long_move (operands); DONE;")
+
;; Possible store forwarding (partial memory) stall in alternatives 4, 6 and 7.
(define_insn "*movdf_internal"
[(set (match_operand:DF 0 "nonimmediate_operand"
@@ -3344,6 +3365,14 @@
]
(const_string "*")))])
+(define_split
+ [(set (match_operand:DF 0 "nonimmediate_operand")
+ (match_operand:DF 1 "general_operand"))]
+ "!TARGET_64BIT && reload_completed
+ && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+ [(const_int 0)]
+ "ix86_split_long_move (operands); DONE;")
+
(define_insn "*movsf_internal"
[(set (match_operand:SF 0 "nonimmediate_operand"
"=Yf*f,m ,Yf*f,?r ,?m,v,v,v,m,?r,?Yi,!*y,!*y,!m,!r ,!*Ym,r ,m")
@@ -3487,15 +3516,16 @@
&& (GET_MODE (operands[0]) == TFmode
|| GET_MODE (operands[0]) == XFmode
|| GET_MODE (operands[0]) == DFmode
- || GET_MODE (operands[0]) == SFmode)
- && (operands[2] = find_constant_src (insn))"
+ || GET_MODE (operands[0]) == SFmode)"
[(set (match_dup 0) (match_dup 2))]
{
- rtx c = operands[2];
- int r = REGNO (operands[0]);
+ operands[2] = find_constant_src (curr_insn);
- if ((SSE_REGNO_P (r) && !standard_sse_constant_p (c))
- || (STACK_REGNO_P (r) && standard_80387_constant_p (c) < 1))
+ if (operands[2] == NULL_RTX
+ || (SSE_REGNO_P (REGNO (operands[0]))
+ && !standard_sse_constant_p (operands[2]))
+ || (STACK_REGNO_P (REGNO (operands[0]))
+ && standard_80387_constant_p (operands[2]) < 1))
FAIL;
})
@@ -3505,15 +3535,16 @@
"reload_completed
&& (GET_MODE (operands[0]) == TFmode
|| GET_MODE (operands[0]) == XFmode
- || GET_MODE (operands[0]) == DFmode)
- && (operands[2] = find_constant_src (insn))"
+ || GET_MODE (operands[0]) == DFmode)"
[(set (match_dup 0) (match_dup 2))]
{
- rtx c = operands[2];
- int r = REGNO (operands[0]);
+ operands[2] = find_constant_src (curr_insn);
- if ((SSE_REGNO_P (r) && !standard_sse_constant_p (c))
- || (STACK_REGNO_P (r) && standard_80387_constant_p (c) < 1))
+ if (operands[2] == NULL_RTX
+ || (SSE_REGNO_P (REGNO (operands[0]))
+ && !standard_sse_constant_p (operands[2]))
+ || (STACK_REGNO_P (REGNO (operands[0]))
+ && standard_80387_constant_p (operands[2]) < 1))
FAIL;
})
@@ -3537,17 +3568,6 @@
operands[1] = CONST1_RTX (<MODE>mode);
})
-(define_split
- [(set (match_operand 0 "nonimmediate_operand")
- (match_operand 1 "general_operand"))]
- "reload_completed
- && (GET_MODE (operands[0]) == TFmode
- || GET_MODE (operands[0]) == XFmode
- || GET_MODE (operands[0]) == DFmode)
- && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
- [(const_int 0)]
- "ix86_split_long_move (operands); DONE;")
-
(define_insn "swapxf"
[(set (match_operand:XF 0 "register_operand" "+f")
(match_operand:XF 1 "register_operand" "+f"))