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
This commit is contained in:
parent
6f32162af6
commit
1097820739
|
@ -1,3 +1,8 @@
|
||||||
|
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 @@
|
||||||
[(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
|
||||||
|
|
Loading…
Reference in New Issue