Coverage Report

Created: 2024-10-16 07:58

/src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/isle_opt.rs
Line
Count
Source (jump to first uncovered line)
1
// GENERATED BY ISLE. DO NOT EDIT!
2
//
3
// Generated automatically from the instruction-selection DSL code in:
4
// - src/prelude.isle
5
// - src/prelude_opt.isle
6
// - src/opts/algebraic.isle
7
// - src/opts/cprop.isle
8
// - /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle
9
10
use super::*; // Pulls in all external types.
11
use std::marker::PhantomData;
12
13
/// Context during lowering: an implementation of this trait
14
/// must be provided with all external constructors and extractors.
15
/// A mutable borrow is passed along through all lowering logic.
16
pub trait Context {
17
    fn unit(&mut self) -> Unit;
18
    fn u32_add(&mut self, arg0: u32, arg1: u32) -> u32;
19
    fn s32_add_fallible(&mut self, arg0: u32, arg1: u32) -> Option<u32>;
20
    fn u32_nonnegative(&mut self, arg0: u32) -> Option<u32>;
21
    fn offset32(&mut self, arg0: Offset32) -> Option<u32>;
22
    fn u32_lteq(&mut self, arg0: u32, arg1: u32) -> Option<Unit>;
23
    fn u8_lteq(&mut self, arg0: u8, arg1: u8) -> Option<Unit>;
24
    fn u8_lt(&mut self, arg0: u8, arg1: u8) -> Option<Unit>;
25
    fn simm32(&mut self, arg0: Imm64) -> Option<u32>;
26
    fn uimm8(&mut self, arg0: Imm64) -> Option<u8>;
27
    fn u8_and(&mut self, arg0: u8, arg1: u8) -> u8;
28
    fn u8_as_u32(&mut self, arg0: u8) -> Option<u32>;
29
    fn u8_as_u64(&mut self, arg0: u8) -> Option<u64>;
30
    fn u16_as_u64(&mut self, arg0: u16) -> Option<u64>;
31
    fn u32_as_u64(&mut self, arg0: u32) -> Option<u64>;
32
    fn i64_as_u64(&mut self, arg0: i64) -> Option<u64>;
33
    fn u64_add(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
34
    fn u64_sub(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
35
    fn u64_mul(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
36
    fn u64_sdiv(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
37
    fn u64_udiv(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
38
    fn u64_and(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
39
    fn u64_or(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
40
    fn u64_xor(&mut self, arg0: u64, arg1: u64) -> Option<u64>;
41
    fn u64_not(&mut self, arg0: u64) -> Option<u64>;
42
    fn u64_sextend_u32(&mut self, arg0: u64) -> Option<u64>;
43
    fn u64_uextend_u32(&mut self, arg0: u64) -> Option<u64>;
44
    fn u64_is_zero(&mut self, arg0: u64) -> bool;
45
    fn u64_is_odd(&mut self, arg0: u64) -> Option<bool>;
46
    fn ty_bits(&mut self, arg0: Type) -> Option<u8>;
47
    fn ty_bits_u16(&mut self, arg0: Type) -> u16;
48
    fn ty_bits_u64(&mut self, arg0: Type) -> u64;
49
    fn ty_mask(&mut self, arg0: Type) -> u64;
50
    fn ty_bytes(&mut self, arg0: Type) -> u16;
51
    fn lane_type(&mut self, arg0: Type) -> Type;
52
    fn mem_flags_trusted(&mut self) -> MemFlags;
53
    fn fits_in_16(&mut self, arg0: Type) -> Option<Type>;
54
    fn fits_in_32(&mut self, arg0: Type) -> Option<Type>;
55
    fn lane_fits_in_32(&mut self, arg0: Type) -> Option<Type>;
56
    fn fits_in_64(&mut self, arg0: Type) -> Option<Type>;
57
    fn ty_32(&mut self, arg0: Type) -> Option<Type>;
58
    fn ty_64(&mut self, arg0: Type) -> Option<Type>;
59
    fn ty_int_ref_scalar_64(&mut self, arg0: Type) -> Option<Type>;
60
    fn ty_32_or_64(&mut self, arg0: Type) -> Option<Type>;
61
    fn ty_8_or_16(&mut self, arg0: Type) -> Option<Type>;
62
    fn int_fits_in_32(&mut self, arg0: Type) -> Option<Type>;
63
    fn ty_int_ref_64(&mut self, arg0: Type) -> Option<Type>;
64
    fn ty_int(&mut self, arg0: Type) -> Option<Type>;
65
    fn ty_scalar_float(&mut self, arg0: Type) -> Option<Type>;
66
    fn ty_float_or_vec(&mut self, arg0: Type) -> Option<Type>;
67
    fn ty_vector_float(&mut self, arg0: Type) -> Option<Type>;
68
    fn ty_vector_not_float(&mut self, arg0: Type) -> Option<Type>;
69
    fn ty_vec64(&mut self, arg0: Type) -> Option<Type>;
70
    fn ty_vec64_ctor(&mut self, arg0: Type) -> Option<Type>;
71
    fn ty_vec128(&mut self, arg0: Type) -> Option<Type>;
72
    fn ty_dyn_vec64(&mut self, arg0: Type) -> Option<Type>;
73
    fn ty_dyn_vec128(&mut self, arg0: Type) -> Option<Type>;
74
    fn ty_vec64_int(&mut self, arg0: Type) -> Option<Type>;
75
    fn ty_vec128_int(&mut self, arg0: Type) -> Option<Type>;
76
    fn not_vec32x2(&mut self, arg0: Type) -> Option<Type>;
77
    fn not_i64x2(&mut self, arg0: Type) -> Option<()>;
78
    fn u8_from_uimm8(&mut self, arg0: Uimm8) -> u8;
79
    fn u64_from_bool(&mut self, arg0: bool) -> u64;
80
    fn u64_from_imm64(&mut self, arg0: Imm64) -> u64;
81
    fn nonzero_u64_from_imm64(&mut self, arg0: Imm64) -> Option<u64>;
82
    fn imm64(&mut self, arg0: u64) -> Option<Imm64>;
83
    fn u64_from_ieee32(&mut self, arg0: Ieee32) -> u64;
84
    fn u64_from_ieee64(&mut self, arg0: Ieee64) -> u64;
85
    fn multi_lane(&mut self, arg0: Type) -> Option<(u32, u32)>;
86
    fn dynamic_lane(&mut self, arg0: Type) -> Option<(u32, u32)>;
87
    fn dynamic_int_lane(&mut self, arg0: Type) -> Option<u32>;
88
    fn dynamic_fp_lane(&mut self, arg0: Type) -> Option<u32>;
89
    fn ty_dyn64_int(&mut self, arg0: Type) -> Option<Type>;
90
    fn ty_dyn128_int(&mut self, arg0: Type) -> Option<Type>;
91
    fn offset32_to_u32(&mut self, arg0: Offset32) -> u32;
92
    fn intcc_unsigned(&mut self, arg0: &IntCC) -> IntCC;
93
    fn signed_cond_code(&mut self, arg0: &IntCC) -> Option<IntCC>;
94
    fn trap_code_division_by_zero(&mut self) -> TrapCode;
95
    fn trap_code_integer_overflow(&mut self) -> TrapCode;
96
    fn trap_code_bad_conversion_to_integer(&mut self) -> TrapCode;
97
    fn range(&mut self, arg0: usize, arg1: usize) -> Range;
98
    fn range_view(&mut self, arg0: Range) -> RangeView;
99
    fn eclass_type(&mut self, arg0: Id) -> Option<Type>;
100
    fn enodes_etor(&mut self, arg0: Id) -> Option<Self::enodes_etor_iter>;
101
    type enodes_etor_iter: ContextIter<Context = Self, Output = (Type, InstructionImms, IdArray)>;
102
    fn pure_enode_ctor(&mut self, arg0: Type, arg1: &InstructionImms, arg2: IdArray) -> Id;
103
    fn id_array_0_etor(&mut self, arg0: IdArray) -> Option<()>;
104
    fn id_array_0_ctor(&mut self) -> IdArray;
105
    fn id_array_1_etor(&mut self, arg0: IdArray) -> Option<Id>;
106
    fn id_array_1_ctor(&mut self, arg0: Id) -> IdArray;
107
    fn id_array_2_etor(&mut self, arg0: IdArray) -> Option<(Id, Id)>;
108
    fn id_array_2_ctor(&mut self, arg0: Id, arg1: Id) -> IdArray;
109
    fn id_array_3_etor(&mut self, arg0: IdArray) -> Option<(Id, Id, Id)>;
110
    fn id_array_3_ctor(&mut self, arg0: Id, arg1: Id, arg2: Id) -> IdArray;
111
    fn at_loop_level(&mut self, arg0: Id) -> (u8, Id);
112
    fn remat(&mut self, arg0: Id) -> Id;
113
    fn subsume(&mut self, arg0: Id) -> Id;
114
}
115
116
pub trait ContextIter {
117
    type Context;
118
    type Output;
119
    fn next(&mut self, ctx: &mut Self::Context) -> Option<Self::Output>;
120
}
121
122
pub struct ContextIterWrapper<Item, I: Iterator<Item = Item>, C: Context> {
123
    iter: I,
124
    _ctx: PhantomData<C>,
125
}
126
impl<Item, I: Iterator<Item = Item>, C: Context> From<I> for ContextIterWrapper<Item, I, C> {
127
0
    fn from(iter: I) -> Self {
128
0
        Self {
129
0
            iter,
130
0
            _ctx: PhantomData,
131
0
        }
132
0
    }
133
}
134
impl<Item, I: Iterator<Item = Item>, C: Context> ContextIter for ContextIterWrapper<Item, I, C> {
135
    type Context = C;
136
    type Output = Item;
137
0
    fn next(&mut self, _ctx: &mut Self::Context) -> Option<Self::Output> {
138
0
        self.iter.next()
139
0
    }
140
}
141
142
// Generated as internal constructor for term simplify.
143
0
pub fn constructor_simplify<C: Context>(
144
0
    ctx: &mut C,
145
0
    arg0: Id,
146
0
) -> Option<impl ContextIter<Context = C, Output = Id>> {
147
0
    let mut returns = ConstructorVec::new();
148
0
    let pattern0_0 = arg0;
149
0
    if let Some(mut iter) = C::enodes_etor(ctx, pattern0_0) {
150
0
        while let Some((pattern1_0, pattern1_1, pattern1_2)) = iter.next(ctx) {
151
0
            if pattern1_0 == I32 {
152
                if let &InstructionImms::Binary {
153
0
                    opcode: ref pattern3_0,
154
0
                } = &pattern1_1
155
                {
156
0
                    match pattern3_0 {
157
                        &Opcode::Band => {
158
0
                            if let Some((pattern5_0, pattern5_1)) =
159
0
                                C::id_array_2_etor(ctx, pattern1_2)
160
                            {
161
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
162
0
                                    while let Some((pattern6_0, pattern6_1, pattern6_2)) =
163
0
                                        iter.next(ctx)
164
                                    {
165
0
                                        if pattern6_0 == I32 {
166
                                            if let &InstructionImms::UnaryImm {
167
0
                                                opcode: ref pattern8_0,
168
0
                                                imm: pattern8_1,
169
0
                                            } = &pattern6_1
170
                                            {
171
0
                                                if let &Opcode::Iconst = pattern8_0 {
172
0
                                                    let pattern10_0 =
173
0
                                                        C::u64_from_imm64(ctx, pattern8_1);
174
0
                                                    if pattern10_0 == 4294967295i128 as u64 {
175
0
                                                        if let Some(()) =
176
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
177
0
                                                        {
178
0
                                                            // Rule at src/opts/algebraic.isle line 122.
179
0
                                                            let expr0_0 =
180
0
                                                                C::subsume(ctx, pattern5_1);
181
0
                                                            returns.push(expr0_0);
182
0
                                                        }
183
0
                                                    }
184
0
                                                }
185
0
                                            }
186
0
                                        }
187
                                    }
188
0
                                }
189
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
190
0
                                    while let Some((pattern6_0, pattern6_1, pattern6_2)) =
191
0
                                        iter.next(ctx)
192
                                    {
193
0
                                        if pattern6_0 == I32 {
194
                                            if let &InstructionImms::UnaryImm {
195
0
                                                opcode: ref pattern8_0,
196
0
                                                imm: pattern8_1,
197
0
                                            } = &pattern6_1
198
                                            {
199
0
                                                if let &Opcode::Iconst = pattern8_0 {
200
0
                                                    let pattern10_0 =
201
0
                                                        C::u64_from_imm64(ctx, pattern8_1);
202
0
                                                    if pattern10_0 == 4294967295i128 as u64 {
203
0
                                                        if let Some(()) =
204
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
205
0
                                                        {
206
0
                                                            // Rule at src/opts/algebraic.isle line 121.
207
0
                                                            let expr0_0 =
208
0
                                                                C::subsume(ctx, pattern5_0);
209
0
                                                            returns.push(expr0_0);
210
0
                                                        }
211
0
                                                    }
212
0
                                                }
213
0
                                            }
214
0
                                        }
215
                                    }
216
0
                                }
217
0
                            }
218
                        }
219
                        &Opcode::Bxor => {
220
0
                            if let Some((pattern5_0, pattern5_1)) =
221
0
                                C::id_array_2_etor(ctx, pattern1_2)
222
                            {
223
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
224
0
                                    while let Some((pattern6_0, pattern6_1, pattern6_2)) =
225
0
                                        iter.next(ctx)
226
                                    {
227
0
                                        if pattern6_0 == I32 {
228
                                            if let &InstructionImms::Unary {
229
0
                                                opcode: ref pattern8_0,
230
0
                                            } = &pattern6_1
231
                                            {
232
0
                                                if let &Opcode::Bnot = pattern8_0 {
233
0
                                                    if let Some(pattern10_0) =
234
0
                                                        C::id_array_1_etor(ctx, pattern6_2)
235
                                                    {
236
0
                                                        if pattern5_1 == pattern10_0 {
237
                                                            // Rule at src/opts/algebraic.isle line 115.
238
0
                                                            let expr0_0: Type = I32;
239
0
                                                            let expr1_0: u64 =
240
0
                                                                4294967295i128 as u64;
241
0
                                                            let expr2_0 = C::imm64(ctx, expr1_0)?;
242
0
                                                            let expr3_0 = constructor_iconst(
243
0
                                                                ctx, expr0_0, expr2_0,
244
0
                                                            )?;
245
0
                                                            let expr4_0 = C::subsume(ctx, expr3_0);
246
0
                                                            returns.push(expr4_0);
247
0
                                                        }
248
0
                                                    }
249
0
                                                }
250
0
                                            }
251
0
                                        }
252
                                    }
253
0
                                }
254
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
255
0
                                    while let Some((pattern6_0, pattern6_1, pattern6_2)) =
256
0
                                        iter.next(ctx)
257
                                    {
258
0
                                        if pattern6_0 == I32 {
259
                                            if let &InstructionImms::Unary {
260
0
                                                opcode: ref pattern8_0,
261
0
                                            } = &pattern6_1
262
                                            {
263
0
                                                if let &Opcode::Bnot = pattern8_0 {
264
0
                                                    if let Some(pattern10_0) =
265
0
                                                        C::id_array_1_etor(ctx, pattern6_2)
266
                                                    {
267
0
                                                        if pattern10_0 == pattern5_0 {
268
                                                            // Rule at src/opts/algebraic.isle line 114.
269
0
                                                            let expr0_0: Type = I32;
270
0
                                                            let expr1_0: u64 =
271
0
                                                                4294967295i128 as u64;
272
0
                                                            let expr2_0 = C::imm64(ctx, expr1_0)?;
273
0
                                                            let expr3_0 = constructor_iconst(
274
0
                                                                ctx, expr0_0, expr2_0,
275
0
                                                            )?;
276
0
                                                            let expr4_0 = C::subsume(ctx, expr3_0);
277
0
                                                            returns.push(expr4_0);
278
0
                                                        }
279
0
                                                    }
280
0
                                                }
281
0
                                            }
282
0
                                        }
283
                                    }
284
0
                                }
285
0
                            }
286
                        }
287
0
                        _ => {}
288
                    }
289
0
                }
290
0
            }
291
0
            if pattern1_0 == I64 {
292
0
                match &pattern1_1 {
293
                    &InstructionImms::Binary {
294
0
                        opcode: ref pattern3_0,
295
0
                    } => {
296
0
                        match pattern3_0 {
297
                            &Opcode::Band => {
298
0
                                if let Some((pattern5_0, pattern5_1)) =
299
0
                                    C::id_array_2_etor(ctx, pattern1_2)
300
                                {
301
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
302
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
303
0
                                            iter.next(ctx)
304
                                        {
305
0
                                            if pattern6_0 == I64 {
306
                                                if let &InstructionImms::UnaryImm {
307
0
                                                    opcode: ref pattern8_0,
308
0
                                                    imm: pattern8_1,
309
0
                                                } = &pattern6_1
310
                                                {
311
0
                                                    if let &Opcode::Iconst = pattern8_0 {
312
0
                                                        let pattern10_0 =
313
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
314
0
                                                        if pattern10_0
315
0
                                                            == 18446744073709551615i128 as u64
316
                                                        {
317
0
                                                            if let Some(()) =
318
0
                                                                C::id_array_0_etor(ctx, pattern6_2)
319
0
                                                            {
320
0
                                                                // Rule at src/opts/algebraic.isle line 124.
321
0
                                                                let expr0_0 =
322
0
                                                                    C::subsume(ctx, pattern5_1);
323
0
                                                                returns.push(expr0_0);
324
0
                                                            }
325
0
                                                        }
326
0
                                                    }
327
0
                                                }
328
0
                                            }
329
                                        }
330
0
                                    }
331
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
332
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
333
0
                                            iter.next(ctx)
334
                                        {
335
0
                                            if pattern6_0 == I64 {
336
                                                if let &InstructionImms::UnaryImm {
337
0
                                                    opcode: ref pattern8_0,
338
0
                                                    imm: pattern8_1,
339
0
                                                } = &pattern6_1
340
                                                {
341
0
                                                    if let &Opcode::Iconst = pattern8_0 {
342
0
                                                        let pattern10_0 =
343
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
344
0
                                                        if pattern10_0
345
0
                                                            == 18446744073709551615i128 as u64
346
                                                        {
347
0
                                                            if let Some(()) =
348
0
                                                                C::id_array_0_etor(ctx, pattern6_2)
349
0
                                                            {
350
0
                                                                // Rule at src/opts/algebraic.isle line 123.
351
0
                                                                let expr0_0 =
352
0
                                                                    C::subsume(ctx, pattern5_0);
353
0
                                                                returns.push(expr0_0);
354
0
                                                            }
355
0
                                                        }
356
0
                                                    }
357
0
                                                }
358
0
                                            }
359
                                        }
360
0
                                    }
361
0
                                }
362
                            }
363
                            &Opcode::Bxor => {
364
0
                                if let Some((pattern5_0, pattern5_1)) =
365
0
                                    C::id_array_2_etor(ctx, pattern1_2)
366
                                {
367
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
368
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
369
0
                                            iter.next(ctx)
370
                                        {
371
0
                                            if pattern6_0 == I64 {
372
                                                if let &InstructionImms::Unary {
373
0
                                                    opcode: ref pattern8_0,
374
0
                                                } = &pattern6_1
375
                                                {
376
0
                                                    if let &Opcode::Bnot = pattern8_0 {
377
0
                                                        if let Some(pattern10_0) =
378
0
                                                            C::id_array_1_etor(ctx, pattern6_2)
379
                                                        {
380
0
                                                            if pattern5_1 == pattern10_0 {
381
                                                                // Rule at src/opts/algebraic.isle line 117.
382
0
                                                                let expr0_0: Type = I64;
383
0
                                                                let expr1_0: u64 =
384
0
                                                                    18446744073709551615i128 as u64;
385
0
                                                                let expr2_0 =
386
0
                                                                    C::imm64(ctx, expr1_0)?;
387
0
                                                                let expr3_0 = constructor_iconst(
388
0
                                                                    ctx, expr0_0, expr2_0,
389
0
                                                                )?;
390
0
                                                                let expr4_0 =
391
0
                                                                    C::subsume(ctx, expr3_0);
392
0
                                                                returns.push(expr4_0);
393
0
                                                            }
394
0
                                                        }
395
0
                                                    }
396
0
                                                }
397
0
                                            }
398
                                        }
399
0
                                    }
400
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
401
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
402
0
                                            iter.next(ctx)
403
                                        {
404
0
                                            if pattern6_0 == I64 {
405
                                                if let &InstructionImms::Unary {
406
0
                                                    opcode: ref pattern8_0,
407
0
                                                } = &pattern6_1
408
                                                {
409
0
                                                    if let &Opcode::Bnot = pattern8_0 {
410
0
                                                        if let Some(pattern10_0) =
411
0
                                                            C::id_array_1_etor(ctx, pattern6_2)
412
                                                        {
413
0
                                                            if pattern10_0 == pattern5_0 {
414
                                                                // Rule at src/opts/algebraic.isle line 116.
415
0
                                                                let expr0_0: Type = I64;
416
0
                                                                let expr1_0: u64 =
417
0
                                                                    18446744073709551615i128 as u64;
418
0
                                                                let expr2_0 =
419
0
                                                                    C::imm64(ctx, expr1_0)?;
420
0
                                                                let expr3_0 = constructor_iconst(
421
0
                                                                    ctx, expr0_0, expr2_0,
422
0
                                                                )?;
423
0
                                                                let expr4_0 =
424
0
                                                                    C::subsume(ctx, expr3_0);
425
0
                                                                returns.push(expr4_0);
426
0
                                                            }
427
0
                                                        }
428
0
                                                    }
429
0
                                                }
430
0
                                            }
431
                                        }
432
0
                                    }
433
0
                                }
434
                            }
435
                            &Opcode::Ushr => {
436
0
                                if let Some((pattern5_0, pattern5_1)) =
437
0
                                    C::id_array_2_etor(ctx, pattern1_2)
438
                                {
439
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
440
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
441
0
                                            iter.next(ctx)
442
                                        {
443
0
                                            if pattern6_0 == I64 {
444
                                                if let &InstructionImms::Binary {
445
0
                                                    opcode: ref pattern8_0,
446
0
                                                } = &pattern6_1
447
                                                {
448
0
                                                    if let &Opcode::Ishl = pattern8_0 {
449
0
                                                        if let Some((pattern10_0, pattern10_1)) =
450
0
                                                            C::id_array_2_etor(ctx, pattern6_2)
451
                                                        {
452
0
                                                            if let Some(mut iter) =
453
0
                                                                C::enodes_etor(ctx, pattern10_0)
454
                                                            {
455
                                                                while let Some((
456
0
                                                                    pattern11_0,
457
0
                                                                    pattern11_1,
458
0
                                                                    pattern11_2,
459
0
                                                                )) = iter.next(ctx)
460
                                                                {
461
0
                                                                    if pattern11_0 == I64 {
462
0
                                                                        if let &InstructionImms::Unary { opcode: ref pattern13_0 } = &pattern11_1 {
463
0
                                                                            if let &Opcode::Uextend  = pattern13_0 {
464
0
                                                                                if let Some(pattern15_0) = C::id_array_1_etor(ctx, pattern11_2) {
465
0
                                                                                    if let Some(pattern16_0) = C::eclass_type(ctx, pattern15_0) {
466
0
                                                                                        if pattern16_0 == I32 {
467
0
                                                                                            if let Some(mut iter) = C::enodes_etor(ctx, pattern10_1) {
468
0
                                                                                                while let Some((pattern18_0, pattern18_1, pattern18_2)) = iter.next(ctx) {
469
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern19_0, imm: pattern19_1 } = &pattern18_1 {
470
0
                                                                                                        if let &Opcode::Iconst  = pattern19_0 {
471
0
                                                                                                            if let Some(pattern21_0) = C::simm32(ctx, pattern19_1) {
472
0
                                                                                                                if pattern21_0 == 32i128 as u32  {
473
0
                                                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern18_2) {
474
0
                                                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
475
0
                                                                                                                            while let Some((pattern24_0, pattern24_1, pattern24_2)) = iter.next(ctx) {
476
0
                                                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern25_0, imm: pattern25_1 } = &pattern24_1 {
477
0
                                                                                                                                    if let &Opcode::Iconst  = pattern25_0 {
478
0
                                                                                                                                        if let Some(pattern27_0) = C::simm32(ctx, pattern25_1) {
479
0
                                                                                                                                            if pattern27_0 == 32i128 as u32  {
480
0
                                                                                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern24_2) {
481
                                                                                                                                                    // Rule at src/opts/algebraic.isle line 148.
482
0
                                                                                                                                                    let expr0_0: Type = I64;
483
0
                                                                                                                                                    let expr1_0 = constructor_uextend(ctx, expr0_0, pattern15_0)?;
484
0
                                                                                                                                                    returns.push(expr1_0);
485
0
                                                                                                                                                }
486
0
                                                                                                                                            }
487
0
                                                                                                                                        }
488
0
                                                                                                                                    }
489
0
                                                                                                                                }
490
                                                                                                                        }
491
0
                                                                                                                        }
492
0
                                                                                                                    }
493
0
                                                                                                                }
494
0
                                                                                                            }
495
0
                                                                                                        }
496
0
                                                                                                    }
497
                                                                                            }
498
0
                                                                                            }
499
0
                                                                                        }
500
0
                                                                                    }
501
0
                                                                                }
502
0
                                                                            }
503
0
                                                                        }
504
0
                                                                    }
505
                                                                }
506
0
                                                            }
507
0
                                                        }
508
0
                                                    }
509
0
                                                }
510
0
                                            }
511
                                        }
512
0
                                    }
513
0
                                }
514
                            }
515
                            &Opcode::Sshr => {
516
0
                                if let Some((pattern5_0, pattern5_1)) =
517
0
                                    C::id_array_2_etor(ctx, pattern1_2)
518
                                {
519
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
520
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
521
0
                                            iter.next(ctx)
522
                                        {
523
0
                                            if pattern6_0 == I64 {
524
                                                if let &InstructionImms::Binary {
525
0
                                                    opcode: ref pattern8_0,
526
0
                                                } = &pattern6_1
527
                                                {
528
0
                                                    if let &Opcode::Ishl = pattern8_0 {
529
0
                                                        if let Some((pattern10_0, pattern10_1)) =
530
0
                                                            C::id_array_2_etor(ctx, pattern6_2)
531
                                                        {
532
0
                                                            if let Some(mut iter) =
533
0
                                                                C::enodes_etor(ctx, pattern10_0)
534
                                                            {
535
                                                                while let Some((
536
0
                                                                    pattern11_0,
537
0
                                                                    pattern11_1,
538
0
                                                                    pattern11_2,
539
0
                                                                )) = iter.next(ctx)
540
                                                                {
541
0
                                                                    if pattern11_0 == I64 {
542
0
                                                                        if let &InstructionImms::Unary { opcode: ref pattern13_0 } = &pattern11_1 {
543
0
                                                                            if let &Opcode::Uextend  = pattern13_0 {
544
0
                                                                                if let Some(pattern15_0) = C::id_array_1_etor(ctx, pattern11_2) {
545
0
                                                                                    if let Some(pattern16_0) = C::eclass_type(ctx, pattern15_0) {
546
0
                                                                                        if pattern16_0 == I32 {
547
0
                                                                                            if let Some(mut iter) = C::enodes_etor(ctx, pattern10_1) {
548
0
                                                                                                while let Some((pattern18_0, pattern18_1, pattern18_2)) = iter.next(ctx) {
549
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern19_0, imm: pattern19_1 } = &pattern18_1 {
550
0
                                                                                                        if let &Opcode::Iconst  = pattern19_0 {
551
0
                                                                                                            if let Some(pattern21_0) = C::simm32(ctx, pattern19_1) {
552
0
                                                                                                                if pattern21_0 == 32i128 as u32  {
553
0
                                                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern18_2) {
554
0
                                                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern5_1) {
555
0
                                                                                                                            while let Some((pattern24_0, pattern24_1, pattern24_2)) = iter.next(ctx) {
556
0
                                                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern25_0, imm: pattern25_1 } = &pattern24_1 {
557
0
                                                                                                                                    if let &Opcode::Iconst  = pattern25_0 {
558
0
                                                                                                                                        if let Some(pattern27_0) = C::simm32(ctx, pattern25_1) {
559
0
                                                                                                                                            if pattern27_0 == 32i128 as u32  {
560
0
                                                                                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern24_2) {
561
                                                                                                                                                    // Rule at src/opts/algebraic.isle line 151.
562
0
                                                                                                                                                    let expr0_0: Type = I64;
563
0
                                                                                                                                                    let expr1_0 = constructor_sextend(ctx, expr0_0, pattern15_0)?;
564
0
                                                                                                                                                    returns.push(expr1_0);
565
0
                                                                                                                                                }
566
0
                                                                                                                                            }
567
0
                                                                                                                                        }
568
0
                                                                                                                                    }
569
0
                                                                                                                                }
570
                                                                                                                        }
571
0
                                                                                                                        }
572
0
                                                                                                                    }
573
0
                                                                                                                }
574
0
                                                                                                            }
575
0
                                                                                                        }
576
0
                                                                                                    }
577
                                                                                            }
578
0
                                                                                            }
579
0
                                                                                        }
580
0
                                                                                    }
581
0
                                                                                }
582
0
                                                                            }
583
0
                                                                        }
584
0
                                                                    }
585
                                                                }
586
0
                                                            }
587
0
                                                        }
588
0
                                                    }
