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