On 08/19/2014 06:29 AM, Kyrill Tkachov wrote:
> +(define_special_predicate "cc_register_zero"
> +  (and (match_code "reg")
> +       (and (match_test "REGNO (op) == CC_REGNUM")
> +         (ior (match_test "mode == GET_MODE (op)")
> +              (ior (match_test "mode == VOIDmode
> +                                && GET_MODE_CLASS (GET_MODE (op)) == 
> MODE_CC")
> +                   (match_test "mode == CCmode || mode == CC_Zmode
> +                                || mode == CC_NZmode")))))
> +)

Well, you're being too liberal with the modes you're accepting, since 'mode'
will always be VOIDmode.

And personally I find those match_tests quite ugly.  Better as:

(define_special_predicate "cc_register_zero"
  (match_code "reg")
{
  return (REGNO (op) == CC_REGNUM
          && (GET_MODE (op) == CCmode
              || GET_MODE (op) == CC_Zmode
              || GET_MODE (op) == CC_NZmode));
})


r~

Reply via email to