http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55181

Oleg Endo <olegendo at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |olegendo at gcc dot gnu.org

--- Comment #8 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #6)
> Note that a bit-test instruction can only be used if the and only feeds a
> comparison against zero.  Not sure how canonical bit-test patterns should
> look like, but combine should be able to work this out, no?  Unless we
> mess things up earlier during generic expansion (which seems to be the
> case)

A single bit test pattern such as (taken from SH)

(define_insn "tstsi_t"
  [(set (reg:SI T_REG)
    (eq:SI (and:SI (match_operand:SI 0 "logical_operand" "%z,r")
               (match_operand:SI 1 "logical_operand" "K08,r"))
           (const_int 0)))]

is not enough.  If the second operand is a constant combine will try out
various variations (canonicalized bit extractions) such as zero_extend or

  [(set (reg:SI T_REG)
     (and:SI (not:SI (match_operand:SI 0 "logical_operand" "z"))
         (const_int 1)))]

Reply via email to