589
0
                                                }
590
0
                                            }
591
                                        }
592
0
                                    }
593
0
                                }
594
                            }
595
0
                            _ => {}
596
                        }
597
                    }
598
                    &InstructionImms::Unary {
599
0
                        opcode: ref pattern3_0,
600
0
                    } => {
601
0
                        match pattern3_0 {
602
                            &Opcode::Uextend => {
603
0
                                if let Some(pattern5_0) = C::id_array_1_etor(ctx, pattern1_2) {
604
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
605
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
606
0
                                            iter.next(ctx)
607
                                        {
608
0
                                            if pattern6_0 == I32 {
609
                                                if let &InstructionImms::UnaryImm {
610
0
                                                    opcode: ref pattern8_0,
611
0
                                                    imm: pattern8_1,
612
0
                                                } = &pattern6_1
613
                                                {
614
0
                                                    if let &Opcode::Iconst = pattern8_0 {
615
0
                                                        let pattern10_0 =
616
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
617
0
                                                        if let Some(()) =
618
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
619
                                                        {
620
                                                            // Rule at src/opts/algebraic.isle line 10.
621
0
                                                            let expr0_0: Type = I64;
622
0
                                                            let expr1_0 = C::u64_uextend_u32(
623
0
                                                                ctx,
624
0
                                                                pattern10_0,
625
0
                                                            )?;
626
0
                                                            let expr2_0 = C::imm64(ctx, expr1_0)?;
627
0
                                                            let expr3_0 = constructor_iconst(
628
0
                                                                ctx, expr0_0, expr2_0,
629
0
                                                            )?;
630
0
                                                            returns.push(expr3_0);
631
0
                                                        }
632
0
                                                    }
633
0
                                                }
634
0
                                            }
635
                                        }
636
0
                                    }
637
0
                                }
638
                            }
639
                            &Opcode::Sextend => {
640
0
                                if let Some(pattern5_0) = C::id_array_1_etor(ctx, pattern1_2) {
641
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
642
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
643
0
                                            iter.next(ctx)
644
                                        {
645
0
                                            if pattern6_0 == I32 {
646
                                                if let &InstructionImms::UnaryImm {
647
0
                                                    opcode: ref pattern8_0,
648
0
                                                    imm: pattern8_1,
649
0
                                                } = &pattern6_1
650
                                                {
651
0
                                                    if let &Opcode::Iconst = pattern8_0 {
652
0
                                                        let pattern10_0 =
653
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
654
0
                                                        if let Some(()) =
655
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
656
                                                        {
657
                                                            // Rule at src/opts/algebraic.isle line 12.
658
0
                                                            let expr0_0: Type = I64;
659
0
                                                            let expr1_0 = C::u64_sextend_u32(
660
0
                                                                ctx,
661
0
                                                                pattern10_0,
662
0
                                                            )?;
663
0
                                                            let expr2_0 = C::imm64(ctx, expr1_0)?;
664
0
                                                            let expr3_0 = constructor_iconst(
665
0
                                                                ctx, expr0_0, expr2_0,
666
0
                                                            )?;
667
0
                                                            returns.push(expr3_0);
668
0
                                                        }
669
0
                                                    }
670
0
                                                }
671
0
                                            }
672
                                        }
673
0
                                    }
674
0
                                }
675
                            }
676
0
                            _ => {}
677
                        }
678
                    }
679
0
                    _ => {}
680
                }
681
0
            }
682
0
            match &pattern1_1 {
683
                &InstructionImms::Binary {
684
0
                    opcode: ref pattern2_0,
685
0
                } => {
686
0
                    match pattern2_0 {
687
                        &Opcode::Iadd => {
688
0
                            if let Some((pattern4_0, pattern4_1)) =
689
0
                                C::id_array_2_etor(ctx, pattern1_2)
690
                            {
691
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
692
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
693
0
                                        iter.next(ctx)
694
                                    {
695
0
                                        if pattern5_0 == pattern1_0 {
696
0
                                            match &pattern5_1 {
697
                                                &InstructionImms::Binary {
698
0
                                                    opcode: ref pattern7_0,
699
0
                                                } => {
700
0
                                                    match pattern7_0 {
701
                                                        &Opcode::Iadd => {
702
0
                                                            if let Some((pattern9_0, pattern9_1)) =
703
0
                                                                C::id_array_2_etor(ctx, pattern5_2)
704
                                                            {
705
0
                                                                let mut closure10 = || {
706
0
                                                                    return Some(pattern9_0);
707
0
                                                                };
708
0
                                                                if let Some(pattern10_0) =
709
0
                                                                    closure10()
710
                                                                {
711
0
                                                                    let (pattern11_0, pattern11_1) =
712
0
                                                                        C::at_loop_level(
713
0
                                                                            ctx,
714
0
                                                                            pattern10_0,
715
0
                                                                        );
716
0
                                                                    let mut closure12 = || {
717
0
                                                                        return Some(pattern9_1);
718
0
                                                                    };
719
0
                                                                    if let Some(pattern12_0) =
720
0
                                                                        closure12()
721
                                                                    {
722
                                                                        let (
723
0
                                                                            pattern13_0,
724
0
                                                                            pattern13_1,
725
0
                                                                        ) = C::at_loop_level(
726
0
                                                                            ctx,
727
0
                                                                            pattern12_0,
728
0
                                                                        );
729
0
                                                                        let mut closure14 = || {
730
0
                                                                            return Some(
731
0
                                                                                pattern4_1,
732
0
                                                                            );
733
0
                                                                        };
734
0
                                                                        if let Some(pattern14_0) =
735
0
                                                                            closure14()
736
                                                                        {
737
                                                                            let (
738
0
                                                                                pattern15_0,
739
0
                                                                                pattern15_1,
740
0
                                                                            ) = C::at_loop_level(
741
0
                                                                                ctx,
742
0
                                                                                pattern14_0,
743
0
                                                                            );
744
0
                                                                            let mut closure16 =
745
0
                                                                                || {
746
0
                                                                                    let expr0_0 = C::u8_lt(ctx, pattern11_0, pattern13_0)?;
747
0
                                                                                    return Some(
748
0
                                                                                        expr0_0,
749
0
                                                                                    );
750
0
                                                                                };
751
                                                                            if let Some(
752
0
                                                                                pattern16_0,
753
0
                                                                            ) = closure16()
754
                                                                            {
755
0
                                                                                let mut closure17 =
756
0
                                                                                    || {
757
0
                                                                                        let expr0_0 = C::u8_lt(ctx, pattern15_0, pattern13_0)?;
758
0
                                                                                        return Some(expr0_0);
759
0
                                                                                    };
760
                                                                                if let Some(
761
0
                                                                                    pattern17_0,
762
0
                                                                                ) = closure17()
763
                                                                                {
764
                                                                                    // Rule at src/opts/algebraic.isle line 158.
765
0
                                                                                    let expr0_0 = constructor_iadd(ctx, pattern1_0, pattern9_0, pattern4_1)?;
766
0
                                                                                    let expr1_0 = constructor_iadd(ctx, pattern1_0, expr0_0, pattern9_1)?;
767
0
                                                                                    returns.push(
768
0
                                                                                        expr1_0,
769
0
                                                                                    );
770
0
                                                                                }
771
0
                                                                            }
772
0
                                                                            let mut closure16 =
773
0
                                                                                || {
774
0
                                                                                    let expr0_0 = C::u8_lt(ctx, pattern13_0, pattern11_0)?;
775
0
                                                                                    return Some(
776
0
                                                                                        expr0_0,
777
0
                                                                                    );
778
0
                                                                                };
779
                                                                            if let Some(
780
0
                                                                                pattern16_0,
781
0
                                                                            ) = closure16()
782
                                                                            {
783
0
                                                                                let mut closure17 =
784
0
                                                                                    || {
785
0
                                                                                        let expr0_0 = C::u8_lt(ctx, pattern15_0, pattern11_0)?;
786
0
                                                                                        return Some(expr0_0);
787
0
                                                                                    };
788
                                                                                if let Some(
789
0
                                                                                    pattern17_0,
790
0
                                                                                ) = closure17()
791
                                                                                {
792
                                                                                    // Rule at src/opts/algebraic.isle line 165.
793
0
                                                                                    let expr0_0 = constructor_iadd(ctx, pattern1_0, pattern9_1, pattern4_1)?;
794
0
                                                                                    let expr1_0 = constructor_iadd(ctx, pattern1_0, expr0_0, pattern9_0)?;
795
0
                                                                                    returns.push(
796
0
                                                                                        expr1_0,
797
0
                                                                                    );
798
0
                                                                                }
799
0
                                                                            }
800
0
                                                                        }
801
0
                                                                    }
802
0
                                                                }
803
0
                                                                if let Some(mut iter) =
804
0
                                                                    C::enodes_etor(ctx, pattern9_1)
805
                                                                {
806
                                                                    while let Some((
807
0
                                                                        pattern10_0,
808
0
                                                                        pattern10_1,
809
0
                                                                        pattern10_2,
810
0
                                                                    )) = iter.next(ctx)
811
                                                                    {
812
0
                                                                        if pattern10_0 == pattern1_0
813
                                                                        {
814
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
815
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
816
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
817
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
818
0
                                                                                            while let Some((pattern15_0, pattern15_1, pattern15_2)) = iter.next(ctx) {
819
0
                                                                                                if pattern15_0 == pattern1_0 {
820
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern17_0, imm: pattern17_1 } = &pattern15_1 {
821
0
                                                                                                        if let &Opcode::Iconst  = pattern17_0 {
822
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern15_2) {
823
                                                                                                                // Rule at src/opts/cprop.isle line 89.
824
0
                                                                                                                let expr0_0 = constructor_iadd(ctx, pattern1_0, pattern9_1, pattern4_1)?;
825
0
                                                                                                                let expr1_0 = constructor_iadd(ctx, pattern1_0, pattern9_0, expr0_0)?;
826
0
                                                                                                                returns.push(expr1_0);
827
0
                                                                                                            }
828
0
                                                                                                        }
829
0
                                                                                                    }
830
0
                                                                                                }
831
                                                                                        }
832
0
                                                                                        }
833
0
                                                                                    }
834
0
                                                                                }
835
0
                                                                            }
836
0
                                                                        }
837
                                                                    }
838
0
                                                                }
839
0
                                                            }
840
                                                        }
841
                                                        &Opcode::Isub => {
842
0
                                                            if let Some((pattern9_0, pattern9_1)) =
843
0
                                                                C::id_array_2_etor(ctx, pattern5_2)
844
                                                            {
845
0
                                                                if let Some(mut iter) =
846
0
                                                                    C::enodes_etor(ctx, pattern9_0)
847
                                                                {
848
                                                                    while let Some((
849
0
                                                                        pattern10_0,
850
0
                                                                        pattern10_1,
851
0
                                                                        pattern10_2,
852
0
                                                                    )) = iter.next(ctx)
853
                                                                    {
854
0
                                                                        if pattern10_0 == pattern1_0
855
                                                                        {
856
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
857
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
858
0
                                                                                    let pattern14_0 = C::u64_from_imm64(ctx, pattern12_1);
859
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
860
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
861
0
                                                                                            while let Some((pattern16_0, pattern16_1, pattern16_2)) = iter.next(ctx) {
862
0
                                                                                                if pattern16_0 == pattern1_0 {
863
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern18_0, imm: pattern18_1 } = &pattern16_1 {
864
0
                                                                                                        if let &Opcode::Iconst  = pattern18_0 {
865
0
                                                                                                            let pattern20_0 = C::u64_from_imm64(ctx, pattern18_1);
866
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern16_2) {
867
                                                                                                                // Rule at src/opts/cprop.isle line 115.
868
0
                                                                                                                let expr0_0 = C::u64_add(ctx, pattern14_0, pattern20_0)?;
869
0
                                                                                                                let expr1_0 = C::imm64(ctx, expr0_0)?;
870
0
                                                                                                                let expr2_0 = constructor_iconst(ctx, pattern1_0, expr1_0)?;
871
0
                                                                                                                let expr3_0 = constructor_isub(ctx, pattern1_0, expr2_0, pattern9_1)?;
872
0
                                                                                                                returns.push(expr3_0);
873
0
                                                                                                            }
874
0
                                                                                                        }
875
0
                                                                                                    }
876
0
                                                                                                }
877
                                                                                        }
878
0
                                                                                        }
879
0
                                                                                    }
880
0
                                                                                }
881
0
                                                                            }
882
0
                                                                        }
883
                                                                    }
884
0
                                                                }
885
0
                                                                if let Some(mut iter) =
886
0
                                                                    C::enodes_etor(ctx, pattern9_1)
887
                                                                {
888
                                                                    while let Some((
889
0
                                                                        pattern10_0,
890
0
                                                                        pattern10_1,
891
0
                                                                        pattern10_2,
892
0
                                                                    )) = iter.next(ctx)
893
                                                                    {
894
0
                                                                        if pattern10_0 == pattern1_0
895
                                                                        {
896
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
897
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
898
0
                                                                                    let pattern14_0 = C::u64_from_imm64(ctx, pattern12_1);
899
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
900
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
901
0
                                                                                            while let Some((pattern16_0, pattern16_1, pattern16_2)) = iter.next(ctx) {
902
0
                                                                                                if pattern16_0 == pattern1_0 {
903
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern18_0, imm: pattern18_1 } = &pattern16_1 {
904
0
                                                                                                        if let &Opcode::Iconst  = pattern18_0 {
905
0
                                                                                                            let pattern20_0 = C::u64_from_imm64(ctx, pattern18_1);
906
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern16_2) {
907
                                                                                                                // Rule at src/opts/cprop.isle line 111.
908
0
                                                                                                                let expr0_0 = C::u64_sub(ctx, pattern20_0, pattern14_0)?;
909
0
                                                                                                                let expr1_0 = C::imm64(ctx, expr0_0)?;
910
0
                                                                                                                let expr2_0 = constructor_iconst(ctx, pattern1_0, expr1_0)?;
911
0
                                                                                                                let expr3_0 = constructor_iadd(ctx, pattern1_0, pattern9_0, expr2_0)?;
912
0
                                                                                                                returns.push(expr3_0);
913
0
                                                                                                            }
914
0
                                                                                                        }
915
0
                                                                                                    }
916
0
                                                                                                }
917
                                                                                        }
918
0
                                                                                        }
919
0
                                                                                    }
920
0
                                                                                }
921
0
                                                                            }
922
0
                                                                        }
923
                                                                    }
924
0
                                                                }
925
0
                                                            }
926
                                                        }
927
0
                                                        _ => {}
928
                                                    }
929
                                                }
930
                                                &InstructionImms::UnaryImm {
931
0
                                                    opcode: ref pattern7_0,
932
0
                                                    imm: pattern7_1,
933
0
                                                } => {
934
0
                                                    if let &Opcode::Iconst = pattern7_0 {
935
0
                                                        if let Some(()) =
936
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
937
0
                                                        {
938
0
                                                            // Rule at src/opts/cprop.isle line 62.
939
0
                                                            let expr0_0 = constructor_iadd(
940
0
                                                                ctx, pattern1_0, pattern4_1,
941
0
                                                                pattern4_0,
942
0
                                                            )?;
943
0
                                                            returns.push(expr0_0);
944
0
                                                        }
945
0
                                                        let pattern9_0 =
946
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
947
0
                                                        if pattern9_0 == 0i128 as u64 {
948
0
                                                            if let Some(()) =
949
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
950
0
                                                            {
951
0
                                                                // Rule at src/opts/algebraic.isle line 20.
952
0
                                                                let expr0_0 =
953
0
                                                                    C::subsume(ctx, pattern4_1);
954
0
                                                                returns.push(expr0_0);
955
0
                                                            }
956
0
                                                        }
957
0
                                                    }
958
                                                }
959
0
                                                _ => {}
960
                                            }
961
0
                                        }
962
                                        if let &InstructionImms::UnaryImm {
963
0
                                            opcode: ref pattern6_0,
964
0
                                            imm: pattern6_1,
965
0
                                        } = &pattern5_1
966
                                        {
967
0
                                            if let &Opcode::Iconst = pattern6_0 {
968
0
                                                if let Some(()) =
969
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
970
0
                                                {
971
0
                                                    // Rule at src/opts/algebraic.isle line 176.
972
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
973
0
                                                    returns.push(expr0_0);
974
0
                                                }
975
0
                                            }
976
0
                                        }
977
                                    }
978
0
                                }
979
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
980
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
981
0
                                        iter.next(ctx)
982
                                    {
983
0
                                        if pattern5_0 == pattern1_0 {
984
                                            if let &InstructionImms::UnaryImm {
985
0
                                                opcode: ref pattern7_0,
986
0
                                                imm: pattern7_1,
987
0
                                            } = &pattern5_1
988
                                            {
989
0
                                                if let &Opcode::Iconst = pattern7_0 {
990
0
                                                    let pattern9_0 =
991
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
992
0
                                                    if pattern9_0 == 0i128 as u64 {
993
0
                                                        if let Some(()) =
994
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
995
0
                                                        {
996
0
                                                            // Rule at src/opts/algebraic.isle line 16.
997
0
                                                            let expr0_0 =
998
0
                                                                C::subsume(ctx, pattern4_0);
999
0
                                                            returns.push(expr0_0);
1000
0
                                                        }
1001
0
                                                    }
1002
0
                                                }
1003
0
                                            }
1004
0
                                        }
1005
                                        if let &InstructionImms::UnaryImm {
1006
0
                                            opcode: ref pattern6_0,
1007
0
                                            imm: pattern6_1,
1008
0
                                        } = &pattern5_1
1009
                                        {
1010
0
                                            if let &Opcode::Iconst = pattern6_0 {
1011
0
                                                if let Some(()) =
1012
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1013
0
                                                {
1014
0
                                                    // Rule at src/opts/algebraic.isle line 178.
1015
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1016
0
                                                    returns.push(expr0_0);
1017
0
                                                }
1018
0
                                            }
1019
0
                                        }
1020
                                    }
1021
0
                                }
1022
0
                            }
1023
                        }
1024
                        &Opcode::Isub => {
1025
0
                            if let Some((pattern4_0, pattern4_1)) =
1026
0
                                C::id_array_2_etor(ctx, pattern1_2)
1027
                            {
1028
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
1029
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1030
0
                                        iter.next(ctx)
1031
                                    {
1032
0
                                        if pattern5_0 == pattern1_0 {
1033
0
                                            match &pattern5_1 {
1034
                                                &InstructionImms::Binary {
1035
0
                                                    opcode: ref pattern7_0,
1036
0
                                                } => {
1037
0
                                                    match pattern7_0 {
1038
                                                        &Opcode::Iadd => {
1039
0
                                                            if let Some((pattern9_0, pattern9_1)) =
1040
0
                                                                C::id_array_2_etor(ctx, pattern5_2)
1041
                                                            {
1042
0
                                                                if let Some(mut iter) =
1043
0
                                                                    C::enodes_etor(ctx, pattern9_1)
1044
                                                                {
1045
                                                                    while let Some((
1046
0
                                                                        pattern10_0,
1047
0
                                                                        pattern10_1,
1048
0
                                                                        pattern10_2,
1049
0
                                                                    )) = iter.next(ctx)
1050
                                                                    {
1051
0
                                                                        if pattern10_0 == pattern1_0
1052
                                                                        {
1053
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1054
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
1055
0
                                                                                    let pattern14_0 = C::u64_from_imm64(ctx, pattern12_1);
1056
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1057
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1058
0
                                                                                            while let Some((pattern16_0, pattern16_1, pattern16_2)) = iter.next(ctx) {
1059
0
                                                                                                if pattern16_0 == pattern1_0 {
1060
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern18_0, imm: pattern18_1 } = &pattern16_1 {
1061
0
                                                                                                        if let &Opcode::Iconst  = pattern18_0 {
1062
0
                                                                                                            let pattern20_0 = C::u64_from_imm64(ctx, pattern18_1);
1063
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern16_2) {
1064
                                                                                                                // Rule at src/opts/cprop.isle line 107.
1065
0
                                                                                                                let expr0_0 = C::u64_sub(ctx, pattern14_0, pattern20_0)?;
1066
0
                                                                                                                let expr1_0 = C::imm64(ctx, expr0_0)?;
1067
0
                                                                                                                let expr2_0 = constructor_iconst(ctx, pattern1_0, expr1_0)?;
1068
0
                                                                                                                let expr3_0 = constructor_isub(ctx, pattern1_0, pattern9_0, expr2_0)?;
1069
0
                                                                                                                returns.push(expr3_0);
1070
0
                                                                                                            }
1071
0
                                                                                                        }
1072
0
                                                                                                    }
1073
0
                                                                                                }
1074
                                                                                        }
1075
0
                                                                                        }
1076
0
                                                                                    }
1077
0
                                                                                }
1078
0
                                                                            }
1079
0
                                                                        }
1080
                                                                    }
1081
0
                                                                }
1082
0
                                                            }
1083
                                                        }
1084
                                                        &Opcode::Isub => {
1085
0
                                                            if let Some((pattern9_0, pattern9_1)) =
1086
0
                                                                C::id_array_2_etor(ctx, pattern5_2)
1087
                                                            {
1088
0
                                                                if let Some(mut iter) =
1089
0
                                                                    C::enodes_etor(ctx, pattern9_0)
1090
                                                                {
1091
                                                                    while let Some((
1092
0
                                                                        pattern10_0,
1093
0
                                                                        pattern10_1,
1094
0
                                                                        pattern10_2,
1095
0
                                                                    )) = iter.next(ctx)
1096
                                                                    {
1097
0
                                                                        if pattern10_0 == pattern1_0
1098
                                                                        {
1099
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1100
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
1101
0
                                                                                    let pattern14_0 = C::u64_from_imm64(ctx, pattern12_1);
1102
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1103
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1104
0
                                                                                            while let Some((pattern16_0, pattern16_1, pattern16_2)) = iter.next(ctx) {
1105
0
                                                                                                if pattern16_0 == pattern1_0 {
1106
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern18_0, imm: pattern18_1 } = &pattern16_1 {
1107
0
                                                                                                        if let &Opcode::Iconst  = pattern18_0 {
1108
0
                                                                                                            let pattern20_0 = C::u64_from_imm64(ctx, pattern18_1);
1109
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern16_2) {
1110
                                                                                                                // Rule at src/opts/cprop.isle line 103.
1111
0
                                                                                                                let expr0_0 = C::u64_sub(ctx, pattern14_0, pattern20_0)?;
1112
0
                                                                                                                let expr1_0 = C::imm64(ctx, expr0_0)?;
1113
0
                                                                                                                let expr2_0 = constructor_iconst(ctx, pattern1_0, expr1_0)?;
1114
0
                                                                                                                let expr3_0 = constructor_isub(ctx, pattern1_0, expr2_0, pattern9_1)?;
1115
0
                                                                                                                returns.push(expr3_0);
1116
0
                                                                                                            }
1117
0
                                                                                                        }
1118
0
                                                                                                    }
1119
0
                                                                                                }
1120
                                                                                        }
1121
0
                                                                                        }
1122
0
                                                                                    }
1123
0
                                                                                }
1124
0
                                                                            }
1125
0
                                                                        }
1126
                                                                    }
1127
0
                                                                }
1128
0
                                                                if let Some(mut iter) =
1129
0
                                                                    C::enodes_etor(ctx, pattern9_1)
1130
                                                                {
1131
                                                                    while let Some((
1132
0
                                                                        pattern10_0,
1133
0
                                                                        pattern10_1,
1134
0
                                                                        pattern10_2,
1135
0
                                                                    )) = iter.next(ctx)
1136
                                                                    {
1137
0
                                                                        if pattern10_0 == pattern1_0
1138
                                                                        {
1139
0
                                                                            if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1140
0
                                                                                if let &Opcode::Iconst  = pattern12_0 {
1141
0
                                                                                    let pattern14_0 = C::u64_from_imm64(ctx, pattern12_1);
1142
0
                                                                                    if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1143
0
                                                                                        if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1144
0
                                                                                            while let Some((pattern16_0, pattern16_1, pattern16_2)) = iter.next(ctx) {
1145
0
                                                                                                if pattern16_0 == pattern1_0 {
1146
0
                                                                                                    if let &InstructionImms::UnaryImm { opcode: ref pattern18_0, imm: pattern18_1 } = &pattern16_1 {
1147
0
                                                                                                        if let &Opcode::Iconst  = pattern18_0 {
1148
0
                                                                                                            let pattern20_0 = C::u64_from_imm64(ctx, pattern18_1);
1149
0
                                                                                                            if let Some(()) = C::id_array_0_etor(ctx, pattern16_2) {
1150
                                                                                                                // Rule at src/opts/cprop.isle line 99.
1151
0
                                                                                                                let expr0_0 = C::u64_add(ctx, pattern14_0, pattern20_0)?;
1152
0
                                                                                                                let expr1_0 = C::imm64(ctx, expr0_0)?;
1153
0
                                                                                                                let expr2_0 = constructor_iconst(ctx, pattern1_0, expr1_0)?;
1154
0
                                                                                                                let expr3_0 = constructor_isub(ctx, pattern1_0, pattern9_0, expr2_0)?;
1155
0
                                                                                                                returns.push(expr3_0);
1156
0
                                                                                                            }
1157
0
                                                                                                        }
1158
0
                                                                                                    }
1159
0
                                                                                                }
1160
                                                                                        }
1161
0
                                                                                        }
1162
0
                                                                                    }
1163
0
                                                                                }
1164
0
                                                                            }
1165
0
                                                                        }
1166
                                                                    }
1167
0
                                                                }
1168
0
                                                            }
1169
                                                        }
1170
0
                                                        _ => {}
1171
                                                    }
1172
                                                }
1173
                                                &InstructionImms::UnaryImm {
1174
0
                                                    opcode: ref pattern7_0,
1175
0
                                                    imm: pattern7_1,
1176
0
                                                } => {
1177
0
                                                    if let &Opcode::Iconst = pattern7_0 {
1178
0
                                                        if let Some(()) =
1179
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1180
                                                        {
1181
                                                            // Rule at src/opts/cprop.isle line 67.
1182
0
                                                            let expr0_0 = constructor_isub(
1183
0
                                                                ctx, pattern1_0, pattern4_1,
1184
0
                                                                pattern4_0,
1185
0
                                                            )?;
1186
0
                                                            let expr1_0 = constructor_ineg(
1187
0
                                                                ctx, pattern1_0, expr0_0,
1188
0
                                                            )?;
1189
0
                                                            returns.push(expr1_0);
1190
0
                                                        }
1191
0
                                                        let pattern9_0 =
1192
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
1193
0
                                                        if pattern9_0 == 0i128 as u64 {
1194
0
                                                            if let Some(()) =
1195
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1196
0
                                                            {
1197
0
                                                                // Rule at src/opts/algebraic.isle line 30.
1198
0
                                                                let expr0_0 = constructor_ineg(
1199
0
                                                                    ctx, pattern1_0, pattern4_1,
1200
0
                                                                )?;
1201
0
                                                                returns.push(expr0_0);
1202
0
                                                            }
1203
0
                                                        }
1204
0
                                                    }
1205
                                                }
1206
0
                                                _ => {}
1207
                                            }
1208
0
                                        }
1209
                                        if let &InstructionImms::UnaryImm {
1210
0
                                            opcode: ref pattern6_0,
1211
0
                                            imm: pattern6_1,
1212
0
                                        } = &pattern5_1
1213
                                        {
1214
0
                                            if let &Opcode::Iconst = pattern6_0 {
1215
0
                                                if let Some(()) =
1216
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1217
0
                                                {
1218
0
                                                    // Rule at src/opts/algebraic.isle line 180.
1219
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1220
0
                                                    returns.push(expr0_0);
1221
0
                                                }
1222
0
                                            }
1223
0
                                        }
1224
                                    }
1225
0
                                }
1226
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1227
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1228
0
                                        iter.next(ctx)
1229
                                    {
1230
0
                                        if pattern5_0 == pattern1_0 {
1231
                                            if let &InstructionImms::UnaryImm {
1232
0
                                                opcode: ref pattern7_0,
1233
0
                                                imm: pattern7_1,
1234
0
                                            } = &pattern5_1
1235
                                            {
1236
0
                                                if let &Opcode::Iconst = pattern7_0 {
1237
0
                                                    let pattern9_0 =
1238
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1239
0
                                                    if pattern9_0 == 0i128 as u64 {
1240
0
                                                        if let Some(()) =
1241
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1242
0
                                                        {
1243
0
                                                            // Rule at src/opts/algebraic.isle line 25.
1244
0
                                                            let expr0_0 =
1245
0
                                                                C::subsume(ctx, pattern4_0);
1246
0
                                                            returns.push(expr0_0);
1247
0
                                                        }
1248
0
                                                    }
1249
0
                                                }
1250
0
                                            }
1251
0
                                        }
1252
                                        if let &InstructionImms::UnaryImm {
1253
0
                                            opcode: ref pattern6_0,
1254
0
                                            imm: pattern6_1,
1255
0
                                        } = &pattern5_1
1256
                                        {
1257
0
                                            if let &Opcode::Iconst = pattern6_0 {
1258
0
                                                if let Some(()) =
1259
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1260
0
                                                {
1261
0
                                                    // Rule at src/opts/algebraic.isle line 182.
1262
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1263
0
                                                    returns.push(expr0_0);
1264
0
                                                }
1265
0
                                            }
1266
0
                                        }
1267
                                    }
