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