diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2011-07-26 18:04:53 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-07-26 18:04:53 +0200 |
commit | 98d2c0ad6e11698fd7b24816e69d7ca1586663a6 (patch) | |
tree | c2904bc5d7b95c1b65c774c098ca8e74e32d3093 /gcc | |
parent | c21510a9f1cc185569a39334fe99f7b88fa009a3 (diff) | |
download | gcc-98d2c0ad6e11698fd7b24816e69d7ca1586663a6.zip gcc-98d2c0ad6e11698fd7b24816e69d7ca1586663a6.tar.gz gcc-98d2c0ad6e11698fd7b24816e69d7ca1586663a6.tar.bz2 |
i386.md (add->lea splitter): Implement using SWI mode iterator.
* config/i386/i386.md (add->lea splitter): Implement using SWI
mode iterator. Change operand 2 predicate to <nonmemory_operand>.
(add->lea zext splitter): Change operand 2 predicate to
x86_64_nonmemory_operand.
From-SVN: r176795
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 31 |
2 files changed, 14 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0177df8..ab5aaff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-07-26 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.md (add->lea splitter): Implement using SWI + mode iterator. Change operand 2 predicate to <nonmemory_operand>. + (add->lea zext splitter): Change operand 2 predicate to + x86_64_nonmemory_operand. + 2011-07-26 Richard Guenther <rguenther@suse.de> * predict.c (maybe_hot_frequency_p): Make sure a zero entry-block diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 98d60ec..e91a299 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -5805,17 +5805,14 @@ ;; Convert add to the lea pattern to avoid flags dependency. (define_split - [(set (match_operand 0 "register_operand" "") - (plus (match_operand 1 "register_operand" "") - (match_operand 2 "nonmemory_operand" ""))) + [(set (match_operand:SWI 0 "register_operand" "") + (plus (match_operand:SWI 1 "register_operand" "") + (match_operand:SWI 2 "<nonmemory_operand>" ""))) (clobber (reg:CC FLAGS_REG))] - "GET_MODE (operands[0]) == GET_MODE (operands[1]) - && (GET_MODE (operands[0]) == GET_MODE (operands[2]) - || GET_MODE (operands[2]) == VOIDmode) - && reload_completed && ix86_lea_for_add_ok (insn, operands)" + "reload_completed && ix86_lea_for_add_ok (insn, operands)" [(const_int 0)] { - enum machine_mode mode = GET_MODE (operands[0]); + enum machine_mode mode = <MODE>mode; rtx pat; if (GET_MODE_SIZE (mode) < GET_MODE_SIZE (SImode)) @@ -5833,27 +5830,13 @@ }) ;; Convert add to the lea pattern to avoid flags dependency. -;; ??? This pattern handles immediate operands that do not satisfy immediate -;; operand predicate (TARGET_LEGITIMATE_CONSTANT_P) in the previous pattern. -(define_split - [(set (match_operand:DI 0 "register_operand" "") - (plus:DI (match_operand:DI 1 "register_operand" "") - (match_operand:DI 2 "x86_64_immediate_operand" ""))) - (clobber (reg:CC FLAGS_REG))] - "TARGET_64BIT && reload_completed - && true_regnum (operands[0]) != true_regnum (operands[1])" - [(set (match_dup 0) - (plus:DI (match_dup 1) (match_dup 2)))]) - -;; Convert add to the lea pattern to avoid flags dependency. (define_split [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (plus:SI (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "nonmemory_operand" "")))) + (match_operand:SI 2 "x86_64_nonmemory_operand" "")))) (clobber (reg:CC FLAGS_REG))] - "TARGET_64BIT && reload_completed - && ix86_lea_for_add_ok (insn, operands)" + "TARGET_64BIT && reload_completed && ix86_lea_for_add_ok (insn, operands)" [(set (match_dup 0) (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]) |