From 95edfef236ff9bf3702d97718729a213e843cfd8 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 27 Jul 1992 18:58:27 -0700 Subject: [PATCH] Add DEFINE_SPLITs to optimize logic operation with certain immediate values. From-SVN: r1694 --- gcc/config/sparc/sparc.md | 56 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index cdbc02b9c2f3..acb4ee48ffd5 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -1993,6 +1993,20 @@ "" "and %1,%2,%0") +(define_split + [(set (match_operand:SI 0 "register_operand" "") + (and:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "" "")))] + "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)))] + " +{ + operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); +}") + (define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (not:DI (match_operand:DI 1 "register_operand" "r")) @@ -2053,6 +2067,20 @@ "" "or %1,%2,%0") +(define_split + [(set (match_operand:SI 0 "register_operand" "") + (ior:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "" "")))] + "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)))] + " +{ + operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); +}") + (define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ior:DI (not:DI (match_operand:DI 1 "register_operand" "r")) @@ -2113,6 +2141,34 @@ "" "xor %r1,%2,%0") +(define_split + [(set (match_operand:SI 0 "register_operand" "") + (xor:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "" "")))] + "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))))] + " +{ + operands[3] = 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 "" ""))))] + "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)))] + " +{ + operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2])); +}") + ;; xnor patterns. Note that (a ^ ~b) == (~a ^ b) == ~(a ^ b). ;; Combine now canonicalizes to the rightmost expression. (define_insn "" -- 2.43.5