aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2016-04-28 21:11:25 +0200
committerUros Bizjak <uros@gcc.gnu.org>2016-04-28 21:11:25 +0200
commit9fae9ece6abc4212cbdd21c7fe334b43f78eb3a0 (patch)
tree6e0ecb7c107cec553eec773f2238b0d16c5061fd
parent8ad9df624ca4e4b36a46d117628ff788fdcd03b5 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.md86
2 files changed, 43 insertions, 52 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e65e0ea..873856b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
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