i386.md (peephole2s for operations with memory inputs): Use SWI mode iterator.

* config/i386/i386.md (peephole2s for operations with memory inputs):
	Use SWI mode iterator.
	(peephole2s for operations with memory outputs): Ditto.
	Do not check for stack checking probe.

	(probe_stack): Remove expander.

From-SVN: r235601
This commit is contained in:
Uros Bizjak 2016-04-28 21:11:25 +02:00 committed by Uros Bizjak
parent 8ad9df624c
commit 9fae9ece6a
2 changed files with 43 additions and 52 deletions

View File

@ -1,3 +1,12 @@
2016-04-28 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (peephole2s for operations with memory inputs):
Use SWI mode iterator.
(peephole2s for operations with memory outputs): Ditto.
Do not check for stack checking probe.
(probe_stack): Remove expander.
2016-04-28 Joern Rennecke <joern.rennecke@embecosm.com>
Andrew Burgess <andrew.burgess@embecosm.com>

View File

@ -17552,20 +17552,6 @@
DONE;
})
;; Use IOR for stack probes, this is shorter.
(define_expand "probe_stack"
[(match_operand 0 "memory_operand")]
""
{
rtx (*gen_ior3) (rtx, rtx, rtx);
gen_ior3 = (GET_MODE (operands[0]) == DImode
? gen_iordi3 : gen_iorsi3);
emit_insn (gen_ior3 (operands[0], operands[0], const0_rtx));
DONE;
})
(define_insn "adjust_stack_and_probe<mode>"
[(set (match_operand:P 0 "register_operand" "=r")
(unspec_volatile:P [(match_operand:P 1 "register_operand" "0")]
@ -17894,30 +17880,30 @@
;; Don't do logical operations with memory inputs.
(define_peephole2
[(match_scratch:SI 2 "r")
(parallel [(set (match_operand:SI 0 "register_operand")
(match_operator:SI 3 "arith_or_logical_operator"
[(match_dup 0)
(match_operand:SI 1 "memory_operand")]))
(clobber (reg:CC FLAGS_REG))])]
[(match_scratch:SWI 2 "<r>")
(parallel [(set (match_operand:SWI 0 "register_operand")
(match_operator:SWI 3 "arith_or_logical_operator"
[(match_dup 0)
(match_operand:SWI 1 "memory_operand")]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY || optimize_insn_for_size_p ())"
[(set (match_dup 2) (match_dup 1))
(parallel [(set (match_dup 0)
(match_op_dup 3 [(match_dup 0) (match_dup 2)]))
(clobber (reg:CC FLAGS_REG))])])
(match_op_dup 3 [(match_dup 0) (match_dup 2)]))
(clobber (reg:CC FLAGS_REG))])])
(define_peephole2
[(match_scratch:SI 2 "r")
(parallel [(set (match_operand:SI 0 "register_operand")
(match_operator:SI 3 "arith_or_logical_operator"
[(match_operand:SI 1 "memory_operand")
(match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])]
[(match_scratch:SWI 2 "<r>")
(parallel [(set (match_operand:SWI 0 "register_operand")
(match_operator:SWI 3 "arith_or_logical_operator"
[(match_operand:SWI 1 "memory_operand")
(match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY || optimize_insn_for_size_p ())"
[(set (match_dup 2) (match_dup 1))
(parallel [(set (match_dup 0)
(match_op_dup 3 [(match_dup 2) (match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])])
(match_op_dup 3 [(match_dup 2) (match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])])
;; Prefer Load+RegOp to Mov+MemOp. Watch out for cases when the memory address
;; refers to the destination of the load!
@ -17962,35 +17948,31 @@
; the same decoder scheduling characteristics as the original.
(define_peephole2
[(match_scratch:SI 2 "r")
(parallel [(set (match_operand:SI 0 "memory_operand")
(match_operator:SI 3 "arith_or_logical_operator"
[(match_dup 0)
(match_operand:SI 1 "nonmemory_operand")]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
/* Do not split stack checking probes. */
&& GET_CODE (operands[3]) != IOR && operands[1] != const0_rtx"
[(match_scratch:SWI 2 "<r>")
(parallel [(set (match_operand:SWI 0 "memory_operand")
(match_operator:SWI 3 "arith_or_logical_operator"
[(match_dup 0)
(match_operand:SWI 1 "<nonmemory_operand>")]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())"
[(set (match_dup 2) (match_dup 0))
(parallel [(set (match_dup 2)
(match_op_dup 3 [(match_dup 2) (match_dup 1)]))
(clobber (reg:CC FLAGS_REG))])
(match_op_dup 3 [(match_dup 2) (match_dup 1)]))
(clobber (reg:CC FLAGS_REG))])
(set (match_dup 0) (match_dup 2))])
(define_peephole2
[(match_scratch:SI 2 "r")
(parallel [(set (match_operand:SI 0 "memory_operand")
(match_operator:SI 3 "arith_or_logical_operator"
[(match_operand:SI 1 "nonmemory_operand")
(match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
/* Do not split stack checking probes. */
&& GET_CODE (operands[3]) != IOR && operands[1] != const0_rtx"
[(match_scratch:SWI 2 "<r>")
(parallel [(set (match_operand:SWI 0 "memory_operand")
(match_operator:SWI 3 "arith_or_logical_operator"
[(match_operand:SWI 1 "<nonmemory_operand>")
(match_dup 0)]))
(clobber (reg:CC FLAGS_REG))])]
"!(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())"
[(set (match_dup 2) (match_dup 0))
(parallel [(set (match_dup 2)
(match_op_dup 3 [(match_dup 1) (match_dup 2)]))
(clobber (reg:CC FLAGS_REG))])
(match_op_dup 3 [(match_dup 1) (match_dup 2)]))
(clobber (reg:CC FLAGS_REG))])
(set (match_dup 0) (match_dup 2))])
;; Attempt to use arith or logical operations with memory outputs with