1268
0
                                }
1269
0
                            }
1270
                        }
1271
                        &Opcode::Imul => {
1272
0
                            if let Some((pattern4_0, pattern4_1)) =
1273
0
                                C::id_array_2_etor(ctx, pattern1_2)
1274
                            {
1275
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
1276
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1277
0
                                        iter.next(ctx)
1278
                                    {
1279
0
                                        if pattern5_0 == pattern1_0 {
1280
0
                                            match &pattern5_1 {
1281
                                                &InstructionImms::Binary {
1282
0
                                                    opcode: ref pattern7_0,
1283
0
                                                } => {
1284
0
                                                    if let &Opcode::Imul = pattern7_0 {
1285
0
                                                        if let Some((pattern9_0, pattern9_1)) =
1286
0
                                                            C::id_array_2_etor(ctx, pattern5_2)
1287
                                                        {
1288
0
                                                            if let Some(mut iter) =
1289
0
                                                                C::enodes_etor(ctx, pattern9_1)
1290
                                                            {
1291
                                                                while let Some((
1292
0
                                                                    pattern10_0,
1293
0
                                                                    pattern10_1,
1294
0
                                                                    pattern10_2,
1295
0
                                                                )) = iter.next(ctx)
1296
                                                                {
1297
0
                                                                    if pattern10_0 == pattern1_0 {
1298
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1299
0
                                                                            if let &Opcode::Iconst  = pattern12_0 {
1300
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1301
0
                                                                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1302
0
                                                                                        while let Some((pattern15_0, pattern15_1, pattern15_2)) = iter.next(ctx) {
1303
0
                                                                                            if pattern15_0 == pattern1_0 {
1304
0
                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern17_0, imm: pattern17_1 } = &pattern15_1 {
1305
0
                                                                                                    if let &Opcode::Iconst  = pattern17_0 {
1306
0
                                                                                                        if let Some(()) = C::id_array_0_etor(ctx, pattern15_2) {
1307
                                                                                                            // Rule at src/opts/cprop.isle line 120.
1308
0
                                                                                                            let expr0_0 = constructor_imul(ctx, pattern1_0, pattern9_1, pattern4_1)?;
1309
0
                                                                                                            let expr1_0 = constructor_imul(ctx, pattern1_0, pattern9_0, expr0_0)?;
1310
0
                                                                                                            returns.push(expr1_0);
1311
0
                                                                                                        }
1312
0
                                                                                                    }
1313
0
                                                                                                }
1314
0
                                                                                            }
1315
                                                                                    }
1316
0
                                                                                    }
1317
0
                                                                                }
1318
0
                                                                            }
1319
0
                                                                        }
1320
0
                                                                    }
1321
                                                                }
1322
0
                                                            }
1323
0
                                                        }
1324
0
                                                    }
1325
                                                }
1326
                                                &InstructionImms::UnaryImm {
1327
0
                                                    opcode: ref pattern7_0,
1328
0
                                                    imm: pattern7_1,
1329
0
                                                } => {
1330
0
                                                    if let &Opcode::Iconst = pattern7_0 {
1331
0
                                                        if let Some(()) =
1332
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1333
0
                                                        {
1334
0
                                                            // Rule at src/opts/cprop.isle line 70.
1335
0
                                                            let expr0_0 = constructor_imul(
1336
0
                                                                ctx, pattern1_0, pattern4_1,
1337
0
                                                                pattern4_0,
1338
0
                                                            )?;
1339
0
                                                            returns.push(expr0_0);
1340
0
                                                        }
1341
0
                                                        let pattern9_0 =
1342
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
1343
0
                                                        if pattern9_0 == 0i128 as u64 {
1344
0
                                                            if let Some(()) =
1345
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1346
                                                            {
1347
                                                                // Rule at src/opts/algebraic.isle line 50.
1348
0
                                                                let expr0_0: u64 = 0i128 as u64;
1349
0
                                                                let expr1_0 =
1350
0
                                                                    C::imm64(ctx, expr0_0)?;
1351
0
                                                                let expr2_0 = constructor_iconst(
1352
0
                                                                    ctx, pattern1_0, expr1_0,
1353
0
                                                                )?;
1354
0
                                                                returns.push(expr2_0);
1355
0
                                                            }
1356
0
                                                        }
1357
0
                                                        if pattern9_0 == 1i128 as u64 {
1358
0
                                                            if let Some(()) =
1359
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1360
0
                                                            {
1361
0
                                                                // Rule at src/opts/algebraic.isle line 40.
1362
0
                                                                let expr0_0 =
1363
0
                                                                    C::subsume(ctx, pattern4_1);
1364
0
                                                                returns.push(expr0_0);
1365
0
                                                            }
1366
0
                                                        }
1367
0
                                                    }
1368
                                                }
1369
0
                                                _ => {}
1370
                                            }
1371
0
                                        }
1372
                                        if let &InstructionImms::UnaryImm {
1373
0
                                            opcode: ref pattern6_0,
1374
0
                                            imm: pattern6_1,
1375
0
                                        } = &pattern5_1
1376
                                        {
1377
0
                                            if let &Opcode::Iconst = pattern6_0 {
1378
0
                                                if let Some(pattern8_0) = C::simm32(ctx, pattern6_1)
1379
                                                {
1380
0
                                                    if pattern8_0 == 2i128 as u32 {
1381
0
                                                        if let Some(()) =
1382
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1383
0
                                                        {
1384
0
                                                            // Rule at src/opts/algebraic.isle line 144.
1385
0
                                                            let expr0_0 = constructor_iadd(
1386
0
                                                                ctx, pattern1_0, pattern4_1,
1387
0
                                                                pattern4_1,
1388
0
                                                            )?;
1389
0
                                                            returns.push(expr0_0);
1390
0
                                                        }
1391
0
                                                    }
1392
0
                                                }
1393
0
                                            }
1394
0
                                        }
1395
                                    }
1396
0
                                }
1397
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1398
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1399
0
                                        iter.next(ctx)
1400
                                    {
1401
0
                                        if pattern5_0 == pattern1_0 {
1402
                                            if let &InstructionImms::UnaryImm {
1403
0
                                                opcode: ref pattern7_0,
1404
0
                                                imm: pattern7_1,
1405
0
                                            } = &pattern5_1
1406
                                            {
1407
0
                                                if let &Opcode::Iconst = pattern7_0 {
1408
0
                                                    let pattern9_0 =
1409
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1410
0
                                                    if pattern9_0 == 0i128 as u64 {
1411
0
                                                        if let Some(()) =
1412
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1413
                                                        {
1414
                                                            // Rule at src/opts/algebraic.isle line 46.
1415
0
                                                            let expr0_0: u64 = 0i128 as u64;
1416
0
                                                            let expr1_0 = C::imm64(ctx, expr0_0)?;
1417
0
                                                            let expr2_0 = constructor_iconst(
1418
0
                                                                ctx, pattern1_0, expr1_0,
1419
0
                                                            )?;
1420
0
                                                            returns.push(expr2_0);
1421
0
                                                        }
1422
0
                                                    }
1423
0
                                                    if pattern9_0 == 1i128 as u64 {
1424
0
                                                        if let Some(()) =
1425
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1426
0
                                                        {
1427
0
                                                            // Rule at src/opts/algebraic.isle line 36.
1428
0
                                                            let expr0_0 =
1429
0
                                                                C::subsume(ctx, pattern4_0);
1430
0
                                                            returns.push(expr0_0);
1431
0
                                                        }
1432
0
                                                    }
1433
0
                                                }
1434
0
                                            }
1435
0
                                        }
1436
                                        if let &InstructionImms::UnaryImm {
1437
0
                                            opcode: ref pattern6_0,
1438
0
                                            imm: pattern6_1,
1439
0
                                        } = &pattern5_1
1440
                                        {
1441
0
                                            if let &Opcode::Iconst = pattern6_0 {
1442
0
                                                if let Some(pattern8_0) = C::simm32(ctx, pattern6_1)
1443
                                                {
1444
0
                                                    if pattern8_0 == 2i128 as u32 {
1445
0
                                                        if let Some(()) =
1446
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1447
0
                                                        {
1448
0
                                                            // Rule at src/opts/algebraic.isle line 142.
1449
0
                                                            let expr0_0 = constructor_iadd(
1450
0
                                                                ctx, pattern1_0, pattern4_0,
1451
0
                                                                pattern4_0,
1452
0
                                                            )?;
1453
0
                                                            returns.push(expr0_0);
1454
0
                                                        }
1455
0
                                                    }
1456
0
                                                }
1457
0
                                            }
1458
0
                                        }
1459
                                    }
1460
0
                                }
1461
0
                            }
1462
                        }
1463
                        &Opcode::Udiv => {
1464
0
                            if let Some((pattern4_0, pattern4_1)) =
1465
0
                                C::id_array_2_etor(ctx, pattern1_2)
1466
                            {
1467
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1468
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1469
0
                                        iter.next(ctx)
1470
                                    {
1471
0
                                        if pattern5_0 == pattern1_0 {
1472
                                            if let &InstructionImms::UnaryImm {
1473
0
                                                opcode: ref pattern7_0,
1474
0
                                                imm: pattern7_1,
1475
0
                                            } = &pattern5_1
1476
                                            {
1477
0
                                                if let &Opcode::Iconst = pattern7_0 {
1478
0
                                                    let pattern9_0 =
1479
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1480
0
                                                    if pattern9_0 == 1i128 as u64 {
1481
0
                                                        if let Some(()) =
1482
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1483
0
                                                        {
1484
0
                                                            // Rule at src/opts/algebraic.isle line 60.
1485
0
                                                            let expr0_0 =
1486
0
                                                                C::subsume(ctx, pattern4_0);
1487
0
                                                            returns.push(expr0_0);
1488
0
                                                        }
1489
0
                                                    }
1490
0
                                                }
1491
0
                                            }
1492
0
                                        }
1493
                                    }
1494
0
                                }
1495
0
                            }
1496
                        }
1497
                        &Opcode::Sdiv => {
1498
0
                            if let Some((pattern4_0, pattern4_1)) =
1499
0
                                C::id_array_2_etor(ctx, pattern1_2)
1500
                            {
1501
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1502
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1503
0
                                        iter.next(ctx)
1504
                                    {
1505
0
                                        if pattern5_0 == pattern1_0 {
1506
                                            if let &InstructionImms::UnaryImm {
1507
0
                                                opcode: ref pattern7_0,
1508
0
                                                imm: pattern7_1,
1509
0
                                            } = &pattern5_1
1510
                                            {
1511
0
                                                if let &Opcode::Iconst = pattern7_0 {
1512
0
                                                    let pattern9_0 =
1513
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1514
0
                                                    if pattern9_0 == 1i128 as u64 {
1515
0
                                                        if let Some(()) =
1516
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1517
0
                                                        {
1518
0
                                                            // Rule at src/opts/algebraic.isle line 56.
1519
0
                                                            let expr0_0 =
1520
0
                                                                C::subsume(ctx, pattern4_0);
1521
0
                                                            returns.push(expr0_0);
1522
0
                                                        }
1523
0
                                                    }
1524
0
                                                }
1525
0
                                            }
1526
0
                                        }
1527
                                    }
1528
0
                                }
1529
0
                            }
1530
                        }
1531
                        &Opcode::Band => {
1532
0
                            if let Some((pattern4_0, pattern4_1)) =
1533
0
                                C::id_array_2_etor(ctx, pattern1_2)
1534
                            {
1535
0
                                if pattern4_1 == pattern4_0 {
1536
0
                                    // Rule at src/opts/algebraic.isle line 120.
1537
0
                                    returns.push(pattern4_0);
1538
0
                                }
1539
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
1540
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1541
0
                                        iter.next(ctx)
1542
                                    {
1543
0
                                        if pattern5_0 == pattern1_0 {
1544
0
                                            match &pattern5_1 {
1545
                                                &InstructionImms::Binary {
1546
0
                                                    opcode: ref pattern7_0,
1547
0
                                                } => {
1548
0
                                                    if let &Opcode::Band = pattern7_0 {
1549
0
                                                        if let Some((pattern9_0, pattern9_1)) =
1550
0
                                                            C::id_array_2_etor(ctx, pattern5_2)
1551
                                                        {
1552
0
                                                            if let Some(mut iter) =
1553
0
                                                                C::enodes_etor(ctx, pattern9_1)
1554
                                                            {
1555
                                                                while let Some((
1556
0
                                                                    pattern10_0,
1557
0
                                                                    pattern10_1,
1558
0
                                                                    pattern10_2,
1559
0
                                                                )) = iter.next(ctx)
1560
                                                                {
1561
0
                                                                    if pattern10_0 == pattern1_0 {
1562
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1563
0
                                                                            if let &Opcode::Iconst  = pattern12_0 {
1564
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1565
0
                                                                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1566
0
                                                                                        while let Some((pattern15_0, pattern15_1, pattern15_2)) = iter.next(ctx) {
1567
0
                                                                                            if pattern15_0 == pattern1_0 {
1568
0
                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern17_0, imm: pattern17_1 } = &pattern15_1 {
1569
0
                                                                                                    if let &Opcode::Iconst  = pattern17_0 {
1570
0
                                                                                                        if let Some(()) = C::id_array_0_etor(ctx, pattern15_2) {
1571
                                                                                                            // Rule at src/opts/cprop.isle line 126.
1572
0
                                                                                                            let expr0_0 = constructor_band(ctx, pattern1_0, pattern9_1, pattern4_1)?;
1573
0
                                                                                                            let expr1_0 = constructor_band(ctx, pattern1_0, pattern9_0, expr0_0)?;
1574
0
                                                                                                            returns.push(expr1_0);
1575
0
                                                                                                        }
1576
0
                                                                                                    }
1577
0
                                                                                                }
1578
0
                                                                                            }
1579
                                                                                    }
1580
0
                                                                                    }
1581
0
                                                                                }
1582
0
                                                                            }
1583
0
                                                                        }
1584
0
                                                                    }
1585
                                                                }
1586
0
                                                            }
1587
0
                                                        }
1588
0
                                                    }
1589
                                                }
1590
                                                &InstructionImms::UnaryImm {
1591
0
                                                    opcode: ref pattern7_0,
1592
0
                                                    imm: pattern7_1,
1593
0
                                                } => {
1594
0
                                                    if let &Opcode::Iconst = pattern7_0 {
1595
0
                                                        if let Some(()) =
1596
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1597
0
                                                        {
1598
0
                                                            // Rule at src/opts/cprop.isle line 77.
1599
0
                                                            let expr0_0 = constructor_band(
1600
0
                                                                ctx, pattern1_0, pattern4_1,
1601
0
                                                                pattern4_0,
1602
0
                                                            )?;
1603
0
                                                            returns.push(expr0_0);
1604
0
                                                        }
1605
0
                                                        let pattern9_0 =
1606
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
1607
0
                                                        if pattern9_0 == 0i128 as u64 {
1608
0
                                                            if let Some(()) =
1609
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1610
                                                            {
1611
                                                                // Rule at src/opts/algebraic.isle line 128.
1612
0
                                                                let expr0_0: u64 = 0i128 as u64;
1613
0
                                                                let expr1_0 =
1614
0
                                                                    C::imm64(ctx, expr0_0)?;
1615
0
                                                                let expr2_0 = constructor_iconst(
1616
0
                                                                    ctx, pattern1_0, expr1_0,
1617
0
                                                                )?;
1618
0
                                                                returns.push(expr2_0);
1619
0
                                                            }
1620
0
                                                        }
1621
0
                                                    }
1622
                                                }
1623
0
                                                _ => {}
1624
                                            }
1625
0
                                        }
1626
                                        if let &InstructionImms::UnaryImm {
1627
0
                                            opcode: ref pattern6_0,
1628
0
                                            imm: pattern6_1,
1629
0
                                        } = &pattern5_1
1630
                                        {
1631
0
                                            if let &Opcode::Iconst = pattern6_0 {
1632
0
                                                if let Some(()) =
1633
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1634
0
                                                {
1635
0
                                                    // Rule at src/opts/algebraic.isle line 184.
1636
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1637
0
                                                    returns.push(expr0_0);
1638
0
                                                }
1639
0
                                            }
1640
0
                                        }
1641
                                    }
1642
0
                                }
1643
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1644
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1645
0
                                        iter.next(ctx)
1646
                                    {
1647
0
                                        if pattern5_0 == pattern1_0 {
1648
                                            if let &InstructionImms::UnaryImm {
1649
0
                                                opcode: ref pattern7_0,
1650
0
                                                imm: pattern7_1,
1651
0
                                            } = &pattern5_1
1652
                                            {
1653
0
                                                if let &Opcode::Iconst = pattern7_0 {
1654
0
                                                    let pattern9_0 =
1655
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1656
0
                                                    if pattern9_0 == 0i128 as u64 {
1657
0
                                                        if let Some(()) =
1658
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1659
                                                        {
1660
                                                            // Rule at src/opts/algebraic.isle line 127.
1661
0
                                                            let expr0_0: u64 = 0i128 as u64;
1662
0
                                                            let expr1_0 = C::imm64(ctx, expr0_0)?;
1663
0
                                                            let expr2_0 = constructor_iconst(
1664
0
                                                                ctx, pattern1_0, expr1_0,
1665
0
                                                            )?;
1666
0
                                                            returns.push(expr2_0);
1667
0
                                                        }
1668
0
                                                    }
1669
0
                                                }
1670
0
                                            }
1671
0
                                        }
1672
                                        if let &InstructionImms::UnaryImm {
1673
0
                                            opcode: ref pattern6_0,
1674
0
                                            imm: pattern6_1,
1675
0
                                        } = &pattern5_1
1676
                                        {
1677
0
                                            if let &Opcode::Iconst = pattern6_0 {
1678
0
                                                if let Some(()) =
1679
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1680
0
                                                {
1681
0
                                                    // Rule at src/opts/algebraic.isle line 186.
1682
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1683
0
                                                    returns.push(expr0_0);
1684
0
                                                }
1685
0
                                            }
1686
0
                                        }
1687
                                    }
1688
0
                                }
1689
0
                            }
1690
                        }
1691
                        &Opcode::Bor => {
1692
0
                            if let Some((pattern4_0, pattern4_1)) =
1693
0
                                C::id_array_2_etor(ctx, pattern1_2)
1694
                            {
1695
0
                                if pattern4_1 == pattern4_0 {
1696
0
                                    // Rule at src/opts/algebraic.isle line 96.
1697
0
                                    let expr0_0 = C::subsume(ctx, pattern4_0);
1698
0
                                    returns.push(expr0_0);
1699
0
                                }
1700
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
1701
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1702
0
                                        iter.next(ctx)
1703
                                    {
1704
0
                                        if pattern5_0 == pattern1_0 {
1705
0
                                            match &pattern5_1 {
1706
                                                &InstructionImms::Binary {
1707
0
                                                    opcode: ref pattern7_0,
1708
0
                                                } => {
1709
0
                                                    if let &Opcode::Bor = pattern7_0 {
1710
0
                                                        if let Some((pattern9_0, pattern9_1)) =
1711
0
                                                            C::id_array_2_etor(ctx, pattern5_2)
1712
                                                        {
1713
0
                                                            if let Some(mut iter) =
1714
0
                                                                C::enodes_etor(ctx, pattern9_1)
1715
                                                            {
1716
                                                                while let Some((
1717
0
                                                                    pattern10_0,
1718
0
                                                                    pattern10_1,
1719
0
                                                                    pattern10_2,
1720
0
                                                                )) = iter.next(ctx)
1721
                                                                {
1722
0
                                                                    if pattern10_0 == pattern1_0 {
1723
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1724
0
                                                                            if let &Opcode::Iconst  = pattern12_0 {
1725
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1726
0
                                                                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1727
0
                                                                                        while let Some((pattern15_0, pattern15_1, pattern15_2)) = iter.next(ctx) {
1728
0
                                                                                            if pattern15_0 == pattern1_0 {
1729
0
                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern17_0, imm: pattern17_1 } = &pattern15_1 {
1730
0
                                                                                                    if let &Opcode::Iconst  = pattern17_0 {
1731
0
                                                                                                        if let Some(()) = C::id_array_0_etor(ctx, pattern15_2) {
1732
                                                                                                            // Rule at src/opts/cprop.isle line 123.
1733
0
                                                                                                            let expr0_0 = constructor_bor(ctx, pattern1_0, pattern9_1, pattern4_1)?;
1734
0
                                                                                                            let expr1_0 = constructor_bor(ctx, pattern1_0, pattern9_0, expr0_0)?;
1735
0
                                                                                                            returns.push(expr1_0);
1736
0
                                                                                                        }
1737
0
                                                                                                    }
1738
0
                                                                                                }
1739
0
                                                                                            }
1740
                                                                                    }
1741
0
                                                                                    }
1742
0
                                                                                }
1743
0
                                                                            }
1744
0
                                                                        }
1745
0
                                                                    }
1746
                                                                }
1747
0
                                                            }
1748
0
                                                        }
1749
0
                                                    }
1750
                                                }
1751
                                                &InstructionImms::UnaryImm {
1752
0
                                                    opcode: ref pattern7_0,
1753
0
                                                    imm: pattern7_1,
1754
0
                                                } => {
1755
0
                                                    if let &Opcode::Iconst = pattern7_0 {
1756
0
                                                        if let Some(()) =
1757
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1758
0
                                                        {
1759
0
                                                            // Rule at src/opts/cprop.isle line 74.
1760
0
                                                            let expr0_0 = constructor_bor(
1761
0
                                                                ctx, pattern1_0, pattern4_1,
1762
0
                                                                pattern4_0,
1763
0
                                                            )?;
1764
0
                                                            returns.push(expr0_0);
1765
0
                                                        }
1766
0
                                                        let pattern9_0 =
1767
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
1768
0
                                                        if pattern9_0 == 0i128 as u64 {
1769
0
                                                            if let Some(()) =
1770
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1771
0
                                                            {
1772
0
                                                                // Rule at src/opts/algebraic.isle line 92.
1773
0
                                                                let expr0_0 =
1774
0
                                                                    C::subsume(ctx, pattern4_1);
1775
0
                                                                returns.push(expr0_0);
1776
0
                                                            }
1777
0
                                                        }
1778
0
                                                    }
1779
                                                }
1780
0
                                                _ => {}
1781
                                            }
1782
0
                                        }
1783
                                        if let &InstructionImms::UnaryImm {
1784
0
                                            opcode: ref pattern6_0,
1785
0
                                            imm: pattern6_1,
1786
0
                                        } = &pattern5_1
1787
                                        {
1788
0
                                            if let &Opcode::Iconst = pattern6_0 {
1789
0
                                                if let Some(()) =
1790
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1791
0
                                                {
1792
0
                                                    // Rule at src/opts/algebraic.isle line 188.
1793
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1794
0
                                                    returns.push(expr0_0);
1795
0
                                                }
1796
0
                                            }
1797
0
                                        }
1798
                                    }
1799
0
                                }
1800
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1801
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1802
0
                                        iter.next(ctx)
1803
                                    {
1804
0
                                        if pattern5_0 == pattern1_0 {
1805
                                            if let &InstructionImms::UnaryImm {
1806
0
                                                opcode: ref pattern7_0,
1807
0
                                                imm: pattern7_1,
1808
0
                                            } = &pattern5_1
1809
                                            {
1810
0
                                                if let &Opcode::Iconst = pattern7_0 {
1811
0
                                                    let pattern9_0 =
1812
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1813
0
                                                    if pattern9_0 == 0i128 as u64 {
1814
0
                                                        if let Some(()) =
1815
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1816
0
                                                        {
1817
0
                                                            // Rule at src/opts/algebraic.isle line 88.
1818
0
                                                            let expr0_0 =
1819
0
                                                                C::subsume(ctx, pattern4_0);
1820
0
                                                            returns.push(expr0_0);
1821
0
                                                        }
1822
0
                                                    }
1823
0
                                                }
1824
0
                                            }
1825
0
                                        }
1826
                                        if let &InstructionImms::UnaryImm {
1827
0
                                            opcode: ref pattern6_0,
1828
0
                                            imm: pattern6_1,
1829
0
                                        } = &pattern5_1
1830
                                        {
1831
0
                                            if let &Opcode::Iconst = pattern6_0 {
1832
0
                                                if let Some(()) =
1833
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1834
0
                                                {
1835
0
                                                    // Rule at src/opts/algebraic.isle line 190.
1836
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1837
0
                                                    returns.push(expr0_0);
1838
0
                                                }
1839
0
                                            }
1840
0
                                        }
1841
                                    }
1842
0
                                }
1843
0
                            }
1844
                        }
1845
                        &Opcode::Bxor => {
1846
0
                            if let Some((pattern4_0, pattern4_1)) =
1847
0
                                C::id_array_2_etor(ctx, pattern1_2)
1848
                            {
1849
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
1850
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1851
0
                                        iter.next(ctx)
1852
                                    {
1853
0
                                        if pattern5_0 == pattern1_0 {
1854
0
                                            match &pattern5_1 {
1855
                                                &InstructionImms::Binary {
1856
0
                                                    opcode: ref pattern7_0,
1857
0
                                                } => {
1858
0
                                                    if let &Opcode::Bxor = pattern7_0 {
1859
0
                                                        if let Some((pattern9_0, pattern9_1)) =
1860
0
                                                            C::id_array_2_etor(ctx, pattern5_2)
1861
                                                        {
1862
0
                                                            if let Some(mut iter) =
1863
0
                                                                C::enodes_etor(ctx, pattern9_1)
1864
                                                            {
1865
                                                                while let Some((
1866
0
                                                                    pattern10_0,
1867
0
                                                                    pattern10_1,
1868
0
                                                                    pattern10_2,
1869
0
                                                                )) = iter.next(ctx)
1870
                                                                {
1871
0
                                                                    if pattern10_0 == pattern1_0 {
1872
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern12_0, imm: pattern12_1 } = &pattern10_1 {
1873
0
                                                                            if let &Opcode::Iconst  = pattern12_0 {
1874
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern10_2) {
1875
0
                                                                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1876
0
                                                                                        while let Some((pattern15_0, pattern15_1, pattern15_2)) = iter.next(ctx) {
1877
0
                                                                                            if pattern15_0 == pattern1_0 {
1878
0
                                                                                                if let &InstructionImms::UnaryImm { opcode: ref pattern17_0, imm: pattern17_1 } = &pattern15_1 {
1879
0
                                                                                                    if let &Opcode::Iconst  = pattern17_0 {
1880
0
                                                                                                        if let Some(()) = C::id_array_0_etor(ctx, pattern15_2) {
1881
                                                                                                            // Rule at src/opts/cprop.isle line 129.
1882
0
                                                                                                            let expr0_0 = constructor_bxor(ctx, pattern1_0, pattern9_1, pattern4_1)?;
1883
0
                                                                                                            let expr1_0 = constructor_bxor(ctx, pattern1_0, pattern9_0, expr0_0)?;
1884
0
                                                                                                            returns.push(expr1_0);
1885
0
                                                                                                        }
1886
0
                                                                                                    }
1887
0
                                                                                                }
1888
0
                                                                                            }
1889
                                                                                    }
1890
0
                                                                                    }
1891
0
                                                                                }
1892
0
                                                                            }
1893
0
                                                                        }
1894
0
                                                                    }
1895
                                                                }
1896
0
                                                            }
1897
0
                                                        }
1898
0
                                                    }
1899
                                                }
1900
                                                &InstructionImms::UnaryImm {
1901
0
                                                    opcode: ref pattern7_0,
1902
0
                                                    imm: pattern7_1,
1903
0
                                                } => {
1904
0
                                                    if let &Opcode::Iconst = pattern7_0 {
1905
0
                                                        if let Some(()) =
1906
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1907
0
                                                        {
1908
0
                                                            // Rule at src/opts/cprop.isle line 80.
1909
0
                                                            let expr0_0 = constructor_bxor(
1910
0
                                                                ctx, pattern1_0, pattern4_1,
1911
0
                                                                pattern4_0,
1912
0
                                                            )?;
1913
0
                                                            returns.push(expr0_0);
1914
0
                                                        }
1915
0
                                                        let pattern9_0 =
1916
0
                                                            C::u64_from_imm64(ctx, pattern7_1);
1917
0
                                                        if pattern9_0 == 0i128 as u64 {
1918
0
                                                            if let Some(()) =
1919
0
                                                                C::id_array_0_etor(ctx, pattern5_2)
1920
0
                                                            {
1921
0
                                                                // Rule at src/opts/algebraic.isle line 104.
1922
0
                                                                let expr0_0 =
1923
0
                                                                    C::subsume(ctx, pattern4_1);
1924
0
                                                                returns.push(expr0_0);
1925
0
                                                            }
1926
0
                                                        }
1927
0
                                                    }
1928
                                                }
1929
0
                                                _ => {}
1930
                                            }
1931
0
                                        }
