Commit 10978207 by Richard Henderson Committed by Richard Henderson

i386.md (setcc splitters): Add four splitters to simplify compound compares that…

i386.md (setcc splitters): Add four splitters to simplify compound compares that simplify_comparison can't...

        * config/i386/i386.md (setcc splitters): Add four splitters to
        simplify compound compares that simplify_comparison can't handle.

From-SVN: r46203
parent 6f32162a
2001-10-11 Richard Henderson <rth@redhat.com>
* config/i386/i386.md (setcc splitters): Add four splitters to
simplify compound compares that simplify_comparison can't handle.
2001-10-11 Zack Weinberg <zack@codesourcery.com> 2001-10-11 Zack Weinberg <zack@codesourcery.com>
* cpplex.c (digraph_spellings, token_spellings): Make static. * cpplex.c (digraph_spellings, token_spellings): Make static.
......
...@@ -12542,6 +12542,76 @@ ...@@ -12542,6 +12542,76 @@
[(set_attr "type" "setcc") [(set_attr "type" "setcc")
(set_attr "mode" "QI")]) (set_attr "mode" "QI")])
;; In general it is not safe to assume too much about CCmode registers,
;; so simplify-rtx stops when it sees a second one. Under certain
;; conditions this is safe on x86, so help combine not create
;;
;; seta %al
;; testb %al, %al
;; sete %al
(define_split
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(ne:QI (match_operator 1 "ix86_comparison_operator"
[(reg 17) (const_int 0)])
(const_int 0)))]
""
[(set (match_dup 0) (match_dup 1))]
{
PUT_MODE (operands[1], QImode);
})
(define_split
[(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" ""))
(ne:QI (match_operator 1 "ix86_comparison_operator"
[(reg 17) (const_int 0)])
(const_int 0)))]
""
[(set (match_dup 0) (match_dup 1))]
{
PUT_MODE (operands[1], QImode);
})
(define_split
[(set (match_operand:QI 0 "nonimmediate_operand" "")
(eq:QI (match_operator 1 "ix86_comparison_operator"
[(reg 17) (const_int 0)])
(const_int 0)))]
""
[(set (match_dup 0) (match_dup 1))]
{
rtx new_op1 = copy_rtx (operands[1]);
operands[1] = new_op1;
PUT_MODE (new_op1, QImode);
PUT_CODE (new_op1, REVERSE_CONDITION (GET_CODE (new_op1),
GET_MODE (XEXP (new_op1, 0))));
/* Make sure that (a) the CCmode we have for the flags is strong
enough for the reversed compare or (b) we have a valid FP compare. */
if (! ix86_comparison_operator (new_op1, VOIDmode))
FAIL;
})
(define_split
[(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" ""))
(eq:QI (match_operator 1 "ix86_comparison_operator"
[(reg 17) (const_int 0)])
(const_int 0)))]
""
[(set (match_dup 0) (match_dup 1))]
{
rtx new_op1 = copy_rtx (operands[1]);
operands[1] = new_op1;
PUT_MODE (new_op1, QImode);
PUT_CODE (new_op1, REVERSE_CONDITION (GET_CODE (new_op1),
GET_MODE (XEXP (new_op1, 0))));
/* Make sure that (a) the CCmode we have for the flags is strong
enough for the reversed compare or (b) we have a valid FP compare. */
if (! ix86_comparison_operator (new_op1, VOIDmode))
FAIL;
})
;; The SSE store flag instructions saves 0 or 0xffffffff to the result. ;; The SSE store flag instructions saves 0 or 0xffffffff to the result.
;; subsequent logical operations are used to imitate conditional moves. ;; subsequent logical operations are used to imitate conditional moves.
;; 0xffffffff is NaN, but not in normalized form, so we can't represent ;; 0xffffffff is NaN, but not in normalized form, so we can't represent
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment