mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
f6f6b749d6
commit
736cad254a
|
|
@ -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>
|
2015-07-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR target/66906
|
PR target/66906
|
||||||
|
|
|
||||||
|
|
@ -2987,9 +2987,14 @@
|
||||||
(define_split
|
(define_split
|
||||||
[(set (match_operand:SF 0 "push_operand")
|
[(set (match_operand:SF 0 "push_operand")
|
||||||
(match_operand:SF 1 "memory_operand"))]
|
(match_operand:SF 1 "memory_operand"))]
|
||||||
"reload_completed
|
"reload_completed"
|
||||||
&& (operands[2] = find_constant_src (insn))"
|
[(set (match_dup 0) (match_dup 2))]
|
||||||
[(set (match_dup 0) (match_dup 2))])
|
{
|
||||||
|
operands[2] = find_constant_src (curr_insn);
|
||||||
|
|
||||||
|
if (operands[2] == NULL_RTX)
|
||||||
|
FAIL;
|
||||||
|
})
|
||||||
|
|
||||||
(define_split
|
(define_split
|
||||||
[(set (match_operand 0 "push_operand")
|
[(set (match_operand 0 "push_operand")
|
||||||
|
|
@ -3083,6 +3088,14 @@
|
||||||
]
|
]
|
||||||
(const_string "TI")))])
|
(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
|
;; Possible store forwarding (partial memory) stall
|
||||||
;; in alternatives 4, 6, 7 and 8.
|
;; in alternatives 4, 6, 7 and 8.
|
||||||
(define_insn "*movxf_internal"
|
(define_insn "*movxf_internal"
|
||||||
|
|
@ -3149,6 +3162,14 @@
|
||||||
]
|
]
|
||||||
(const_string "*")))])
|
(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.
|
;; Possible store forwarding (partial memory) stall in alternatives 4, 6 and 7.
|
||||||
(define_insn "*movdf_internal"
|
(define_insn "*movdf_internal"
|
||||||
[(set (match_operand:DF 0 "nonimmediate_operand"
|
[(set (match_operand:DF 0 "nonimmediate_operand"
|
||||||
|
|
@ -3344,6 +3365,14 @@
|
||||||
]
|
]
|
||||||
(const_string "*")))])
|
(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"
|
(define_insn "*movsf_internal"
|
||||||
[(set (match_operand:SF 0 "nonimmediate_operand"
|
[(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")
|
"=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]) == TFmode
|
||||||
|| GET_MODE (operands[0]) == XFmode
|
|| GET_MODE (operands[0]) == XFmode
|
||||||
|| GET_MODE (operands[0]) == DFmode
|
|| GET_MODE (operands[0]) == DFmode
|
||||||
|| GET_MODE (operands[0]) == SFmode)
|
|| GET_MODE (operands[0]) == SFmode)"
|
||||||
&& (operands[2] = find_constant_src (insn))"
|
|
||||||
[(set (match_dup 0) (match_dup 2))]
|
[(set (match_dup 0) (match_dup 2))]
|
||||||
{
|
{
|
||||||
rtx c = operands[2];
|
operands[2] = find_constant_src (curr_insn);
|
||||||
int r = REGNO (operands[0]);
|
|
||||||
|
|
||||||
if ((SSE_REGNO_P (r) && !standard_sse_constant_p (c))
|
if (operands[2] == NULL_RTX
|
||||||
|| (STACK_REGNO_P (r) && standard_80387_constant_p (c) < 1))
|
|| (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;
|
FAIL;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -3505,15 +3535,16 @@
|
||||||
"reload_completed
|
"reload_completed
|
||||||
&& (GET_MODE (operands[0]) == TFmode
|
&& (GET_MODE (operands[0]) == TFmode
|
||||||
|| GET_MODE (operands[0]) == XFmode
|
|| GET_MODE (operands[0]) == XFmode
|
||||||
|| GET_MODE (operands[0]) == DFmode)
|
|| GET_MODE (operands[0]) == DFmode)"
|
||||||
&& (operands[2] = find_constant_src (insn))"
|
|
||||||
[(set (match_dup 0) (match_dup 2))]
|
[(set (match_dup 0) (match_dup 2))]
|
||||||
{
|
{
|
||||||
rtx c = operands[2];
|
operands[2] = find_constant_src (curr_insn);
|
||||||
int r = REGNO (operands[0]);
|
|
||||||
|
|
||||||
if ((SSE_REGNO_P (r) && !standard_sse_constant_p (c))
|
if (operands[2] == NULL_RTX
|
||||||
|| (STACK_REGNO_P (r) && standard_80387_constant_p (c) < 1))
|
|| (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;
|
FAIL;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -3537,17 +3568,6 @@
|
||||||
operands[1] = CONST1_RTX (<MODE>mode);
|
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"
|
(define_insn "swapxf"
|
||||||
[(set (match_operand:XF 0 "register_operand" "+f")
|
[(set (match_operand:XF 0 "register_operand" "+f")
|
||||||
(match_operand:XF 1 "register_operand" "+f"))
|
(match_operand:XF 1 "register_operand" "+f"))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue