i386.c (ix86_expand_setcc): Don't use method 0 before CSE.

* config/i386/i386.c (ix86_expand_setcc): Don't use method 0
        before CSE.
        * config/i386/i386.md: New setcc+movzbl peephole2.

From-SVN: r44279
This commit is contained in:
Richard Henderson 2001-07-23 14:16:02 -07:00 committed by Richard Henderson
parent 9099cc4f79
commit c50e5bc0ab
3 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2001-07-23 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (ix86_expand_setcc): Don't use method 0
before CSE.
* config/i386/i386.md: New setcc+movzbl peephole2.
2001-07-23 Neil Booth <neil@cat.daikokuya.demon.co.uk>
* objc/Make-lang.in (objc-act.o): Depend on debug.h.

View File

@ -6357,9 +6357,12 @@ ix86_expand_setcc (code, dest)
emit subreg setcc, zero extend.
2 -- destination is in QImode:
emit setcc only.
*/
type = 0;
We don't use mode 0 early in compilation because it confuses CSE.
There are peepholes to turn mode 1 into mode 0 if things work out
nicely after reload. */
type = cse_not_expected ? 0 : 1;
if (GET_MODE (dest) == QImode)
type = 2;

View File

@ -13133,6 +13133,25 @@
(match_dup 0)
(pc)))]
"")
;; Convert setcc + movzbl to xor + setcc if operands don't overlap.
(define_peephole2
[(set (reg 17) (match_operand 0 "" ""))
(set (match_operand:QI 1 "register_operand" "")
(match_operator:QI 2 "ix86_comparison_operator"
[(reg 17) (const_int 0)]))
(set (match_operand 3 "q_regs_operand" "")
(zero_extend (match_dup 1)))]
"peep2_reg_dead_p (3, operands[1])
&& ! reg_overlap_mentioned_p (operands[3], operands[0])"
[(parallel [(set (match_dup 3) (const_int 0))
(clobber (reg:CC 17))])
(set (match_dup 4) (match_dup 0))
(set (strict_low_part (match_dup 5))
(match_dup 2))]
"operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17);
operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));")
;; Call instructions.