1932
                                        if let &InstructionImms::UnaryImm {
1933
0
                                            opcode: ref pattern6_0,
1934
0
                                            imm: pattern6_1,
1935
0
                                        } = &pattern5_1
1936
                                        {
1937
0
                                            if let &Opcode::Iconst = pattern6_0 {
1938
0
                                                if let Some(()) =
1939
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1940
0
                                                {
1941
0
                                                    // Rule at src/opts/algebraic.isle line 192.
1942
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1943
0
                                                    returns.push(expr0_0);
1944
0
                                                }
1945
0
                                            }
1946
0
                                        }
1947
                                    }
1948
0
                                }
1949
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1950
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
1951
0
                                        iter.next(ctx)
1952
                                    {
1953
0
                                        if pattern5_0 == pattern1_0 {
1954
                                            if let &InstructionImms::UnaryImm {
1955
0
                                                opcode: ref pattern7_0,
1956
0
                                                imm: pattern7_1,
1957
0
                                            } = &pattern5_1
1958
                                            {
1959
0
                                                if let &Opcode::Iconst = pattern7_0 {
1960
0
                                                    let pattern9_0 =
1961
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
1962
0
                                                    if pattern9_0 == 0i128 as u64 {
1963
0
                                                        if let Some(()) =
1964
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
1965
0
                                                        {
1966
0
                                                            // Rule at src/opts/algebraic.isle line 100.
1967
0
                                                            let expr0_0 =
1968
0
                                                                C::subsume(ctx, pattern4_0);
1969
0
                                                            returns.push(expr0_0);
1970
0
                                                        }
1971
0
                                                    }
1972
0
                                                }
1973
0
                                            }
1974
0
                                        }
1975
                                        if let &InstructionImms::UnaryImm {
1976
0
                                            opcode: ref pattern6_0,
1977
0
                                            imm: pattern6_1,
1978
0
                                        } = &pattern5_1
1979
                                        {
1980
0
                                            if let &Opcode::Iconst = pattern6_0 {
1981
0
                                                if let Some(()) =
1982
0
                                                    C::id_array_0_etor(ctx, pattern5_2)
1983
0
                                                {
1984
0
                                                    // Rule at src/opts/algebraic.isle line 194.
1985
0
                                                    let expr0_0 = C::remat(ctx, pattern0_0);
1986
0
                                                    returns.push(expr0_0);
1987
0
                                                }
1988
0
                                            }
1989
0
                                        }
1990
                                    }
1991
0
                                }
1992
0
                            }
1993
                        }
1994
                        &Opcode::Rotl => {
1995
0
                            if let Some((pattern4_0, pattern4_1)) =
1996
0
                                C::id_array_2_etor(ctx, pattern1_2)
1997
                            {
1998
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
1999
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2000
0
                                        iter.next(ctx)
2001
                                    {
2002
0
                                        if pattern5_0 == pattern1_0 {
2003
                                            if let &InstructionImms::UnaryImm {
2004
0
                                                opcode: ref pattern7_0,
2005
0
                                                imm: pattern7_1,
2006
0
                                            } = &pattern5_1
2007
                                            {
2008
0
                                                if let &Opcode::Iconst = pattern7_0 {
2009
0
                                                    let pattern9_0 =
2010
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
2011
0
                                                    if pattern9_0 == 0i128 as u64 {
2012
0
                                                        if let Some(()) =
2013
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
2014
0
                                                        {
2015
0
                                                            // Rule at src/opts/algebraic.isle line 82.
2016
0
                                                            let expr0_0 =
2017
0
                                                                C::subsume(ctx, pattern4_0);
2018
0
                                                            returns.push(expr0_0);
2019
0
                                                        }
2020
0
                                                    }
2021
0
                                                }
2022
0
                                            }
2023
0
                                        }
2024
                                    }
2025
0
                                }
2026
0
                            }
2027
                        }
2028
                        &Opcode::Rotr => {
2029
0
                            if let Some((pattern4_0, pattern4_1)) =
2030
0
                                C::id_array_2_etor(ctx, pattern1_2)
2031
                            {
2032
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
2033
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2034
0
                                        iter.next(ctx)
2035
                                    {
2036
0
                                        if pattern5_0 == pattern1_0 {
2037
                                            if let &InstructionImms::UnaryImm {
2038
0
                                                opcode: ref pattern7_0,
2039
0
                                                imm: pattern7_1,
2040
0
                                            } = &pattern5_1
2041
                                            {
2042
0
                                                if let &Opcode::Iconst = pattern7_0 {
2043
0
                                                    let pattern9_0 =
2044
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
2045
0
                                                    if pattern9_0 == 0i128 as u64 {
2046
0
                                                        if let Some(()) =
2047
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
2048
0
                                                        {
2049
0
                                                            // Rule at src/opts/algebraic.isle line 78.
2050
0
                                                            let expr0_0 =
2051
0
                                                                C::subsume(ctx, pattern4_0);
2052
0
                                                            returns.push(expr0_0);
2053
0
                                                        }
2054
0
                                                    }
2055
0
                                                }
2056
0
                                            }
2057
0
                                        }
2058
                                    }
2059
0
                                }
2060
0
                            }
2061
                        }
2062
                        &Opcode::Ishl => {
2063
0
                            if let Some((pattern4_0, pattern4_1)) =
2064
0
                                C::id_array_2_etor(ctx, pattern1_2)
2065
                            {
2066
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
2067
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2068
0
                                        iter.next(ctx)
2069
                                    {
2070
0
                                        if pattern5_0 == pattern1_0 {
2071
                                            if let &InstructionImms::UnaryImm {
2072
0
                                                opcode: ref pattern7_0,
2073
0
                                                imm: pattern7_1,
2074
0
                                            } = &pattern5_1
2075
                                            {
2076
0
                                                if let &Opcode::Iconst = pattern7_0 {
2077
0
                                                    let pattern9_0 =
2078
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
2079
0
                                                    if pattern9_0 == 0i128 as u64 {
2080
0
                                                        if let Some(()) =
2081
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
2082
0
                                                        {
2083
0
                                                            // Rule at src/opts/algebraic.isle line 66.
2084
0
                                                            let expr0_0 =
2085
0
                                                                C::subsume(ctx, pattern4_0);
2086
0
                                                            returns.push(expr0_0);
2087
0
                                                        }
2088
0
                                                    }
2089
0
                                                }
2090
0
                                            }
2091
0
                                        }
2092
                                    }
2093
0
                                }
2094
0
                            }
2095
                        }
2096
                        &Opcode::Ushr => {
2097
0
                            if let Some((pattern4_0, pattern4_1)) =
2098
0
                                C::id_array_2_etor(ctx, pattern1_2)
2099
                            {
2100
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
2101
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2102
0
                                        iter.next(ctx)
2103
                                    {
2104
0
                                        if pattern5_0 == pattern1_0 {
2105
                                            if let &InstructionImms::UnaryImm {
2106
0
                                                opcode: ref pattern7_0,
2107
0
                                                imm: pattern7_1,
2108
0
                                            } = &pattern5_1
2109
                                            {
2110
0
                                                if let &Opcode::Iconst = pattern7_0 {
2111
0
                                                    let pattern9_0 =
2112
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
2113
0
                                                    if pattern9_0 == 0i128 as u64 {
2114
0
                                                        if let Some(()) =
2115
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
2116
0
                                                        {
2117
0
                                                            // Rule at src/opts/algebraic.isle line 70.
2118
0
                                                            let expr0_0 =
2119
0
                                                                C::subsume(ctx, pattern4_0);
2120
0
                                                            returns.push(expr0_0);
2121
0
                                                        }
2122
0
                                                    }
2123
0
                                                }
2124
0
                                            }
2125
0
                                        }
2126
                                    }
2127
0
                                }
2128
0
                            }
2129
                        }
2130
                        &Opcode::Sshr => {
2131
0
                            if let Some((pattern4_0, pattern4_1)) =
2132
0
                                C::id_array_2_etor(ctx, pattern1_2)
2133
                            {
2134
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern4_1) {
2135
0
                                    while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2136
0
                                        iter.next(ctx)
2137
                                    {
2138
0
                                        if pattern5_0 == pattern1_0 {
2139
                                            if let &InstructionImms::UnaryImm {
2140
0
                                                opcode: ref pattern7_0,
2141
0
                                                imm: pattern7_1,
2142
0
                                            } = &pattern5_1
2143
                                            {
2144
0
                                                if let &Opcode::Iconst = pattern7_0 {
2145
0
                                                    let pattern9_0 =
2146
0
                                                        C::u64_from_imm64(ctx, pattern7_1);
2147
0
                                                    if pattern9_0 == 0i128 as u64 {
2148
0
                                                        if let Some(()) =
2149
0
                                                            C::id_array_0_etor(ctx, pattern5_2)
2150
0
                                                        {
2151
0
                                                            // Rule at src/opts/algebraic.isle line 74.
2152
0
                                                            let expr0_0 =
2153
0
                                                                C::subsume(ctx, pattern4_0);
2154
0
                                                            returns.push(expr0_0);
2155
0
                                                        }
2156
0
                                                    }
2157
0
                                                }
2158
0
                                            }
2159
0
                                        }
2160
                                    }
2161
0
                                }
2162
0
                            }
2163
                        }
2164
0
                        _ => {}
2165
                    }
2166
                }
2167
                &InstructionImms::Unary {
2168
0
                    opcode: ref pattern2_0,
2169
0
                } => {
2170
0
                    if let &Opcode::Bnot = pattern2_0 {
2171
0
                        if let Some(pattern4_0) = C::id_array_1_etor(ctx, pattern1_2) {
2172
0
                            if let Some(mut iter) = C::enodes_etor(ctx, pattern4_0) {
2173
0
                                while let Some((pattern5_0, pattern5_1, pattern5_2)) =
2174
0
                                    iter.next(ctx)
2175
                                {
2176
0
                                    if pattern5_0 == pattern1_0 {
2177
0
                                        match &pattern5_1 {
2178
                                            &InstructionImms::Binary {
2179
0
                                                opcode: ref pattern7_0,
2180
0
                                            } => {
2181
0
                                                if let &Opcode::Bor = pattern7_0 {
2182
0
                                                    if let Some((pattern9_0, pattern9_1)) =
2183
0
                                                        C::id_array_2_etor(ctx, pattern5_2)
2184
                                                    {
2185
                                                        // Rule at src/opts/algebraic.isle line 135.
2186
0
                                                        let expr0_0 = constructor_bnot(
2187
0
                                                            ctx, pattern1_0, pattern9_0,
2188
0
                                                        )?;
2189
0
                                                        let expr1_0 = constructor_bnot(
2190
0
                                                            ctx, pattern1_0, pattern9_1,
2191
0
                                                        )?;
2192
0
                                                        let expr2_0 = constructor_band(
2193
0
                                                            ctx, pattern1_0, expr0_0, expr1_0,
2194
0
                                                        )?;
2195
0
                                                        returns.push(expr2_0);
2196
0
                                                    }
2197
0
                                                }
2198
                                            }
2199
                                            &InstructionImms::Unary {
2200
0
                                                opcode: ref pattern7_0,
2201
0
                                            } => {
2202
0
                                                if let &Opcode::Bnot = pattern7_0 {
2203
0
                                                    if let Some(pattern9_0) =
2204
0
                                                        C::id_array_1_etor(ctx, pattern5_2)
2205
0
                                                    {
2206
0
                                                        // Rule at src/opts/algebraic.isle line 131.
2207
0
                                                        let expr0_0 = C::subsume(ctx, pattern9_0);
2208
0
                                                        returns.push(expr0_0);
2209
0
                                                    }
2210
0
                                                }
2211
                                            }
2212
0
                                            _ => {}
2213
                                        }
2214
0
                                    }
2215
                                    if let &InstructionImms::Binary {
2216
0
                                        opcode: ref pattern6_0,
2217
0
                                    } = &pattern5_1
2218
                                    {
2219
0
                                        if let &Opcode::Band = pattern6_0 {
2220
0
                                            if let Some((pattern8_0, pattern8_1)) =
2221
0
                                                C::id_array_2_etor(ctx, pattern5_2)
2222
                                            {
2223
                                                // Rule at src/opts/algebraic.isle line 138.
2224
0
                                                let expr0_0 =
2225
0
                                                    constructor_bnot(ctx, pattern1_0, pattern8_0)?;
2226
0
                                                let expr1_0 =
2227
0
                                                    constructor_bnot(ctx, pattern1_0, pattern8_1)?;
2228
0
                                                let expr2_0 = constructor_bor(
2229
0
                                                    ctx, pattern1_0, expr0_0, expr1_0,
2230
0
                                                )?;
2231
0
                                                returns.push(expr2_0);
2232
0
                                            }
2233
0
                                        }
2234
0
                                    }
2235
                                }
2236
0
                            }
2237
                            // Rule at src/opts/algebraic.isle line 196.
2238
0
                            let expr0_0 = C::remat(ctx, pattern0_0);
2239
0
                            returns.push(expr0_0);
2240
0
                        }
2241
0
                    }
2242
                }
2243
                &InstructionImms::UnaryIeee32 {
2244
0
                    opcode: ref pattern2_0,
2245
0
                    imm: pattern2_1,
2246
0
                } => {
2247
0
                    if let &Opcode::F32const = pattern2_0 {
2248
0
                        if let Some(()) = C::id_array_0_etor(ctx, pattern1_2) {
2249
0
                            // Rule at src/opts/algebraic.isle line 200.
2250
0
                            let expr0_0 = C::remat(ctx, pattern0_0);
2251
0
                            returns.push(expr0_0);
2252
0
                        }
2253
0
                    }
2254
                }
2255
                &InstructionImms::UnaryIeee64 {
2256
0
                    opcode: ref pattern2_0,
2257
0
                    imm: pattern2_1,
2258
0
                } => {
2259
0
                    if let &Opcode::F64const = pattern2_0 {
2260
0
                        if let Some(()) = C::id_array_0_etor(ctx, pattern1_2) {
2261
0
                            // Rule at src/opts/algebraic.isle line 202.
2262
0
                            let expr0_0 = C::remat(ctx, pattern0_0);
2263
0
                            returns.push(expr0_0);
2264
0
                        }
2265
0
                    }
2266
                }
2267
                &InstructionImms::UnaryImm {
2268
0
                    opcode: ref pattern2_0,
2269
0
                    imm: pattern2_1,
2270
0
                } => {
2271
0
                    if let &Opcode::Iconst = pattern2_0 {
2272
0
                        if let Some(()) = C::id_array_0_etor(ctx, pattern1_2) {
2273
0
                            // Rule at src/opts/algebraic.isle line 198.
2274
0
                            let expr0_0 = C::remat(ctx, pattern0_0);
2275
0
                            returns.push(expr0_0);
2276
0
                        }
2277
0
                    }
2278
                }
2279
0
                _ => {}
2280
            }
2281
0
            if let Some(pattern2_0) = C::fits_in_64(ctx, pattern1_0) {
2282
0
                match &pattern1_1 {
2283
                    &InstructionImms::Binary {
2284
0
                        opcode: ref pattern3_0,
2285
0
                    } => {
2286
0
                        match pattern3_0 {
2287
                            &Opcode::Iadd => {
2288
0
                                if let Some((pattern5_0, pattern5_1)) =
2289
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2290
                                {
2291
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2292
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2293
0
                                            iter.next(ctx)
2294
                                        {
2295
0
                                            if pattern6_0 == pattern2_0 {
2296
                                                if let &InstructionImms::UnaryImm {
2297
0
                                                    opcode: ref pattern8_0,
2298
0
                                                    imm: pattern8_1,
2299
0
                                                } = &pattern6_1
2300
                                                {
2301
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2302
0
                                                        let pattern10_0 =
2303
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2304
0
                                                        if let Some(()) =
2305
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2306
                                                        {
2307
0
                                                            if let Some(mut iter) =
2308
0
                                                                C::enodes_etor(ctx, pattern5_1)
2309
                                                            {
2310
                                                                while let Some((
2311
0
                                                                    pattern12_0,
2312
0
                                                                    pattern12_1,
2313
0
                                                                    pattern12_2,
2314
0
                                                                )) = iter.next(ctx)
2315
                                                                {
2316
0
                                                                    if pattern12_0 == pattern2_0 {
2317
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2318
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2319
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2320
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2321
                                                                                    // Rule at src/opts/cprop.isle line 3.
2322
0
                                                                                    let expr0_0 = C::u64_add(ctx, pattern10_0, pattern16_0)?;
2323
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2324
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2325
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2326
0
                                                                                    returns.push(expr3_0);
2327
0
                                                                                }
2328
0
                                                                            }
2329
0
                                                                        }
2330
0
                                                                    }
2331
                                                                }
2332
0
                                                            }
2333
0
                                                        }
2334
0
                                                    }
2335
0
                                                }
2336
0
                                            }
2337
                                        }
2338
0
                                    }
2339
0
                                }
2340
                            }
2341
                            &Opcode::Isub => {
2342
0
                                if let Some((pattern5_0, pattern5_1)) =
2343
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2344
                                {
2345
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2346
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2347
0
                                            iter.next(ctx)
2348
                                        {
2349
0
                                            if pattern6_0 == pattern2_0 {
2350
                                                if let &InstructionImms::UnaryImm {
2351
0
                                                    opcode: ref pattern8_0,
2352
0
                                                    imm: pattern8_1,
2353
0
                                                } = &pattern6_1
2354
                                                {
2355
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2356
0
                                                        let pattern10_0 =
2357
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2358
0
                                                        if let Some(()) =
2359
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2360
                                                        {
2361
0
                                                            if let Some(mut iter) =
2362
0
                                                                C::enodes_etor(ctx, pattern5_1)
2363
                                                            {
2364
                                                                while let Some((
2365
0
                                                                    pattern12_0,
2366
0
                                                                    pattern12_1,
2367
0
                                                                    pattern12_2,
2368
0
                                                                )) = iter.next(ctx)
2369
                                                                {
2370
0
                                                                    if pattern12_0 == pattern2_0 {
2371
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2372
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2373
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2374
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2375
                                                                                    // Rule at src/opts/cprop.isle line 9.
2376
0
                                                                                    let expr0_0 = C::u64_sub(ctx, pattern10_0, pattern16_0)?;
2377
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2378
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2379
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2380
0
                                                                                    returns.push(expr3_0);
2381
0
                                                                                }
2382
0
                                                                            }
2383
0
                                                                        }
2384
0
                                                                    }
2385
                                                                }
2386
0
                                                            }
2387
0
                                                        }
2388
0
                                                    }
2389
0
                                                }
2390
0
                                            }
2391
                                        }
2392
0
                                    }
2393
0
                                }
2394
                            }
2395
                            &Opcode::Imul => {
2396
0
                                if let Some((pattern5_0, pattern5_1)) =
2397
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2398
                                {
2399
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2400
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2401
0
                                            iter.next(ctx)
2402
                                        {
2403
0
                                            if pattern6_0 == pattern2_0 {
2404
                                                if let &InstructionImms::UnaryImm {
2405
0
                                                    opcode: ref pattern8_0,
2406
0
                                                    imm: pattern8_1,
2407
0
                                                } = &pattern6_1
2408
                                                {
2409
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2410
0
                                                        let pattern10_0 =
2411
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2412
0
                                                        if let Some(()) =
2413
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2414
                                                        {
2415
0
                                                            if let Some(mut iter) =
2416
0
                                                                C::enodes_etor(ctx, pattern5_1)
2417
                                                            {
2418
                                                                while let Some((
2419
0
                                                                    pattern12_0,
2420
0
                                                                    pattern12_1,
2421
0
                                                                    pattern12_2,
2422
0
                                                                )) = iter.next(ctx)
2423
                                                                {
2424
0
                                                                    if pattern12_0 == pattern2_0 {
2425
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2426
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2427
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2428
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2429
                                                                                    // Rule at src/opts/cprop.isle line 15.
2430
0
                                                                                    let expr0_0 = C::u64_mul(ctx, pattern10_0, pattern16_0)?;
2431
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2432
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2433
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2434
0
                                                                                    returns.push(expr3_0);
2435
0
                                                                                }
2436
0
                                                                            }
2437
0
                                                                        }
2438
0
                                                                    }
2439
                                                                }
2440
0
                                                            }
2441
0
                                                        }
2442
0
                                                    }
2443
0
                                                }
2444
0
                                            }
2445
                                        }
2446
0
                                    }
2447
0
                                }
2448
                            }
2449
                            &Opcode::Udiv => {
2450
0
                                if let Some((pattern5_0, pattern5_1)) =
2451
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2452
                                {
2453
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2454
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2455
0
                                            iter.next(ctx)
2456
                                        {
2457
0
                                            if pattern6_0 == pattern2_0 {
2458
                                                if let &InstructionImms::UnaryImm {
2459
0
                                                    opcode: ref pattern8_0,
2460
0
                                                    imm: pattern8_1,
2461
0
                                                } = &pattern6_1
2462
                                                {
2463
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2464
0
                                                        let pattern10_0 =
2465
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2466
0
                                                        if let Some(()) =
2467
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2468
                                                        {
2469
0
                                                            if let Some(mut iter) =
2470
0
                                                                C::enodes_etor(ctx, pattern5_1)
2471
                                                            {
2472
                                                                while let Some((
2473
0
                                                                    pattern12_0,
2474
0
                                                                    pattern12_1,
2475
0
                                                                    pattern12_2,
2476
0
                                                                )) = iter.next(ctx)
2477
                                                                {
2478
0
                                                                    if pattern12_0 == pattern2_0 {
2479
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2480
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2481
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2482
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2483
0
                                                                                    let mut closure18 = || {
2484
0
                                                                                        let expr0_0 = C::u64_udiv(ctx, pattern10_0, pattern16_0)?;
2485
0
                                                                                        return Some(expr0_0);
2486
0
                                                                                    };
2487
0
                                                                                    if let Some(pattern18_0) = closure18() {
2488
                                                                                        // Rule at src/opts/cprop.isle line 28.
2489
0
                                                                                        let expr0_0 = C::imm64(ctx, pattern18_0)?;
2490
0
                                                                                        let expr1_0 = constructor_iconst(ctx, pattern2_0, expr0_0)?;
2491
0
                                                                                        let expr2_0 = C::subsume(ctx, expr1_0);
2492
0
                                                                                        returns.push(expr2_0);
2493
0
                                                                                    }
2494
0
                                                                                }
2495
0
                                                                            }
2496
0
                                                                        }
2497
0
                                                                    }
2498
                                                                }
2499
0
                                                            }
2500
0
                                                        }
2501
0
                                                    }
2502
0
                                                }
2503
0
                                            }
2504
                                        }
2505
0
                                    }
2506
0
                                }
2507
                            }
2508
                            &Opcode::Sdiv => {
2509
0
                                if let Some((pattern5_0, pattern5_1)) =
2510
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2511
                                {
2512
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2513
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2514
0
                                            iter.next(ctx)
2515
                                        {
2516
0
                                            if pattern6_0 == pattern2_0 {
2517
                                                if let &InstructionImms::UnaryImm {
2518
0
                                                    opcode: ref pattern8_0,
2519
0
                                                    imm: pattern8_1,
2520
0
                                                } = &pattern6_1
2521
                                                {
2522
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2523
0
                                                        let pattern10_0 =
2524
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2525
0
                                                        if let Some(()) =
2526
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2527
                                                        {
2528
0
                                                            if let Some(mut iter) =
2529
0
                                                                C::enodes_etor(ctx, pattern5_1)
2530
                                                            {
2531
                                                                while let Some((
2532
0
                                                                    pattern12_0,
2533
0
                                                                    pattern12_1,
2534
0
                                                                    pattern12_2,
2535
0
                                                                )) = iter.next(ctx)
2536
                                                                {
2537
0
                                                                    if pattern12_0 == pattern2_0 {
2538
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2539
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2540
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2541
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2542
0
                                                                                    let mut closure18 = || {
2543
0
                                                                                        let expr0_0 = C::u64_sdiv(ctx, pattern10_0, pattern16_0)?;
2544
0
                                                                                        return Some(expr0_0);
2545
0
                                                                                    };
2546
0
                                                                                    if let Some(pattern18_0) = closure18() {
2547
                                                                                        // Rule at src/opts/cprop.isle line 21.
2548
0
                                                                                        let expr0_0 = C::imm64(ctx, pattern18_0)?;
2549
0
                                                                                        let expr1_0 = constructor_iconst(ctx, pattern2_0, expr0_0)?;
2550
0
                                                                                        let expr2_0 = C::subsume(ctx, expr1_0);
2551
0
                                                                                        returns.push(expr2_0);
2552
0
                                                                                    }
2553
0
                                                                                }
2554
0
                                                                            }
2555
0
                                                                        }
2556
0
                                                                    }
2557
                                                                }
2558
0
                                                            }
2559
0
                                                        }
2560
0
                                                    }
2561
0
                                                }
2562
0
                                            }
2563
                                        }
2564
0
                                    }
2565
0
                                }
2566
                            }
2567
                            &Opcode::Band => {
2568
0
                                if let Some((pattern5_0, pattern5_1)) =
2569
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2570
                                {
2571
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2572
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2573
0
                                            iter.next(ctx)
2574
                                        {
2575
0
                                            if pattern6_0 == pattern2_0 {
2576
                                                if let &InstructionImms::UnaryImm {
2577
0
                                                    opcode: ref pattern8_0,
2578
0
                                                    imm: pattern8_1,
2579
0
                                                } = &pattern6_1
2580
                                                {
2581
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2582
0
                                                        let pattern10_0 =
2583
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2584
0
                                                        if let Some(()) =
2585
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2586
                                                        {
2587
0
                                                            if let Some(mut iter) =
2588
0
                                                                C::enodes_etor(ctx, pattern5_1)
2589
                                                            {
2590
                                                                while let Some((
2591
0
                                                                    pattern12_0,
2592
0
                                                                    pattern12_1,
2593
0
                                                                    pattern12_2,
2594
0
                                                                )) = iter.next(ctx)
2595
                                                                {
2596
0
                                                                    if pattern12_0 == pattern2_0 {
2597
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2598
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2599
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2600
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2601
                                                                                    // Rule at src/opts/cprop.isle line 41.
2602
0
                                                                                    let expr0_0 = C::u64_and(ctx, pattern10_0, pattern16_0)?;
2603
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2604
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2605
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2606
0
                                                                                    returns.push(expr3_0);
2607
0
                                                                                }
2608
0
                                                                            }
2609
0
                                                                        }
2610
0
                                                                    }
2611
                                                                }
2612
0
                                                            }
2613
0
                                                        }
2614
0
                                                    }
2615
0
                                                }
2616
0
                                            }
2617
                                        }
2618
0
                                    }
2619
0
                                }
2620
                            }
2621
                            &Opcode::Bor => {
2622
0
                                if let Some((pattern5_0, pattern5_1)) =
2623
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2624
                                {
2625
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2626
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2627
0
                                            iter.next(ctx)
2628
                                        {
2629
0
                                            if pattern6_0 == pattern2_0 {
2630
                                                if let &InstructionImms::UnaryImm {
2631
0
                                                    opcode: ref pattern8_0,
2632
0
                                                    imm: pattern8_1,
2633
0
                                                } = &pattern6_1
2634
                                                {
2635
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2636
0
                                                        let pattern10_0 =
2637
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2638
0
                                                        if let Some(()) =
2639
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2640
                                                        {
2641
0
                                                            if let Some(mut iter) =
2642
0
                                                                C::enodes_etor(ctx, pattern5_1)
2643
                                                            {
2644
                                                                while let Some((
2645
0
                                                                    pattern12_0,
2646
0
                                                                    pattern12_1,
2647
0
                                                                    pattern12_2,
2648
0
                                                                )) = iter.next(ctx)
2649
                                                                {
2650
0
                                                                    if pattern12_0 == pattern2_0 {
2651
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2652
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2653
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2654
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2655
                                                                                    // Rule at src/opts/cprop.isle line 35.
2656
0
                                                                                    let expr0_0 = C::u64_or(ctx, pattern10_0, pattern16_0)?;
2657
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2658
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2659
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2660
0
                                                                                    returns.push(expr3_0);
2661
0
                                                                                }
2662
0
                                                                            }
2663
0
                                                                        }
2664
0
                                                                    }
2665
                                                                }
2666
0
                                                            }
2667
0
                                                        }
2668
0
                                                    }
2669
0
                                                }
2670
0
                                            }
2671
                                        }
2672
0
                                    }
2673
0
                                }
2674
                            }
2675
                            &Opcode::Bxor => {
2676
0
                                if let Some((pattern5_0, pattern5_1)) =
2677
0
                                    C::id_array_2_etor(ctx, pattern1_2)
2678
                                {
2679
0
                                    if pattern5_1 == pattern5_0 {
2680
                                        // Rule at src/opts/algebraic.isle line 110.
2681
0
                                        let expr0_0: u64 = 0i128 as u64;
2682
0
                                        let expr1_0 = C::imm64(ctx, expr0_0)?;
2683
0
                                        let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2684
0
                                        let expr3_0 = C::subsume(ctx, expr2_0);
2685
0
                                        returns.push(expr3_0);
2686
0
                                    }
2687
0
                                    if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2688
0
                                        while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2689
0
                                            iter.next(ctx)
2690
                                        {
2691
0
                                            if pattern6_0 == pattern2_0 {
2692
                                                if let &InstructionImms::UnaryImm {
2693
0
                                                    opcode: ref pattern8_0,
2694
0
                                                    imm: pattern8_1,
2695
0
                                                } = &pattern6_1
2696
                                                {
2697
0
                                                    if let &Opcode::Iconst = pattern8_0 {
2698
0
                                                        let pattern10_0 =
2699
0
                                                            C::u64_from_imm64(ctx, pattern8_1);
2700
0
                                                        if let Some(()) =
2701
0
                                                            C::id_array_0_etor(ctx, pattern6_2)
2702
                                                        {
2703
0
                                                            if let Some(mut iter) =
2704
0
                                                                C::enodes_etor(ctx, pattern5_1)
2705
                                                            {
2706
                                                                while let Some((
2707
0
                                                                    pattern12_0,
2708
0
                                                                    pattern12_1,
2709
0
                                                                    pattern12_2,
2710
0
                                                                )) = iter.next(ctx)
2711
                                                                {
2712
0
                                                                    if pattern12_0 == pattern2_0 {
2713
0
                                                                        if let &InstructionImms::UnaryImm { opcode: ref pattern14_0, imm: pattern14_1 } = &pattern12_1 {
2714
0
                                                                            if let &Opcode::Iconst  = pattern14_0 {
2715
0
                                                                                let pattern16_0 = C::u64_from_imm64(ctx, pattern14_1);
2716
0
                                                                                if let Some(()) = C::id_array_0_etor(ctx, pattern12_2) {
2717
                                                                                    // Rule at src/opts/cprop.isle line 47.
2718
0
                                                                                    let expr0_0 = C::u64_xor(ctx, pattern10_0, pattern16_0)?;
2719
0
                                                                                    let expr1_0 = C::imm64(ctx, expr0_0)?;
2720
0
                                                                                    let expr2_0 = constructor_iconst(ctx, pattern2_0, expr1_0)?;
2721
0
                                                                                    let expr3_0 = C::subsume(ctx, expr2_0);
2722
0
                                                                                    returns.push(expr3_0);
2723
0
                                                                                }
2724
0
                                                                            }
2725
0
                                                                        }
2726
0
                                                                    }
2727
                                                                }
2728
0
                                                            }
2729
0
                                                        }
2730
0
                                                    }
2731
0
                                                }
2732
0
                                            }
2733
                                        }
2734
0
                                    }
2735
0
                                }
2736
                            }
2737
0
                            _ => {}
2738
                        }
2739
                    }
2740
                    &InstructionImms::Unary {
2741
0
                        opcode: ref pattern3_0,
2742
0
                    } => {
2743
0
                        if let &Opcode::Bnot = pattern3_0 {
2744
0
                            if let Some(pattern5_0) = C::id_array_1_etor(ctx, pattern1_2) {
2745
0
                                if let Some(mut iter) = C::enodes_etor(ctx, pattern5_0) {
2746
0
                                    while let Some((pattern6_0, pattern6_1, pattern6_2)) =
2747
0
                                        iter.next(ctx)
2748
                                    {
2749
0
                                        if pattern6_0 == pattern2_0 {
2750
                                            if let &InstructionImms::UnaryImm {
2751
0
                                                opcode: ref pattern8_0,
2752
0
                                                imm: pattern8_1,
2753
0
                                            } = &pattern6_1
2754
                                            {
2755
0
                                                if let &Opcode::Iconst = pattern8_0 {
2756
0
                                                    let pattern10_0 =
2757
0
                                                        C::u64_from_imm64(ctx, pattern8_1);
2758
0
                                                    if let Some(()) =
2759
0
                                                        C::id_array_0_etor(ctx, pattern6_2)
2760
                                                    {
2761
                                                        // Rule at src/opts/cprop.isle line 53.
2762
0
                                                        let expr0_0 = C::u64_not(ctx, pattern10_0)?;
2763
0
                                                        let expr1_0 = C::imm64(ctx, expr0_0)?;
2764
0
                                                        let expr2_0 = constructor_iconst(
2765
0
                                                            ctx, pattern2_0, expr1_0,
2766
0
                                                        )?;
2767
0
                                                        let expr3_0 = C::subsume(ctx, expr2_0);
2768
0
                                                        returns.push(expr3_0);
2769
0
                                                    }
2770
0
                                                }
2771
0
                                            }
2772
0
                                        }
2773
                                    }
2774
0
                                }
2775
0
                            }
2776
0
                        }
2777
                    }
2778
0
                    _ => {}
2779
                }
2780
0
            }
2781
        }
2782
0
    }
2783
0
    return Some(ContextIterWrapper::from(returns.into_iter()));
2784
0
}
2785
2786
// Generated as internal constructor for term br_table.
2787
0
pub fn constructor_br_table<C: Context>(
2788
0
    ctx: &mut C,
2789
0
    arg0: Type,
2790
0
    arg1: Id,
2791
0
    arg2: Block,
2792
0
    arg3: JumpTable,
2793
0
) -> Option<Id> {
2794
0
    let pattern0_0 = arg0;
2795
0
    let pattern1_0 = arg1;
2796
0
    let pattern2_0 = arg2;
2797
0
    let pattern3_0 = arg3;
2798
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 352.
2799
0
    let expr0_0 = Opcode::BrTable;
2800
0
    let expr1_0 = InstructionImms::BranchTable {
2801
0
        opcode: expr0_0,
2802
0
        destination: pattern2_0,
2803
0
        table: pattern3_0,
2804
0
    };
2805
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2806
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2807
0
    return Some(expr3_0);
2808
0
}
2809
2810
// Generated as internal constructor for term debugtrap.
2811
0
pub fn constructor_debugtrap<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
2812
0
    let pattern0_0 = arg0;
2813
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 361.
2814
0
    let expr0_0 = Opcode::Debugtrap;
2815
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
2816
0
    let expr2_0 = C::id_array_0_ctor(ctx);
2817
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2818
0
    return Some(expr3_0);
2819
0
}
2820
2821
// Generated as internal constructor for term trap.
2822
0
pub fn constructor_trap<C: Context>(ctx: &mut C, arg0: Type, arg1: &TrapCode) -> Option<Id> {
2823
0
    let pattern0_0 = arg0;
2824
0
    let pattern1_0 = arg1;
2825
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 370.
2826
0
    let expr0_0 = Opcode::Trap;
2827
0
    let expr1_0 = InstructionImms::Trap {
2828
0
        opcode: expr0_0,
2829
0
        code: pattern1_0.clone(),
2830
0
    };
2831
0
    let expr2_0 = C::id_array_0_ctor(ctx);
2832
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2833
0
    return Some(expr3_0);
2834
0
}
2835
2836
// Generated as internal constructor for term trapz.
2837
0
pub fn constructor_trapz<C: Context>(
2838
0
    ctx: &mut C,
2839
0
    arg0: Type,
2840
0
    arg1: Id,
2841
0
    arg2: &TrapCode,
2842
0
) -> Option<Id> {
2843
0
    let pattern0_0 = arg0;
2844
0
    let pattern1_0 = arg1;
2845
0
    let pattern2_0 = arg2;
2846
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 379.
2847
0
    let expr0_0 = Opcode::Trapz;
2848
0
    let expr1_0 = InstructionImms::CondTrap {
2849
0
        opcode: expr0_0,
2850
0
        code: pattern2_0.clone(),
2851
0
    };
2852
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2853
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2854
0
    return Some(expr3_0);
2855
0
}
2856
2857
// Generated as internal constructor for term resumable_trap.
2858
0
pub fn constructor_resumable_trap<C: Context>(
2859
0
    ctx: &mut C,
2860
0
    arg0: Type,
2861
0
    arg1: &TrapCode,
2862
0
) -> Option<Id> {
2863
0
    let pattern0_0 = arg0;
2864
0
    let pattern1_0 = arg1;
2865
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 388.
2866
0
    let expr0_0 = Opcode::ResumableTrap;
2867
0
    let expr1_0 = InstructionImms::Trap {
2868
0
        opcode: expr0_0,
2869
0
        code: pattern1_0.clone(),
2870
0
    };
2871
0
    let expr2_0 = C::id_array_0_ctor(ctx);
2872
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2873
0
    return Some(expr3_0);
2874
0
}
2875
2876
// Generated as internal constructor for term trapnz.
2877
0
pub fn constructor_trapnz<C: Context>(
2878
0
    ctx: &mut C,
2879
0
    arg0: Type,
2880
0
    arg1: Id,
2881
0
    arg2: &TrapCode,
2882
0
) -> Option<Id> {
2883
0
    let pattern0_0 = arg0;
2884
0
    let pattern1_0 = arg1;
2885
0
    let pattern2_0 = arg2;
2886
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 397.
2887
0
    let expr0_0 = Opcode::Trapnz;
2888
0
    let expr1_0 = InstructionImms::CondTrap {
2889
0
        opcode: expr0_0,
2890
0
        code: pattern2_0.clone(),
2891
0
    };
2892
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2893
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2894
0
    return Some(expr3_0);
2895
0
}
2896
2897
// Generated as internal constructor for term resumable_trapnz.
2898
0
pub fn constructor_resumable_trapnz<C: Context>(
2899
0
    ctx: &mut C,
2900
0
    arg0: Type,
2901
0
    arg1: Id,
2902
0
    arg2: &TrapCode,
2903
0
) -> Option<Id> {
2904
0
    let pattern0_0 = arg0;
2905
0
    let pattern1_0 = arg1;
2906
0
    let pattern2_0 = arg2;
2907
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 406.
2908
0
    let expr0_0 = Opcode::ResumableTrapnz;
2909
0
    let expr1_0 = InstructionImms::CondTrap {
2910
0
        opcode: expr0_0,
2911
0
        code: pattern2_0.clone(),
2912
0
    };
2913
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2914
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2915
0
    return Some(expr3_0);
2916
0
}
2917
2918
// Generated as internal constructor for term func_addr.
2919
0
pub fn constructor_func_addr<C: Context>(ctx: &mut C, arg0: Type, arg1: FuncRef) -> Option<Id> {
2920
0
    let pattern0_0 = arg0;
2921
0
    let pattern1_0 = arg1;
2922
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 415.
2923
0
    let expr0_0 = Opcode::FuncAddr;
2924
0
    let expr1_0 = InstructionImms::FuncAddr {
2925
0
        opcode: expr0_0,
2926
0
        func_ref: pattern1_0,
2927
0
    };
2928
0
    let expr2_0 = C::id_array_0_ctor(ctx);
2929
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2930
0
    return Some(expr3_0);
2931
0
}
2932
2933
// Generated as internal constructor for term splat.
2934
0
pub fn constructor_splat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
2935
0
    let pattern0_0 = arg0;
2936
0
    let pattern1_0 = arg1;
2937
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 424.
2938
0
    let expr0_0 = Opcode::Splat;
2939
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
2940
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2941
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2942
0
    return Some(expr3_0);
2943
0
}
2944
2945
// Generated as internal constructor for term swizzle.
2946
0
pub fn constructor_swizzle<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
2947
0
    let pattern0_0 = arg0;
2948
0
    let pattern1_0 = arg1;
2949
0
    let pattern2_0 = arg2;
2950
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 433.
2951
0
    let expr0_0 = Opcode::Swizzle;
2952
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
2953
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
2954
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2955
0
    return Some(expr3_0);
2956
0
}
2957
2958
// Generated as internal constructor for term insertlane.
2959
0
pub fn constructor_insertlane<C: Context>(
2960
0
    ctx: &mut C,
2961
0
    arg0: Type,
2962
0
    arg1: Id,
2963
0
    arg2: Id,
2964
0
    arg3: Uimm8,
2965
0
) -> Option<Id> {
2966
0
    let pattern0_0 = arg0;
2967
0
    let pattern1_0 = arg1;
2968
0
    let pattern2_0 = arg2;
2969
0
    let pattern3_0 = arg3;
2970
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 442.
2971
0
    let expr0_0 = Opcode::Insertlane;
2972
0
    let expr1_0 = InstructionImms::TernaryImm8 {
2973
0
        opcode: expr0_0,
2974
0
        imm: pattern3_0,
2975
0
    };
2976
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
2977
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2978
0
    return Some(expr3_0);
2979
0
}
2980
2981
// Generated as internal constructor for term extractlane.
2982
0
pub fn constructor_extractlane<C: Context>(
2983
0
    ctx: &mut C,
2984
0
    arg0: Type,
2985
0
    arg1: Id,
2986
0
    arg2: Uimm8,
2987
0
) -> Option<Id> {
2988
0
    let pattern0_0 = arg0;
2989
0
    let pattern1_0 = arg1;
2990
0
    let pattern2_0 = arg2;
2991
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 451.
2992
0
    let expr0_0 = Opcode::Extractlane;
2993
0
    let expr1_0 = InstructionImms::BinaryImm8 {
2994
0
        opcode: expr0_0,
2995
0
        imm: pattern2_0,
2996
0
    };
2997
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
2998
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
2999
0
    return Some(expr3_0);
3000
0
}
3001
3002
// Generated as internal constructor for term smin.
3003
0
pub fn constructor_smin<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3004
0
    let pattern0_0 = arg0;
3005
0
    let pattern1_0 = arg1;
3006
0
    let pattern2_0 = arg2;
3007
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 460.
3008
0
    let expr0_0 = Opcode::Smin;
3009
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3010
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3011
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3012
0
    return Some(expr3_0);
3013
0
}
3014
3015
// Generated as internal constructor for term umin.
3016
0
pub fn constructor_umin<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3017
0
    let pattern0_0 = arg0;
3018
0
    let pattern1_0 = arg1;
3019
0
    let pattern2_0 = arg2;
3020
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 469.
3021
0
    let expr0_0 = Opcode::Umin;
3022
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3023
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3024
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3025
0
    return Some(expr3_0);
3026
0
}
3027
3028
// Generated as internal constructor for term smax.
3029
0
pub fn constructor_smax<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3030
0
    let pattern0_0 = arg0;
3031
0
    let pattern1_0 = arg1;
3032
0
    let pattern2_0 = arg2;
3033
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 478.
3034
0
    let expr0_0 = Opcode::Smax;
3035
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3036
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3037
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3038
0
    return Some(expr3_0);
3039
0
}
3040
3041
// Generated as internal constructor for term umax.
3042
0
pub fn constructor_umax<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3043
0
    let pattern0_0 = arg0;
3044
0
    let pattern1_0 = arg1;
3045
0
    let pattern2_0 = arg2;
3046
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 487.
3047
0
    let expr0_0 = Opcode::Umax;
3048
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3049
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3050
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3051
0
    return Some(expr3_0);
3052
0
}
3053
3054
// Generated as internal constructor for term avg_round.
3055
0
pub fn constructor_avg_round<C: Context>(
3056
0
    ctx: &mut C,
3057
0
    arg0: Type,
3058
0
    arg1: Id,
3059
0
    arg2: Id,
3060
0
) -> Option<Id> {
3061
0
    let pattern0_0 = arg0;
3062
0
    let pattern1_0 = arg1;
3063
0
    let pattern2_0 = arg2;
3064
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 496.
3065
0
    let expr0_0 = Opcode::AvgRound;
3066
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3067
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3068
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3069
0
    return Some(expr3_0);
3070
0
}
3071
3072
// Generated as internal constructor for term uadd_sat.
3073
0
pub fn constructor_uadd_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3074
0
    let pattern0_0 = arg0;
3075
0
    let pattern1_0 = arg1;
3076
0
    let pattern2_0 = arg2;
3077
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 505.
3078
0
    let expr0_0 = Opcode::UaddSat;
3079
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3080
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3081
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3082
0
    return Some(expr3_0);
3083
0
}
3084
3085
// Generated as internal constructor for term sadd_sat.
3086
0
pub fn constructor_sadd_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3087
0
    let pattern0_0 = arg0;
3088
0
    let pattern1_0 = arg1;
3089
0
    let pattern2_0 = arg2;
3090
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 514.
3091
0
    let expr0_0 = Opcode::SaddSat;
3092
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3093
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3094
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3095
0
    return Some(expr3_0);
3096
0
}
3097
3098
// Generated as internal constructor for term usub_sat.
3099
0
pub fn constructor_usub_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3100
0
    let pattern0_0 = arg0;
3101
0
    let pattern1_0 = arg1;
3102
0
    let pattern2_0 = arg2;
3103
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 523.
3104
0
    let expr0_0 = Opcode::UsubSat;
3105
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3106
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3107
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3108
0
    return Some(expr3_0);
3109
0
}
3110
3111
// Generated as internal constructor for term ssub_sat.
3112
0
pub fn constructor_ssub_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
3113
0
    let pattern0_0 = arg0;
3114
0
    let pattern1_0 = arg1;
3115
0
    let pattern2_0 = arg2;
3116
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 532.
3117
0
    let expr0_0 = Opcode::SsubSat;
3118
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
3119
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3120
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3121
0
    return Some(expr3_0);
3122
0
}
3123
3124
// Generated as internal constructor for term load.
3125
0
pub fn constructor_load<C: Context>(
3126
0
    ctx: &mut C,
3127
0
    arg0: Type,
3128
0
    arg1: MemFlags,
3129
0
    arg2: Id,
3130
0
    arg3: Offset32,
3131
0
) -> Option<Id> {
3132
0
    let pattern0_0 = arg0;
3133
0
    let pattern1_0 = arg1;
3134
0
    let pattern2_0 = arg2;
3135
0
    let pattern3_0 = arg3;
3136
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 541.
3137
0
    let expr0_0 = Opcode::Load;
3138
0
    let expr1_0 = InstructionImms::Load {
3139
0
        opcode: expr0_0,
3140
0
        flags: pattern1_0,
3141
0
        offset: pattern3_0,
3142
0
    };
3143
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3144
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3145
0
    return Some(expr3_0);
3146
0
}
3147
3148
// Generated as internal constructor for term store.
3149
0
pub fn constructor_store<C: Context>(
3150
0
    ctx: &mut C,
3151
0
    arg0: Type,
3152
0
    arg1: MemFlags,
3153
0
    arg2: Id,
3154
0
    arg3: Id,
3155
0
    arg4: Offset32,
3156
0
) -> Option<Id> {
3157
0
    let pattern0_0 = arg0;
3158
0
    let pattern1_0 = arg1;
3159
0
    let pattern2_0 = arg2;
3160
0
    let pattern3_0 = arg3;
3161
0
    let pattern4_0 = arg4;
3162
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 550.
3163
0
    let expr0_0 = Opcode::Store;
3164
0
    let expr1_0 = InstructionImms::Store {
3165
0
        opcode: expr0_0,
3166
0
        flags: pattern1_0,
3167
0
        offset: pattern4_0,
3168
0
    };
3169
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
3170
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3171
0
    return Some(expr3_0);
3172
0
}
3173
3174
// Generated as internal constructor for term uload8.
3175
0
pub fn constructor_uload8<C: Context>(
3176
0
    ctx: &mut C,
3177
0
    arg0: Type,
3178
0
    arg1: MemFlags,
3179
0
    arg2: Id,
3180
0
    arg3: Offset32,
3181
0
) -> Option<Id> {
3182
0
    let pattern0_0 = arg0;
3183
0
    let pattern1_0 = arg1;
3184
0
    let pattern2_0 = arg2;
3185
0
    let pattern3_0 = arg3;
3186
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 559.
3187
0
    let expr0_0 = Opcode::Uload8;
3188
0
    let expr1_0 = InstructionImms::Load {
3189
0
        opcode: expr0_0,
3190
0
        flags: pattern1_0,
3191
0
        offset: pattern3_0,
3192
0
    };
3193
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3194
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3195
0
    return Some(expr3_0);
3196
0
}
3197
3198
// Generated as internal constructor for term sload8.
3199
0
pub fn constructor_sload8<C: Context>(
3200
0
    ctx: &mut C,
3201
0
    arg0: Type,
3202
0
    arg1: MemFlags,
3203
0
    arg2: Id,
3204
0
    arg3: Offset32,
3205
0
) -> Option<Id> {
3206
0
    let pattern0_0 = arg0;
3207
0
    let pattern1_0 = arg1;
3208
0
    let pattern2_0 = arg2;
3209
0
    let pattern3_0 = arg3;
3210
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 568.
3211
0
    let expr0_0 = Opcode::Sload8;
3212
0
    let expr1_0 = InstructionImms::Load {
3213
0
        opcode: expr0_0,
3214
0
        flags: pattern1_0,
3215
0
        offset: pattern3_0,
3216
0
    };
3217
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3218
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3219
0
    return Some(expr3_0);
3220
0
}
3221
3222
// Generated as internal constructor for term istore8.
3223
0
pub fn constructor_istore8<C: Context>(
3224
0
    ctx: &mut C,
3225
0
    arg0: Type,
3226
0
    arg1: MemFlags,
3227
0
    arg2: Id,
3228
0
    arg3: Id,
3229
0
    arg4: Offset32,
3230
0
) -> Option<Id> {
3231
0
    let pattern0_0 = arg0;
3232
0
    let pattern1_0 = arg1;
3233
0
    let pattern2_0 = arg2;
3234
0
    let pattern3_0 = arg3;
3235
0
    let pattern4_0 = arg4;
3236
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 577.
3237
0
    let expr0_0 = Opcode::Istore8;
3238
0
    let expr1_0 = InstructionImms::Store {
3239
0
        opcode: expr0_0,
3240
0
        flags: pattern1_0,
3241
0
        offset: pattern4_0,
3242
0
    };
3243
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
3244
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3245
0
    return Some(expr3_0);
3246
0
}
3247
3248
// Generated as internal constructor for term uload16.
3249
0
pub fn constructor_uload16<C: Context>(
3250
0
    ctx: &mut C,
3251
0
    arg0: Type,
3252
0
    arg1: MemFlags,
3253
0
    arg2: Id,
3254
0
    arg3: Offset32,
3255
0
) -> Option<Id> {
3256
0
    let pattern0_0 = arg0;
3257
0
    let pattern1_0 = arg1;
3258
0
    let pattern2_0 = arg2;
3259
0
    let pattern3_0 = arg3;
3260
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 586.
3261
0
    let expr0_0 = Opcode::Uload16;
3262
0
    let expr1_0 = InstructionImms::Load {
3263
0
        opcode: expr0_0,
3264
0
        flags: pattern1_0,
3265
0
        offset: pattern3_0,
3266
0
    };
3267
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3268
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3269
0
    return Some(expr3_0);
3270
0
}
3271
3272
// Generated as internal constructor for term sload16.
3273
0
pub fn constructor_sload16<C: Context>(
3274
0
    ctx: &mut C,
3275
0
    arg0: Type,
3276
0
    arg1: MemFlags,
3277
0
    arg2: Id,
3278
0
    arg3: Offset32,
3279
0
) -> Option<Id> {
3280
0
    let pattern0_0 = arg0;
3281
0
    let pattern1_0 = arg1;
3282
0
    let pattern2_0 = arg2;
3283
0
    let pattern3_0 = arg3;
3284
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 595.
3285
0
    let expr0_0 = Opcode::Sload16;
3286
0
    let expr1_0 = InstructionImms::Load {
3287
0
        opcode: expr0_0,
3288
0
        flags: pattern1_0,
3289
0
        offset: pattern3_0,
3290
0
    };
3291
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3292
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3293
0
    return Some(expr3_0);
3294
0
}
3295
3296
// Generated as internal constructor for term istore16.
3297
0
pub fn constructor_istore16<C: Context>(
3298
0
    ctx: &mut C,
3299
0
    arg0: Type,
3300
0
    arg1: MemFlags,
3301
0
    arg2: Id,
3302
0
    arg3: Id,
3303
0
    arg4: Offset32,
3304
0
) -> Option<Id> {
3305
0
    let pattern0_0 = arg0;
3306
0
    let pattern1_0 = arg1;
3307
0
    let pattern2_0 = arg2;
3308
0
    let pattern3_0 = arg3;
3309
0
    let pattern4_0 = arg4;
3310
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 604.
3311
0
    let expr0_0 = Opcode::Istore16;
3312
0
    let expr1_0 = InstructionImms::Store {
3313
0
        opcode: expr0_0,
3314
0
        flags: pattern1_0,
3315
0
        offset: pattern4_0,
3316
0
    };
3317
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
3318
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3319
0
    return Some(expr3_0);
3320
0
}
3321
3322
// Generated as internal constructor for term uload32.
3323
0
pub fn constructor_uload32<C: Context>(
3324
0
    ctx: &mut C,
3325
0
    arg0: Type,
3326
0
    arg1: MemFlags,
3327
0
    arg2: Id,
3328
0
    arg3: Offset32,
3329
0
) -> Option<Id> {
3330
0
    let pattern0_0 = arg0;
3331
0
    let pattern1_0 = arg1;
3332
0
    let pattern2_0 = arg2;
3333
0
    let pattern3_0 = arg3;
3334
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 613.
3335
0
    let expr0_0 = Opcode::Uload32;
3336
0
    let expr1_0 = InstructionImms::Load {
3337
0
        opcode: expr0_0,
3338
0
        flags: pattern1_0,
3339
0
        offset: pattern3_0,
3340
0
    };
3341
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3342
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3343
0
    return Some(expr3_0);
3344
0
}
3345
3346
// Generated as internal constructor for term sload32.
3347
0
pub fn constructor_sload32<C: Context>(
3348
0
    ctx: &mut C,
3349
0
    arg0: Type,
3350
0
    arg1: MemFlags,
3351
0
    arg2: Id,
3352
0
    arg3: Offset32,
3353
0
) -> Option<Id> {
3354
0
    let pattern0_0 = arg0;
3355
0
    let pattern1_0 = arg1;
3356
0
    let pattern2_0 = arg2;
3357
0
    let pattern3_0 = arg3;
3358
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 622.
3359
0
    let expr0_0 = Opcode::Sload32;
3360
0
    let expr1_0 = InstructionImms::Load {
3361
0
        opcode: expr0_0,
3362
0
        flags: pattern1_0,
3363
0
        offset: pattern3_0,
3364
0
    };
3365
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3366
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3367
0
    return Some(expr3_0);
3368
0
}
3369
3370
// Generated as internal constructor for term istore32.
3371
0
pub fn constructor_istore32<C: Context>(
3372
0
    ctx: &mut C,
3373
0
    arg0: Type,
3374
0
    arg1: MemFlags,
3375
0
    arg2: Id,
3376
0
    arg3: Id,
3377
0
    arg4: Offset32,
3378
0
) -> Option<Id> {
3379
0
    let pattern0_0 = arg0;
3380
0
    let pattern1_0 = arg1;
3381
0
    let pattern2_0 = arg2;
3382
0
    let pattern3_0 = arg3;
3383
0
    let pattern4_0 = arg4;
3384
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 631.
3385
0
    let expr0_0 = Opcode::Istore32;
3386
0
    let expr1_0 = InstructionImms::Store {
3387
0
        opcode: expr0_0,
3388
0
        flags: pattern1_0,
3389
0
        offset: pattern4_0,
3390
0
    };
3391
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
3392
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3393
0
    return Some(expr3_0);
3394
0
}
3395
3396
// Generated as internal constructor for term uload8x8.
3397
0
pub fn constructor_uload8x8<C: Context>(
3398
0
    ctx: &mut C,
3399
0
    arg0: Type,
3400
0
    arg1: MemFlags,
3401
0
    arg2: Id,
3402
0
    arg3: Offset32,
3403
0
) -> Option<Id> {
3404
0
    let pattern0_0 = arg0;
3405
0
    let pattern1_0 = arg1;
3406
0
    let pattern2_0 = arg2;
3407
0
    let pattern3_0 = arg3;
3408
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 640.
3409
0
    let expr0_0 = Opcode::Uload8x8;
3410
0
    let expr1_0 = InstructionImms::Load {
3411
0
        opcode: expr0_0,
3412
0
        flags: pattern1_0,
3413
0
        offset: pattern3_0,
3414
0
    };
3415
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3416
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3417
0
    return Some(expr3_0);
3418
0
}
3419
3420
// Generated as internal constructor for term sload8x8.
3421
0
pub fn constructor_sload8x8<C: Context>(
3422
0
    ctx: &mut C,
3423
0
    arg0: Type,
3424
0
    arg1: MemFlags,
3425
0
    arg2: Id,
3426
0
    arg3: Offset32,
3427
0
) -> Option<Id> {
3428
0
    let pattern0_0 = arg0;
3429
0
    let pattern1_0 = arg1;
3430
0
    let pattern2_0 = arg2;
3431
0
    let pattern3_0 = arg3;
3432
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 649.
3433
0
    let expr0_0 = Opcode::Sload8x8;
3434
0
    let expr1_0 = InstructionImms::Load {
3435
0
        opcode: expr0_0,
3436
0
        flags: pattern1_0,
3437
0
        offset: pattern3_0,
3438
0
    };
3439
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3440
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3441
0
    return Some(expr3_0);
3442
0
}
3443
3444
// Generated as internal constructor for term uload16x4.
3445
0
pub fn constructor_uload16x4<C: Context>(
3446
0
    ctx: &mut C,
3447
0
    arg0: Type,
3448
0
    arg1: MemFlags,
3449
0
    arg2: Id,
3450
0
    arg3: Offset32,
3451
0
) -> Option<Id> {
3452
0
    let pattern0_0 = arg0;
3453
0
    let pattern1_0 = arg1;
3454
0
    let pattern2_0 = arg2;
3455
0
    let pattern3_0 = arg3;
3456
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 658.
3457
0
    let expr0_0 = Opcode::Uload16x4;
3458
0
    let expr1_0 = InstructionImms::Load {
3459
0
        opcode: expr0_0,
3460
0
        flags: pattern1_0,
3461
0
        offset: pattern3_0,
3462
0
    };
3463
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3464
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3465
0
    return Some(expr3_0);
3466
0
}
3467
3468
// Generated as internal constructor for term sload16x4.
3469
0
pub fn constructor_sload16x4<C: Context>(
3470
0
    ctx: &mut C,
3471
0
    arg0: Type,
3472
0
    arg1: MemFlags,
3473
0
    arg2: Id,
3474
0
    arg3: Offset32,
3475
0
) -> Option<Id> {
3476
0
    let pattern0_0 = arg0;
3477
0
    let pattern1_0 = arg1;
3478
0
    let pattern2_0 = arg2;
3479
0
    let pattern3_0 = arg3;
3480
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 667.
3481
0
    let expr0_0 = Opcode::Sload16x4;
3482
0
    let expr1_0 = InstructionImms::Load {
3483
0
        opcode: expr0_0,
3484
0
        flags: pattern1_0,
3485
0
        offset: pattern3_0,
3486
0
    };
3487
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3488
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3489
0
    return Some(expr3_0);
3490
0
}
3491
3492
// Generated as internal constructor for term uload32x2.
3493
0
pub fn constructor_uload32x2<C: Context>(
3494
0
    ctx: &mut C,
3495
0
    arg0: Type,
3496
0
    arg1: MemFlags,
3497
0
    arg2: Id,
3498
0
    arg3: Offset32,
3499
0
) -> Option<Id> {
3500
0
    let pattern0_0 = arg0;
3501
0
    let pattern1_0 = arg1;
3502
0
    let pattern2_0 = arg2;
3503
0
    let pattern3_0 = arg3;
3504
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 676.
3505
0
    let expr0_0 = Opcode::Uload32x2;
3506
0
    let expr1_0 = InstructionImms::Load {
3507
0
        opcode: expr0_0,
3508
0
        flags: pattern1_0,
3509
0
        offset: pattern3_0,
3510
0
    };
3511
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3512
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3513
0
    return Some(expr3_0);
3514
0
}
3515
3516
// Generated as internal constructor for term sload32x2.
3517
0
pub fn constructor_sload32x2<C: Context>(
3518
0
    ctx: &mut C,
3519
0
    arg0: Type,
3520
0
    arg1: MemFlags,
3521
0
    arg2: Id,
3522
0
    arg3: Offset32,
3523
0
) -> Option<Id> {
3524
0
    let pattern0_0 = arg0;
3525
0
    let pattern1_0 = arg1;
3526
0
    let pattern2_0 = arg2;
3527
0
    let pattern3_0 = arg3;
3528
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 685.
3529
0
    let expr0_0 = Opcode::Sload32x2;
3530
0
    let expr1_0 = InstructionImms::Load {
3531
0
        opcode: expr0_0,
3532
0
        flags: pattern1_0,
3533
0
        offset: pattern3_0,
3534
0
    };
3535
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3536
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3537
0
    return Some(expr3_0);
3538
0
}
3539
3540
// Generated as internal constructor for term stack_load.
3541
0
pub fn constructor_stack_load<C: Context>(
3542
0
    ctx: &mut C,
3543
0
    arg0: Type,
3544
0
    arg1: StackSlot,
3545
0
    arg2: Offset32,
3546
0
) -> Option<Id> {
3547
0
    let pattern0_0 = arg0;
3548
0
    let pattern1_0 = arg1;
3549
0
    let pattern2_0 = arg2;
3550
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 694.
3551
0
    let expr0_0 = Opcode::StackLoad;
3552
0
    let expr1_0 = InstructionImms::StackLoad {
3553
0
        opcode: expr0_0,
3554
0
        stack_slot: pattern1_0,
3555
0
        offset: pattern2_0,
3556
0
    };
3557
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3558
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3559
0
    return Some(expr3_0);
3560
0
}
3561
3562
// Generated as internal constructor for term stack_store.
3563
0
pub fn constructor_stack_store<C: Context>(
3564
0
    ctx: &mut C,
3565
0
    arg0: Type,
3566
0
    arg1: Id,
3567
0
    arg2: StackSlot,
3568
0
    arg3: Offset32,
3569
0
) -> Option<Id> {
3570
0
    let pattern0_0 = arg0;
3571
0
    let pattern1_0 = arg1;
3572
0
    let pattern2_0 = arg2;
3573
0
    let pattern3_0 = arg3;
3574
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 703.
3575
0
    let expr0_0 = Opcode::StackStore;
3576
0
    let expr1_0 = InstructionImms::StackStore {
3577
0
        opcode: expr0_0,
3578
0
        stack_slot: pattern2_0,
3579
0
        offset: pattern3_0,
3580
0
    };
3581
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
3582
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3583
0
    return Some(expr3_0);
3584
0
}
3585
3586
// Generated as internal constructor for term stack_addr.
3587
0
pub fn constructor_stack_addr<C: Context>(
3588
0
    ctx: &mut C,
3589
0
    arg0: Type,
3590
0
    arg1: StackSlot,
3591
0
    arg2: Offset32,
3592
0
) -> Option<Id> {
3593
0
    let pattern0_0 = arg0;
3594
0
    let pattern1_0 = arg1;
3595
0
    let pattern2_0 = arg2;
3596
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 712.
3597
0
    let expr0_0 = Opcode::StackAddr;
3598
0
    let expr1_0 = InstructionImms::StackLoad {
3599
0
        opcode: expr0_0,
3600
0
        stack_slot: pattern1_0,
3601
0
        offset: pattern2_0,
3602
0
    };
3603
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3604
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3605
0
    return Some(expr3_0);
3606
0
}
3607
3608
// Generated as internal constructor for term dynamic_stack_load.
3609
0
pub fn constructor_dynamic_stack_load<C: Context>(
3610
0
    ctx: &mut C,
3611
0
    arg0: Type,
3612
0
    arg1: DynamicStackSlot,
3613
0
) -> Option<Id> {
3614
0
    let pattern0_0 = arg0;
3615
0
    let pattern1_0 = arg1;
3616
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 721.
3617
0
    let expr0_0 = Opcode::DynamicStackLoad;
3618
0
    let expr1_0 = InstructionImms::DynamicStackLoad {
3619
0
        opcode: expr0_0,
3620
0
        dynamic_stack_slot: pattern1_0,
3621
0
    };
3622
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3623
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3624
0
    return Some(expr3_0);
3625
0
}
3626
3627
// Generated as internal constructor for term dynamic_stack_store.
3628
0
pub fn constructor_dynamic_stack_store<C: Context>(
3629
0
    ctx: &mut C,
3630
0
    arg0: Type,
3631
0
    arg1: Id,
3632
0
    arg2: DynamicStackSlot,
3633
0
) -> Option<Id> {
3634
0
    let pattern0_0 = arg0;
3635
0
    let pattern1_0 = arg1;
3636
0
    let pattern2_0 = arg2;
3637
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 730.
3638
0
    let expr0_0 = Opcode::DynamicStackStore;
3639
0
    let expr1_0 = InstructionImms::DynamicStackStore {
3640
0
        opcode: expr0_0,
3641
0
        dynamic_stack_slot: pattern2_0,
3642
0
    };
3643
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
3644
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3645
0
    return Some(expr3_0);
3646
0
}
3647
3648
// Generated as internal constructor for term dynamic_stack_addr.
3649
0
pub fn constructor_dynamic_stack_addr<C: Context>(
3650
0
    ctx: &mut C,
3651
0
    arg0: Type,
3652
0
    arg1: DynamicStackSlot,
3653
0
) -> Option<Id> {
3654
0
    let pattern0_0 = arg0;
3655
0
    let pattern1_0 = arg1;
3656
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 739.
3657
0
    let expr0_0 = Opcode::DynamicStackAddr;
3658
0
    let expr1_0 = InstructionImms::DynamicStackLoad {
3659
0
        opcode: expr0_0,
3660
0
        dynamic_stack_slot: pattern1_0,
3661
0
    };
3662
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3663
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3664
0
    return Some(expr3_0);
3665
0
}
3666
3667
// Generated as internal constructor for term global_value.
3668
0
pub fn constructor_global_value<C: Context>(
3669
0
    ctx: &mut C,
3670
0
    arg0: Type,
3671
0
    arg1: GlobalValue,
3672
0
) -> Option<Id> {
3673
0
    let pattern0_0 = arg0;
3674
0
    let pattern1_0 = arg1;
3675
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 748.
3676
0
    let expr0_0 = Opcode::GlobalValue;
3677
0
    let expr1_0 = InstructionImms::UnaryGlobalValue {
3678
0
        opcode: expr0_0,
3679
0
        global_value: pattern1_0,
3680
0
    };
3681
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3682
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3683
0
    return Some(expr3_0);
3684
0
}
3685
3686
// Generated as internal constructor for term symbol_value.
3687
0
pub fn constructor_symbol_value<C: Context>(
3688
0
    ctx: &mut C,
3689
0
    arg0: Type,
3690
0
    arg1: GlobalValue,
3691
0
) -> Option<Id> {
3692
0
    let pattern0_0 = arg0;
3693
0
    let pattern1_0 = arg1;
3694
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 757.
3695
0
    let expr0_0 = Opcode::SymbolValue;
3696
0
    let expr1_0 = InstructionImms::UnaryGlobalValue {
3697
0
        opcode: expr0_0,
3698
0
        global_value: pattern1_0,
3699
0
    };
3700
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3701
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3702
0
    return Some(expr3_0);
3703
0
}
3704
3705
// Generated as internal constructor for term tls_value.
3706
0
pub fn constructor_tls_value<C: Context>(ctx: &mut C, arg0: Type, arg1: GlobalValue) -> Option<Id> {
3707
0
    let pattern0_0 = arg0;
3708
0
    let pattern1_0 = arg1;
3709
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 766.
3710
0
    let expr0_0 = Opcode::TlsValue;
3711
0
    let expr1_0 = InstructionImms::UnaryGlobalValue {
3712
0
        opcode: expr0_0,
3713
0
        global_value: pattern1_0,
3714
0
    };
3715
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3716
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3717
0
    return Some(expr3_0);
3718
0
}
3719
3720
// Generated as internal constructor for term heap_addr.
3721
0
pub fn constructor_heap_addr<C: Context>(
3722
0
    ctx: &mut C,
3723
0
    arg0: Type,
3724
0
    arg1: Heap,
3725
0
    arg2: Id,
3726
0
    arg3: Uimm32,
3727
0
    arg4: Uimm8,
3728
0
) -> Option<Id> {
3729
0
    let pattern0_0 = arg0;
3730
0
    let pattern1_0 = arg1;
3731
0
    let pattern2_0 = arg2;
3732
0
    let pattern3_0 = arg3;
3733
0
    let pattern4_0 = arg4;
3734
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 775.
3735
0
    let expr0_0 = Opcode::HeapAddr;
3736
0
    let expr1_0 = InstructionImms::HeapAddr {
3737
0
        opcode: expr0_0,
3738
0
        heap: pattern1_0,
3739
0
        offset: pattern3_0,
3740
0
        size: pattern4_0,
3741
0
    };
3742
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3743
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3744
0
    return Some(expr3_0);
3745
0
}
3746
3747
// Generated as internal constructor for term heap_load.
3748
0
pub fn constructor_heap_load<C: Context>(
3749
0
    ctx: &mut C,
3750
0
    arg0: Type,
3751
0
    arg1: HeapImm,
3752
0
    arg2: Id,
3753
0
) -> Option<Id> {
3754
0
    let pattern0_0 = arg0;
3755
0
    let pattern1_0 = arg1;
3756
0
    let pattern2_0 = arg2;
3757
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 784.
3758
0
    let expr0_0 = Opcode::HeapLoad;
3759
0
    let expr1_0 = InstructionImms::HeapLoad {
3760
0
        opcode: expr0_0,
3761
0
        heap_imm: pattern1_0,
3762
0
    };
3763
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3764
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3765
0
    return Some(expr3_0);
3766
0
}
3767
3768
// Generated as internal constructor for term heap_store.
3769
0
pub fn constructor_heap_store<C: Context>(
3770
0
    ctx: &mut C,
3771
0
    arg0: Type,
3772
0
    arg1: HeapImm,
3773
0
    arg2: Id,
3774
0
    arg3: Id,
3775
0
) -> Option<Id> {
3776
0
    let pattern0_0 = arg0;
3777
0
    let pattern1_0 = arg1;
3778
0
    let pattern2_0 = arg2;
3779
0
    let pattern3_0 = arg3;
3780
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 793.
3781
0
    let expr0_0 = Opcode::HeapStore;
3782
0
    let expr1_0 = InstructionImms::HeapStore {
3783
0
        opcode: expr0_0,
3784
0
        heap_imm: pattern1_0,
3785
0
    };
3786
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
3787
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3788
0
    return Some(expr3_0);
3789
0
}
3790
3791
// Generated as internal constructor for term get_pinned_reg.
3792
0
pub fn constructor_get_pinned_reg<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3793
0
    let pattern0_0 = arg0;
3794
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 802.
3795
0
    let expr0_0 = Opcode::GetPinnedReg;
3796
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3797
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3798
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3799
0
    return Some(expr3_0);
3800
0
}
3801
3802
// Generated as internal constructor for term set_pinned_reg.
3803
0
pub fn constructor_set_pinned_reg<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
3804
0
    let pattern0_0 = arg0;
3805
0
    let pattern1_0 = arg1;
3806
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 811.
3807
0
    let expr0_0 = Opcode::SetPinnedReg;
3808
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
3809
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
3810
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3811
0
    return Some(expr3_0);
3812
0
}
3813
3814
// Generated as internal constructor for term get_frame_pointer.
3815
0
pub fn constructor_get_frame_pointer<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3816
0
    let pattern0_0 = arg0;
3817
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 820.
3818
0
    let expr0_0 = Opcode::GetFramePointer;
3819
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3820
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3821
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3822
0
    return Some(expr3_0);
3823
0
}
3824
3825
// Generated as internal constructor for term get_stack_pointer.
3826
0
pub fn constructor_get_stack_pointer<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3827
0
    let pattern0_0 = arg0;
3828
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 829.
3829
0
    let expr0_0 = Opcode::GetStackPointer;
3830
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3831
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3832
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3833
0
    return Some(expr3_0);
3834
0
}
3835
3836
// Generated as internal constructor for term get_return_address.
3837
0
pub fn constructor_get_return_address<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3838
0
    let pattern0_0 = arg0;
3839
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 838.
3840
0
    let expr0_0 = Opcode::GetReturnAddress;
3841
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3842
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3843
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3844
0
    return Some(expr3_0);
3845
0
}
3846
3847
// Generated as internal constructor for term table_addr.
3848
0
pub fn constructor_table_addr<C: Context>(
3849
0
    ctx: &mut C,
3850
0
    arg0: Type,
3851
0
    arg1: Table,
3852
0
    arg2: Id,
3853
0
    arg3: Offset32,
3854
0
) -> Option<Id> {
3855
0
    let pattern0_0 = arg0;
3856
0
    let pattern1_0 = arg1;
3857
0
    let pattern2_0 = arg2;
3858
0
    let pattern3_0 = arg3;
3859
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 847.
3860
0
    let expr0_0 = Opcode::TableAddr;
3861
0
    let expr1_0 = InstructionImms::TableAddr {
3862
0
        opcode: expr0_0,
3863
0
        table: pattern1_0,
3864
0
        offset: pattern3_0,
3865
0
    };
3866
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
3867
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3868
0
    return Some(expr3_0);
3869
0
}
3870
3871
// Generated as internal constructor for term iconst.
3872
0
pub fn constructor_iconst<C: Context>(ctx: &mut C, arg0: Type, arg1: Imm64) -> Option<Id> {
3873
0
    let pattern0_0 = arg0;
3874
0
    let pattern1_0 = arg1;
3875
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 856.
3876
0
    let expr0_0 = Opcode::Iconst;
3877
0
    let expr1_0 = InstructionImms::UnaryImm {
3878
0
        opcode: expr0_0,
3879
0
        imm: pattern1_0,
3880
0
    };
3881
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3882
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3883
0
    return Some(expr3_0);
3884
0
}
3885
3886
// Generated as internal constructor for term f32const.
3887
0
pub fn constructor_f32const<C: Context>(ctx: &mut C, arg0: Type, arg1: Ieee32) -> Option<Id> {
3888
0
    let pattern0_0 = arg0;
3889
0
    let pattern1_0 = arg1;
3890
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 865.
3891
0
    let expr0_0 = Opcode::F32const;
3892
0
    let expr1_0 = InstructionImms::UnaryIeee32 {
3893
0
        opcode: expr0_0,
3894
0
        imm: pattern1_0,
3895
0
    };
3896
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3897
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3898
0
    return Some(expr3_0);
3899
0
}
3900
3901
// Generated as internal constructor for term f64const.
3902
0
pub fn constructor_f64const<C: Context>(ctx: &mut C, arg0: Type, arg1: Ieee64) -> Option<Id> {
3903
0
    let pattern0_0 = arg0;
3904
0
    let pattern1_0 = arg1;
3905
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 874.
3906
0
    let expr0_0 = Opcode::F64const;
3907
0
    let expr1_0 = InstructionImms::UnaryIeee64 {
3908
0
        opcode: expr0_0,
3909
0
        imm: pattern1_0,
3910
0
    };
3911
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3912
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3913
0
    return Some(expr3_0);
3914
0
}
3915
3916
// Generated as internal constructor for term vconst.
3917
0
pub fn constructor_vconst<C: Context>(ctx: &mut C, arg0: Type, arg1: Constant) -> Option<Id> {
3918
0
    let pattern0_0 = arg0;
3919
0
    let pattern1_0 = arg1;
3920
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 883.
3921
0
    let expr0_0 = Opcode::Vconst;
3922
0
    let expr1_0 = InstructionImms::UnaryConst {
3923
0
        opcode: expr0_0,
3924
0
        constant_handle: pattern1_0,
3925
0
    };
3926
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3927
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3928
0
    return Some(expr3_0);
3929
0
}
3930
3931
// Generated as internal constructor for term shuffle.
3932
0
pub fn constructor_shuffle<C: Context>(
3933
0
    ctx: &mut C,
3934
0
    arg0: Type,
3935
0
    arg1: Id,
3936
0
    arg2: Id,
3937
0
    arg3: Immediate,
3938
0
) -> Option<Id> {
3939
0
    let pattern0_0 = arg0;
3940
0
    let pattern1_0 = arg1;
3941
0
    let pattern2_0 = arg2;
3942
0
    let pattern3_0 = arg3;
3943
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 892.
3944
0
    let expr0_0 = Opcode::Shuffle;
3945
0
    let expr1_0 = InstructionImms::Shuffle {
3946
0
        opcode: expr0_0,
3947
0
        imm: pattern3_0,
3948
0
    };
3949
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
3950
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3951
0
    return Some(expr3_0);
3952
0
}
3953
3954
// Generated as internal constructor for term null.
3955
0
pub fn constructor_null<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3956
0
    let pattern0_0 = arg0;
3957
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 901.
3958
0
    let expr0_0 = Opcode::Null;
3959
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3960
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3961
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3962
0
    return Some(expr3_0);
3963
0
}
3964
3965
// Generated as internal constructor for term nop.
3966
0
pub fn constructor_nop<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
3967
0
    let pattern0_0 = arg0;
3968
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 910.
3969
0
    let expr0_0 = Opcode::Nop;
3970
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
3971
0
    let expr2_0 = C::id_array_0_ctor(ctx);
3972
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3973
0
    return Some(expr3_0);
3974
0
}
3975
3976
// Generated as internal constructor for term select.
3977
0
pub fn constructor_select<C: Context>(
3978
0
    ctx: &mut C,
3979
0
    arg0: Type,
3980
0
    arg1: Id,
3981
0
    arg2: Id,
3982
0
    arg3: Id,
3983
0
) -> Option<Id> {
3984
0
    let pattern0_0 = arg0;
3985
0
    let pattern1_0 = arg1;
3986
0
    let pattern2_0 = arg2;
3987
0
    let pattern3_0 = arg3;
3988
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 919.
3989
0
    let expr0_0 = Opcode::Select;
3990
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
3991
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
3992
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
3993
0
    return Some(expr3_0);
3994
0
}
3995
3996
// Generated as internal constructor for term select_spectre_guard.
3997
0
pub fn constructor_select_spectre_guard<C: Context>(
3998
0
    ctx: &mut C,
3999
0
    arg0: Type,
4000
0
    arg1: Id,
4001
0
    arg2: Id,
4002
0
    arg3: Id,
4003
0
) -> Option<Id> {
4004
0
    let pattern0_0 = arg0;
4005
0
    let pattern1_0 = arg1;
4006
0
    let pattern2_0 = arg2;
4007
0
    let pattern3_0 = arg3;
4008
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 928.
4009
0
    let expr0_0 = Opcode::SelectSpectreGuard;
4010
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4011
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4012
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4013
0
    return Some(expr3_0);
4014
0
}
4015
4016
// Generated as internal constructor for term bitselect.
4017
0
pub fn constructor_bitselect<C: Context>(
4018
0
    ctx: &mut C,
4019
0
    arg0: Type,
4020
0
    arg1: Id,
4021
0
    arg2: Id,
4022
0
    arg3: Id,
4023
0
) -> Option<Id> {
4024
0
    let pattern0_0 = arg0;
4025
0
    let pattern1_0 = arg1;
4026
0
    let pattern2_0 = arg2;
4027
0
    let pattern3_0 = arg3;
4028
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 937.
4029
0
    let expr0_0 = Opcode::Bitselect;
4030
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4031
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4032
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4033
0
    return Some(expr3_0);
4034
0
}
4035
4036
// Generated as internal constructor for term vsplit.
4037
0
pub fn constructor_vsplit<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4038
0
    let pattern0_0 = arg0;
4039
0
    let pattern1_0 = arg1;
4040
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 946.
4041
0
    let expr0_0 = Opcode::Vsplit;
4042
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4043
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4044
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4045
0
    return Some(expr3_0);
4046
0
}
4047
4048
// Generated as internal constructor for term vconcat.
4049
0
pub fn constructor_vconcat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4050
0
    let pattern0_0 = arg0;
4051
0
    let pattern1_0 = arg1;
4052
0
    let pattern2_0 = arg2;
4053
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 955.
4054
0
    let expr0_0 = Opcode::Vconcat;
4055
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4056
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4057
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4058
0
    return Some(expr3_0);
4059
0
}
4060
4061
// Generated as internal constructor for term vselect.
4062
0
pub fn constructor_vselect<C: Context>(
4063
0
    ctx: &mut C,
4064
0
    arg0: Type,
4065
0
    arg1: Id,
4066
0
    arg2: Id,
4067
0
    arg3: Id,
4068
0
) -> Option<Id> {
4069
0
    let pattern0_0 = arg0;
4070
0
    let pattern1_0 = arg1;
4071
0
    let pattern2_0 = arg2;
4072
0
    let pattern3_0 = arg3;
4073
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 964.
4074
0
    let expr0_0 = Opcode::Vselect;
4075
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4076
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4077
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4078
0
    return Some(expr3_0);
4079
0
}
4080
4081
// Generated as internal constructor for term vany_true.
4082
0
pub fn constructor_vany_true<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4083
0
    let pattern0_0 = arg0;
4084
0
    let pattern1_0 = arg1;
4085
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 973.
4086
0
    let expr0_0 = Opcode::VanyTrue;
4087
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4088
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4089
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4090
0
    return Some(expr3_0);
4091
0
}
4092
4093
// Generated as internal constructor for term vall_true.
4094
0
pub fn constructor_vall_true<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4095
0
    let pattern0_0 = arg0;
4096
0
    let pattern1_0 = arg1;
4097
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 982.
4098
0
    let expr0_0 = Opcode::VallTrue;
4099
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4100
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4101
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4102
0
    return Some(expr3_0);
4103
0
}
4104
4105
// Generated as internal constructor for term vhigh_bits.
4106
0
pub fn constructor_vhigh_bits<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4107
0
    let pattern0_0 = arg0;
4108
0
    let pattern1_0 = arg1;
4109
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 991.
4110
0
    let expr0_0 = Opcode::VhighBits;
4111
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4112
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4113
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4114
0
    return Some(expr3_0);
4115
0
}
4116
4117
// Generated as internal constructor for term icmp.
4118
0
pub fn constructor_icmp<C: Context>(
4119
0
    ctx: &mut C,
4120
0
    arg0: Type,
4121
0
    arg1: &IntCC,
4122
0
    arg2: Id,
4123
0
    arg3: Id,
4124
0
) -> Option<Id> {
4125
0
    let pattern0_0 = arg0;
4126
0
    let pattern1_0 = arg1;
4127
0
    let pattern2_0 = arg2;
4128
0
    let pattern3_0 = arg3;
4129
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1000.
4130
0
    let expr0_0 = Opcode::Icmp;
4131
0
    let expr1_0 = InstructionImms::IntCompare {
4132
0
        opcode: expr0_0,
4133
0
        cond: pattern1_0.clone(),
4134
0
    };
4135
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
4136
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4137
0
    return Some(expr3_0);
4138
0
}
4139
4140
// Generated as internal constructor for term icmp_imm.
4141
0
pub fn constructor_icmp_imm<C: Context>(
4142
0
    ctx: &mut C,
4143
0
    arg0: Type,
4144
0
    arg1: &IntCC,
4145
0
    arg2: Id,
4146
0
    arg3: Imm64,
4147
0
) -> Option<Id> {
4148
0
    let pattern0_0 = arg0;
4149
0
    let pattern1_0 = arg1;
4150
0
    let pattern2_0 = arg2;
4151
0
    let pattern3_0 = arg3;
4152
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1009.
4153
0
    let expr0_0 = Opcode::IcmpImm;
4154
0
    let expr1_0 = InstructionImms::IntCompareImm {
4155
0
        opcode: expr0_0,
4156
0
        cond: pattern1_0.clone(),
4157
0
        imm: pattern3_0,
4158
0
    };
4159
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
4160
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4161
0
    return Some(expr3_0);
4162
0
}
4163
4164
// Generated as internal constructor for term ifcmp.
4165
0
pub fn constructor_ifcmp<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4166
0
    let pattern0_0 = arg0;
4167
0
    let pattern1_0 = arg1;
4168
0
    let pattern2_0 = arg2;
4169
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1018.
4170
0
    let expr0_0 = Opcode::Ifcmp;
4171
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4172
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4173
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4174
0
    return Some(expr3_0);
4175
0
}
4176
4177
// Generated as internal constructor for term ifcmp_imm.
4178
0
pub fn constructor_ifcmp_imm<C: Context>(
4179
0
    ctx: &mut C,
4180
0
    arg0: Type,
4181
0
    arg1: Id,
4182
0
    arg2: Imm64,
4183
0
) -> Option<Id> {
4184
0
    let pattern0_0 = arg0;
4185
0
    let pattern1_0 = arg1;
4186
0
    let pattern2_0 = arg2;
4187
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1027.
4188
0
    let expr0_0 = Opcode::IfcmpImm;
4189
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4190
0
        opcode: expr0_0,
4191
0
        imm: pattern2_0,
4192
0
    };
4193
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4194
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4195
0
    return Some(expr3_0);
4196
0
}
4197
4198
// Generated as internal constructor for term iadd.
4199
0
pub fn constructor_iadd<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4200
0
    let pattern0_0 = arg0;
4201
0
    let pattern1_0 = arg1;
4202
0
    let pattern2_0 = arg2;
4203
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1036.
4204
0
    let expr0_0 = Opcode::Iadd;
4205
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4206
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4207
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4208
0
    return Some(expr3_0);
4209
0
}
4210
4211
// Generated as internal constructor for term isub.
4212
0
pub fn constructor_isub<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4213
0
    let pattern0_0 = arg0;
4214
0
    let pattern1_0 = arg1;
4215
0
    let pattern2_0 = arg2;
4216
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1045.
4217
0
    let expr0_0 = Opcode::Isub;
4218
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4219
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4220
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4221
0
    return Some(expr3_0);
4222
0
}
4223
4224
// Generated as internal constructor for term ineg.
4225
0
pub fn constructor_ineg<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4226
0
    let pattern0_0 = arg0;
4227
0
    let pattern1_0 = arg1;
4228
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1054.
4229
0
    let expr0_0 = Opcode::Ineg;
4230
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4231
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4232
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4233
0
    return Some(expr3_0);
4234
0
}
4235
4236
// Generated as internal constructor for term iabs.
4237
0
pub fn constructor_iabs<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4238
0
    let pattern0_0 = arg0;
4239
0
    let pattern1_0 = arg1;
4240
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1063.
4241
0
    let expr0_0 = Opcode::Iabs;
4242
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4243
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4244
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4245
0
    return Some(expr3_0);
4246
0
}
4247
4248
// Generated as internal constructor for term imul.
4249
0
pub fn constructor_imul<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4250
0
    let pattern0_0 = arg0;
4251
0
    let pattern1_0 = arg1;
4252
0
    let pattern2_0 = arg2;
4253
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1072.
4254
0
    let expr0_0 = Opcode::Imul;
