diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1992-08-06 18:59:27 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1992-08-06 18:59:27 -0700 |
commit | 5584677eb43bc65eab09f7ea0057acb5f7bc4658 (patch) | |
tree | 0e5fe5bd8169373a9e4ac20f756be43457f73e55 /gcc | |
parent | a291e551670918165b4df941d78661f483c287c4 (diff) | |
download | gcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.zip gcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.tar.gz gcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.tar.bz2 |
Correct DEFINE_SPLITs added Jul 27.
Correct DEFINE_SPLITs added Jul 27. They would
overwrite the input register if it was the same as the result reg.
From-SVN: r1776
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/sparc/sparc.md | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index b7a739d..b64f949 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -1996,15 +1996,16 @@ (define_split [(set (match_operand:SI 0 "register_operand" "") (and:SI (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "" "")))] + (match_operand:SI 2 "" ""))) + (clobber (match_operand:SI 3 "register_operand" ""))] "GET_CODE (operands[2]) == CONST_INT && !SMALL_INT (operands[2]) && (INTVAL (operands[2]) & 0x3ff) == 0x3ff" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) (and:SI (not:SI (match_dup 0)) (match_dup 1)))] + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 0) (and:SI (not:SI (match_dup 3)) (match_dup 1)))] " { - operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); + operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); }") (define_insn "" @@ -2070,15 +2071,16 @@ (define_split [(set (match_operand:SI 0 "register_operand" "") (ior:SI (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "" "")))] + (match_operand:SI 2 "" ""))) + (clobber (match_operand:SI 3 "register_operand" ""))] "GET_CODE (operands[2]) == CONST_INT && !SMALL_INT (operands[2]) && (INTVAL (operands[2]) & 0x3ff) == 0x3ff" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) (ior:SI (not:SI (match_dup 0)) (match_dup 1)))] + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 0) (ior:SI (not:SI (match_dup 3)) (match_dup 1)))] " { - operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); + operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); }") (define_insn "" @@ -2144,29 +2146,31 @@ (define_split [(set (match_operand:SI 0 "register_operand" "") (xor:SI (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "" "")))] + (match_operand:SI 2 "" ""))) + (clobber (match_operand:SI 3 "register_operand" ""))] "GET_CODE (operands[2]) == CONST_INT && !SMALL_INT (operands[2]) && (INTVAL (operands[2]) & 0x3ff) == 0x3ff" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) (not:SI (xor:SI (match_dup 0) (match_dup 1))))] + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 0) (not:SI (xor:SI (match_dup 3) (match_dup 1))))] " { - operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); + operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); }") (define_split [(set (match_operand:SI 0 "register_operand" "") (not:SI (xor:SI (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "" ""))))] + (match_operand:SI 2 "" "")))) + (clobber (match_operand:SI 3 "register_operand" ""))] "GET_CODE (operands[2]) == CONST_INT && !SMALL_INT (operands[2]) && (INTVAL (operands[2]) & 0x3ff) == 0x3ff" - [(set (match_dup 0) (match_dup 3)) - (set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1)))] + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 0) (xor:SI (match_dup 3) (match_dup 1)))] " { - operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); + operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); }") ;; xnor patterns. Note that (a ^ ~b) == (~a ^ b) == ~(a ^ b). |