Home | History | Annotate | Line # | Download | only in rs6000
      1 ;; Generated automatically by genfusion.pl
      2 
      3 ;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
      4 ;;
      5 ;; This file is part of GCC.
      6 ;;
      7 ;; GCC is free software; you can redistribute it and/or modify it under
      8 ;; the terms of the GNU General Public License as published by the Free
      9 ;; Software Foundation; either version 3, or (at your option) any later
     10 ;; version.
     11 ;;
     12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     13 ;; WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14 ;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     15 ;; for more details.
     16 ;;
     17 ;; You should have received a copy of the GNU General Public License
     18 ;; along with GCC; see the file COPYING3.  If not see
     19 ;; <http://www.gnu.org/licenses/>.
     20 
     21 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
     22 ;; load mode is DI result mode is clobber compare mode is CC extend is none
     23 (define_insn_and_split "*ld_cmpdi_cr0_DI_clobber_CC_none"
     24   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
     25         (compare:CC (match_operand:DI 1 "non_update_memory_operand" "YZ")
     26                     (match_operand:DI 3 "const_m1_to_1_operand" "n")))
     27    (clobber (match_scratch:DI 0 "=r"))]
     28   "(TARGET_P10_FUSION)"
     29   "ld%X1 %0,%1\;cmpdi %2,%0,%3"
     30   "&& reload_completed
     31    && (cc_reg_not_cr0_operand (operands[2], CCmode)
     32        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
     33                                       DImode, NON_PREFIXED_DS))"
     34   [(set (match_dup 0) (match_dup 1))
     35    (set (match_dup 2)
     36         (compare:CC (match_dup 0) (match_dup 3)))]
     37   ""
     38   [(set_attr "type" "fused_load_cmpi")
     39    (set_attr "cost" "8")
     40    (set_attr "length" "8")])
     41 
     42 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
     43 ;; load mode is DI result mode is clobber compare mode is CCUNS extend is none
     44 (define_insn_and_split "*ld_cmpldi_cr0_DI_clobber_CCUNS_none"
     45   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
     46         (compare:CCUNS (match_operand:DI 1 "non_update_memory_operand" "YZ")
     47                        (match_operand:DI 3 "const_0_to_1_operand" "n")))
     48    (clobber (match_scratch:DI 0 "=r"))]
     49   "(TARGET_P10_FUSION)"
     50   "ld%X1 %0,%1\;cmpldi %2,%0,%3"
     51   "&& reload_completed
     52    && (cc_reg_not_cr0_operand (operands[2], CCmode)
     53        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
     54                                       DImode, NON_PREFIXED_DS))"
     55   [(set (match_dup 0) (match_dup 1))
     56    (set (match_dup 2)
     57         (compare:CCUNS (match_dup 0) (match_dup 3)))]
     58   ""
     59   [(set_attr "type" "fused_load_cmpi")
     60    (set_attr "cost" "8")
     61    (set_attr "length" "8")])
     62 
     63 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
     64 ;; load mode is DI result mode is DI compare mode is CC extend is none
     65 (define_insn_and_split "*ld_cmpdi_cr0_DI_DI_CC_none"
     66   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
     67         (compare:CC (match_operand:DI 1 "non_update_memory_operand" "YZ")
     68                     (match_operand:DI 3 "const_m1_to_1_operand" "n")))
     69    (set (match_operand:DI 0 "gpc_reg_operand" "=r") (match_dup 1))]
     70   "(TARGET_P10_FUSION)"
     71   "ld%X1 %0,%1\;cmpdi %2,%0,%3"
     72   "&& reload_completed
     73    && (cc_reg_not_cr0_operand (operands[2], CCmode)
     74        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
     75                                       DImode, NON_PREFIXED_DS))"
     76   [(set (match_dup 0) (match_dup 1))
     77    (set (match_dup 2)
     78         (compare:CC (match_dup 0) (match_dup 3)))]
     79   ""
     80   [(set_attr "type" "fused_load_cmpi")
     81    (set_attr "cost" "8")
     82    (set_attr "length" "8")])
     83 
     84 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
     85 ;; load mode is DI result mode is DI compare mode is CCUNS extend is none
     86 (define_insn_and_split "*ld_cmpldi_cr0_DI_DI_CCUNS_none"
     87   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
     88         (compare:CCUNS (match_operand:DI 1 "non_update_memory_operand" "YZ")
     89                        (match_operand:DI 3 "const_0_to_1_operand" "n")))
     90    (set (match_operand:DI 0 "gpc_reg_operand" "=r") (match_dup 1))]
     91   "(TARGET_P10_FUSION)"
     92   "ld%X1 %0,%1\;cmpldi %2,%0,%3"
     93   "&& reload_completed
     94    && (cc_reg_not_cr0_operand (operands[2], CCmode)
     95        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
     96                                       DImode, NON_PREFIXED_DS))"
     97   [(set (match_dup 0) (match_dup 1))
     98    (set (match_dup 2)
     99         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    100   ""
    101   [(set_attr "type" "fused_load_cmpi")
    102    (set_attr "cost" "8")
    103    (set_attr "length" "8")])
    104 
    105 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    106 ;; load mode is SI result mode is clobber compare mode is CC extend is none
    107 (define_insn_and_split "*lwz_cmpwi_cr0_SI_clobber_CC_none"
    108   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
    109         (compare:CC (match_operand:SI 1 "non_update_memory_operand" "m")
    110                     (match_operand:SI 3 "const_m1_to_1_operand" "n")))
    111    (clobber (match_scratch:SI 0 "=r"))]
    112   "(TARGET_P10_FUSION)"
    113   "lwz%X1 %0,%1\;cmpwi %2,%0,%3"
    114   "&& reload_completed
    115    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    116        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    117                                       SImode, NON_PREFIXED_D))"
    118   [(set (match_dup 0) (match_dup 1))
    119    (set (match_dup 2)
    120         (compare:CC (match_dup 0) (match_dup 3)))]
    121   ""
    122   [(set_attr "type" "fused_load_cmpi")
    123    (set_attr "cost" "8")
    124    (set_attr "length" "8")])
    125 
    126 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    127 ;; load mode is SI result mode is clobber compare mode is CCUNS extend is none
    128 (define_insn_and_split "*lwz_cmpldi_cr0_SI_clobber_CCUNS_none"
    129   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    130         (compare:CCUNS (match_operand:SI 1 "non_update_memory_operand" "m")
    131                        (match_operand:SI 3 "const_0_to_1_operand" "n")))
    132    (clobber (match_scratch:SI 0 "=r"))]
    133   "(TARGET_P10_FUSION)"
    134   "lwz%X1 %0,%1\;cmpldi %2,%0,%3"
    135   "&& reload_completed
    136    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    137        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    138                                       SImode, NON_PREFIXED_D))"
    139   [(set (match_dup 0) (match_dup 1))
    140    (set (match_dup 2)
    141         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    142   ""
    143   [(set_attr "type" "fused_load_cmpi")
    144    (set_attr "cost" "8")
    145    (set_attr "length" "8")])
    146 
    147 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    148 ;; load mode is SI result mode is SI compare mode is CC extend is none
    149 (define_insn_and_split "*lwz_cmpwi_cr0_SI_SI_CC_none"
    150   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
    151         (compare:CC (match_operand:SI 1 "non_update_memory_operand" "m")
    152                     (match_operand:SI 3 "const_m1_to_1_operand" "n")))
    153    (set (match_operand:SI 0 "gpc_reg_operand" "=r") (match_dup 1))]
    154   "(TARGET_P10_FUSION)"
    155   "lwz%X1 %0,%1\;cmpwi %2,%0,%3"
    156   "&& reload_completed
    157    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    158        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    159                                       SImode, NON_PREFIXED_D))"
    160   [(set (match_dup 0) (match_dup 1))
    161    (set (match_dup 2)
    162         (compare:CC (match_dup 0) (match_dup 3)))]
    163   ""
    164   [(set_attr "type" "fused_load_cmpi")
    165    (set_attr "cost" "8")
    166    (set_attr "length" "8")])
    167 
    168 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    169 ;; load mode is SI result mode is SI compare mode is CCUNS extend is none
    170 (define_insn_and_split "*lwz_cmpldi_cr0_SI_SI_CCUNS_none"
    171   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    172         (compare:CCUNS (match_operand:SI 1 "non_update_memory_operand" "m")
    173                        (match_operand:SI 3 "const_0_to_1_operand" "n")))
    174    (set (match_operand:SI 0 "gpc_reg_operand" "=r") (match_dup 1))]
    175   "(TARGET_P10_FUSION)"
    176   "lwz%X1 %0,%1\;cmpldi %2,%0,%3"
    177   "&& reload_completed
    178    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    179        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    180                                       SImode, NON_PREFIXED_D))"
    181   [(set (match_dup 0) (match_dup 1))
    182    (set (match_dup 2)
    183         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    184   ""
    185   [(set_attr "type" "fused_load_cmpi")
    186    (set_attr "cost" "8")
    187    (set_attr "length" "8")])
    188 
    189 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    190 ;; load mode is SI result mode is EXTSI compare mode is CC extend is sign
    191 (define_insn_and_split "*lwa_cmpdi_cr0_SI_EXTSI_CC_sign"
    192   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
    193         (compare:CC (match_operand:SI 1 "non_update_memory_operand" "YZ")
    194                     (match_operand:SI 3 "const_m1_to_1_operand" "n")))
    195    (set (match_operand:EXTSI 0 "gpc_reg_operand" "=r") (sign_extend:EXTSI (match_dup 1)))]
    196   "(TARGET_P10_FUSION)"
    197   "lwa%X1 %0,%1\;cmpdi %2,%0,%3"
    198   "&& reload_completed
    199    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    200        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    201                                       SImode, NON_PREFIXED_DS))"
    202   [(set (match_dup 0) (sign_extend:EXTSI (match_dup 1)))
    203    (set (match_dup 2)
    204         (compare:CC (match_dup 0) (match_dup 3)))]
    205   ""
    206   [(set_attr "type" "fused_load_cmpi")
    207    (set_attr "cost" "8")
    208    (set_attr "sign_extend" "yes")
    209    (set_attr "length" "8")])
    210 
    211 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    212 ;; load mode is SI result mode is EXTSI compare mode is CCUNS extend is zero
    213 (define_insn_and_split "*lwz_cmpldi_cr0_SI_EXTSI_CCUNS_zero"
    214   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    215         (compare:CCUNS (match_operand:SI 1 "non_update_memory_operand" "m")
    216                        (match_operand:SI 3 "const_0_to_1_operand" "n")))
    217    (set (match_operand:EXTSI 0 "gpc_reg_operand" "=r") (zero_extend:EXTSI (match_dup 1)))]
    218   "(TARGET_P10_FUSION)"
    219   "lwz%X1 %0,%1\;cmpldi %2,%0,%3"
    220   "&& reload_completed
    221    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    222        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    223                                       SImode, NON_PREFIXED_D))"
    224   [(set (match_dup 0) (zero_extend:EXTSI (match_dup 1)))
    225    (set (match_dup 2)
    226         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    227   ""
    228   [(set_attr "type" "fused_load_cmpi")
    229    (set_attr "cost" "8")
    230    (set_attr "length" "8")])
    231 
    232 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    233 ;; load mode is HI result mode is clobber compare mode is CC extend is sign
    234 (define_insn_and_split "*lha_cmpdi_cr0_HI_clobber_CC_sign"
    235   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
    236         (compare:CC (match_operand:HI 1 "non_update_memory_operand" "m")
    237                     (match_operand:HI 3 "const_m1_to_1_operand" "n")))
    238    (clobber (match_scratch:GPR 0 "=r"))]
    239   "(TARGET_P10_FUSION)"
    240   "lha%X1 %0,%1\;cmpdi %2,%0,%3"
    241   "&& reload_completed
    242    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    243        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    244                                       HImode, NON_PREFIXED_D))"
    245   [(set (match_dup 0) (sign_extend:GPR (match_dup 1)))
    246    (set (match_dup 2)
    247         (compare:CC (match_dup 0) (match_dup 3)))]
    248   ""
    249   [(set_attr "type" "fused_load_cmpi")
    250    (set_attr "cost" "8")
    251    (set_attr "length" "8")])
    252 
    253 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    254 ;; load mode is HI result mode is clobber compare mode is CCUNS extend is zero
    255 (define_insn_and_split "*lhz_cmpldi_cr0_HI_clobber_CCUNS_zero"
    256   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    257         (compare:CCUNS (match_operand:HI 1 "non_update_memory_operand" "m")
    258                        (match_operand:HI 3 "const_0_to_1_operand" "n")))
    259    (clobber (match_scratch:GPR 0 "=r"))]
    260   "(TARGET_P10_FUSION)"
    261   "lhz%X1 %0,%1\;cmpldi %2,%0,%3"
    262   "&& reload_completed
    263    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    264        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    265                                       HImode, NON_PREFIXED_D))"
    266   [(set (match_dup 0) (zero_extend:GPR (match_dup 1)))
    267    (set (match_dup 2)
    268         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    269   ""
    270   [(set_attr "type" "fused_load_cmpi")
    271    (set_attr "cost" "8")
    272    (set_attr "length" "8")])
    273 
    274 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    275 ;; load mode is HI result mode is EXTHI compare mode is CC extend is sign
    276 (define_insn_and_split "*lha_cmpdi_cr0_HI_EXTHI_CC_sign"
    277   [(set (match_operand:CC 2 "cc_reg_operand" "=x")
    278         (compare:CC (match_operand:HI 1 "non_update_memory_operand" "m")
    279                     (match_operand:HI 3 "const_m1_to_1_operand" "n")))
    280    (set (match_operand:EXTHI 0 "gpc_reg_operand" "=r") (sign_extend:EXTHI (match_dup 1)))]
    281   "(TARGET_P10_FUSION)"
    282   "lha%X1 %0,%1\;cmpdi %2,%0,%3"
    283   "&& reload_completed
    284    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    285        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    286                                       HImode, NON_PREFIXED_D))"
    287   [(set (match_dup 0) (sign_extend:EXTHI (match_dup 1)))
    288    (set (match_dup 2)
    289         (compare:CC (match_dup 0) (match_dup 3)))]
    290   ""
    291   [(set_attr "type" "fused_load_cmpi")
    292    (set_attr "cost" "8")
    293    (set_attr "length" "8")])
    294 
    295 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    296 ;; load mode is HI result mode is EXTHI compare mode is CCUNS extend is zero
    297 (define_insn_and_split "*lhz_cmpldi_cr0_HI_EXTHI_CCUNS_zero"
    298   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    299         (compare:CCUNS (match_operand:HI 1 "non_update_memory_operand" "m")
    300                        (match_operand:HI 3 "const_0_to_1_operand" "n")))
    301    (set (match_operand:EXTHI 0 "gpc_reg_operand" "=r") (zero_extend:EXTHI (match_dup 1)))]
    302   "(TARGET_P10_FUSION)"
    303   "lhz%X1 %0,%1\;cmpldi %2,%0,%3"
    304   "&& reload_completed
    305    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    306        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    307                                       HImode, NON_PREFIXED_D))"
    308   [(set (match_dup 0) (zero_extend:EXTHI (match_dup 1)))
    309    (set (match_dup 2)
    310         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    311   ""
    312   [(set_attr "type" "fused_load_cmpi")
    313    (set_attr "cost" "8")
    314    (set_attr "length" "8")])
    315 
    316 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    317 ;; load mode is QI result mode is clobber compare mode is CCUNS extend is zero
    318 (define_insn_and_split "*lbz_cmpldi_cr0_QI_clobber_CCUNS_zero"
    319   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    320         (compare:CCUNS (match_operand:QI 1 "non_update_memory_operand" "m")
    321                        (match_operand:QI 3 "const_0_to_1_operand" "n")))
    322    (clobber (match_scratch:GPR 0 "=r"))]
    323   "(TARGET_P10_FUSION)"
    324   "lbz%X1 %0,%1\;cmpldi %2,%0,%3"
    325   "&& reload_completed
    326    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    327        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    328                                       QImode, NON_PREFIXED_D))"
    329   [(set (match_dup 0) (zero_extend:GPR (match_dup 1)))
    330    (set (match_dup 2)
    331         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    332   ""
    333   [(set_attr "type" "fused_load_cmpi")
    334    (set_attr "cost" "8")
    335    (set_attr "length" "8")])
    336 
    337 ;; load-cmpi fusion pattern generated by gen_ld_cmpi_p10
    338 ;; load mode is QI result mode is GPR compare mode is CCUNS extend is zero
    339 (define_insn_and_split "*lbz_cmpldi_cr0_QI_GPR_CCUNS_zero"
    340   [(set (match_operand:CCUNS 2 "cc_reg_operand" "=x")
    341         (compare:CCUNS (match_operand:QI 1 "non_update_memory_operand" "m")
    342                        (match_operand:QI 3 "const_0_to_1_operand" "n")))
    343    (set (match_operand:GPR 0 "gpc_reg_operand" "=r") (zero_extend:GPR (match_dup 1)))]
    344   "(TARGET_P10_FUSION)"
    345   "lbz%X1 %0,%1\;cmpldi %2,%0,%3"
    346   "&& reload_completed
    347    && (cc_reg_not_cr0_operand (operands[2], CCmode)
    348        || !address_is_non_pfx_d_or_x (XEXP (operands[1], 0),
    349                                       QImode, NON_PREFIXED_D))"
    350   [(set (match_dup 0) (zero_extend:GPR (match_dup 1)))
    351    (set (match_dup 2)
    352         (compare:CCUNS (match_dup 0) (match_dup 3)))]
    353   ""
    354   [(set_attr "type" "fused_load_cmpi")
    355    (set_attr "cost" "8")
    356    (set_attr "length" "8")])
    357 
    358 
    359 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    360 ;; scalar and -> and
    361 (define_insn "*fuse_and_and"
    362   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    363         (and:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    364                           (match_operand:GPR 1 "gpc_reg_operand" "%r,r,r,r"))
    365                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    366    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    367   "(TARGET_P10_FUSION)"
    368   "@
    369    and %3,%1,%0\;and %3,%3,%2
    370    and %3,%1,%0\;and %3,%3,%2
    371    and %3,%1,%0\;and %3,%3,%2
    372    and %4,%1,%0\;and %3,%4,%2"
    373   [(set_attr "type" "fused_arith_logical")
    374    (set_attr "cost" "6")
    375    (set_attr "length" "8")])
    376 
    377 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    378 ;; scalar andc -> and
    379 (define_insn "*fuse_andc_and"
    380   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    381         (and:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    382                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    383                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    384    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    385   "(TARGET_P10_FUSION)"
    386   "@
    387    andc %3,%1,%0\;and %3,%3,%2
    388    andc %3,%1,%0\;and %3,%3,%2
    389    andc %3,%1,%0\;and %3,%3,%2
    390    andc %4,%1,%0\;and %3,%4,%2"
    391   [(set_attr "type" "fused_arith_logical")
    392    (set_attr "cost" "6")
    393    (set_attr "length" "8")])
    394 
    395 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    396 ;; scalar eqv -> and
    397 (define_insn "*fuse_eqv_and"
    398   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    399         (and:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    400                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    401                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    402    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    403   "(TARGET_P10_FUSION)"
    404   "@
    405    eqv %3,%1,%0\;and %3,%3,%2
    406    eqv %3,%1,%0\;and %3,%3,%2
    407    eqv %3,%1,%0\;and %3,%3,%2
    408    eqv %4,%1,%0\;and %3,%4,%2"
    409   [(set_attr "type" "fused_arith_logical")
    410    (set_attr "cost" "6")
    411    (set_attr "length" "8")])
    412 
    413 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    414 ;; scalar nand -> and
    415 (define_insn "*fuse_nand_and"
    416   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    417         (and:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    418                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    419                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    420    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    421   "(TARGET_P10_FUSION)"
    422   "@
    423    nand %3,%1,%0\;and %3,%3,%2
    424    nand %3,%1,%0\;and %3,%3,%2
    425    nand %3,%1,%0\;and %3,%3,%2
    426    nand %4,%1,%0\;and %3,%4,%2"
    427   [(set_attr "type" "fused_arith_logical")
    428    (set_attr "cost" "6")
    429    (set_attr "length" "8")])
    430 
    431 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    432 ;; scalar nor -> and
    433 (define_insn "*fuse_nor_and"
    434   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    435         (and:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    436                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    437                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    438    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    439   "(TARGET_P10_FUSION)"
    440   "@
    441    nor %3,%1,%0\;and %3,%3,%2
    442    nor %3,%1,%0\;and %3,%3,%2
    443    nor %3,%1,%0\;and %3,%3,%2
    444    nor %4,%1,%0\;and %3,%4,%2"
    445   [(set_attr "type" "fused_arith_logical")
    446    (set_attr "cost" "6")
    447    (set_attr "length" "8")])
    448 
    449 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    450 ;; scalar or -> and
    451 (define_insn "*fuse_or_and"
    452   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    453         (and:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    454                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    455                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    456    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    457   "(TARGET_P10_FUSION)"
    458   "@
    459    or %3,%1,%0\;and %3,%3,%2
    460    or %3,%1,%0\;and %3,%3,%2
    461    or %3,%1,%0\;and %3,%3,%2
    462    or %4,%1,%0\;and %3,%4,%2"
    463   [(set_attr "type" "fused_arith_logical")
    464    (set_attr "cost" "6")
    465    (set_attr "length" "8")])
    466 
    467 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    468 ;; scalar orc -> and
    469 (define_insn "*fuse_orc_and"
    470   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    471         (and:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    472                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    473                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    474    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    475   "(TARGET_P10_FUSION)"
    476   "@
    477    orc %3,%1,%0\;and %3,%3,%2
    478    orc %3,%1,%0\;and %3,%3,%2
    479    orc %3,%1,%0\;and %3,%3,%2
    480    orc %4,%1,%0\;and %3,%4,%2"
    481   [(set_attr "type" "fused_arith_logical")
    482    (set_attr "cost" "6")
    483    (set_attr "length" "8")])
    484 
    485 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    486 ;; scalar xor -> and
    487 (define_insn "*fuse_xor_and"
    488   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    489         (and:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    490                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    491                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    492    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    493   "(TARGET_P10_FUSION)"
    494   "@
    495    xor %3,%1,%0\;and %3,%3,%2
    496    xor %3,%1,%0\;and %3,%3,%2
    497    xor %3,%1,%0\;and %3,%3,%2
    498    xor %4,%1,%0\;and %3,%4,%2"
    499   [(set_attr "type" "fused_arith_logical")
    500    (set_attr "cost" "6")
    501    (set_attr "length" "8")])
    502 
    503 ;; add-logical fusion pattern generated by gen_logical_addsubf
    504 ;; scalar add -> and
    505 (define_insn "*fuse_add_and"
    506   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    507         (and:GPR (plus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    508                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    509                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    510    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    511   "(TARGET_P10_FUSION)"
    512   "@
    513    add %3,%1,%0\;and %3,%3,%2
    514    add %3,%1,%0\;and %3,%3,%2
    515    add %3,%1,%0\;and %3,%3,%2
    516    add %4,%1,%0\;and %3,%4,%2"
    517   [(set_attr "type" "fused_arith_logical")
    518    (set_attr "cost" "6")
    519    (set_attr "length" "8")])
    520 
    521 ;; add-logical fusion pattern generated by gen_logical_addsubf
    522 ;; scalar subf -> and
    523 (define_insn "*fuse_subf_and"
    524   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    525         (and:GPR (minus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    526                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    527                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
    528    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    529   "(TARGET_P10_FUSION)"
    530   "@
    531    subf %3,%1,%0\;and %3,%3,%2
    532    subf %3,%1,%0\;and %3,%3,%2
    533    subf %3,%1,%0\;and %3,%3,%2
    534    subf %4,%1,%0\;and %3,%4,%2"
    535   [(set_attr "type" "fused_arith_logical")
    536    (set_attr "cost" "6")
    537    (set_attr "length" "8")])
    538 
    539 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    540 ;; scalar and -> andc
    541 (define_insn "*fuse_and_andc"
    542   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    543         (and:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    544                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    545                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    546    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    547   "(TARGET_P10_FUSION)"
    548   "@
    549    and %3,%1,%0\;andc %3,%3,%2
    550    and %3,%1,%0\;andc %3,%3,%2
    551    and %3,%1,%0\;andc %3,%3,%2
    552    and %4,%1,%0\;andc %3,%4,%2"
    553   [(set_attr "type" "fused_arith_logical")
    554    (set_attr "cost" "6")
    555    (set_attr "length" "8")])
    556 
    557 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    558 ;; scalar andc -> andc
    559 (define_insn "*fuse_andc_andc"
    560   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    561         (and:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    562                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    563                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    564    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    565   "(TARGET_P10_FUSION)"
    566   "@
    567    andc %3,%1,%0\;andc %3,%3,%2
    568    andc %3,%1,%0\;andc %3,%3,%2
    569    andc %3,%1,%0\;andc %3,%3,%2
    570    andc %4,%1,%0\;andc %3,%4,%2"
    571   [(set_attr "type" "fused_arith_logical")
    572    (set_attr "cost" "6")
    573    (set_attr "length" "8")])
    574 
    575 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    576 ;; scalar eqv -> andc
    577 (define_insn "*fuse_eqv_andc"
    578   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    579         (and:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    580                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    581                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    582    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    583   "(TARGET_P10_FUSION)"
    584   "@
    585    eqv %3,%1,%0\;andc %3,%3,%2
    586    eqv %3,%1,%0\;andc %3,%3,%2
    587    eqv %3,%1,%0\;andc %3,%3,%2
    588    eqv %4,%1,%0\;andc %3,%4,%2"
    589   [(set_attr "type" "fused_arith_logical")
    590    (set_attr "cost" "6")
    591    (set_attr "length" "8")])
    592 
    593 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    594 ;; scalar nand -> andc
    595 (define_insn "*fuse_nand_andc"
    596   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    597         (and:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    598                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    599                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    600    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    601   "(TARGET_P10_FUSION)"
    602   "@
    603    nand %3,%1,%0\;andc %3,%3,%2
    604    nand %3,%1,%0\;andc %3,%3,%2
    605    nand %3,%1,%0\;andc %3,%3,%2
    606    nand %4,%1,%0\;andc %3,%4,%2"
    607   [(set_attr "type" "fused_arith_logical")
    608    (set_attr "cost" "6")
    609    (set_attr "length" "8")])
    610 
    611 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    612 ;; scalar nor -> andc
    613 (define_insn "*fuse_nor_andc"
    614   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    615         (and:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    616                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    617                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    618    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    619   "(TARGET_P10_FUSION)"
    620   "@
    621    nor %3,%1,%0\;andc %3,%3,%2
    622    nor %3,%1,%0\;andc %3,%3,%2
    623    nor %3,%1,%0\;andc %3,%3,%2
    624    nor %4,%1,%0\;andc %3,%4,%2"
    625   [(set_attr "type" "fused_arith_logical")
    626    (set_attr "cost" "6")
    627    (set_attr "length" "8")])
    628 
    629 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    630 ;; scalar or -> andc
    631 (define_insn "*fuse_or_andc"
    632   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    633         (and:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    634                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    635                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    636    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    637   "(TARGET_P10_FUSION)"
    638   "@
    639    or %3,%1,%0\;andc %3,%3,%2
    640    or %3,%1,%0\;andc %3,%3,%2
    641    or %3,%1,%0\;andc %3,%3,%2
    642    or %4,%1,%0\;andc %3,%4,%2"
    643   [(set_attr "type" "fused_arith_logical")
    644    (set_attr "cost" "6")
    645    (set_attr "length" "8")])
    646 
    647 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    648 ;; scalar orc -> andc
    649 (define_insn "*fuse_orc_andc"
    650   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    651         (and:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    652                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    653                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    654    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    655   "(TARGET_P10_FUSION)"
    656   "@
    657    orc %3,%1,%0\;andc %3,%3,%2
    658    orc %3,%1,%0\;andc %3,%3,%2
    659    orc %3,%1,%0\;andc %3,%3,%2
    660    orc %4,%1,%0\;andc %3,%4,%2"
    661   [(set_attr "type" "fused_arith_logical")
    662    (set_attr "cost" "6")
    663    (set_attr "length" "8")])
    664 
    665 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    666 ;; scalar xor -> andc
    667 (define_insn "*fuse_xor_andc"
    668   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    669         (and:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    670                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    671                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    672    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    673   "(TARGET_P10_FUSION)"
    674   "@
    675    xor %3,%1,%0\;andc %3,%3,%2
    676    xor %3,%1,%0\;andc %3,%3,%2
    677    xor %3,%1,%0\;andc %3,%3,%2
    678    xor %4,%1,%0\;andc %3,%4,%2"
    679   [(set_attr "type" "fused_arith_logical")
    680    (set_attr "cost" "6")
    681    (set_attr "length" "8")])
    682 
    683 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    684 ;; scalar and -> eqv
    685 (define_insn "*fuse_and_eqv"
    686   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    687         (not:GPR (xor:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    688                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    689                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    690    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    691   "(TARGET_P10_FUSION)"
    692   "@
    693    and %3,%1,%0\;eqv %3,%3,%2
    694    and %3,%1,%0\;eqv %3,%3,%2
    695    and %3,%1,%0\;eqv %3,%3,%2
    696    and %4,%1,%0\;eqv %3,%4,%2"
    697   [(set_attr "type" "fused_arith_logical")
    698    (set_attr "cost" "6")
    699    (set_attr "length" "8")])
    700 
    701 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    702 ;; scalar andc -> eqv
    703 (define_insn "*fuse_andc_eqv"
    704   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    705         (not:GPR (xor:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    706                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    707                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    708    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    709   "(TARGET_P10_FUSION)"
    710   "@
    711    andc %3,%1,%0\;eqv %3,%3,%2
    712    andc %3,%1,%0\;eqv %3,%3,%2
    713    andc %3,%1,%0\;eqv %3,%3,%2
    714    andc %4,%1,%0\;eqv %3,%4,%2"
    715   [(set_attr "type" "fused_arith_logical")
    716    (set_attr "cost" "6")
    717    (set_attr "length" "8")])
    718 
    719 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    720 ;; scalar eqv -> eqv
    721 (define_insn "*fuse_eqv_eqv"
    722   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    723         (not:GPR (xor:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    724                           (match_operand:GPR 1 "gpc_reg_operand" "%r,r,r,r")))
    725                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    726    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    727   "(TARGET_P10_FUSION)"
    728   "@
    729    eqv %3,%1,%0\;eqv %3,%3,%2
    730    eqv %3,%1,%0\;eqv %3,%3,%2
    731    eqv %3,%1,%0\;eqv %3,%3,%2
    732    eqv %4,%1,%0\;eqv %3,%4,%2"
    733   [(set_attr "type" "fused_arith_logical")
    734    (set_attr "cost" "6")
    735    (set_attr "length" "8")])
    736 
    737 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    738 ;; scalar nand -> eqv
    739 (define_insn "*fuse_nand_eqv"
    740   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    741         (not:GPR (xor:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    742                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    743                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    744    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    745   "(TARGET_P10_FUSION)"
    746   "@
    747    nand %3,%1,%0\;eqv %3,%3,%2
    748    nand %3,%1,%0\;eqv %3,%3,%2
    749    nand %3,%1,%0\;eqv %3,%3,%2
    750    nand %4,%1,%0\;eqv %3,%4,%2"
    751   [(set_attr "type" "fused_arith_logical")
    752    (set_attr "cost" "6")
    753    (set_attr "length" "8")])
    754 
    755 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    756 ;; scalar nor -> eqv
    757 (define_insn "*fuse_nor_eqv"
    758   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    759         (not:GPR (xor:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    760                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    761                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    762    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    763   "(TARGET_P10_FUSION)"
    764   "@
    765    nor %3,%1,%0\;eqv %3,%3,%2
    766    nor %3,%1,%0\;eqv %3,%3,%2
    767    nor %3,%1,%0\;eqv %3,%3,%2
    768    nor %4,%1,%0\;eqv %3,%4,%2"
    769   [(set_attr "type" "fused_arith_logical")
    770    (set_attr "cost" "6")
    771    (set_attr "length" "8")])
    772 
    773 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    774 ;; scalar or -> eqv
    775 (define_insn "*fuse_or_eqv"
    776   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    777         (not:GPR (xor:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    778                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    779                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    780    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    781   "(TARGET_P10_FUSION)"
    782   "@
    783    or %3,%1,%0\;eqv %3,%3,%2
    784    or %3,%1,%0\;eqv %3,%3,%2
    785    or %3,%1,%0\;eqv %3,%3,%2
    786    or %4,%1,%0\;eqv %3,%4,%2"
    787   [(set_attr "type" "fused_arith_logical")
    788    (set_attr "cost" "6")
    789    (set_attr "length" "8")])
    790 
    791 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    792 ;; scalar orc -> eqv
    793 (define_insn "*fuse_orc_eqv"
    794   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    795         (not:GPR (xor:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    796                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    797                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    798    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    799   "(TARGET_P10_FUSION)"
    800   "@
    801    orc %3,%1,%0\;eqv %3,%3,%2
    802    orc %3,%1,%0\;eqv %3,%3,%2
    803    orc %3,%1,%0\;eqv %3,%3,%2
    804    orc %4,%1,%0\;eqv %3,%4,%2"
    805   [(set_attr "type" "fused_arith_logical")
    806    (set_attr "cost" "6")
    807    (set_attr "length" "8")])
    808 
    809 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    810 ;; scalar xor -> eqv
    811 (define_insn "*fuse_xor_eqv"
    812   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    813         (not:GPR (xor:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    814                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
    815                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    816    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    817   "(TARGET_P10_FUSION)"
    818   "@
    819    xor %3,%1,%0\;eqv %3,%3,%2
    820    xor %3,%1,%0\;eqv %3,%3,%2
    821    xor %3,%1,%0\;eqv %3,%3,%2
    822    xor %4,%1,%0\;eqv %3,%4,%2"
    823   [(set_attr "type" "fused_arith_logical")
    824    (set_attr "cost" "6")
    825    (set_attr "length" "8")])
    826 
    827 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    828 ;; scalar and -> nand
    829 (define_insn "*fuse_and_nand"
    830   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    831         (ior:GPR (not:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    832                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    833                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    834    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    835   "(TARGET_P10_FUSION)"
    836   "@
    837    and %3,%1,%0\;nand %3,%3,%2
    838    and %3,%1,%0\;nand %3,%3,%2
    839    and %3,%1,%0\;nand %3,%3,%2
    840    and %4,%1,%0\;nand %3,%4,%2"
    841   [(set_attr "type" "fused_arith_logical")
    842    (set_attr "cost" "6")
    843    (set_attr "length" "8")])
    844 
    845 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    846 ;; scalar andc -> nand
    847 (define_insn "*fuse_andc_nand"
    848   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    849         (ior:GPR (not:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    850                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    851                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    852    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    853   "(TARGET_P10_FUSION)"
    854   "@
    855    andc %3,%1,%0\;nand %3,%3,%2
    856    andc %3,%1,%0\;nand %3,%3,%2
    857    andc %3,%1,%0\;nand %3,%3,%2
    858    andc %4,%1,%0\;nand %3,%4,%2"
    859   [(set_attr "type" "fused_arith_logical")
    860    (set_attr "cost" "6")
    861    (set_attr "length" "8")])
    862 
    863 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    864 ;; scalar eqv -> nand
    865 (define_insn "*fuse_eqv_nand"
    866   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    867         (ior:GPR (not:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    868                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
    869                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    870    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    871   "(TARGET_P10_FUSION)"
    872   "@
    873    eqv %3,%1,%0\;nand %3,%3,%2
    874    eqv %3,%1,%0\;nand %3,%3,%2
    875    eqv %3,%1,%0\;nand %3,%3,%2
    876    eqv %4,%1,%0\;nand %3,%4,%2"
    877   [(set_attr "type" "fused_arith_logical")
    878    (set_attr "cost" "6")
    879    (set_attr "length" "8")])
    880 
    881 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    882 ;; scalar nand -> nand
    883 (define_insn "*fuse_nand_nand"
    884   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    885         (ior:GPR (not:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    886                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
    887                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    888    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    889   "(TARGET_P10_FUSION)"
    890   "@
    891    nand %3,%1,%0\;nand %3,%3,%2
    892    nand %3,%1,%0\;nand %3,%3,%2
    893    nand %3,%1,%0\;nand %3,%3,%2
    894    nand %4,%1,%0\;nand %3,%4,%2"
    895   [(set_attr "type" "fused_arith_logical")
    896    (set_attr "cost" "6")
    897    (set_attr "length" "8")])
    898 
    899 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    900 ;; scalar nor -> nand
    901 (define_insn "*fuse_nor_nand"
    902   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    903         (ior:GPR (not:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    904                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
    905                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    906    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    907   "(TARGET_P10_FUSION)"
    908   "@
    909    nor %3,%1,%0\;nand %3,%3,%2
    910    nor %3,%1,%0\;nand %3,%3,%2
    911    nor %3,%1,%0\;nand %3,%3,%2
    912    nor %4,%1,%0\;nand %3,%4,%2"
    913   [(set_attr "type" "fused_arith_logical")
    914    (set_attr "cost" "6")
    915    (set_attr "length" "8")])
    916 
    917 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    918 ;; scalar or -> nand
    919 (define_insn "*fuse_or_nand"
    920   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    921         (ior:GPR (not:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    922                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    923                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    924    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    925   "(TARGET_P10_FUSION)"
    926   "@
    927    or %3,%1,%0\;nand %3,%3,%2
    928    or %3,%1,%0\;nand %3,%3,%2
    929    or %3,%1,%0\;nand %3,%3,%2
    930    or %4,%1,%0\;nand %3,%4,%2"
    931   [(set_attr "type" "fused_arith_logical")
    932    (set_attr "cost" "6")
    933    (set_attr "length" "8")])
    934 
    935 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    936 ;; scalar orc -> nand
    937 (define_insn "*fuse_orc_nand"
    938   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    939         (ior:GPR (not:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
    940                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    941                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    942    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    943   "(TARGET_P10_FUSION)"
    944   "@
    945    orc %3,%1,%0\;nand %3,%3,%2
    946    orc %3,%1,%0\;nand %3,%3,%2
    947    orc %3,%1,%0\;nand %3,%3,%2
    948    orc %4,%1,%0\;nand %3,%4,%2"
    949   [(set_attr "type" "fused_arith_logical")
    950    (set_attr "cost" "6")
    951    (set_attr "length" "8")])
    952 
    953 ;; logical-logical fusion pattern generated by gen_logical_addsubf
    954 ;; scalar xor -> nand
    955 (define_insn "*fuse_xor_nand"
    956   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    957         (ior:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    958                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    959                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    960    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    961   "(TARGET_P10_FUSION)"
    962   "@
    963    xor %3,%1,%0\;nand %3,%3,%2
    964    xor %3,%1,%0\;nand %3,%3,%2
    965    xor %3,%1,%0\;nand %3,%3,%2
    966    xor %4,%1,%0\;nand %3,%4,%2"
    967   [(set_attr "type" "fused_arith_logical")
    968    (set_attr "cost" "6")
    969    (set_attr "length" "8")])
    970 
    971 ;; add-logical fusion pattern generated by gen_logical_addsubf
    972 ;; scalar add -> nand
    973 (define_insn "*fuse_add_nand"
    974   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    975         (ior:GPR (not:GPR (plus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    976                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    977                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    978    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    979   "(TARGET_P10_FUSION)"
    980   "@
    981    add %3,%1,%0\;nand %3,%3,%2
    982    add %3,%1,%0\;nand %3,%3,%2
    983    add %3,%1,%0\;nand %3,%3,%2
    984    add %4,%1,%0\;nand %3,%4,%2"
    985   [(set_attr "type" "fused_arith_logical")
    986    (set_attr "cost" "6")
    987    (set_attr "length" "8")])
    988 
    989 ;; add-logical fusion pattern generated by gen_logical_addsubf
    990 ;; scalar subf -> nand
    991 (define_insn "*fuse_subf_nand"
    992   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
    993         (ior:GPR (not:GPR (minus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
    994                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
    995                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
    996    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
    997   "(TARGET_P10_FUSION)"
    998   "@
    999    subf %3,%1,%0\;nand %3,%3,%2
   1000    subf %3,%1,%0\;nand %3,%3,%2
   1001    subf %3,%1,%0\;nand %3,%3,%2
   1002    subf %4,%1,%0\;nand %3,%4,%2"
   1003   [(set_attr "type" "fused_arith_logical")
   1004    (set_attr "cost" "6")
   1005    (set_attr "length" "8")])
   1006 
   1007 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1008 ;; scalar and -> nor
   1009 (define_insn "*fuse_and_nor"
   1010   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1011         (and:GPR (not:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1012                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1013                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1014    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1015   "(TARGET_P10_FUSION)"
   1016   "@
   1017    and %3,%1,%0\;nor %3,%3,%2
   1018    and %3,%1,%0\;nor %3,%3,%2
   1019    and %3,%1,%0\;nor %3,%3,%2
   1020    and %4,%1,%0\;nor %3,%4,%2"
   1021   [(set_attr "type" "fused_arith_logical")
   1022    (set_attr "cost" "6")
   1023    (set_attr "length" "8")])
   1024 
   1025 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1026 ;; scalar andc -> nor
   1027 (define_insn "*fuse_andc_nor"
   1028   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1029         (and:GPR (not:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1030                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1031                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1032    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1033   "(TARGET_P10_FUSION)"
   1034   "@
   1035    andc %3,%1,%0\;nor %3,%3,%2
   1036    andc %3,%1,%0\;nor %3,%3,%2
   1037    andc %3,%1,%0\;nor %3,%3,%2
   1038    andc %4,%1,%0\;nor %3,%4,%2"
   1039   [(set_attr "type" "fused_arith_logical")
   1040    (set_attr "cost" "6")
   1041    (set_attr "length" "8")])
   1042 
   1043 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1044 ;; scalar eqv -> nor
   1045 (define_insn "*fuse_eqv_nor"
   1046   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1047         (and:GPR (not:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1048                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
   1049                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1050    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1051   "(TARGET_P10_FUSION)"
   1052   "@
   1053    eqv %3,%1,%0\;nor %3,%3,%2
   1054    eqv %3,%1,%0\;nor %3,%3,%2
   1055    eqv %3,%1,%0\;nor %3,%3,%2
   1056    eqv %4,%1,%0\;nor %3,%4,%2"
   1057   [(set_attr "type" "fused_arith_logical")
   1058    (set_attr "cost" "6")
   1059    (set_attr "length" "8")])
   1060 
   1061 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1062 ;; scalar nand -> nor
   1063 (define_insn "*fuse_nand_nor"
   1064   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1065         (and:GPR (not:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1066                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
   1067                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1068    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1069   "(TARGET_P10_FUSION)"
   1070   "@
   1071    nand %3,%1,%0\;nor %3,%3,%2
   1072    nand %3,%1,%0\;nor %3,%3,%2
   1073    nand %3,%1,%0\;nor %3,%3,%2
   1074    nand %4,%1,%0\;nor %3,%4,%2"
   1075   [(set_attr "type" "fused_arith_logical")
   1076    (set_attr "cost" "6")
   1077    (set_attr "length" "8")])
   1078 
   1079 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1080 ;; scalar nor -> nor
   1081 (define_insn "*fuse_nor_nor"
   1082   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1083         (and:GPR (not:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1084                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
   1085                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1086    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1087   "(TARGET_P10_FUSION)"
   1088   "@
   1089    nor %3,%1,%0\;nor %3,%3,%2
   1090    nor %3,%1,%0\;nor %3,%3,%2
   1091    nor %3,%1,%0\;nor %3,%3,%2
   1092    nor %4,%1,%0\;nor %3,%4,%2"
   1093   [(set_attr "type" "fused_arith_logical")
   1094    (set_attr "cost" "6")
   1095    (set_attr "length" "8")])
   1096 
   1097 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1098 ;; scalar or -> nor
   1099 (define_insn "*fuse_or_nor"
   1100   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1101         (and:GPR (not:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1102                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1103                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1104    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1105   "(TARGET_P10_FUSION)"
   1106   "@
   1107    or %3,%1,%0\;nor %3,%3,%2
   1108    or %3,%1,%0\;nor %3,%3,%2
   1109    or %3,%1,%0\;nor %3,%3,%2
   1110    or %4,%1,%0\;nor %3,%4,%2"
   1111   [(set_attr "type" "fused_arith_logical")
   1112    (set_attr "cost" "6")
   1113    (set_attr "length" "8")])
   1114 
   1115 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1116 ;; scalar orc -> nor
   1117 (define_insn "*fuse_orc_nor"
   1118   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1119         (and:GPR (not:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1120                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1121                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1122    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1123   "(TARGET_P10_FUSION)"
   1124   "@
   1125    orc %3,%1,%0\;nor %3,%3,%2
   1126    orc %3,%1,%0\;nor %3,%3,%2
   1127    orc %3,%1,%0\;nor %3,%3,%2
   1128    orc %4,%1,%0\;nor %3,%4,%2"
   1129   [(set_attr "type" "fused_arith_logical")
   1130    (set_attr "cost" "6")
   1131    (set_attr "length" "8")])
   1132 
   1133 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1134 ;; scalar xor -> nor
   1135 (define_insn "*fuse_xor_nor"
   1136   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1137         (and:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1138                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1139                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1140    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1141   "(TARGET_P10_FUSION)"
   1142   "@
   1143    xor %3,%1,%0\;nor %3,%3,%2
   1144    xor %3,%1,%0\;nor %3,%3,%2
   1145    xor %3,%1,%0\;nor %3,%3,%2
   1146    xor %4,%1,%0\;nor %3,%4,%2"
   1147   [(set_attr "type" "fused_arith_logical")
   1148    (set_attr "cost" "6")
   1149    (set_attr "length" "8")])
   1150 
   1151 ;; add-logical fusion pattern generated by gen_logical_addsubf
   1152 ;; scalar add -> nor
   1153 (define_insn "*fuse_add_nor"
   1154   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1155         (and:GPR (not:GPR (plus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1156                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1157                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1158    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1159   "(TARGET_P10_FUSION)"
   1160   "@
   1161    add %3,%1,%0\;nor %3,%3,%2
   1162    add %3,%1,%0\;nor %3,%3,%2
   1163    add %3,%1,%0\;nor %3,%3,%2
   1164    add %4,%1,%0\;nor %3,%4,%2"
   1165   [(set_attr "type" "fused_arith_logical")
   1166    (set_attr "cost" "6")
   1167    (set_attr "length" "8")])
   1168 
   1169 ;; add-logical fusion pattern generated by gen_logical_addsubf
   1170 ;; scalar subf -> nor
   1171 (define_insn "*fuse_subf_nor"
   1172   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1173         (and:GPR (not:GPR (minus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1174                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1175                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1176    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1177   "(TARGET_P10_FUSION)"
   1178   "@
   1179    subf %3,%1,%0\;nor %3,%3,%2
   1180    subf %3,%1,%0\;nor %3,%3,%2
   1181    subf %3,%1,%0\;nor %3,%3,%2
   1182    subf %4,%1,%0\;nor %3,%4,%2"
   1183   [(set_attr "type" "fused_arith_logical")
   1184    (set_attr "cost" "6")
   1185    (set_attr "length" "8")])
   1186 
   1187 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1188 ;; scalar and -> or
   1189 (define_insn "*fuse_and_or"
   1190   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1191         (ior:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1192                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1193                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1194    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1195   "(TARGET_P10_FUSION)"
   1196   "@
   1197    and %3,%1,%0\;or %3,%3,%2
   1198    and %3,%1,%0\;or %3,%3,%2
   1199    and %3,%1,%0\;or %3,%3,%2
   1200    and %4,%1,%0\;or %3,%4,%2"
   1201   [(set_attr "type" "fused_arith_logical")
   1202    (set_attr "cost" "6")
   1203    (set_attr "length" "8")])
   1204 
   1205 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1206 ;; scalar andc -> or
   1207 (define_insn "*fuse_andc_or"
   1208   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1209         (ior:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1210                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1211                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1212    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1213   "(TARGET_P10_FUSION)"
   1214   "@
   1215    andc %3,%1,%0\;or %3,%3,%2
   1216    andc %3,%1,%0\;or %3,%3,%2
   1217    andc %3,%1,%0\;or %3,%3,%2
   1218    andc %4,%1,%0\;or %3,%4,%2"
   1219   [(set_attr "type" "fused_arith_logical")
   1220    (set_attr "cost" "6")
   1221    (set_attr "length" "8")])
   1222 
   1223 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1224 ;; scalar eqv -> or
   1225 (define_insn "*fuse_eqv_or"
   1226   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1227         (ior:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1228                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1229                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1230    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1231   "(TARGET_P10_FUSION)"
   1232   "@
   1233    eqv %3,%1,%0\;or %3,%3,%2
   1234    eqv %3,%1,%0\;or %3,%3,%2
   1235    eqv %3,%1,%0\;or %3,%3,%2
   1236    eqv %4,%1,%0\;or %3,%4,%2"
   1237   [(set_attr "type" "fused_arith_logical")
   1238    (set_attr "cost" "6")
   1239    (set_attr "length" "8")])
   1240 
   1241 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1242 ;; scalar nand -> or
   1243 (define_insn "*fuse_nand_or"
   1244   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1245         (ior:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1246                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1247                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1248    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1249   "(TARGET_P10_FUSION)"
   1250   "@
   1251    nand %3,%1,%0\;or %3,%3,%2
   1252    nand %3,%1,%0\;or %3,%3,%2
   1253    nand %3,%1,%0\;or %3,%3,%2
   1254    nand %4,%1,%0\;or %3,%4,%2"
   1255   [(set_attr "type" "fused_arith_logical")
   1256    (set_attr "cost" "6")
   1257    (set_attr "length" "8")])
   1258 
   1259 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1260 ;; scalar nor -> or
   1261 (define_insn "*fuse_nor_or"
   1262   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1263         (ior:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1264                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1265                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1266    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1267   "(TARGET_P10_FUSION)"
   1268   "@
   1269    nor %3,%1,%0\;or %3,%3,%2
   1270    nor %3,%1,%0\;or %3,%3,%2
   1271    nor %3,%1,%0\;or %3,%3,%2
   1272    nor %4,%1,%0\;or %3,%4,%2"
   1273   [(set_attr "type" "fused_arith_logical")
   1274    (set_attr "cost" "6")
   1275    (set_attr "length" "8")])
   1276 
   1277 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1278 ;; scalar or -> or
   1279 (define_insn "*fuse_or_or"
   1280   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1281         (ior:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1282                           (match_operand:GPR 1 "gpc_reg_operand" "%r,r,r,r"))
   1283                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1284    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1285   "(TARGET_P10_FUSION)"
   1286   "@
   1287    or %3,%1,%0\;or %3,%3,%2
   1288    or %3,%1,%0\;or %3,%3,%2
   1289    or %3,%1,%0\;or %3,%3,%2
   1290    or %4,%1,%0\;or %3,%4,%2"
   1291   [(set_attr "type" "fused_arith_logical")
   1292    (set_attr "cost" "6")
   1293    (set_attr "length" "8")])
   1294 
   1295 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1296 ;; scalar orc -> or
   1297 (define_insn "*fuse_orc_or"
   1298   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1299         (ior:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1300                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1301                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1302    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1303   "(TARGET_P10_FUSION)"
   1304   "@
   1305    orc %3,%1,%0\;or %3,%3,%2
   1306    orc %3,%1,%0\;or %3,%3,%2
   1307    orc %3,%1,%0\;or %3,%3,%2
   1308    orc %4,%1,%0\;or %3,%4,%2"
   1309   [(set_attr "type" "fused_arith_logical")
   1310    (set_attr "cost" "6")
   1311    (set_attr "length" "8")])
   1312 
   1313 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1314 ;; scalar xor -> or
   1315 (define_insn "*fuse_xor_or"
   1316   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1317         (ior:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1318                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1319                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1320    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1321   "(TARGET_P10_FUSION)"
   1322   "@
   1323    xor %3,%1,%0\;or %3,%3,%2
   1324    xor %3,%1,%0\;or %3,%3,%2
   1325    xor %3,%1,%0\;or %3,%3,%2
   1326    xor %4,%1,%0\;or %3,%4,%2"
   1327   [(set_attr "type" "fused_arith_logical")
   1328    (set_attr "cost" "6")
   1329    (set_attr "length" "8")])
   1330 
   1331 ;; add-logical fusion pattern generated by gen_logical_addsubf
   1332 ;; scalar add -> or
   1333 (define_insn "*fuse_add_or"
   1334   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1335         (ior:GPR (plus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1336                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1337                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1338    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1339   "(TARGET_P10_FUSION)"
   1340   "@
   1341    add %3,%1,%0\;or %3,%3,%2
   1342    add %3,%1,%0\;or %3,%3,%2
   1343    add %3,%1,%0\;or %3,%3,%2
   1344    add %4,%1,%0\;or %3,%4,%2"
   1345   [(set_attr "type" "fused_arith_logical")
   1346    (set_attr "cost" "6")
   1347    (set_attr "length" "8")])
   1348 
   1349 ;; add-logical fusion pattern generated by gen_logical_addsubf
   1350 ;; scalar subf -> or
   1351 (define_insn "*fuse_subf_or"
   1352   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1353         (ior:GPR (minus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1354                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1355                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1356    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1357   "(TARGET_P10_FUSION)"
   1358   "@
   1359    subf %3,%1,%0\;or %3,%3,%2
   1360    subf %3,%1,%0\;or %3,%3,%2
   1361    subf %3,%1,%0\;or %3,%3,%2
   1362    subf %4,%1,%0\;or %3,%4,%2"
   1363   [(set_attr "type" "fused_arith_logical")
   1364    (set_attr "cost" "6")
   1365    (set_attr "length" "8")])
   1366 
   1367 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1368 ;; scalar and -> orc
   1369 (define_insn "*fuse_and_orc"
   1370   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1371         (ior:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1372                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1373                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1374    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1375   "(TARGET_P10_FUSION)"
   1376   "@
   1377    and %3,%1,%0\;orc %3,%3,%2
   1378    and %3,%1,%0\;orc %3,%3,%2
   1379    and %3,%1,%0\;orc %3,%3,%2
   1380    and %4,%1,%0\;orc %3,%4,%2"
   1381   [(set_attr "type" "fused_arith_logical")
   1382    (set_attr "cost" "6")
   1383    (set_attr "length" "8")])
   1384 
   1385 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1386 ;; scalar andc -> orc
   1387 (define_insn "*fuse_andc_orc"
   1388   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1389         (ior:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1390                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1391                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1392    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1393   "(TARGET_P10_FUSION)"
   1394   "@
   1395    andc %3,%1,%0\;orc %3,%3,%2
   1396    andc %3,%1,%0\;orc %3,%3,%2
   1397    andc %3,%1,%0\;orc %3,%3,%2
   1398    andc %4,%1,%0\;orc %3,%4,%2"
   1399   [(set_attr "type" "fused_arith_logical")
   1400    (set_attr "cost" "6")
   1401    (set_attr "length" "8")])
   1402 
   1403 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1404 ;; scalar eqv -> orc
   1405 (define_insn "*fuse_eqv_orc"
   1406   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1407         (ior:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1408                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1409                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1410    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1411   "(TARGET_P10_FUSION)"
   1412   "@
   1413    eqv %3,%1,%0\;orc %3,%3,%2
   1414    eqv %3,%1,%0\;orc %3,%3,%2
   1415    eqv %3,%1,%0\;orc %3,%3,%2
   1416    eqv %4,%1,%0\;orc %3,%4,%2"
   1417   [(set_attr "type" "fused_arith_logical")
   1418    (set_attr "cost" "6")
   1419    (set_attr "length" "8")])
   1420 
   1421 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1422 ;; scalar nand -> orc
   1423 (define_insn "*fuse_nand_orc"
   1424   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1425         (ior:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1426                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1427                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1428    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1429   "(TARGET_P10_FUSION)"
   1430   "@
   1431    nand %3,%1,%0\;orc %3,%3,%2
   1432    nand %3,%1,%0\;orc %3,%3,%2
   1433    nand %3,%1,%0\;orc %3,%3,%2
   1434    nand %4,%1,%0\;orc %3,%4,%2"
   1435   [(set_attr "type" "fused_arith_logical")
   1436    (set_attr "cost" "6")
   1437    (set_attr "length" "8")])
   1438 
   1439 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1440 ;; scalar nor -> orc
   1441 (define_insn "*fuse_nor_orc"
   1442   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1443         (ior:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1444                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1445                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1446    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1447   "(TARGET_P10_FUSION)"
   1448   "@
   1449    nor %3,%1,%0\;orc %3,%3,%2
   1450    nor %3,%1,%0\;orc %3,%3,%2
   1451    nor %3,%1,%0\;orc %3,%3,%2
   1452    nor %4,%1,%0\;orc %3,%4,%2"
   1453   [(set_attr "type" "fused_arith_logical")
   1454    (set_attr "cost" "6")
   1455    (set_attr "length" "8")])
   1456 
   1457 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1458 ;; scalar or -> orc
   1459 (define_insn "*fuse_or_orc"
   1460   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1461         (ior:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1462                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1463                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1464    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1465   "(TARGET_P10_FUSION)"
   1466   "@
   1467    or %3,%1,%0\;orc %3,%3,%2
   1468    or %3,%1,%0\;orc %3,%3,%2
   1469    or %3,%1,%0\;orc %3,%3,%2
   1470    or %4,%1,%0\;orc %3,%4,%2"
   1471   [(set_attr "type" "fused_arith_logical")
   1472    (set_attr "cost" "6")
   1473    (set_attr "length" "8")])
   1474 
   1475 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1476 ;; scalar orc -> orc
   1477 (define_insn "*fuse_orc_orc"
   1478   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1479         (ior:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1480                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1481                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1482    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1483   "(TARGET_P10_FUSION)"
   1484   "@
   1485    orc %3,%1,%0\;orc %3,%3,%2
   1486    orc %3,%1,%0\;orc %3,%3,%2
   1487    orc %3,%1,%0\;orc %3,%3,%2
   1488    orc %4,%1,%0\;orc %3,%4,%2"
   1489   [(set_attr "type" "fused_arith_logical")
   1490    (set_attr "cost" "6")
   1491    (set_attr "length" "8")])
   1492 
   1493 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1494 ;; scalar xor -> orc
   1495 (define_insn "*fuse_xor_orc"
   1496   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1497         (ior:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1498                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1499                  (not:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r"))))
   1500    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1501   "(TARGET_P10_FUSION)"
   1502   "@
   1503    xor %3,%1,%0\;orc %3,%3,%2
   1504    xor %3,%1,%0\;orc %3,%3,%2
   1505    xor %3,%1,%0\;orc %3,%3,%2
   1506    xor %4,%1,%0\;orc %3,%4,%2"
   1507   [(set_attr "type" "fused_arith_logical")
   1508    (set_attr "cost" "6")
   1509    (set_attr "length" "8")])
   1510 
   1511 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1512 ;; scalar and -> xor
   1513 (define_insn "*fuse_and_xor"
   1514   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1515         (xor:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1516                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1517                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1518    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1519   "(TARGET_P10_FUSION)"
   1520   "@
   1521    and %3,%1,%0\;xor %3,%3,%2
   1522    and %3,%1,%0\;xor %3,%3,%2
   1523    and %3,%1,%0\;xor %3,%3,%2
   1524    and %4,%1,%0\;xor %3,%4,%2"
   1525   [(set_attr "type" "fused_arith_logical")
   1526    (set_attr "cost" "6")
   1527    (set_attr "length" "8")])
   1528 
   1529 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1530 ;; scalar andc -> xor
   1531 (define_insn "*fuse_andc_xor"
   1532   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1533         (xor:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1534                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1535                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1536    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1537   "(TARGET_P10_FUSION)"
   1538   "@
   1539    andc %3,%1,%0\;xor %3,%3,%2
   1540    andc %3,%1,%0\;xor %3,%3,%2
   1541    andc %3,%1,%0\;xor %3,%3,%2
   1542    andc %4,%1,%0\;xor %3,%4,%2"
   1543   [(set_attr "type" "fused_arith_logical")
   1544    (set_attr "cost" "6")
   1545    (set_attr "length" "8")])
   1546 
   1547 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1548 ;; scalar eqv -> xor
   1549 (define_insn "*fuse_eqv_xor"
   1550   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1551         (xor:GPR (not:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1552                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1553                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1554    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1555   "(TARGET_P10_FUSION)"
   1556   "@
   1557    eqv %3,%1,%0\;xor %3,%3,%2
   1558    eqv %3,%1,%0\;xor %3,%3,%2
   1559    eqv %3,%1,%0\;xor %3,%3,%2
   1560    eqv %4,%1,%0\;xor %3,%4,%2"
   1561   [(set_attr "type" "fused_arith_logical")
   1562    (set_attr "cost" "6")
   1563    (set_attr "length" "8")])
   1564 
   1565 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1566 ;; scalar nand -> xor
   1567 (define_insn "*fuse_nand_xor"
   1568   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1569         (xor:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1570                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1571                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1572    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1573   "(TARGET_P10_FUSION)"
   1574   "@
   1575    nand %3,%1,%0\;xor %3,%3,%2
   1576    nand %3,%1,%0\;xor %3,%3,%2
   1577    nand %3,%1,%0\;xor %3,%3,%2
   1578    nand %4,%1,%0\;xor %3,%4,%2"
   1579   [(set_attr "type" "fused_arith_logical")
   1580    (set_attr "cost" "6")
   1581    (set_attr "length" "8")])
   1582 
   1583 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1584 ;; scalar nor -> xor
   1585 (define_insn "*fuse_nor_xor"
   1586   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1587         (xor:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1588                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1589                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1590    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1591   "(TARGET_P10_FUSION)"
   1592   "@
   1593    nor %3,%1,%0\;xor %3,%3,%2
   1594    nor %3,%1,%0\;xor %3,%3,%2
   1595    nor %3,%1,%0\;xor %3,%3,%2
   1596    nor %4,%1,%0\;xor %3,%4,%2"
   1597   [(set_attr "type" "fused_arith_logical")
   1598    (set_attr "cost" "6")
   1599    (set_attr "length" "8")])
   1600 
   1601 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1602 ;; scalar or -> xor
   1603 (define_insn "*fuse_or_xor"
   1604   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1605         (xor:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1606                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1607                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1608    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1609   "(TARGET_P10_FUSION)"
   1610   "@
   1611    or %3,%1,%0\;xor %3,%3,%2
   1612    or %3,%1,%0\;xor %3,%3,%2
   1613    or %3,%1,%0\;xor %3,%3,%2
   1614    or %4,%1,%0\;xor %3,%4,%2"
   1615   [(set_attr "type" "fused_arith_logical")
   1616    (set_attr "cost" "6")
   1617    (set_attr "length" "8")])
   1618 
   1619 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1620 ;; scalar orc -> xor
   1621 (define_insn "*fuse_orc_xor"
   1622   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1623         (xor:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1624                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1625                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1626    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1627   "(TARGET_P10_FUSION)"
   1628   "@
   1629    orc %3,%1,%0\;xor %3,%3,%2
   1630    orc %3,%1,%0\;xor %3,%3,%2
   1631    orc %3,%1,%0\;xor %3,%3,%2
   1632    orc %4,%1,%0\;xor %3,%4,%2"
   1633   [(set_attr "type" "fused_arith_logical")
   1634    (set_attr "cost" "6")
   1635    (set_attr "length" "8")])
   1636 
   1637 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1638 ;; scalar xor -> xor
   1639 (define_insn "*fuse_xor_xor"
   1640   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1641         (xor:GPR (xor:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1642                           (match_operand:GPR 1 "gpc_reg_operand" "%r,r,r,r"))
   1643                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1644    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1645   "(TARGET_P10_FUSION)"
   1646   "@
   1647    xor %3,%1,%0\;xor %3,%3,%2
   1648    xor %3,%1,%0\;xor %3,%3,%2
   1649    xor %3,%1,%0\;xor %3,%3,%2
   1650    xor %4,%1,%0\;xor %3,%4,%2"
   1651   [(set_attr "type" "fused_arith_logical")
   1652    (set_attr "cost" "6")
   1653    (set_attr "length" "8")])
   1654 
   1655 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1656 ;; scalar and -> add
   1657 (define_insn "*fuse_and_add"
   1658   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1659         (plus:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1660                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1661                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1662    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1663   "(TARGET_P10_FUSION)"
   1664   "@
   1665    and %3,%1,%0\;add %3,%3,%2
   1666    and %3,%1,%0\;add %3,%3,%2
   1667    and %3,%1,%0\;add %3,%3,%2
   1668    and %4,%1,%0\;add %3,%4,%2"
   1669   [(set_attr "type" "fused_arith_logical")
   1670    (set_attr "cost" "6")
   1671    (set_attr "length" "8")])
   1672 
   1673 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1674 ;; scalar nand -> add
   1675 (define_insn "*fuse_nand_add"
   1676   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1677         (plus:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1678                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1679                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1680    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1681   "(TARGET_P10_FUSION)"
   1682   "@
   1683    nand %3,%1,%0\;add %3,%3,%2
   1684    nand %3,%1,%0\;add %3,%3,%2
   1685    nand %3,%1,%0\;add %3,%3,%2
   1686    nand %4,%1,%0\;add %3,%4,%2"
   1687   [(set_attr "type" "fused_arith_logical")
   1688    (set_attr "cost" "6")
   1689    (set_attr "length" "8")])
   1690 
   1691 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1692 ;; scalar nor -> add
   1693 (define_insn "*fuse_nor_add"
   1694   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1695         (plus:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1696                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1697                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1698    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1699   "(TARGET_P10_FUSION)"
   1700   "@
   1701    nor %3,%1,%0\;add %3,%3,%2
   1702    nor %3,%1,%0\;add %3,%3,%2
   1703    nor %3,%1,%0\;add %3,%3,%2
   1704    nor %4,%1,%0\;add %3,%4,%2"
   1705   [(set_attr "type" "fused_arith_logical")
   1706    (set_attr "cost" "6")
   1707    (set_attr "length" "8")])
   1708 
   1709 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1710 ;; scalar or -> add
   1711 (define_insn "*fuse_or_add"
   1712   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1713         (plus:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1714                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1715                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1716    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1717   "(TARGET_P10_FUSION)"
   1718   "@
   1719    or %3,%1,%0\;add %3,%3,%2
   1720    or %3,%1,%0\;add %3,%3,%2
   1721    or %3,%1,%0\;add %3,%3,%2
   1722    or %4,%1,%0\;add %3,%4,%2"
   1723   [(set_attr "type" "fused_arith_logical")
   1724    (set_attr "cost" "6")
   1725    (set_attr "length" "8")])
   1726 
   1727 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1728 ;; scalar and -> subf
   1729 (define_insn "*fuse_and_subf"
   1730   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1731         (minus:GPR (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1732                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1733                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1734    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1735   "(TARGET_P10_FUSION)"
   1736   "@
   1737    and %3,%1,%0\;subf %3,%2,%3
   1738    and %3,%1,%0\;subf %3,%2,%3
   1739    and %3,%1,%0\;subf %3,%2,%3
   1740    and %4,%1,%0\;subf %3,%2,%4"
   1741   [(set_attr "type" "fused_arith_logical")
   1742    (set_attr "cost" "6")
   1743    (set_attr "length" "8")])
   1744 
   1745 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1746 ;; scalar nand -> subf
   1747 (define_insn "*fuse_nand_subf"
   1748   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1749         (minus:GPR (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1750                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1751                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1752    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1753   "(TARGET_P10_FUSION)"
   1754   "@
   1755    nand %3,%1,%0\;subf %3,%2,%3
   1756    nand %3,%1,%0\;subf %3,%2,%3
   1757    nand %3,%1,%0\;subf %3,%2,%3
   1758    nand %4,%1,%0\;subf %3,%2,%4"
   1759   [(set_attr "type" "fused_arith_logical")
   1760    (set_attr "cost" "6")
   1761    (set_attr "length" "8")])
   1762 
   1763 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1764 ;; scalar nor -> subf
   1765 (define_insn "*fuse_nor_subf"
   1766   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1767         (minus:GPR (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1768                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))
   1769                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1770    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1771   "(TARGET_P10_FUSION)"
   1772   "@
   1773    nor %3,%1,%0\;subf %3,%2,%3
   1774    nor %3,%1,%0\;subf %3,%2,%3
   1775    nor %3,%1,%0\;subf %3,%2,%3
   1776    nor %4,%1,%0\;subf %3,%2,%4"
   1777   [(set_attr "type" "fused_arith_logical")
   1778    (set_attr "cost" "6")
   1779    (set_attr "length" "8")])
   1780 
   1781 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1782 ;; scalar or -> subf
   1783 (define_insn "*fuse_or_subf"
   1784   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1785         (minus:GPR (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1786                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))
   1787                  (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   1788    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1789   "(TARGET_P10_FUSION)"
   1790   "@
   1791    or %3,%1,%0\;subf %3,%2,%3
   1792    or %3,%1,%0\;subf %3,%2,%3
   1793    or %3,%1,%0\;subf %3,%2,%3
   1794    or %4,%1,%0\;subf %3,%2,%4"
   1795   [(set_attr "type" "fused_arith_logical")
   1796    (set_attr "cost" "6")
   1797    (set_attr "length" "8")])
   1798 
   1799 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1800 ;; scalar and -> rsubf
   1801 (define_insn "*fuse_and_rsubf"
   1802   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1803         (minus:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")
   1804                  (and:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1805                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
   1806    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1807   "(TARGET_P10_FUSION)"
   1808   "@
   1809    and %3,%1,%0\;subf %3,%3,%2
   1810    and %3,%1,%0\;subf %3,%3,%2
   1811    and %3,%1,%0\;subf %3,%3,%2
   1812    and %4,%1,%0\;subf %3,%4,%2"
   1813   [(set_attr "type" "fused_arith_logical")
   1814    (set_attr "cost" "6")
   1815    (set_attr "length" "8")])
   1816 
   1817 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1818 ;; scalar nand -> rsubf
   1819 (define_insn "*fuse_nand_rsubf"
   1820   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1821         (minus:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")
   1822                  (ior:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1823                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))))
   1824    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1825   "(TARGET_P10_FUSION)"
   1826   "@
   1827    nand %3,%1,%0\;subf %3,%3,%2
   1828    nand %3,%1,%0\;subf %3,%3,%2
   1829    nand %3,%1,%0\;subf %3,%3,%2
   1830    nand %4,%1,%0\;subf %3,%4,%2"
   1831   [(set_attr "type" "fused_arith_logical")
   1832    (set_attr "cost" "6")
   1833    (set_attr "length" "8")])
   1834 
   1835 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1836 ;; scalar nor -> rsubf
   1837 (define_insn "*fuse_nor_rsubf"
   1838   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1839         (minus:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")
   1840                  (and:GPR (not:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r"))
   1841                           (not:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r")))))
   1842    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1843   "(TARGET_P10_FUSION)"
   1844   "@
   1845    nor %3,%1,%0\;subf %3,%3,%2
   1846    nor %3,%1,%0\;subf %3,%3,%2
   1847    nor %3,%1,%0\;subf %3,%3,%2
   1848    nor %4,%1,%0\;subf %3,%4,%2"
   1849   [(set_attr "type" "fused_arith_logical")
   1850    (set_attr "cost" "6")
   1851    (set_attr "length" "8")])
   1852 
   1853 ;; logical-add fusion pattern generated by gen_logical_addsubf
   1854 ;; scalar or -> rsubf
   1855 (define_insn "*fuse_or_rsubf"
   1856   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   1857         (minus:GPR (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")
   1858                  (ior:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   1859                           (match_operand:GPR 1 "gpc_reg_operand" "r,r,r,r"))))
   1860    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   1861   "(TARGET_P10_FUSION)"
   1862   "@
   1863    or %3,%1,%0\;subf %3,%3,%2
   1864    or %3,%1,%0\;subf %3,%3,%2
   1865    or %3,%1,%0\;subf %3,%3,%2
   1866    or %4,%1,%0\;subf %3,%4,%2"
   1867   [(set_attr "type" "fused_arith_logical")
   1868    (set_attr "cost" "6")
   1869    (set_attr "length" "8")])
   1870 
   1871 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1872 ;; vector vand -> vand
   1873 (define_insn "*fuse_vand_vand"
   1874   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1875         (and:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   1876                           (match_operand:VM 1 "altivec_register_operand" "%v,v,v,v"))
   1877                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1878    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1879   "(TARGET_P10_FUSION)"
   1880   "@
   1881    vand %3,%1,%0\;vand %3,%3,%2
   1882    vand %3,%1,%0\;vand %3,%3,%2
   1883    vand %3,%1,%0\;vand %3,%3,%2
   1884    vand %4,%1,%0\;vand %3,%4,%2"
   1885   [(set_attr "type" "fused_vector")
   1886    (set_attr "cost" "6")
   1887    (set_attr "length" "8")])
   1888 
   1889 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1890 ;; vector vandc -> vand
   1891 (define_insn "*fuse_vandc_vand"
   1892   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1893         (and:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   1894                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   1895                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1896    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1897   "(TARGET_P10_FUSION)"
   1898   "@
   1899    vandc %3,%1,%0\;vand %3,%3,%2
   1900    vandc %3,%1,%0\;vand %3,%3,%2
   1901    vandc %3,%1,%0\;vand %3,%3,%2
   1902    vandc %4,%1,%0\;vand %3,%4,%2"
   1903   [(set_attr "type" "fused_vector")
   1904    (set_attr "cost" "6")
   1905    (set_attr "length" "8")])
   1906 
   1907 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1908 ;; vector veqv -> vand
   1909 (define_insn "*fuse_veqv_vand"
   1910   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1911         (and:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   1912                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   1913                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1914    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1915   "(TARGET_P10_FUSION)"
   1916   "@
   1917    veqv %3,%1,%0\;vand %3,%3,%2
   1918    veqv %3,%1,%0\;vand %3,%3,%2
   1919    veqv %3,%1,%0\;vand %3,%3,%2
   1920    veqv %4,%1,%0\;vand %3,%4,%2"
   1921   [(set_attr "type" "fused_vector")
   1922    (set_attr "cost" "6")
   1923    (set_attr "length" "8")])
   1924 
   1925 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1926 ;; vector vnand -> vand
   1927 (define_insn "*fuse_vnand_vand"
   1928   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1929         (and:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   1930                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   1931                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1932    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1933   "(TARGET_P10_FUSION)"
   1934   "@
   1935    vnand %3,%1,%0\;vand %3,%3,%2
   1936    vnand %3,%1,%0\;vand %3,%3,%2
   1937    vnand %3,%1,%0\;vand %3,%3,%2
   1938    vnand %4,%1,%0\;vand %3,%4,%2"
   1939   [(set_attr "type" "fused_vector")
   1940    (set_attr "cost" "6")
   1941    (set_attr "length" "8")])
   1942 
   1943 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1944 ;; vector vnor -> vand
   1945 (define_insn "*fuse_vnor_vand"
   1946   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1947         (and:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   1948                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   1949                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1950    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1951   "(TARGET_P10_FUSION)"
   1952   "@
   1953    vnor %3,%1,%0\;vand %3,%3,%2
   1954    vnor %3,%1,%0\;vand %3,%3,%2
   1955    vnor %3,%1,%0\;vand %3,%3,%2
   1956    vnor %4,%1,%0\;vand %3,%4,%2"
   1957   [(set_attr "type" "fused_vector")
   1958    (set_attr "cost" "6")
   1959    (set_attr "length" "8")])
   1960 
   1961 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1962 ;; vector vor -> vand
   1963 (define_insn "*fuse_vor_vand"
   1964   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1965         (and:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   1966                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   1967                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1968    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1969   "(TARGET_P10_FUSION)"
   1970   "@
   1971    vor %3,%1,%0\;vand %3,%3,%2
   1972    vor %3,%1,%0\;vand %3,%3,%2
   1973    vor %3,%1,%0\;vand %3,%3,%2
   1974    vor %4,%1,%0\;vand %3,%4,%2"
   1975   [(set_attr "type" "fused_vector")
   1976    (set_attr "cost" "6")
   1977    (set_attr "length" "8")])
   1978 
   1979 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1980 ;; vector vorc -> vand
   1981 (define_insn "*fuse_vorc_vand"
   1982   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   1983         (and:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   1984                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   1985                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   1986    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   1987   "(TARGET_P10_FUSION)"
   1988   "@
   1989    vorc %3,%1,%0\;vand %3,%3,%2
   1990    vorc %3,%1,%0\;vand %3,%3,%2
   1991    vorc %3,%1,%0\;vand %3,%3,%2
   1992    vorc %4,%1,%0\;vand %3,%4,%2"
   1993   [(set_attr "type" "fused_vector")
   1994    (set_attr "cost" "6")
   1995    (set_attr "length" "8")])
   1996 
   1997 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   1998 ;; vector vxor -> vand
   1999 (define_insn "*fuse_vxor_vand"
   2000   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2001         (and:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2002                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2003                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2004    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2005   "(TARGET_P10_FUSION)"
   2006   "@
   2007    vxor %3,%1,%0\;vand %3,%3,%2
   2008    vxor %3,%1,%0\;vand %3,%3,%2
   2009    vxor %3,%1,%0\;vand %3,%3,%2
   2010    vxor %4,%1,%0\;vand %3,%4,%2"
   2011   [(set_attr "type" "fused_vector")
   2012    (set_attr "cost" "6")
   2013    (set_attr "length" "8")])
   2014 
   2015 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2016 ;; vector vand -> vandc
   2017 (define_insn "*fuse_vand_vandc"
   2018   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2019         (and:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2020                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2021                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2022    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2023   "(TARGET_P10_FUSION)"
   2024   "@
   2025    vand %3,%1,%0\;vandc %3,%3,%2
   2026    vand %3,%1,%0\;vandc %3,%3,%2
   2027    vand %3,%1,%0\;vandc %3,%3,%2
   2028    vand %4,%1,%0\;vandc %3,%4,%2"
   2029   [(set_attr "type" "fused_vector")
   2030    (set_attr "cost" "6")
   2031    (set_attr "length" "8")])
   2032 
   2033 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2034 ;; vector vandc -> vandc
   2035 (define_insn "*fuse_vandc_vandc"
   2036   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2037         (and:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2038                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2039                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2040    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2041   "(TARGET_P10_FUSION)"
   2042   "@
   2043    vandc %3,%1,%0\;vandc %3,%3,%2
   2044    vandc %3,%1,%0\;vandc %3,%3,%2
   2045    vandc %3,%1,%0\;vandc %3,%3,%2
   2046    vandc %4,%1,%0\;vandc %3,%4,%2"
   2047   [(set_attr "type" "fused_vector")
   2048    (set_attr "cost" "6")
   2049    (set_attr "length" "8")])
   2050 
   2051 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2052 ;; vector veqv -> vandc
   2053 (define_insn "*fuse_veqv_vandc"
   2054   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2055         (and:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2056                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2057                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2058    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2059   "(TARGET_P10_FUSION)"
   2060   "@
   2061    veqv %3,%1,%0\;vandc %3,%3,%2
   2062    veqv %3,%1,%0\;vandc %3,%3,%2
   2063    veqv %3,%1,%0\;vandc %3,%3,%2
   2064    veqv %4,%1,%0\;vandc %3,%4,%2"
   2065   [(set_attr "type" "fused_vector")
   2066    (set_attr "cost" "6")
   2067    (set_attr "length" "8")])
   2068 
   2069 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2070 ;; vector vnand -> vandc
   2071 (define_insn "*fuse_vnand_vandc"
   2072   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2073         (and:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2074                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2075                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2076    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2077   "(TARGET_P10_FUSION)"
   2078   "@
   2079    vnand %3,%1,%0\;vandc %3,%3,%2
   2080    vnand %3,%1,%0\;vandc %3,%3,%2
   2081    vnand %3,%1,%0\;vandc %3,%3,%2
   2082    vnand %4,%1,%0\;vandc %3,%4,%2"
   2083   [(set_attr "type" "fused_vector")
   2084    (set_attr "cost" "6")
   2085    (set_attr "length" "8")])
   2086 
   2087 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2088 ;; vector vnor -> vandc
   2089 (define_insn "*fuse_vnor_vandc"
   2090   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2091         (and:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2092                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2093                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2094    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2095   "(TARGET_P10_FUSION)"
   2096   "@
   2097    vnor %3,%1,%0\;vandc %3,%3,%2
   2098    vnor %3,%1,%0\;vandc %3,%3,%2
   2099    vnor %3,%1,%0\;vandc %3,%3,%2
   2100    vnor %4,%1,%0\;vandc %3,%4,%2"
   2101   [(set_attr "type" "fused_vector")
   2102    (set_attr "cost" "6")
   2103    (set_attr "length" "8")])
   2104 
   2105 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2106 ;; vector vor -> vandc
   2107 (define_insn "*fuse_vor_vandc"
   2108   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2109         (and:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2110                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2111                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2112    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2113   "(TARGET_P10_FUSION)"
   2114   "@
   2115    vor %3,%1,%0\;vandc %3,%3,%2
   2116    vor %3,%1,%0\;vandc %3,%3,%2
   2117    vor %3,%1,%0\;vandc %3,%3,%2
   2118    vor %4,%1,%0\;vandc %3,%4,%2"
   2119   [(set_attr "type" "fused_vector")
   2120    (set_attr "cost" "6")
   2121    (set_attr "length" "8")])
   2122 
   2123 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2124 ;; vector vorc -> vandc
   2125 (define_insn "*fuse_vorc_vandc"
   2126   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2127         (and:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2128                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2129                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2130    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2131   "(TARGET_P10_FUSION)"
   2132   "@
   2133    vorc %3,%1,%0\;vandc %3,%3,%2
   2134    vorc %3,%1,%0\;vandc %3,%3,%2
   2135    vorc %3,%1,%0\;vandc %3,%3,%2
   2136    vorc %4,%1,%0\;vandc %3,%4,%2"
   2137   [(set_attr "type" "fused_vector")
   2138    (set_attr "cost" "6")
   2139    (set_attr "length" "8")])
   2140 
   2141 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2142 ;; vector vxor -> vandc
   2143 (define_insn "*fuse_vxor_vandc"
   2144   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2145         (and:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2146                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2147                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2148    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2149   "(TARGET_P10_FUSION)"
   2150   "@
   2151    vxor %3,%1,%0\;vandc %3,%3,%2
   2152    vxor %3,%1,%0\;vandc %3,%3,%2
   2153    vxor %3,%1,%0\;vandc %3,%3,%2
   2154    vxor %4,%1,%0\;vandc %3,%4,%2"
   2155   [(set_attr "type" "fused_vector")
   2156    (set_attr "cost" "6")
   2157    (set_attr "length" "8")])
   2158 
   2159 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2160 ;; vector vand -> veqv
   2161 (define_insn "*fuse_vand_veqv"
   2162   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2163         (not:VM (xor:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2164                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2165                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2166    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2167   "(TARGET_P10_FUSION)"
   2168   "@
   2169    vand %3,%1,%0\;veqv %3,%3,%2
   2170    vand %3,%1,%0\;veqv %3,%3,%2
   2171    vand %3,%1,%0\;veqv %3,%3,%2
   2172    vand %4,%1,%0\;veqv %3,%4,%2"
   2173   [(set_attr "type" "fused_vector")
   2174    (set_attr "cost" "6")
   2175    (set_attr "length" "8")])
   2176 
   2177 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2178 ;; vector vandc -> veqv
   2179 (define_insn "*fuse_vandc_veqv"
   2180   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2181         (not:VM (xor:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2182                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2183                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2184    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2185   "(TARGET_P10_FUSION)"
   2186   "@
   2187    vandc %3,%1,%0\;veqv %3,%3,%2
   2188    vandc %3,%1,%0\;veqv %3,%3,%2
   2189    vandc %3,%1,%0\;veqv %3,%3,%2
   2190    vandc %4,%1,%0\;veqv %3,%4,%2"
   2191   [(set_attr "type" "fused_vector")
   2192    (set_attr "cost" "6")
   2193    (set_attr "length" "8")])
   2194 
   2195 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2196 ;; vector veqv -> veqv
   2197 (define_insn "*fuse_veqv_veqv"
   2198   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2199         (not:VM (xor:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2200                           (match_operand:VM 1 "altivec_register_operand" "%v,v,v,v")))
   2201                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2202    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2203   "(TARGET_P10_FUSION)"
   2204   "@
   2205    veqv %3,%1,%0\;veqv %3,%3,%2
   2206    veqv %3,%1,%0\;veqv %3,%3,%2
   2207    veqv %3,%1,%0\;veqv %3,%3,%2
   2208    veqv %4,%1,%0\;veqv %3,%4,%2"
   2209   [(set_attr "type" "fused_vector")
   2210    (set_attr "cost" "6")
   2211    (set_attr "length" "8")])
   2212 
   2213 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2214 ;; vector vnand -> veqv
   2215 (define_insn "*fuse_vnand_veqv"
   2216   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2217         (not:VM (xor:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2218                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2219                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2220    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2221   "(TARGET_P10_FUSION)"
   2222   "@
   2223    vnand %3,%1,%0\;veqv %3,%3,%2
   2224    vnand %3,%1,%0\;veqv %3,%3,%2
   2225    vnand %3,%1,%0\;veqv %3,%3,%2
   2226    vnand %4,%1,%0\;veqv %3,%4,%2"
   2227   [(set_attr "type" "fused_vector")
   2228    (set_attr "cost" "6")
   2229    (set_attr "length" "8")])
   2230 
   2231 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2232 ;; vector vnor -> veqv
   2233 (define_insn "*fuse_vnor_veqv"
   2234   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2235         (not:VM (xor:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2236                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2237                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2238    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2239   "(TARGET_P10_FUSION)"
   2240   "@
   2241    vnor %3,%1,%0\;veqv %3,%3,%2
   2242    vnor %3,%1,%0\;veqv %3,%3,%2
   2243    vnor %3,%1,%0\;veqv %3,%3,%2
   2244    vnor %4,%1,%0\;veqv %3,%4,%2"
   2245   [(set_attr "type" "fused_vector")
   2246    (set_attr "cost" "6")
   2247    (set_attr "length" "8")])
   2248 
   2249 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2250 ;; vector vor -> veqv
   2251 (define_insn "*fuse_vor_veqv"
   2252   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2253         (not:VM (xor:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2254                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2255                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2256    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2257   "(TARGET_P10_FUSION)"
   2258   "@
   2259    vor %3,%1,%0\;veqv %3,%3,%2
   2260    vor %3,%1,%0\;veqv %3,%3,%2
   2261    vor %3,%1,%0\;veqv %3,%3,%2
   2262    vor %4,%1,%0\;veqv %3,%4,%2"
   2263   [(set_attr "type" "fused_vector")
   2264    (set_attr "cost" "6")
   2265    (set_attr "length" "8")])
   2266 
   2267 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2268 ;; vector vorc -> veqv
   2269 (define_insn "*fuse_vorc_veqv"
   2270   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2271         (not:VM (xor:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2272                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2273                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2274    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2275   "(TARGET_P10_FUSION)"
   2276   "@
   2277    vorc %3,%1,%0\;veqv %3,%3,%2
   2278    vorc %3,%1,%0\;veqv %3,%3,%2
   2279    vorc %3,%1,%0\;veqv %3,%3,%2
   2280    vorc %4,%1,%0\;veqv %3,%4,%2"
   2281   [(set_attr "type" "fused_vector")
   2282    (set_attr "cost" "6")
   2283    (set_attr "length" "8")])
   2284 
   2285 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2286 ;; vector vxor -> veqv
   2287 (define_insn "*fuse_vxor_veqv"
   2288   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2289         (not:VM (xor:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2290                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2291                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2292    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2293   "(TARGET_P10_FUSION)"
   2294   "@
   2295    vxor %3,%1,%0\;veqv %3,%3,%2
   2296    vxor %3,%1,%0\;veqv %3,%3,%2
   2297    vxor %3,%1,%0\;veqv %3,%3,%2
   2298    vxor %4,%1,%0\;veqv %3,%4,%2"
   2299   [(set_attr "type" "fused_vector")
   2300    (set_attr "cost" "6")
   2301    (set_attr "length" "8")])
   2302 
   2303 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2304 ;; vector vand -> vnand
   2305 (define_insn "*fuse_vand_vnand"
   2306   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2307         (ior:VM (not:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2308                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2309                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2310    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2311   "(TARGET_P10_FUSION)"
   2312   "@
   2313    vand %3,%1,%0\;vnand %3,%3,%2
   2314    vand %3,%1,%0\;vnand %3,%3,%2
   2315    vand %3,%1,%0\;vnand %3,%3,%2
   2316    vand %4,%1,%0\;vnand %3,%4,%2"
   2317   [(set_attr "type" "fused_vector")
   2318    (set_attr "cost" "6")
   2319    (set_attr "length" "8")])
   2320 
   2321 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2322 ;; vector vandc -> vnand
   2323 (define_insn "*fuse_vandc_vnand"
   2324   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2325         (ior:VM (not:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2326                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2327                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2328    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2329   "(TARGET_P10_FUSION)"
   2330   "@
   2331    vandc %3,%1,%0\;vnand %3,%3,%2
   2332    vandc %3,%1,%0\;vnand %3,%3,%2
   2333    vandc %3,%1,%0\;vnand %3,%3,%2
   2334    vandc %4,%1,%0\;vnand %3,%4,%2"
   2335   [(set_attr "type" "fused_vector")
   2336    (set_attr "cost" "6")
   2337    (set_attr "length" "8")])
   2338 
   2339 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2340 ;; vector veqv -> vnand
   2341 (define_insn "*fuse_veqv_vnand"
   2342   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2343         (ior:VM (not:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2344                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2345                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2346    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2347   "(TARGET_P10_FUSION)"
   2348   "@
   2349    veqv %3,%1,%0\;vnand %3,%3,%2
   2350    veqv %3,%1,%0\;vnand %3,%3,%2
   2351    veqv %3,%1,%0\;vnand %3,%3,%2
   2352    veqv %4,%1,%0\;vnand %3,%4,%2"
   2353   [(set_attr "type" "fused_vector")
   2354    (set_attr "cost" "6")
   2355    (set_attr "length" "8")])
   2356 
   2357 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2358 ;; vector vnand -> vnand
   2359 (define_insn "*fuse_vnand_vnand"
   2360   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2361         (ior:VM (not:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2362                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2363                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2364    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2365   "(TARGET_P10_FUSION)"
   2366   "@
   2367    vnand %3,%1,%0\;vnand %3,%3,%2
   2368    vnand %3,%1,%0\;vnand %3,%3,%2
   2369    vnand %3,%1,%0\;vnand %3,%3,%2
   2370    vnand %4,%1,%0\;vnand %3,%4,%2"
   2371   [(set_attr "type" "fused_vector")
   2372    (set_attr "cost" "6")
   2373    (set_attr "length" "8")])
   2374 
   2375 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2376 ;; vector vnor -> vnand
   2377 (define_insn "*fuse_vnor_vnand"
   2378   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2379         (ior:VM (not:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2380                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2381                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2382    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2383   "(TARGET_P10_FUSION)"
   2384   "@
   2385    vnor %3,%1,%0\;vnand %3,%3,%2
   2386    vnor %3,%1,%0\;vnand %3,%3,%2
   2387    vnor %3,%1,%0\;vnand %3,%3,%2
   2388    vnor %4,%1,%0\;vnand %3,%4,%2"
   2389   [(set_attr "type" "fused_vector")
   2390    (set_attr "cost" "6")
   2391    (set_attr "length" "8")])
   2392 
   2393 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2394 ;; vector vor -> vnand
   2395 (define_insn "*fuse_vor_vnand"
   2396   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2397         (ior:VM (not:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2398                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2399                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2400    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2401   "(TARGET_P10_FUSION)"
   2402   "@
   2403    vor %3,%1,%0\;vnand %3,%3,%2
   2404    vor %3,%1,%0\;vnand %3,%3,%2
   2405    vor %3,%1,%0\;vnand %3,%3,%2
   2406    vor %4,%1,%0\;vnand %3,%4,%2"
   2407   [(set_attr "type" "fused_vector")
   2408    (set_attr "cost" "6")
   2409    (set_attr "length" "8")])
   2410 
   2411 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2412 ;; vector vorc -> vnand
   2413 (define_insn "*fuse_vorc_vnand"
   2414   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2415         (ior:VM (not:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2416                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2417                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2418    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2419   "(TARGET_P10_FUSION)"
   2420   "@
   2421    vorc %3,%1,%0\;vnand %3,%3,%2
   2422    vorc %3,%1,%0\;vnand %3,%3,%2
   2423    vorc %3,%1,%0\;vnand %3,%3,%2
   2424    vorc %4,%1,%0\;vnand %3,%4,%2"
   2425   [(set_attr "type" "fused_vector")
   2426    (set_attr "cost" "6")
   2427    (set_attr "length" "8")])
   2428 
   2429 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2430 ;; vector vxor -> vnand
   2431 (define_insn "*fuse_vxor_vnand"
   2432   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2433         (ior:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2434                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2435                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2436    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2437   "(TARGET_P10_FUSION)"
   2438   "@
   2439    vxor %3,%1,%0\;vnand %3,%3,%2
   2440    vxor %3,%1,%0\;vnand %3,%3,%2
   2441    vxor %3,%1,%0\;vnand %3,%3,%2
   2442    vxor %4,%1,%0\;vnand %3,%4,%2"
   2443   [(set_attr "type" "fused_vector")
   2444    (set_attr "cost" "6")
   2445    (set_attr "length" "8")])
   2446 
   2447 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2448 ;; vector vand -> vnor
   2449 (define_insn "*fuse_vand_vnor"
   2450   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2451         (and:VM (not:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2452                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2453                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2454    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2455   "(TARGET_P10_FUSION)"
   2456   "@
   2457    vand %3,%1,%0\;vnor %3,%3,%2
   2458    vand %3,%1,%0\;vnor %3,%3,%2
   2459    vand %3,%1,%0\;vnor %3,%3,%2
   2460    vand %4,%1,%0\;vnor %3,%4,%2"
   2461   [(set_attr "type" "fused_vector")
   2462    (set_attr "cost" "6")
   2463    (set_attr "length" "8")])
   2464 
   2465 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2466 ;; vector vandc -> vnor
   2467 (define_insn "*fuse_vandc_vnor"
   2468   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2469         (and:VM (not:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2470                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2471                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2472    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2473   "(TARGET_P10_FUSION)"
   2474   "@
   2475    vandc %3,%1,%0\;vnor %3,%3,%2
   2476    vandc %3,%1,%0\;vnor %3,%3,%2
   2477    vandc %3,%1,%0\;vnor %3,%3,%2
   2478    vandc %4,%1,%0\;vnor %3,%4,%2"
   2479   [(set_attr "type" "fused_vector")
   2480    (set_attr "cost" "6")
   2481    (set_attr "length" "8")])
   2482 
   2483 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2484 ;; vector veqv -> vnor
   2485 (define_insn "*fuse_veqv_vnor"
   2486   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2487         (and:VM (not:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2488                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2489                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2490    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2491   "(TARGET_P10_FUSION)"
   2492   "@
   2493    veqv %3,%1,%0\;vnor %3,%3,%2
   2494    veqv %3,%1,%0\;vnor %3,%3,%2
   2495    veqv %3,%1,%0\;vnor %3,%3,%2
   2496    veqv %4,%1,%0\;vnor %3,%4,%2"
   2497   [(set_attr "type" "fused_vector")
   2498    (set_attr "cost" "6")
   2499    (set_attr "length" "8")])
   2500 
   2501 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2502 ;; vector vnand -> vnor
   2503 (define_insn "*fuse_vnand_vnor"
   2504   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2505         (and:VM (not:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2506                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2507                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2508    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2509   "(TARGET_P10_FUSION)"
   2510   "@
   2511    vnand %3,%1,%0\;vnor %3,%3,%2
   2512    vnand %3,%1,%0\;vnor %3,%3,%2
   2513    vnand %3,%1,%0\;vnor %3,%3,%2
   2514    vnand %4,%1,%0\;vnor %3,%4,%2"
   2515   [(set_attr "type" "fused_vector")
   2516    (set_attr "cost" "6")
   2517    (set_attr "length" "8")])
   2518 
   2519 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2520 ;; vector vnor -> vnor
   2521 (define_insn "*fuse_vnor_vnor"
   2522   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2523         (and:VM (not:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2524                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))))
   2525                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2526    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2527   "(TARGET_P10_FUSION)"
   2528   "@
   2529    vnor %3,%1,%0\;vnor %3,%3,%2
   2530    vnor %3,%1,%0\;vnor %3,%3,%2
   2531    vnor %3,%1,%0\;vnor %3,%3,%2
   2532    vnor %4,%1,%0\;vnor %3,%4,%2"
   2533   [(set_attr "type" "fused_vector")
   2534    (set_attr "cost" "6")
   2535    (set_attr "length" "8")])
   2536 
   2537 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2538 ;; vector vor -> vnor
   2539 (define_insn "*fuse_vor_vnor"
   2540   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2541         (and:VM (not:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2542                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2543                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2544    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2545   "(TARGET_P10_FUSION)"
   2546   "@
   2547    vor %3,%1,%0\;vnor %3,%3,%2
   2548    vor %3,%1,%0\;vnor %3,%3,%2
   2549    vor %3,%1,%0\;vnor %3,%3,%2
   2550    vor %4,%1,%0\;vnor %3,%4,%2"
   2551   [(set_attr "type" "fused_vector")
   2552    (set_attr "cost" "6")
   2553    (set_attr "length" "8")])
   2554 
   2555 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2556 ;; vector vorc -> vnor
   2557 (define_insn "*fuse_vorc_vnor"
   2558   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2559         (and:VM (not:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2560                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2561                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2562    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2563   "(TARGET_P10_FUSION)"
   2564   "@
   2565    vorc %3,%1,%0\;vnor %3,%3,%2
   2566    vorc %3,%1,%0\;vnor %3,%3,%2
   2567    vorc %3,%1,%0\;vnor %3,%3,%2
   2568    vorc %4,%1,%0\;vnor %3,%4,%2"
   2569   [(set_attr "type" "fused_vector")
   2570    (set_attr "cost" "6")
   2571    (set_attr "length" "8")])
   2572 
   2573 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2574 ;; vector vxor -> vnor
   2575 (define_insn "*fuse_vxor_vnor"
   2576   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2577         (and:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2578                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2579                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2580    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2581   "(TARGET_P10_FUSION)"
   2582   "@
   2583    vxor %3,%1,%0\;vnor %3,%3,%2
   2584    vxor %3,%1,%0\;vnor %3,%3,%2
   2585    vxor %3,%1,%0\;vnor %3,%3,%2
   2586    vxor %4,%1,%0\;vnor %3,%4,%2"
   2587   [(set_attr "type" "fused_vector")
   2588    (set_attr "cost" "6")
   2589    (set_attr "length" "8")])
   2590 
   2591 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2592 ;; vector vand -> vor
   2593 (define_insn "*fuse_vand_vor"
   2594   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2595         (ior:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2596                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2597                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2598    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2599   "(TARGET_P10_FUSION)"
   2600   "@
   2601    vand %3,%1,%0\;vor %3,%3,%2
   2602    vand %3,%1,%0\;vor %3,%3,%2
   2603    vand %3,%1,%0\;vor %3,%3,%2
   2604    vand %4,%1,%0\;vor %3,%4,%2"
   2605   [(set_attr "type" "fused_vector")
   2606    (set_attr "cost" "6")
   2607    (set_attr "length" "8")])
   2608 
   2609 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2610 ;; vector vandc -> vor
   2611 (define_insn "*fuse_vandc_vor"
   2612   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2613         (ior:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2614                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2615                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2616    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2617   "(TARGET_P10_FUSION)"
   2618   "@
   2619    vandc %3,%1,%0\;vor %3,%3,%2
   2620    vandc %3,%1,%0\;vor %3,%3,%2
   2621    vandc %3,%1,%0\;vor %3,%3,%2
   2622    vandc %4,%1,%0\;vor %3,%4,%2"
   2623   [(set_attr "type" "fused_vector")
   2624    (set_attr "cost" "6")
   2625    (set_attr "length" "8")])
   2626 
   2627 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2628 ;; vector veqv -> vor
   2629 (define_insn "*fuse_veqv_vor"
   2630   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2631         (ior:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2632                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2633                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2634    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2635   "(TARGET_P10_FUSION)"
   2636   "@
   2637    veqv %3,%1,%0\;vor %3,%3,%2
   2638    veqv %3,%1,%0\;vor %3,%3,%2
   2639    veqv %3,%1,%0\;vor %3,%3,%2
   2640    veqv %4,%1,%0\;vor %3,%4,%2"
   2641   [(set_attr "type" "fused_vector")
   2642    (set_attr "cost" "6")
   2643    (set_attr "length" "8")])
   2644 
   2645 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2646 ;; vector vnand -> vor
   2647 (define_insn "*fuse_vnand_vor"
   2648   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2649         (ior:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2650                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2651                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2652    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2653   "(TARGET_P10_FUSION)"
   2654   "@
   2655    vnand %3,%1,%0\;vor %3,%3,%2
   2656    vnand %3,%1,%0\;vor %3,%3,%2
   2657    vnand %3,%1,%0\;vor %3,%3,%2
   2658    vnand %4,%1,%0\;vor %3,%4,%2"
   2659   [(set_attr "type" "fused_vector")
   2660    (set_attr "cost" "6")
   2661    (set_attr "length" "8")])
   2662 
   2663 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2664 ;; vector vnor -> vor
   2665 (define_insn "*fuse_vnor_vor"
   2666   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2667         (ior:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2668                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2669                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2670    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2671   "(TARGET_P10_FUSION)"
   2672   "@
   2673    vnor %3,%1,%0\;vor %3,%3,%2
   2674    vnor %3,%1,%0\;vor %3,%3,%2
   2675    vnor %3,%1,%0\;vor %3,%3,%2
   2676    vnor %4,%1,%0\;vor %3,%4,%2"
   2677   [(set_attr "type" "fused_vector")
   2678    (set_attr "cost" "6")
   2679    (set_attr "length" "8")])
   2680 
   2681 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2682 ;; vector vor -> vor
   2683 (define_insn "*fuse_vor_vor"
   2684   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2685         (ior:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2686                           (match_operand:VM 1 "altivec_register_operand" "%v,v,v,v"))
   2687                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2688    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2689   "(TARGET_P10_FUSION)"
   2690   "@
   2691    vor %3,%1,%0\;vor %3,%3,%2
   2692    vor %3,%1,%0\;vor %3,%3,%2
   2693    vor %3,%1,%0\;vor %3,%3,%2
   2694    vor %4,%1,%0\;vor %3,%4,%2"
   2695   [(set_attr "type" "fused_vector")
   2696    (set_attr "cost" "6")
   2697    (set_attr "length" "8")])
   2698 
   2699 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2700 ;; vector vorc -> vor
   2701 (define_insn "*fuse_vorc_vor"
   2702   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2703         (ior:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2704                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2705                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2706    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2707   "(TARGET_P10_FUSION)"
   2708   "@
   2709    vorc %3,%1,%0\;vor %3,%3,%2
   2710    vorc %3,%1,%0\;vor %3,%3,%2
   2711    vorc %3,%1,%0\;vor %3,%3,%2
   2712    vorc %4,%1,%0\;vor %3,%4,%2"
   2713   [(set_attr "type" "fused_vector")
   2714    (set_attr "cost" "6")
   2715    (set_attr "length" "8")])
   2716 
   2717 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2718 ;; vector vxor -> vor
   2719 (define_insn "*fuse_vxor_vor"
   2720   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2721         (ior:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2722                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2723                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2724    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2725   "(TARGET_P10_FUSION)"
   2726   "@
   2727    vxor %3,%1,%0\;vor %3,%3,%2
   2728    vxor %3,%1,%0\;vor %3,%3,%2
   2729    vxor %3,%1,%0\;vor %3,%3,%2
   2730    vxor %4,%1,%0\;vor %3,%4,%2"
   2731   [(set_attr "type" "fused_vector")
   2732    (set_attr "cost" "6")
   2733    (set_attr "length" "8")])
   2734 
   2735 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2736 ;; vector vand -> vorc
   2737 (define_insn "*fuse_vand_vorc"
   2738   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2739         (ior:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2740                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2741                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2742    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2743   "(TARGET_P10_FUSION)"
   2744   "@
   2745    vand %3,%1,%0\;vorc %3,%3,%2
   2746    vand %3,%1,%0\;vorc %3,%3,%2
   2747    vand %3,%1,%0\;vorc %3,%3,%2
   2748    vand %4,%1,%0\;vorc %3,%4,%2"
   2749   [(set_attr "type" "fused_vector")
   2750    (set_attr "cost" "6")
   2751    (set_attr "length" "8")])
   2752 
   2753 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2754 ;; vector vandc -> vorc
   2755 (define_insn "*fuse_vandc_vorc"
   2756   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2757         (ior:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2758                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2759                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2760    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2761   "(TARGET_P10_FUSION)"
   2762   "@
   2763    vandc %3,%1,%0\;vorc %3,%3,%2
   2764    vandc %3,%1,%0\;vorc %3,%3,%2
   2765    vandc %3,%1,%0\;vorc %3,%3,%2
   2766    vandc %4,%1,%0\;vorc %3,%4,%2"
   2767   [(set_attr "type" "fused_vector")
   2768    (set_attr "cost" "6")
   2769    (set_attr "length" "8")])
   2770 
   2771 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2772 ;; vector veqv -> vorc
   2773 (define_insn "*fuse_veqv_vorc"
   2774   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2775         (ior:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2776                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2777                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2778    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2779   "(TARGET_P10_FUSION)"
   2780   "@
   2781    veqv %3,%1,%0\;vorc %3,%3,%2
   2782    veqv %3,%1,%0\;vorc %3,%3,%2
   2783    veqv %3,%1,%0\;vorc %3,%3,%2
   2784    veqv %4,%1,%0\;vorc %3,%4,%2"
   2785   [(set_attr "type" "fused_vector")
   2786    (set_attr "cost" "6")
   2787    (set_attr "length" "8")])
   2788 
   2789 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2790 ;; vector vnand -> vorc
   2791 (define_insn "*fuse_vnand_vorc"
   2792   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2793         (ior:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2794                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2795                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2796    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2797   "(TARGET_P10_FUSION)"
   2798   "@
   2799    vnand %3,%1,%0\;vorc %3,%3,%2
   2800    vnand %3,%1,%0\;vorc %3,%3,%2
   2801    vnand %3,%1,%0\;vorc %3,%3,%2
   2802    vnand %4,%1,%0\;vorc %3,%4,%2"
   2803   [(set_attr "type" "fused_vector")
   2804    (set_attr "cost" "6")
   2805    (set_attr "length" "8")])
   2806 
   2807 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2808 ;; vector vnor -> vorc
   2809 (define_insn "*fuse_vnor_vorc"
   2810   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2811         (ior:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2812                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2813                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2814    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2815   "(TARGET_P10_FUSION)"
   2816   "@
   2817    vnor %3,%1,%0\;vorc %3,%3,%2
   2818    vnor %3,%1,%0\;vorc %3,%3,%2
   2819    vnor %3,%1,%0\;vorc %3,%3,%2
   2820    vnor %4,%1,%0\;vorc %3,%4,%2"
   2821   [(set_attr "type" "fused_vector")
   2822    (set_attr "cost" "6")
   2823    (set_attr "length" "8")])
   2824 
   2825 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2826 ;; vector vor -> vorc
   2827 (define_insn "*fuse_vor_vorc"
   2828   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2829         (ior:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2830                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2831                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2832    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2833   "(TARGET_P10_FUSION)"
   2834   "@
   2835    vor %3,%1,%0\;vorc %3,%3,%2
   2836    vor %3,%1,%0\;vorc %3,%3,%2
   2837    vor %3,%1,%0\;vorc %3,%3,%2
   2838    vor %4,%1,%0\;vorc %3,%4,%2"
   2839   [(set_attr "type" "fused_vector")
   2840    (set_attr "cost" "6")
   2841    (set_attr "length" "8")])
   2842 
   2843 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2844 ;; vector vorc -> vorc
   2845 (define_insn "*fuse_vorc_vorc"
   2846   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2847         (ior:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2848                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2849                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2850    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2851   "(TARGET_P10_FUSION)"
   2852   "@
   2853    vorc %3,%1,%0\;vorc %3,%3,%2
   2854    vorc %3,%1,%0\;vorc %3,%3,%2
   2855    vorc %3,%1,%0\;vorc %3,%3,%2
   2856    vorc %4,%1,%0\;vorc %3,%4,%2"
   2857   [(set_attr "type" "fused_vector")
   2858    (set_attr "cost" "6")
   2859    (set_attr "length" "8")])
   2860 
   2861 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2862 ;; vector vxor -> vorc
   2863 (define_insn "*fuse_vxor_vorc"
   2864   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2865         (ior:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2866                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2867                  (not:VM (match_operand:VM 2 "altivec_register_operand" "v,v,v,v"))))
   2868    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2869   "(TARGET_P10_FUSION)"
   2870   "@
   2871    vxor %3,%1,%0\;vorc %3,%3,%2
   2872    vxor %3,%1,%0\;vorc %3,%3,%2
   2873    vxor %3,%1,%0\;vorc %3,%3,%2
   2874    vxor %4,%1,%0\;vorc %3,%4,%2"
   2875   [(set_attr "type" "fused_vector")
   2876    (set_attr "cost" "6")
   2877    (set_attr "length" "8")])
   2878 
   2879 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2880 ;; vector vand -> vxor
   2881 (define_insn "*fuse_vand_vxor"
   2882   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2883         (xor:VM (and:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2884                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2885                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2886    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2887   "(TARGET_P10_FUSION)"
   2888   "@
   2889    vand %3,%1,%0\;vxor %3,%3,%2
   2890    vand %3,%1,%0\;vxor %3,%3,%2
   2891    vand %3,%1,%0\;vxor %3,%3,%2
   2892    vand %4,%1,%0\;vxor %3,%4,%2"
   2893   [(set_attr "type" "fused_vector")
   2894    (set_attr "cost" "6")
   2895    (set_attr "length" "8")])
   2896 
   2897 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2898 ;; vector vandc -> vxor
   2899 (define_insn "*fuse_vandc_vxor"
   2900   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2901         (xor:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2902                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2903                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2904    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2905   "(TARGET_P10_FUSION)"
   2906   "@
   2907    vandc %3,%1,%0\;vxor %3,%3,%2
   2908    vandc %3,%1,%0\;vxor %3,%3,%2
   2909    vandc %3,%1,%0\;vxor %3,%3,%2
   2910    vandc %4,%1,%0\;vxor %3,%4,%2"
   2911   [(set_attr "type" "fused_vector")
   2912    (set_attr "cost" "6")
   2913    (set_attr "length" "8")])
   2914 
   2915 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2916 ;; vector veqv -> vxor
   2917 (define_insn "*fuse_veqv_vxor"
   2918   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2919         (xor:VM (not:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2920                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2921                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2922    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2923   "(TARGET_P10_FUSION)"
   2924   "@
   2925    veqv %3,%1,%0\;vxor %3,%3,%2
   2926    veqv %3,%1,%0\;vxor %3,%3,%2
   2927    veqv %3,%1,%0\;vxor %3,%3,%2
   2928    veqv %4,%1,%0\;vxor %3,%4,%2"
   2929   [(set_attr "type" "fused_vector")
   2930    (set_attr "cost" "6")
   2931    (set_attr "length" "8")])
   2932 
   2933 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2934 ;; vector vnand -> vxor
   2935 (define_insn "*fuse_vnand_vxor"
   2936   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2937         (xor:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2938                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2939                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2940    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2941   "(TARGET_P10_FUSION)"
   2942   "@
   2943    vnand %3,%1,%0\;vxor %3,%3,%2
   2944    vnand %3,%1,%0\;vxor %3,%3,%2
   2945    vnand %3,%1,%0\;vxor %3,%3,%2
   2946    vnand %4,%1,%0\;vxor %3,%4,%2"
   2947   [(set_attr "type" "fused_vector")
   2948    (set_attr "cost" "6")
   2949    (set_attr "length" "8")])
   2950 
   2951 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2952 ;; vector vnor -> vxor
   2953 (define_insn "*fuse_vnor_vxor"
   2954   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2955         (xor:VM (and:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2956                           (not:VM (match_operand:VM 1 "altivec_register_operand" "v,v,v,v")))
   2957                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2958    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2959   "(TARGET_P10_FUSION)"
   2960   "@
   2961    vnor %3,%1,%0\;vxor %3,%3,%2
   2962    vnor %3,%1,%0\;vxor %3,%3,%2
   2963    vnor %3,%1,%0\;vxor %3,%3,%2
   2964    vnor %4,%1,%0\;vxor %3,%4,%2"
   2965   [(set_attr "type" "fused_vector")
   2966    (set_attr "cost" "6")
   2967    (set_attr "length" "8")])
   2968 
   2969 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2970 ;; vector vor -> vxor
   2971 (define_insn "*fuse_vor_vxor"
   2972   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2973         (xor:VM (ior:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   2974                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2975                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2976    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2977   "(TARGET_P10_FUSION)"
   2978   "@
   2979    vor %3,%1,%0\;vxor %3,%3,%2
   2980    vor %3,%1,%0\;vxor %3,%3,%2
   2981    vor %3,%1,%0\;vxor %3,%3,%2
   2982    vor %4,%1,%0\;vxor %3,%4,%2"
   2983   [(set_attr "type" "fused_vector")
   2984    (set_attr "cost" "6")
   2985    (set_attr "length" "8")])
   2986 
   2987 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   2988 ;; vector vorc -> vxor
   2989 (define_insn "*fuse_vorc_vxor"
   2990   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   2991         (xor:VM (ior:VM (not:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v"))
   2992                           (match_operand:VM 1 "altivec_register_operand" "v,v,v,v"))
   2993                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   2994    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   2995   "(TARGET_P10_FUSION)"
   2996   "@
   2997    vorc %3,%1,%0\;vxor %3,%3,%2
   2998    vorc %3,%1,%0\;vxor %3,%3,%2
   2999    vorc %3,%1,%0\;vxor %3,%3,%2
   3000    vorc %4,%1,%0\;vxor %3,%4,%2"
   3001   [(set_attr "type" "fused_vector")
   3002    (set_attr "cost" "6")
   3003    (set_attr "length" "8")])
   3004 
   3005 ;; logical-logical fusion pattern generated by gen_logical_addsubf
   3006 ;; vector vxor -> vxor
   3007 (define_insn "*fuse_vxor_vxor"
   3008   [(set (match_operand:VM 3 "altivec_register_operand" "=&0,&1,&v,v")
   3009         (xor:VM (xor:VM (match_operand:VM 0 "altivec_register_operand" "v,v,v,v")
   3010                           (match_operand:VM 1 "altivec_register_operand" "%v,v,v,v"))
   3011                  (match_operand:VM 2 "altivec_register_operand" "v,v,v,v")))
   3012    (clobber (match_scratch:VM 4 "=X,X,X,&v"))]
   3013   "(TARGET_P10_FUSION)"
   3014   "@
   3015    vxor %3,%1,%0\;vxor %3,%3,%2
   3016    vxor %3,%1,%0\;vxor %3,%3,%2
   3017    vxor %3,%1,%0\;vxor %3,%3,%2
   3018    vxor %4,%1,%0\;vxor %3,%4,%2"
   3019   [(set_attr "type" "fused_vector")
   3020    (set_attr "cost" "6")
   3021    (set_attr "length" "8")])
   3022 
   3023 ;; add-add fusion pattern generated by gen_addadd
   3024 (define_insn "*fuse_add_add"
   3025   [(set (match_operand:GPR 3 "gpc_reg_operand" "=&0,&1,&r,r")
   3026         (plus:GPR
   3027            (plus:GPR (match_operand:GPR 0 "gpc_reg_operand" "r,r,r,r")
   3028                      (match_operand:GPR 1 "gpc_reg_operand" "%r,r,r,r"))
   3029            (match_operand:GPR 2 "gpc_reg_operand" "r,r,r,r")))
   3030    (clobber (match_scratch:GPR 4 "=X,X,X,&r"))]
   3031   "(TARGET_P10_FUSION)"
   3032   "@
   3033    add %3,%1,%0\;add %3,%3,%2
   3034    add %3,%1,%0\;add %3,%3,%2
   3035    add %3,%1,%0\;add %3,%3,%2
   3036    add %4,%1,%0\;add %3,%4,%2"
   3037   [(set_attr "type" "fused_arith_logical")
   3038    (set_attr "cost" "6")
   3039    (set_attr "length" "8")])
   3040 
   3041 ;; vaddudm-vaddudm fusion pattern generated by gen_addadd
   3042 (define_insn "*fuse_vaddudm_vaddudm"
   3043   [(set (match_operand:V2DI 3 "altivec_register_operand" "=&0,&1,&v,v")
   3044         (plus:V2DI
   3045            (plus:V2DI (match_operand:V2DI 0 "altivec_register_operand" "v,v,v,v")
   3046                      (match_operand:V2DI 1 "altivec_register_operand" "%v,v,v,v"))
   3047            (match_operand:V2DI 2 "altivec_register_operand" "v,v,v,v")))
   3048    (clobber (match_scratch:V2DI 4 "=X,X,X,&v"))]
   3049   "(TARGET_P10_FUSION)"
   3050   "@
   3051    vaddudm %3,%1,%0\;vaddudm %3,%3,%2
   3052    vaddudm %3,%1,%0\;vaddudm %3,%3,%2
   3053    vaddudm %3,%1,%0\;vaddudm %3,%3,%2
   3054    vaddudm %4,%1,%0\;vaddudm %3,%4,%2"
   3055   [(set_attr "type" "fused_vector")
   3056    (set_attr "cost" "6")
   3057    (set_attr "length" "8")])
   3058