4255
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4256
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4257
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4258
0
    return Some(expr3_0);
4259
0
}
4260
4261
// Generated as internal constructor for term umulhi.
4262
0
pub fn constructor_umulhi<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4263
0
    let pattern0_0 = arg0;
4264
0
    let pattern1_0 = arg1;
4265
0
    let pattern2_0 = arg2;
4266
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1081.
4267
0
    let expr0_0 = Opcode::Umulhi;
4268
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4269
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4270
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4271
0
    return Some(expr3_0);
4272
0
}
4273
4274
// Generated as internal constructor for term smulhi.
4275
0
pub fn constructor_smulhi<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4276
0
    let pattern0_0 = arg0;
4277
0
    let pattern1_0 = arg1;
4278
0
    let pattern2_0 = arg2;
4279
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1090.
4280
0
    let expr0_0 = Opcode::Smulhi;
4281
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4282
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4283
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4284
0
    return Some(expr3_0);
4285
0
}
4286
4287
// Generated as internal constructor for term sqmul_round_sat.
4288
0
pub fn constructor_sqmul_round_sat<C: Context>(
4289
0
    ctx: &mut C,
4290
0
    arg0: Type,
4291
0
    arg1: Id,
4292
0
    arg2: Id,
4293
0
) -> Option<Id> {
4294
0
    let pattern0_0 = arg0;
4295
0
    let pattern1_0 = arg1;
4296
0
    let pattern2_0 = arg2;
4297
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1099.
4298
0
    let expr0_0 = Opcode::SqmulRoundSat;
4299
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4300
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4301
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4302
0
    return Some(expr3_0);
4303
0
}
4304
4305
// Generated as internal constructor for term udiv.
4306
0
pub fn constructor_udiv<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4307
0
    let pattern0_0 = arg0;
4308
0
    let pattern1_0 = arg1;
4309
0
    let pattern2_0 = arg2;
4310
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1108.
4311
0
    let expr0_0 = Opcode::Udiv;
4312
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4313
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4314
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4315
0
    return Some(expr3_0);
4316
0
}
4317
4318
// Generated as internal constructor for term sdiv.
4319
0
pub fn constructor_sdiv<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4320
0
    let pattern0_0 = arg0;
4321
0
    let pattern1_0 = arg1;
4322
0
    let pattern2_0 = arg2;
4323
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1117.
4324
0
    let expr0_0 = Opcode::Sdiv;
4325
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4326
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4327
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4328
0
    return Some(expr3_0);
4329
0
}
4330
4331
// Generated as internal constructor for term urem.
4332
0
pub fn constructor_urem<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4333
0
    let pattern0_0 = arg0;
4334
0
    let pattern1_0 = arg1;
4335
0
    let pattern2_0 = arg2;
4336
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1126.
4337
0
    let expr0_0 = Opcode::Urem;
4338
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4339
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4340
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4341
0
    return Some(expr3_0);
4342
0
}
4343
4344
// Generated as internal constructor for term srem.
4345
0
pub fn constructor_srem<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4346
0
    let pattern0_0 = arg0;
4347
0
    let pattern1_0 = arg1;
4348
0
    let pattern2_0 = arg2;
4349
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1135.
4350
0
    let expr0_0 = Opcode::Srem;
4351
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4352
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4353
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4354
0
    return Some(expr3_0);
4355
0
}
4356
4357
// Generated as internal constructor for term iadd_imm.
4358
0
pub fn constructor_iadd_imm<C: Context>(
4359
0
    ctx: &mut C,
4360
0
    arg0: Type,
4361
0
    arg1: Id,
4362
0
    arg2: Imm64,
4363
0
) -> Option<Id> {
4364
0
    let pattern0_0 = arg0;
4365
0
    let pattern1_0 = arg1;
4366
0
    let pattern2_0 = arg2;
4367
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1144.
4368
0
    let expr0_0 = Opcode::IaddImm;
4369
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4370
0
        opcode: expr0_0,
4371
0
        imm: pattern2_0,
4372
0
    };
4373
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4374
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4375
0
    return Some(expr3_0);
4376
0
}
4377
4378
// Generated as internal constructor for term imul_imm.
4379
0
pub fn constructor_imul_imm<C: Context>(
4380
0
    ctx: &mut C,
4381
0
    arg0: Type,
4382
0
    arg1: Id,
4383
0
    arg2: Imm64,
4384
0
) -> Option<Id> {
4385
0
    let pattern0_0 = arg0;
4386
0
    let pattern1_0 = arg1;
4387
0
    let pattern2_0 = arg2;
4388
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1153.
4389
0
    let expr0_0 = Opcode::ImulImm;
4390
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4391
0
        opcode: expr0_0,
4392
0
        imm: pattern2_0,
4393
0
    };
4394
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4395
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4396
0
    return Some(expr3_0);
4397
0
}
4398
4399
// Generated as internal constructor for term udiv_imm.
4400
0
pub fn constructor_udiv_imm<C: Context>(
4401
0
    ctx: &mut C,
4402
0
    arg0: Type,
4403
0
    arg1: Id,
4404
0
    arg2: Imm64,
4405
0
) -> Option<Id> {
4406
0
    let pattern0_0 = arg0;
4407
0
    let pattern1_0 = arg1;
4408
0
    let pattern2_0 = arg2;
4409
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1162.
4410
0
    let expr0_0 = Opcode::UdivImm;
4411
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4412
0
        opcode: expr0_0,
4413
0
        imm: pattern2_0,
4414
0
    };
4415
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4416
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4417
0
    return Some(expr3_0);
4418
0
}
4419
4420
// Generated as internal constructor for term sdiv_imm.
4421
0
pub fn constructor_sdiv_imm<C: Context>(
4422
0
    ctx: &mut C,
4423
0
    arg0: Type,
4424
0
    arg1: Id,
4425
0
    arg2: Imm64,
4426
0
) -> Option<Id> {
4427
0
    let pattern0_0 = arg0;
4428
0
    let pattern1_0 = arg1;
4429
0
    let pattern2_0 = arg2;
4430
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1171.
4431
0
    let expr0_0 = Opcode::SdivImm;
4432
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4433
0
        opcode: expr0_0,
4434
0
        imm: pattern2_0,
4435
0
    };
4436
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4437
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4438
0
    return Some(expr3_0);
4439
0
}
4440
4441
// Generated as internal constructor for term urem_imm.
4442
0
pub fn constructor_urem_imm<C: Context>(
4443
0
    ctx: &mut C,
4444
0
    arg0: Type,
4445
0
    arg1: Id,
4446
0
    arg2: Imm64,
4447
0
) -> Option<Id> {
4448
0
    let pattern0_0 = arg0;
4449
0
    let pattern1_0 = arg1;
4450
0
    let pattern2_0 = arg2;
4451
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1180.
4452
0
    let expr0_0 = Opcode::UremImm;
4453
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4454
0
        opcode: expr0_0,
4455
0
        imm: pattern2_0,
4456
0
    };
4457
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4458
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4459
0
    return Some(expr3_0);
4460
0
}
4461
4462
// Generated as internal constructor for term srem_imm.
4463
0
pub fn constructor_srem_imm<C: Context>(
4464
0
    ctx: &mut C,
4465
0
    arg0: Type,
4466
0
    arg1: Id,
4467
0
    arg2: Imm64,
4468
0
) -> Option<Id> {
4469
0
    let pattern0_0 = arg0;
4470
0
    let pattern1_0 = arg1;
4471
0
    let pattern2_0 = arg2;
4472
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1189.
4473
0
    let expr0_0 = Opcode::SremImm;
4474
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4475
0
        opcode: expr0_0,
4476
0
        imm: pattern2_0,
4477
0
    };
4478
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4479
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4480
0
    return Some(expr3_0);
4481
0
}
4482
4483
// Generated as internal constructor for term irsub_imm.
4484
0
pub fn constructor_irsub_imm<C: Context>(
4485
0
    ctx: &mut C,
4486
0
    arg0: Type,
4487
0
    arg1: Id,
4488
0
    arg2: Imm64,
4489
0
) -> Option<Id> {
4490
0
    let pattern0_0 = arg0;
4491
0
    let pattern1_0 = arg1;
4492
0
    let pattern2_0 = arg2;
4493
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1198.
4494
0
    let expr0_0 = Opcode::IrsubImm;
4495
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4496
0
        opcode: expr0_0,
4497
0
        imm: pattern2_0,
4498
0
    };
4499
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4500
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4501
0
    return Some(expr3_0);
4502
0
}
4503
4504
// Generated as internal constructor for term iadd_cin.
4505
0
pub fn constructor_iadd_cin<C: Context>(
4506
0
    ctx: &mut C,
4507
0
    arg0: Type,
4508
0
    arg1: Id,
4509
0
    arg2: Id,
4510
0
    arg3: Id,
4511
0
) -> Option<Id> {
4512
0
    let pattern0_0 = arg0;
4513
0
    let pattern1_0 = arg1;
4514
0
    let pattern2_0 = arg2;
4515
0
    let pattern3_0 = arg3;
4516
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1207.
4517
0
    let expr0_0 = Opcode::IaddCin;
4518
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4519
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4520
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4521
0
    return Some(expr3_0);
4522
0
}
4523
4524
// Generated as internal constructor for term iadd_ifcin.
4525
0
pub fn constructor_iadd_ifcin<C: Context>(
4526
0
    ctx: &mut C,
4527
0
    arg0: Type,
4528
0
    arg1: Id,
4529
0
    arg2: Id,
4530
0
    arg3: Id,
4531
0
) -> Option<Id> {
4532
0
    let pattern0_0 = arg0;
4533
0
    let pattern1_0 = arg1;
4534
0
    let pattern2_0 = arg2;
4535
0
    let pattern3_0 = arg3;
4536
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1216.
4537
0
    let expr0_0 = Opcode::IaddIfcin;
4538
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4539
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4540
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4541
0
    return Some(expr3_0);
4542
0
}
4543
4544
// Generated as internal constructor for term iadd_cout.
4545
0
pub fn constructor_iadd_cout<C: Context>(
4546
0
    ctx: &mut C,
4547
0
    arg0: Type,
4548
0
    arg1: Id,
4549
0
    arg2: Id,
4550
0
) -> Option<Id> {
4551
0
    let pattern0_0 = arg0;
4552
0
    let pattern1_0 = arg1;
4553
0
    let pattern2_0 = arg2;
4554
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1225.
4555
0
    let expr0_0 = Opcode::IaddCout;
4556
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4557
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4558
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4559
0
    return Some(expr3_0);
4560
0
}
4561
4562
// Generated as internal constructor for term iadd_ifcout.
4563
0
pub fn constructor_iadd_ifcout<C: Context>(
4564
0
    ctx: &mut C,
4565
0
    arg0: Type,
4566
0
    arg1: Id,
4567
0
    arg2: Id,
4568
0
) -> Option<Id> {
4569
0
    let pattern0_0 = arg0;
4570
0
    let pattern1_0 = arg1;
4571
0
    let pattern2_0 = arg2;
4572
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1234.
4573
0
    let expr0_0 = Opcode::IaddIfcout;
4574
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4575
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4576
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4577
0
    return Some(expr3_0);
4578
0
}
4579
4580
// Generated as internal constructor for term iadd_carry.
4581
0
pub fn constructor_iadd_carry<C: Context>(
4582
0
    ctx: &mut C,
4583
0
    arg0: Type,
4584
0
    arg1: Id,
4585
0
    arg2: Id,
4586
0
    arg3: Id,
4587
0
) -> Option<Id> {
4588
0
    let pattern0_0 = arg0;
4589
0
    let pattern1_0 = arg1;
4590
0
    let pattern2_0 = arg2;
4591
0
    let pattern3_0 = arg3;
4592
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1243.
4593
0
    let expr0_0 = Opcode::IaddCarry;
4594
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4595
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4596
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4597
0
    return Some(expr3_0);
4598
0
}
4599
4600
// Generated as internal constructor for term iadd_ifcarry.
4601
0
pub fn constructor_iadd_ifcarry<C: Context>(
4602
0
    ctx: &mut C,
4603
0
    arg0: Type,
4604
0
    arg1: Id,
4605
0
    arg2: Id,
4606
0
    arg3: Id,
4607
0
) -> Option<Id> {
4608
0
    let pattern0_0 = arg0;
4609
0
    let pattern1_0 = arg1;
4610
0
    let pattern2_0 = arg2;
4611
0
    let pattern3_0 = arg3;
4612
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1252.
4613
0
    let expr0_0 = Opcode::IaddIfcarry;
4614
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4615
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4616
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4617
0
    return Some(expr3_0);
4618
0
}
4619
4620
// Generated as internal constructor for term uadd_overflow_trap.
4621
0
pub fn constructor_uadd_overflow_trap<C: Context>(
4622
0
    ctx: &mut C,
4623
0
    arg0: Type,
4624
0
    arg1: Id,
4625
0
    arg2: Id,
4626
0
    arg3: &TrapCode,
4627
0
) -> Option<Id> {
4628
0
    let pattern0_0 = arg0;
4629
0
    let pattern1_0 = arg1;
4630
0
    let pattern2_0 = arg2;
4631
0
    let pattern3_0 = arg3;
4632
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1261.
4633
0
    let expr0_0 = Opcode::UaddOverflowTrap;
4634
0
    let expr1_0 = InstructionImms::IntAddTrap {
4635
0
        opcode: expr0_0,
4636
0
        code: pattern3_0.clone(),
4637
0
    };
4638
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4639
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4640
0
    return Some(expr3_0);
4641
0
}
4642
4643
// Generated as internal constructor for term isub_bin.
4644
0
pub fn constructor_isub_bin<C: Context>(
4645
0
    ctx: &mut C,
4646
0
    arg0: Type,
4647
0
    arg1: Id,
4648
0
    arg2: Id,
4649
0
    arg3: Id,
4650
0
) -> Option<Id> {
4651
0
    let pattern0_0 = arg0;
4652
0
    let pattern1_0 = arg1;
4653
0
    let pattern2_0 = arg2;
4654
0
    let pattern3_0 = arg3;
4655
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1270.
4656
0
    let expr0_0 = Opcode::IsubBin;
4657
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4658
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4659
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4660
0
    return Some(expr3_0);
4661
0
}
4662
4663
// Generated as internal constructor for term isub_ifbin.
4664
0
pub fn constructor_isub_ifbin<C: Context>(
4665
0
    ctx: &mut C,
4666
0
    arg0: Type,
4667
0
    arg1: Id,
4668
0
    arg2: Id,
4669
0
    arg3: Id,
4670
0
) -> Option<Id> {
4671
0
    let pattern0_0 = arg0;
4672
0
    let pattern1_0 = arg1;
4673
0
    let pattern2_0 = arg2;
4674
0
    let pattern3_0 = arg3;
4675
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1279.
4676
0
    let expr0_0 = Opcode::IsubIfbin;
4677
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4678
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4679
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4680
0
    return Some(expr3_0);
4681
0
}
4682
4683
// Generated as internal constructor for term isub_bout.
4684
0
pub fn constructor_isub_bout<C: Context>(
4685
0
    ctx: &mut C,
4686
0
    arg0: Type,
4687
0
    arg1: Id,
4688
0
    arg2: Id,
4689
0
) -> Option<Id> {
4690
0
    let pattern0_0 = arg0;
4691
0
    let pattern1_0 = arg1;
4692
0
    let pattern2_0 = arg2;
4693
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1288.
4694
0
    let expr0_0 = Opcode::IsubBout;
4695
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4696
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4697
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4698
0
    return Some(expr3_0);
4699
0
}
4700
4701
// Generated as internal constructor for term isub_ifbout.
4702
0
pub fn constructor_isub_ifbout<C: Context>(
4703
0
    ctx: &mut C,
4704
0
    arg0: Type,
4705
0
    arg1: Id,
4706
0
    arg2: Id,
4707
0
) -> Option<Id> {
4708
0
    let pattern0_0 = arg0;
4709
0
    let pattern1_0 = arg1;
4710
0
    let pattern2_0 = arg2;
4711
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1297.
4712
0
    let expr0_0 = Opcode::IsubIfbout;
4713
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4714
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4715
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4716
0
    return Some(expr3_0);
4717
0
}
4718
4719
// Generated as internal constructor for term isub_borrow.
4720
0
pub fn constructor_isub_borrow<C: Context>(
4721
0
    ctx: &mut C,
4722
0
    arg0: Type,
4723
0
    arg1: Id,
4724
0
    arg2: Id,
4725
0
    arg3: Id,
4726
0
) -> Option<Id> {
4727
0
    let pattern0_0 = arg0;
4728
0
    let pattern1_0 = arg1;
4729
0
    let pattern2_0 = arg2;
4730
0
    let pattern3_0 = arg3;
4731
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1306.
4732
0
    let expr0_0 = Opcode::IsubBorrow;
4733
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4734
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4735
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4736
0
    return Some(expr3_0);
4737
0
}
4738
4739
// Generated as internal constructor for term isub_ifborrow.
4740
0
pub fn constructor_isub_ifborrow<C: Context>(
4741
0
    ctx: &mut C,
4742
0
    arg0: Type,
4743
0
    arg1: Id,
4744
0
    arg2: Id,
4745
0
    arg3: Id,
4746
0
) -> Option<Id> {
4747
0
    let pattern0_0 = arg0;
4748
0
    let pattern1_0 = arg1;
4749
0
    let pattern2_0 = arg2;
4750
0
    let pattern3_0 = arg3;
4751
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1315.
4752
0
    let expr0_0 = Opcode::IsubIfborrow;
4753
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
4754
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
4755
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4756
0
    return Some(expr3_0);
4757
0
}
4758
4759
// Generated as internal constructor for term band.
4760
0
pub fn constructor_band<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4761
0
    let pattern0_0 = arg0;
4762
0
    let pattern1_0 = arg1;
4763
0
    let pattern2_0 = arg2;
4764
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1324.
4765
0
    let expr0_0 = Opcode::Band;
4766
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4767
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4768
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4769
0
    return Some(expr3_0);
4770
0
}
4771
4772
// Generated as internal constructor for term bor.
4773
0
pub fn constructor_bor<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4774
0
    let pattern0_0 = arg0;
4775
0
    let pattern1_0 = arg1;
4776
0
    let pattern2_0 = arg2;
4777
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1333.
4778
0
    let expr0_0 = Opcode::Bor;
4779
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4780
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4781
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4782
0
    return Some(expr3_0);
4783
0
}
4784
4785
// Generated as internal constructor for term bxor.
4786
0
pub fn constructor_bxor<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4787
0
    let pattern0_0 = arg0;
4788
0
    let pattern1_0 = arg1;
4789
0
    let pattern2_0 = arg2;
4790
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1342.
4791
0
    let expr0_0 = Opcode::Bxor;
4792
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4793
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4794
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4795
0
    return Some(expr3_0);
4796
0
}
4797
4798
// Generated as internal constructor for term bnot.
4799
0
pub fn constructor_bnot<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
4800
0
    let pattern0_0 = arg0;
4801
0
    let pattern1_0 = arg1;
4802
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1351.
4803
0
    let expr0_0 = Opcode::Bnot;
4804
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
4805
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4806
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4807
0
    return Some(expr3_0);
4808
0
}
4809
4810
// Generated as internal constructor for term band_not.
4811
0
pub fn constructor_band_not<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4812
0
    let pattern0_0 = arg0;
4813
0
    let pattern1_0 = arg1;
4814
0
    let pattern2_0 = arg2;
4815
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1360.
4816
0
    let expr0_0 = Opcode::BandNot;
4817
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4818
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4819
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4820
0
    return Some(expr3_0);
4821
0
}
4822
4823
// Generated as internal constructor for term bor_not.
4824
0
pub fn constructor_bor_not<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4825
0
    let pattern0_0 = arg0;
4826
0
    let pattern1_0 = arg1;
4827
0
    let pattern2_0 = arg2;
4828
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1369.
4829
0
    let expr0_0 = Opcode::BorNot;
4830
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4831
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4832
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4833
0
    return Some(expr3_0);
4834
0
}
4835
4836
// Generated as internal constructor for term bxor_not.
4837
0
pub fn constructor_bxor_not<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4838
0
    let pattern0_0 = arg0;
4839
0
    let pattern1_0 = arg1;
4840
0
    let pattern2_0 = arg2;
4841
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1378.
4842
0
    let expr0_0 = Opcode::BxorNot;
4843
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4844
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4845
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4846
0
    return Some(expr3_0);
4847
0
}
4848
4849
// Generated as internal constructor for term band_imm.
4850
0
pub fn constructor_band_imm<C: Context>(
4851
0
    ctx: &mut C,
4852
0
    arg0: Type,
4853
0
    arg1: Id,
4854
0
    arg2: Imm64,
4855
0
) -> Option<Id> {
4856
0
    let pattern0_0 = arg0;
4857
0
    let pattern1_0 = arg1;
4858
0
    let pattern2_0 = arg2;
4859
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1387.
4860
0
    let expr0_0 = Opcode::BandImm;
4861
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4862
0
        opcode: expr0_0,
4863
0
        imm: pattern2_0,
4864
0
    };
4865
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4866
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4867
0
    return Some(expr3_0);
4868
0
}
4869
4870
// Generated as internal constructor for term bor_imm.
4871
0
pub fn constructor_bor_imm<C: Context>(
4872
0
    ctx: &mut C,
4873
0
    arg0: Type,
4874
0
    arg1: Id,
4875
0
    arg2: Imm64,
4876
0
) -> Option<Id> {
4877
0
    let pattern0_0 = arg0;
4878
0
    let pattern1_0 = arg1;
4879
0
    let pattern2_0 = arg2;
4880
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1396.
4881
0
    let expr0_0 = Opcode::BorImm;
4882
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4883
0
        opcode: expr0_0,
4884
0
        imm: pattern2_0,
4885
0
    };
4886
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4887
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4888
0
    return Some(expr3_0);
4889
0
}
4890
4891
// Generated as internal constructor for term bxor_imm.
4892
0
pub fn constructor_bxor_imm<C: Context>(
4893
0
    ctx: &mut C,
4894
0
    arg0: Type,
4895
0
    arg1: Id,
4896
0
    arg2: Imm64,
4897
0
) -> Option<Id> {
4898
0
    let pattern0_0 = arg0;
4899
0
    let pattern1_0 = arg1;
4900
0
    let pattern2_0 = arg2;
4901
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1405.
4902
0
    let expr0_0 = Opcode::BxorImm;
4903
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4904
0
        opcode: expr0_0,
4905
0
        imm: pattern2_0,
4906
0
    };
4907
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4908
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4909
0
    return Some(expr3_0);
4910
0
}
4911
4912
// Generated as internal constructor for term rotl.
4913
0
pub fn constructor_rotl<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4914
0
    let pattern0_0 = arg0;
4915
0
    let pattern1_0 = arg1;
4916
0
    let pattern2_0 = arg2;
4917
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1414.
4918
0
    let expr0_0 = Opcode::Rotl;
4919
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4920
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4921
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4922
0
    return Some(expr3_0);
4923
0
}
4924
4925
// Generated as internal constructor for term rotr.
4926
0
pub fn constructor_rotr<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4927
0
    let pattern0_0 = arg0;
4928
0
    let pattern1_0 = arg1;
4929
0
    let pattern2_0 = arg2;
4930
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1423.
4931
0
    let expr0_0 = Opcode::Rotr;
4932
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4933
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4934
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4935
0
    return Some(expr3_0);
4936
0
}
4937
4938
// Generated as internal constructor for term rotl_imm.
4939
0
pub fn constructor_rotl_imm<C: Context>(
4940
0
    ctx: &mut C,
4941
0
    arg0: Type,
4942
0
    arg1: Id,
4943
0
    arg2: Imm64,
4944
0
) -> Option<Id> {
4945
0
    let pattern0_0 = arg0;
4946
0
    let pattern1_0 = arg1;
4947
0
    let pattern2_0 = arg2;
4948
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1432.
4949
0
    let expr0_0 = Opcode::RotlImm;
4950
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4951
0
        opcode: expr0_0,
4952
0
        imm: pattern2_0,
4953
0
    };
4954
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4955
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4956
0
    return Some(expr3_0);
4957
0
}
4958
4959
// Generated as internal constructor for term rotr_imm.
4960
0
pub fn constructor_rotr_imm<C: Context>(
4961
0
    ctx: &mut C,
4962
0
    arg0: Type,
4963
0
    arg1: Id,
4964
0
    arg2: Imm64,
4965
0
) -> Option<Id> {
4966
0
    let pattern0_0 = arg0;
4967
0
    let pattern1_0 = arg1;
4968
0
    let pattern2_0 = arg2;
4969
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1441.
4970
0
    let expr0_0 = Opcode::RotrImm;
4971
0
    let expr1_0 = InstructionImms::BinaryImm64 {
4972
0
        opcode: expr0_0,
4973
0
        imm: pattern2_0,
4974
0
    };
4975
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
4976
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4977
0
    return Some(expr3_0);
4978
0
}
4979
4980
// Generated as internal constructor for term ishl.
4981
0
pub fn constructor_ishl<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4982
0
    let pattern0_0 = arg0;
4983
0
    let pattern1_0 = arg1;
4984
0
    let pattern2_0 = arg2;
4985
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1450.
4986
0
    let expr0_0 = Opcode::Ishl;
4987
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
4988
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
4989
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
4990
0
    return Some(expr3_0);
4991
0
}
4992
4993
// Generated as internal constructor for term ushr.
4994
0
pub fn constructor_ushr<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
4995
0
    let pattern0_0 = arg0;
4996
0
    let pattern1_0 = arg1;
4997
0
    let pattern2_0 = arg2;
4998
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1459.
4999
0
    let expr0_0 = Opcode::Ushr;
5000
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5001
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5002
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5003
0
    return Some(expr3_0);
5004
0
}
5005
5006
// Generated as internal constructor for term sshr.
5007
0
pub fn constructor_sshr<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5008
0
    let pattern0_0 = arg0;
5009
0
    let pattern1_0 = arg1;
5010
0
    let pattern2_0 = arg2;
5011
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1468.
5012
0
    let expr0_0 = Opcode::Sshr;
5013
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5014
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5015
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5016
0
    return Some(expr3_0);
5017
0
}
5018
5019
// Generated as internal constructor for term ishl_imm.
5020
0
pub fn constructor_ishl_imm<C: Context>(
5021
0
    ctx: &mut C,
5022
0
    arg0: Type,
5023
0
    arg1: Id,
5024
0
    arg2: Imm64,
5025
0
) -> Option<Id> {
5026
0
    let pattern0_0 = arg0;
5027
0
    let pattern1_0 = arg1;
5028
0
    let pattern2_0 = arg2;
5029
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1477.
5030
0
    let expr0_0 = Opcode::IshlImm;
5031
0
    let expr1_0 = InstructionImms::BinaryImm64 {
5032
0
        opcode: expr0_0,
5033
0
        imm: pattern2_0,
5034
0
    };
5035
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5036
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5037
0
    return Some(expr3_0);
5038
0
}
5039
5040
// Generated as internal constructor for term ushr_imm.
5041
0
pub fn constructor_ushr_imm<C: Context>(
5042
0
    ctx: &mut C,
5043
0
    arg0: Type,
5044
0
    arg1: Id,
5045
0
    arg2: Imm64,
5046
0
) -> Option<Id> {
5047
0
    let pattern0_0 = arg0;
5048
0
    let pattern1_0 = arg1;
5049
0
    let pattern2_0 = arg2;
5050
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1486.
5051
0
    let expr0_0 = Opcode::UshrImm;
5052
0
    let expr1_0 = InstructionImms::BinaryImm64 {
5053
0
        opcode: expr0_0,
5054
0
        imm: pattern2_0,
5055
0
    };
5056
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5057
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5058
0
    return Some(expr3_0);
5059
0
}
5060
5061
// Generated as internal constructor for term sshr_imm.
5062
0
pub fn constructor_sshr_imm<C: Context>(
5063
0
    ctx: &mut C,
5064
0
    arg0: Type,
5065
0
    arg1: Id,
5066
0
    arg2: Imm64,
5067
0
) -> Option<Id> {
5068
0
    let pattern0_0 = arg0;
5069
0
    let pattern1_0 = arg1;
5070
0
    let pattern2_0 = arg2;
5071
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1495.
5072
0
    let expr0_0 = Opcode::SshrImm;
5073
0
    let expr1_0 = InstructionImms::BinaryImm64 {
5074
0
        opcode: expr0_0,
5075
0
        imm: pattern2_0,
5076
0
    };
5077
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5078
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5079
0
    return Some(expr3_0);
5080
0
}
5081
5082
// Generated as internal constructor for term bitrev.
5083
0
pub fn constructor_bitrev<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5084
0
    let pattern0_0 = arg0;
5085
0
    let pattern1_0 = arg1;
5086
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1504.
5087
0
    let expr0_0 = Opcode::Bitrev;
5088
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5089
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5090
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5091
0
    return Some(expr3_0);
5092
0
}
5093
5094
// Generated as internal constructor for term clz.
5095
0
pub fn constructor_clz<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5096
0
    let pattern0_0 = arg0;
5097
0
    let pattern1_0 = arg1;
5098
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1513.
5099
0
    let expr0_0 = Opcode::Clz;
5100
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5101
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5102
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5103
0
    return Some(expr3_0);
