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