xref: /netbsd-src/external/gpl3/gcc/dist/gcc/config/rs6000/fusion.md (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
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