diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2016-04-28 21:11:25 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2016-04-28 21:11:25 +0200 |
commit | 9fae9ece6abc4212cbdd21c7fe334b43f78eb3a0 (patch) | |
tree | 6e0ecb7c107cec553eec773f2238b0d16c5061fd /gcc/config | |
parent | 8ad9df624ca4e4b36a46d117628ff788fdcd03b5 (diff) | |
download | gcc-9fae9ece6abc4212cbdd21c7fe334b43f78eb3a0.zip gcc-9fae9ece6abc4212cbdd21c7fe334b43f78eb3a0.tar.gz gcc-9fae9ece6abc4212cbdd21c7fe334b43f78eb3a0.tar.bz2 |
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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.md | 86 |
1 files changed, 34 insertions, 52 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 30c0997..6dfb240 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -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 |