5104
0
}
5105
5106
// Generated as internal constructor for term cls.
5107
0
pub fn constructor_cls<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5108
0
    let pattern0_0 = arg0;
5109
0
    let pattern1_0 = arg1;
5110
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1522.
5111
0
    let expr0_0 = Opcode::Cls;
5112
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5113
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5114
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5115
0
    return Some(expr3_0);
5116
0
}
5117
5118
// Generated as internal constructor for term ctz.
5119
0
pub fn constructor_ctz<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5120
0
    let pattern0_0 = arg0;
5121
0
    let pattern1_0 = arg1;
5122
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1531.
5123
0
    let expr0_0 = Opcode::Ctz;
5124
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5125
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5126
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5127
0
    return Some(expr3_0);
5128
0
}
5129
5130
// Generated as internal constructor for term bswap.
5131
0
pub fn constructor_bswap<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5132
0
    let pattern0_0 = arg0;
5133
0
    let pattern1_0 = arg1;
5134
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1540.
5135
0
    let expr0_0 = Opcode::Bswap;
5136
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5137
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5138
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5139
0
    return Some(expr3_0);
5140
0
}
5141
5142
// Generated as internal constructor for term popcnt.
5143
0
pub fn constructor_popcnt<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5144
0
    let pattern0_0 = arg0;
5145
0
    let pattern1_0 = arg1;
5146
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1549.
5147
0
    let expr0_0 = Opcode::Popcnt;
5148
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5149
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5150
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5151
0
    return Some(expr3_0);
5152
0
}
5153
5154
// Generated as internal constructor for term fcmp.
5155
0
pub fn constructor_fcmp<C: Context>(
5156
0
    ctx: &mut C,
5157
0
    arg0: Type,
5158
0
    arg1: &FloatCC,
5159
0
    arg2: Id,
5160
0
    arg3: Id,
5161
0
) -> Option<Id> {
5162
0
    let pattern0_0 = arg0;
5163
0
    let pattern1_0 = arg1;
5164
0
    let pattern2_0 = arg2;
5165
0
    let pattern3_0 = arg3;
5166
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1558.
5167
0
    let expr0_0 = Opcode::Fcmp;
5168
0
    let expr1_0 = InstructionImms::FloatCompare {
5169
0
        opcode: expr0_0,
5170
0
        cond: pattern1_0.clone(),
5171
0
    };
5172
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
5173
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5174
0
    return Some(expr3_0);
5175
0
}
5176
5177
// Generated as internal constructor for term ffcmp.
5178
0
pub fn constructor_ffcmp<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5179
0
    let pattern0_0 = arg0;
5180
0
    let pattern1_0 = arg1;
5181
0
    let pattern2_0 = arg2;
5182
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1567.
5183
0
    let expr0_0 = Opcode::Ffcmp;
5184
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5185
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5186
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5187
0
    return Some(expr3_0);
5188
0
}
5189
5190
// Generated as internal constructor for term fadd.
5191
0
pub fn constructor_fadd<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5192
0
    let pattern0_0 = arg0;
5193
0
    let pattern1_0 = arg1;
5194
0
    let pattern2_0 = arg2;
5195
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1576.
5196
0
    let expr0_0 = Opcode::Fadd;
5197
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5198
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5199
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5200
0
    return Some(expr3_0);
5201
0
}
5202
5203
// Generated as internal constructor for term fsub.
5204
0
pub fn constructor_fsub<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5205
0
    let pattern0_0 = arg0;
5206
0
    let pattern1_0 = arg1;
5207
0
    let pattern2_0 = arg2;
5208
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1585.
5209
0
    let expr0_0 = Opcode::Fsub;
5210
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5211
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5212
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5213
0
    return Some(expr3_0);
5214
0
}
5215
5216
// Generated as internal constructor for term fmul.
5217
0
pub fn constructor_fmul<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5218
0
    let pattern0_0 = arg0;
5219
0
    let pattern1_0 = arg1;
5220
0
    let pattern2_0 = arg2;
5221
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1594.
5222
0
    let expr0_0 = Opcode::Fmul;
5223
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5224
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5225
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5226
0
    return Some(expr3_0);
5227
0
}
5228
5229
// Generated as internal constructor for term fdiv.
5230
0
pub fn constructor_fdiv<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5231
0
    let pattern0_0 = arg0;
5232
0
    let pattern1_0 = arg1;
5233
0
    let pattern2_0 = arg2;
5234
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1603.
5235
0
    let expr0_0 = Opcode::Fdiv;
5236
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5237
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5238
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5239
0
    return Some(expr3_0);
5240
0
}
5241
5242
// Generated as internal constructor for term sqrt.
5243
0
pub fn constructor_sqrt<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5244
0
    let pattern0_0 = arg0;
5245
0
    let pattern1_0 = arg1;
5246
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1612.
5247
0
    let expr0_0 = Opcode::Sqrt;
5248
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5249
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5250
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5251
0
    return Some(expr3_0);
5252
0
}
5253
5254
// Generated as internal constructor for term fma.
5255
0
pub fn constructor_fma<C: Context>(
5256
0
    ctx: &mut C,
5257
0
    arg0: Type,
5258
0
    arg1: Id,
5259
0
    arg2: Id,
5260
0
    arg3: Id,
5261
0
) -> Option<Id> {
5262
0
    let pattern0_0 = arg0;
5263
0
    let pattern1_0 = arg1;
5264
0
    let pattern2_0 = arg2;
5265
0
    let pattern3_0 = arg3;
5266
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1621.
5267
0
    let expr0_0 = Opcode::Fma;
5268
0
    let expr1_0 = InstructionImms::Ternary { opcode: expr0_0 };
5269
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern1_0, pattern2_0, pattern3_0);
5270
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5271
0
    return Some(expr3_0);
5272
0
}
5273
5274
// Generated as internal constructor for term fneg.
5275
0
pub fn constructor_fneg<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5276
0
    let pattern0_0 = arg0;
5277
0
    let pattern1_0 = arg1;
5278
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1630.
5279
0
    let expr0_0 = Opcode::Fneg;
5280
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5281
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5282
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5283
0
    return Some(expr3_0);
5284
0
}
5285
5286
// Generated as internal constructor for term fabs.
5287
0
pub fn constructor_fabs<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5288
0
    let pattern0_0 = arg0;
5289
0
    let pattern1_0 = arg1;
5290
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1639.
5291
0
    let expr0_0 = Opcode::Fabs;
5292
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5293
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5294
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5295
0
    return Some(expr3_0);
5296
0
}
5297
5298
// Generated as internal constructor for term fcopysign.
5299
0
pub fn constructor_fcopysign<C: Context>(
5300
0
    ctx: &mut C,
5301
0
    arg0: Type,
5302
0
    arg1: Id,
5303
0
    arg2: Id,
5304
0
) -> Option<Id> {
5305
0
    let pattern0_0 = arg0;
5306
0
    let pattern1_0 = arg1;
5307
0
    let pattern2_0 = arg2;
5308
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1648.
5309
0
    let expr0_0 = Opcode::Fcopysign;
5310
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5311
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5312
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5313
0
    return Some(expr3_0);
5314
0
}
5315
5316
// Generated as internal constructor for term fmin.
5317
0
pub fn constructor_fmin<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5318
0
    let pattern0_0 = arg0;
5319
0
    let pattern1_0 = arg1;
5320
0
    let pattern2_0 = arg2;
5321
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1657.
5322
0
    let expr0_0 = Opcode::Fmin;
5323
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5324
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5325
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5326
0
    return Some(expr3_0);
5327
0
}
5328
5329
// Generated as internal constructor for term fmin_pseudo.
5330
0
pub fn constructor_fmin_pseudo<C: Context>(
5331
0
    ctx: &mut C,
5332
0
    arg0: Type,
5333
0
    arg1: Id,
5334
0
    arg2: Id,
5335
0
) -> Option<Id> {
5336
0
    let pattern0_0 = arg0;
5337
0
    let pattern1_0 = arg1;
5338
0
    let pattern2_0 = arg2;
5339
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1666.
5340
0
    let expr0_0 = Opcode::FminPseudo;
5341
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5342
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5343
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5344
0
    return Some(expr3_0);
5345
0
}
5346
5347
// Generated as internal constructor for term fmax.
5348
0
pub fn constructor_fmax<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5349
0
    let pattern0_0 = arg0;
5350
0
    let pattern1_0 = arg1;
5351
0
    let pattern2_0 = arg2;
5352
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1675.
5353
0
    let expr0_0 = Opcode::Fmax;
5354
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5355
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5356
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5357
0
    return Some(expr3_0);
5358
0
}
5359
5360
// Generated as internal constructor for term fmax_pseudo.
5361
0
pub fn constructor_fmax_pseudo<C: Context>(
5362
0
    ctx: &mut C,
5363
0
    arg0: Type,
5364
0
    arg1: Id,
5365
0
    arg2: Id,
5366
0
) -> Option<Id> {
5367
0
    let pattern0_0 = arg0;
5368
0
    let pattern1_0 = arg1;
5369
0
    let pattern2_0 = arg2;
5370
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1684.
5371
0
    let expr0_0 = Opcode::FmaxPseudo;
5372
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5373
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5374
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5375
0
    return Some(expr3_0);
5376
0
}
5377
5378
// Generated as internal constructor for term ceil.
5379
0
pub fn constructor_ceil<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5380
0
    let pattern0_0 = arg0;
5381
0
    let pattern1_0 = arg1;
5382
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1693.
5383
0
    let expr0_0 = Opcode::Ceil;
5384
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5385
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5386
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5387
0
    return Some(expr3_0);
5388
0
}
5389
5390
// Generated as internal constructor for term floor.
5391
0
pub fn constructor_floor<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5392
0
    let pattern0_0 = arg0;
5393
0
    let pattern1_0 = arg1;
5394
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1702.
5395
0
    let expr0_0 = Opcode::Floor;
5396
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5397
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5398
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5399
0
    return Some(expr3_0);
5400
0
}
5401
5402
// Generated as internal constructor for term trunc.
5403
0
pub fn constructor_trunc<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5404
0
    let pattern0_0 = arg0;
5405
0
    let pattern1_0 = arg1;
5406
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1711.
5407
0
    let expr0_0 = Opcode::Trunc;
5408
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5409
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5410
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5411
0
    return Some(expr3_0);
5412
0
}
5413
5414
// Generated as internal constructor for term nearest.
5415
0
pub fn constructor_nearest<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5416
0
    let pattern0_0 = arg0;
5417
0
    let pattern1_0 = arg1;
5418
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1720.
5419
0
    let expr0_0 = Opcode::Nearest;
5420
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5421
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5422
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5423
0
    return Some(expr3_0);
5424
0
}
5425
5426
// Generated as internal constructor for term is_null.
5427
0
pub fn constructor_is_null<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5428
0
    let pattern0_0 = arg0;
5429
0
    let pattern1_0 = arg1;
5430
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1729.
5431
0
    let expr0_0 = Opcode::IsNull;
5432
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5433
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5434
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5435
0
    return Some(expr3_0);
5436
0
}
5437
5438
// Generated as internal constructor for term is_invalid.
5439
0
pub fn constructor_is_invalid<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5440
0
    let pattern0_0 = arg0;
5441
0
    let pattern1_0 = arg1;
5442
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1738.
5443
0
    let expr0_0 = Opcode::IsInvalid;
5444
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5445
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5446
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5447
0
    return Some(expr3_0);
5448
0
}
5449
5450
// Generated as internal constructor for term bitcast.
5451
0
pub fn constructor_bitcast<C: Context>(
5452
0
    ctx: &mut C,
5453
0
    arg0: Type,
5454
0
    arg1: MemFlags,
5455
0
    arg2: Id,
5456
0
) -> Option<Id> {
5457
0
    let pattern0_0 = arg0;
5458
0
    let pattern1_0 = arg1;
5459
0
    let pattern2_0 = arg2;
5460
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1747.
5461
0
    let expr0_0 = Opcode::Bitcast;
5462
0
    let expr1_0 = InstructionImms::LoadNoOffset {
5463
0
        opcode: expr0_0,
5464
0
        flags: pattern1_0,
5465
0
    };
5466
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
5467
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5468
0
    return Some(expr3_0);
5469
0
}
5470
5471
// Generated as internal constructor for term scalar_to_vector.
5472
0
pub fn constructor_scalar_to_vector<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5473
0
    let pattern0_0 = arg0;
5474
0
    let pattern1_0 = arg1;
5475
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1756.
5476
0
    let expr0_0 = Opcode::ScalarToVector;
5477
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5478
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5479
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5480
0
    return Some(expr3_0);
5481
0
}
5482
5483
// Generated as internal constructor for term bmask.
5484
0
pub fn constructor_bmask<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5485
0
    let pattern0_0 = arg0;
5486
0
    let pattern1_0 = arg1;
5487
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1765.
5488
0
    let expr0_0 = Opcode::Bmask;
5489
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5490
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5491
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5492
0
    return Some(expr3_0);
5493
0
}
5494
5495
// Generated as internal constructor for term ireduce.
5496
0
pub fn constructor_ireduce<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5497
0
    let pattern0_0 = arg0;
5498
0
    let pattern1_0 = arg1;
5499
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1774.
5500
0
    let expr0_0 = Opcode::Ireduce;
5501
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5502
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5503
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5504
0
    return Some(expr3_0);
5505
0
}
5506
5507
// Generated as internal constructor for term snarrow.
5508
0
pub fn constructor_snarrow<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5509
0
    let pattern0_0 = arg0;
5510
0
    let pattern1_0 = arg1;
5511
0
    let pattern2_0 = arg2;
5512
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1783.
5513
0
    let expr0_0 = Opcode::Snarrow;
5514
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5515
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5516
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5517
0
    return Some(expr3_0);
5518
0
}
5519
5520
// Generated as internal constructor for term unarrow.
5521
0
pub fn constructor_unarrow<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5522
0
    let pattern0_0 = arg0;
5523
0
    let pattern1_0 = arg1;
5524
0
    let pattern2_0 = arg2;
5525
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1792.
5526
0
    let expr0_0 = Opcode::Unarrow;
5527
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5528
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5529
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5530
0
    return Some(expr3_0);
5531
0
}
5532
5533
// Generated as internal constructor for term uunarrow.
5534
0
pub fn constructor_uunarrow<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5535
0
    let pattern0_0 = arg0;
5536
0
    let pattern1_0 = arg1;
5537
0
    let pattern2_0 = arg2;
5538
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1801.
5539
0
    let expr0_0 = Opcode::Uunarrow;
5540
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5541
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5542
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5543
0
    return Some(expr3_0);
5544
0
}
5545
5546
// Generated as internal constructor for term swiden_low.
5547
0
pub fn constructor_swiden_low<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5548
0
    let pattern0_0 = arg0;
5549
0
    let pattern1_0 = arg1;
5550
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1810.
5551
0
    let expr0_0 = Opcode::SwidenLow;
5552
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5553
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5554
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5555
0
    return Some(expr3_0);
5556
0
}
5557
5558
// Generated as internal constructor for term swiden_high.
5559
0
pub fn constructor_swiden_high<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5560
0
    let pattern0_0 = arg0;
5561
0
    let pattern1_0 = arg1;
5562
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1819.
5563
0
    let expr0_0 = Opcode::SwidenHigh;
5564
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5565
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5566
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5567
0
    return Some(expr3_0);
5568
0
}
5569
5570
// Generated as internal constructor for term uwiden_low.
5571
0
pub fn constructor_uwiden_low<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5572
0
    let pattern0_0 = arg0;
5573
0
    let pattern1_0 = arg1;
5574
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1828.
5575
0
    let expr0_0 = Opcode::UwidenLow;
5576
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5577
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5578
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5579
0
    return Some(expr3_0);
5580
0
}
5581
5582
// Generated as internal constructor for term uwiden_high.
5583
0
pub fn constructor_uwiden_high<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5584
0
    let pattern0_0 = arg0;
5585
0
    let pattern1_0 = arg1;
5586
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1837.
5587
0
    let expr0_0 = Opcode::UwidenHigh;
5588
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5589
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5590
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5591
0
    return Some(expr3_0);
5592
0
}
5593
5594
// Generated as internal constructor for term iadd_pairwise.
5595
0
pub fn constructor_iadd_pairwise<C: Context>(
5596
0
    ctx: &mut C,
5597
0
    arg0: Type,
5598
0
    arg1: Id,
5599
0
    arg2: Id,
5600
0
) -> Option<Id> {
5601
0
    let pattern0_0 = arg0;
5602
0
    let pattern1_0 = arg1;
5603
0
    let pattern2_0 = arg2;
5604
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1846.
5605
0
    let expr0_0 = Opcode::IaddPairwise;
5606
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5607
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5608
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5609
0
    return Some(expr3_0);
5610
0
}
5611
5612
// Generated as internal constructor for term widening_pairwise_dot_product_s.
5613
0
pub fn constructor_widening_pairwise_dot_product_s<C: Context>(
5614
0
    ctx: &mut C,
5615
0
    arg0: Type,
5616
0
    arg1: Id,
5617
0
    arg2: Id,
5618
0
) -> Option<Id> {
5619
0
    let pattern0_0 = arg0;
5620
0
    let pattern1_0 = arg1;
5621
0
    let pattern2_0 = arg2;
5622
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1855.
5623
0
    let expr0_0 = Opcode::WideningPairwiseDotProductS;
5624
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5625
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5626
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5627
0
    return Some(expr3_0);
5628
0
}
5629
5630
// Generated as internal constructor for term uextend.
5631
0
pub fn constructor_uextend<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5632
0
    let pattern0_0 = arg0;
5633
0
    let pattern1_0 = arg1;
5634
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1864.
5635
0
    let expr0_0 = Opcode::Uextend;
5636
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5637
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5638
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5639
0
    return Some(expr3_0);
5640
0
}
5641
5642
// Generated as internal constructor for term sextend.
5643
0
pub fn constructor_sextend<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5644
0
    let pattern0_0 = arg0;
5645
0
    let pattern1_0 = arg1;
5646
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1873.
5647
0
    let expr0_0 = Opcode::Sextend;
5648
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5649
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5650
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5651
0
    return Some(expr3_0);
5652
0
}
5653
5654
// Generated as internal constructor for term fpromote.
5655
0
pub fn constructor_fpromote<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5656
0
    let pattern0_0 = arg0;
5657
0
    let pattern1_0 = arg1;
5658
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1882.
5659
0
    let expr0_0 = Opcode::Fpromote;
5660
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5661
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5662
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5663
0
    return Some(expr3_0);
5664
0
}
5665
5666
// Generated as internal constructor for term fdemote.
5667
0
pub fn constructor_fdemote<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5668
0
    let pattern0_0 = arg0;
5669
0
    let pattern1_0 = arg1;
5670
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1891.
5671
0
    let expr0_0 = Opcode::Fdemote;
5672
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5673
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5674
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5675
0
    return Some(expr3_0);
5676
0
}
5677
5678
// Generated as internal constructor for term fvdemote.
5679
0
pub fn constructor_fvdemote<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5680
0
    let pattern0_0 = arg0;
5681
0
    let pattern1_0 = arg1;
5682
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1900.
5683
0
    let expr0_0 = Opcode::Fvdemote;
5684
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5685
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5686
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5687
0
    return Some(expr3_0);
5688
0
}
5689
5690
// Generated as internal constructor for term fvpromote_low.
5691
0
pub fn constructor_fvpromote_low<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5692
0
    let pattern0_0 = arg0;
5693
0
    let pattern1_0 = arg1;
5694
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1909.
5695
0
    let expr0_0 = Opcode::FvpromoteLow;
5696
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5697
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5698
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5699
0
    return Some(expr3_0);
5700
0
}
5701
5702
// Generated as internal constructor for term fcvt_to_uint.
5703
0
pub fn constructor_fcvt_to_uint<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5704
0
    let pattern0_0 = arg0;
5705
0
    let pattern1_0 = arg1;
5706
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1918.
5707
0
    let expr0_0 = Opcode::FcvtToUint;
5708
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5709
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5710
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5711
0
    return Some(expr3_0);
5712
0
}
5713
5714
// Generated as internal constructor for term fcvt_to_sint.
5715
0
pub fn constructor_fcvt_to_sint<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5716
0
    let pattern0_0 = arg0;
5717
0
    let pattern1_0 = arg1;
5718
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1927.
5719
0
    let expr0_0 = Opcode::FcvtToSint;
5720
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5721
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5722
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5723
0
    return Some(expr3_0);
5724
0
}
5725
5726
// Generated as internal constructor for term fcvt_to_uint_sat.
5727
0
pub fn constructor_fcvt_to_uint_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5728
0
    let pattern0_0 = arg0;
5729
0
    let pattern1_0 = arg1;
5730
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1936.
5731
0
    let expr0_0 = Opcode::FcvtToUintSat;
5732
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5733
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5734
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5735
0
    return Some(expr3_0);
5736
0
}
5737
5738
// Generated as internal constructor for term fcvt_to_sint_sat.
5739
0
pub fn constructor_fcvt_to_sint_sat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5740
0
    let pattern0_0 = arg0;
5741
0
    let pattern1_0 = arg1;
5742
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1945.
5743
0
    let expr0_0 = Opcode::FcvtToSintSat;
5744
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5745
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5746
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5747
0
    return Some(expr3_0);
5748
0
}
5749
5750
// Generated as internal constructor for term fcvt_from_uint.
5751
0
pub fn constructor_fcvt_from_uint<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5752
0
    let pattern0_0 = arg0;
5753
0
    let pattern1_0 = arg1;
5754
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1954.
5755
0
    let expr0_0 = Opcode::FcvtFromUint;
5756
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5757
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5758
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5759
0
    return Some(expr3_0);
5760
0
}
5761
5762
// Generated as internal constructor for term fcvt_from_sint.
5763
0
pub fn constructor_fcvt_from_sint<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5764
0
    let pattern0_0 = arg0;
5765
0
    let pattern1_0 = arg1;
5766
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1963.
5767
0
    let expr0_0 = Opcode::FcvtFromSint;
5768
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5769
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5770
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5771
0
    return Some(expr3_0);
5772
0
}
5773
5774
// Generated as internal constructor for term fcvt_low_from_sint.
5775
0
pub fn constructor_fcvt_low_from_sint<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5776
0
    let pattern0_0 = arg0;
5777
0
    let pattern1_0 = arg1;
5778
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1972.
5779
0
    let expr0_0 = Opcode::FcvtLowFromSint;
5780
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5781
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5782
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5783
0
    return Some(expr3_0);
5784
0
}
5785
5786
// Generated as internal constructor for term isplit.
5787
0
pub fn constructor_isplit<C: Context>(ctx: &mut C, arg0: Type, arg1: Id) -> Option<Id> {
5788
0
    let pattern0_0 = arg0;
5789
0
    let pattern1_0 = arg1;
5790
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1981.
5791
0
    let expr0_0 = Opcode::Isplit;
5792
0
    let expr1_0 = InstructionImms::Unary { opcode: expr0_0 };
5793
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5794
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5795
0
    return Some(expr3_0);
5796
0
}
5797
5798
// Generated as internal constructor for term iconcat.
5799
0
pub fn constructor_iconcat<C: Context>(ctx: &mut C, arg0: Type, arg1: Id, arg2: Id) -> Option<Id> {
5800
0
    let pattern0_0 = arg0;
5801
0
    let pattern1_0 = arg1;
5802
0
    let pattern2_0 = arg2;
5803
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1990.
5804
0
    let expr0_0 = Opcode::Iconcat;
5805
0
    let expr1_0 = InstructionImms::Binary { opcode: expr0_0 };
5806
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern1_0, pattern2_0);
5807
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5808
0
    return Some(expr3_0);
5809
0
}
5810
5811
// Generated as internal constructor for term atomic_rmw.
5812
0
pub fn constructor_atomic_rmw<C: Context>(
5813
0
    ctx: &mut C,
5814
0
    arg0: Type,
5815
0
    arg1: MemFlags,
5816
0
    arg2: &AtomicRmwOp,
5817
0
    arg3: Id,
5818
0
    arg4: Id,
5819
0
) -> Option<Id> {
5820
0
    let pattern0_0 = arg0;
5821
0
    let pattern1_0 = arg1;
5822
0
    let pattern2_0 = arg2;
5823
0
    let pattern3_0 = arg3;
5824
0
    let pattern4_0 = arg4;
5825
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 1999.
5826
0
    let expr0_0 = Opcode::AtomicRmw;
5827
0
    let expr1_0 = InstructionImms::AtomicRmw {
5828
0
        opcode: expr0_0,
5829
0
        flags: pattern1_0,
5830
0
        op: pattern2_0.clone(),
5831
0
    };
5832
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern3_0, pattern4_0);
5833
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5834
0
    return Some(expr3_0);
5835
0
}
5836
5837
// Generated as internal constructor for term atomic_cas.
5838
0
pub fn constructor_atomic_cas<C: Context>(
5839
0
    ctx: &mut C,
5840
0
    arg0: Type,
5841
0
    arg1: MemFlags,
5842
0
    arg2: Id,
5843
0
    arg3: Id,
5844
0
    arg4: Id,
5845
0
) -> Option<Id> {
5846
0
    let pattern0_0 = arg0;
5847
0
    let pattern1_0 = arg1;
5848
0
    let pattern2_0 = arg2;
5849
0
    let pattern3_0 = arg3;
5850
0
    let pattern4_0 = arg4;
5851
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 2008.
5852
0
    let expr0_0 = Opcode::AtomicCas;
5853
0
    let expr1_0 = InstructionImms::AtomicCas {
5854
0
        opcode: expr0_0,
5855
0
        flags: pattern1_0,
5856
0
    };
5857
0
    let expr2_0 = C::id_array_3_ctor(ctx, pattern2_0, pattern3_0, pattern4_0);
5858
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5859
0
    return Some(expr3_0);
5860
0
}
5861
5862
// Generated as internal constructor for term atomic_load.
5863
0
pub fn constructor_atomic_load<C: Context>(
5864
0
    ctx: &mut C,
5865
0
    arg0: Type,
5866
0
    arg1: MemFlags,
5867
0
    arg2: Id,
5868
0
) -> Option<Id> {
5869
0
    let pattern0_0 = arg0;
5870
0
    let pattern1_0 = arg1;
5871
0
    let pattern2_0 = arg2;
5872
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 2017.
5873
0
    let expr0_0 = Opcode::AtomicLoad;
5874
0
    let expr1_0 = InstructionImms::LoadNoOffset {
5875
0
        opcode: expr0_0,
5876
0
        flags: pattern1_0,
5877
0
    };
5878
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern2_0);
5879
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5880
0
    return Some(expr3_0);
5881
0
}
5882
5883
// Generated as internal constructor for term atomic_store.
5884
0
pub fn constructor_atomic_store<C: Context>(
5885
0
    ctx: &mut C,
5886
0
    arg0: Type,
5887
0
    arg1: MemFlags,
5888
0
    arg2: Id,
5889
0
    arg3: Id,
5890
0
) -> Option<Id> {
5891
0
    let pattern0_0 = arg0;
5892
0
    let pattern1_0 = arg1;
5893
0
    let pattern2_0 = arg2;
5894
0
    let pattern3_0 = arg3;
5895
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 2026.
5896
0
    let expr0_0 = Opcode::AtomicStore;
5897
0
    let expr1_0 = InstructionImms::StoreNoOffset {
5898
0
        opcode: expr0_0,
5899
0
        flags: pattern1_0,
5900
0
    };
5901
0
    let expr2_0 = C::id_array_2_ctor(ctx, pattern2_0, pattern3_0);
5902
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5903
0
    return Some(expr3_0);
5904
0
}
5905
5906
// Generated as internal constructor for term fence.
5907
0
pub fn constructor_fence<C: Context>(ctx: &mut C, arg0: Type) -> Option<Id> {
5908
0
    let pattern0_0 = arg0;
5909
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 2035.
5910
0
    let expr0_0 = Opcode::Fence;
5911
0
    let expr1_0 = InstructionImms::NullAry { opcode: expr0_0 };
5912
0
    let expr2_0 = C::id_array_0_ctor(ctx);
5913
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5914
0
    return Some(expr3_0);
5915
0
}
5916
5917
// Generated as internal constructor for term extract_vector.
5918
0
pub fn constructor_extract_vector<C: Context>(
5919
0
    ctx: &mut C,
5920
0
    arg0: Type,
5921
0
    arg1: Id,
5922
0
    arg2: Uimm8,
5923
0
) -> Option<Id> {
5924
0
    let pattern0_0 = arg0;
5925
0
    let pattern1_0 = arg1;
5926
0
    let pattern2_0 = arg2;
5927
0
    // Rule at /src/wasmer/target/x86_64-unknown-linux-gnu/release/build/cranelift-codegen-bbdde6853ee6ef31/out/clif_opt.isle line 2044.
5928
0
    let expr0_0 = Opcode::ExtractVector;
5929
0
    let expr1_0 = InstructionImms::BinaryImm8 {
5930
0
        opcode: expr0_0,
5931
0
        imm: pattern2_0,
5932
0
    };
5933
0
    let expr2_0 = C::id_array_1_ctor(ctx, pattern1_0);
5934
0
    let expr3_0 = C::pure_enode_ctor(ctx, pattern0_0, &expr1_0, expr2_0);
5935
0
    return Some(expr3_0);
5936
0
}