2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-21 23:51:18 +08:00

predicates.md (register_mixssei387nonimm_operand): New.

* config/i386/predicates.md (register_mixssei387nonimm_operand): New.
	* config/i386/i386.md (*fop_<mode>_1_mixed): Merge with
	*fop_<mode>_1_sse using enabled attribute.  Use
	register_mixssei387nonimm_operand operand 1 predicate. Change
	alternative 3 constraints from "x" to "v".

From-SVN: r222154
This commit is contained in:
Uros Bizjak 2015-04-16 20:50:59 +02:00 committed by Uros Bizjak
parent fe7a6ae47f
commit 8c292b10e8
3 changed files with 38 additions and 36 deletions

@ -1,3 +1,11 @@
2015-04-16 Uros Bizjak <ubizjak@gmail.com>
* config/i386/predicates.md (register_mixssei387nonimm_operand): New.
* config/i386/i386.md (*fop_<mode>_1_mixed): Merge with
*fop_<mode>_1_sse using enabled attribute. Use
register_mixssei387nonimm_operand operand 1 predicate. Change
alternative 3 constraints from "x" to "v".
2015-04-16 Richard Biener <rguenther@suse.de>
PR tree-optimization/65774

@ -13602,12 +13602,26 @@
(const_string "fop")))
(set_attr "mode" "<MODE>")])
(define_insn "*rcpsf2_sse"
[(set (match_operand:SF 0 "register_operand" "=x")
(unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm")]
UNSPEC_RCP))]
"TARGET_SSE_MATH"
"%vrcpss\t{%1, %d0|%d0, %1}"
[(set_attr "type" "sse")
(set_attr "atom_sse_attr" "rcp")
(set_attr "btver2_sse_attr" "rcp")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "SF")])
(define_insn "*fop_<mode>_1_mixed"
[(set (match_operand:MODEF 0 "register_operand" "=f,f,x,x")
[(set (match_operand:MODEF 0 "register_operand" "=f,f,x,v")
(match_operator:MODEF 3 "binary_fp_operator"
[(match_operand:MODEF 1 "nonimmediate_operand" "0,fm,0,x")
(match_operand:MODEF 2 "nonimmediate_operand" "fm,0,xm,xm")]))]
"SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_MIX_SSE_I387
[(match_operand:MODEF 1
"register_mixssei387nonimm_operand" "0,fm,0,v")
(match_operand:MODEF 2
"nonimmediate_operand" "fm,0,xm,vm")]))]
"SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !COMMUTATIVE_ARITH_P (operands[3])
&& !(MEM_P (operands[1]) && MEM_P (operands[2]))"
"* return output_387_binary_op (insn, operands);"
@ -13628,38 +13642,12 @@
(const_string "fop")))
(set_attr "isa" "*,*,noavx,avx")
(set_attr "prefix" "orig,orig,orig,vex")
(set_attr "mode" "<MODE>")])
(define_insn "*rcpsf2_sse"
[(set (match_operand:SF 0 "register_operand" "=x")
(unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm")]
UNSPEC_RCP))]
"TARGET_SSE_MATH"
"%vrcpss\t{%1, %d0|%d0, %1}"
[(set_attr "type" "sse")
(set_attr "atom_sse_attr" "rcp")
(set_attr "btver2_sse_attr" "rcp")
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "SF")])
(define_insn "*fop_<mode>_1_sse"
[(set (match_operand:MODEF 0 "register_operand" "=x,x")
(match_operator:MODEF 3 "binary_fp_operator"
[(match_operand:MODEF 1 "register_operand" "0,x")
(match_operand:MODEF 2 "nonimmediate_operand" "xm,xm")]))]
"SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !COMMUTATIVE_ARITH_P (operands[3])"
"* return output_387_binary_op (insn, operands);"
[(set (attr "type")
(cond [(match_operand:MODEF 3 "mult_operator")
(const_string "ssemul")
(match_operand:MODEF 3 "div_operator")
(const_string "ssediv")
]
(const_string "sseadd")))
(set_attr "isa" "noavx,avx")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "<MODE>")])
(set_attr "mode" "<MODE>")
(set (attr "enabled")
(cond [(eq_attr "alternative" "0,1")
(symbol_ref "TARGET_MIX_SSE_I387")
]
(const_string "*")))])
;; This pattern is not fully shadowed by the pattern above.
(define_insn "*fop_<mode>_1_i387"

@ -115,6 +115,12 @@
(match_operand 0 "nonmemory_operand")
(match_operand 0 "general_operand")))
;; Match register operands, include memory operand for TARGET_MIX_SSE_I387.
(define_predicate "register_mixssei387nonimm_operand"
(if_then_else (match_test "TARGET_MIX_SSE_I387")
(match_operand 0 "nonimmediate_operand")
(match_operand 0 "register_operand")))
;; Return true if VALUE is symbol reference
(define_predicate "symbol_operand"
(match_code "symbol_ref"))