Coverage Report

Created: 2024-10-16 07:58

/rust/registry/src/index.crates.io-6f17d22bba15001f/cranelift-codegen-0.91.1/src/machinst/isle.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::ir::{types, Inst, Value, ValueList};
2
use crate::machinst::{get_output_reg, InsnOutput};
3
use alloc::boxed::Box;
4
use alloc::vec::Vec;
5
use smallvec::SmallVec;
6
use std::cell::Cell;
7
use target_lexicon::Triple;
8
9
pub use super::MachLabel;
10
use super::RetPair;
11
pub use crate::ir::{
12
    condcodes, condcodes::CondCode, dynamic_to_fixed, ArgumentExtension, ArgumentPurpose, Constant,
13
    DynamicStackSlot, ExternalName, FuncRef, GlobalValue, Immediate, SigRef, StackSlot,
14
};
15
pub use crate::isa::unwind::UnwindInst;
16
pub use crate::machinst::{
17
    ABIArg, ABIArgSlot, InputSourceInst, Lower, RealReg, Reg, RelocDistance, Sig, VCodeInst,
18
    Writable,
19
};
20
pub use crate::settings::TlsModel;
21
22
pub type Unit = ();
23
pub type ValueSlice = (ValueList, usize);
24
pub type ValueArray2 = [Value; 2];
25
pub type ValueArray3 = [Value; 3];
26
pub type WritableReg = Writable<Reg>;
27
pub type VecRetPair = Vec<RetPair>;
28
pub type VecMask = Vec<u8>;
29
pub type ValueRegs = crate::machinst::ValueRegs<Reg>;
30
pub type WritableValueRegs = crate::machinst::ValueRegs<WritableReg>;
31
pub type InstOutput = SmallVec<[ValueRegs; 2]>;
32
pub type InstOutputBuilder = Cell<InstOutput>;
33
pub type BoxExternalName = Box<ExternalName>;
34
pub type Range = (usize, usize);
35
36
pub enum RangeView {
37
    Empty,
38
    NonEmpty { index: usize, rest: Range },
39
}
40
41
/// Helper macro to define methods in `prelude.isle` within `impl Context for
42
/// ...` for each backend. These methods are shared amongst all backends.
43
#[macro_export]
44
#[doc(hidden)]
45
macro_rules! isle_lower_prelude_methods {
46
    () => {
47
        isle_common_prelude_methods!();
48
49
        #[inline]
50
0
        fn same_value(&mut self, a: Value, b: Value) -> Option<Value> {
51
0
            if a == b {
52
0
                Some(a)
53
            } else {
54
0
                None
55
            }
56
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::same_value
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::same_value
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::same_value
57
58
        #[inline]
59
296k
        fn unpack_value_array_2(&mut self, arr: &ValueArray2) -> (Value, Value) {
60
296k
            let [a, b] = *arr;
61
296k
            (a, b)
62
296k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::unpack_value_array_2
Line
Count
Source
59
296k
        fn unpack_value_array_2(&mut self, arr: &ValueArray2) -> (Value, Value) {
60
296k
            let [a, b] = *arr;
61
296k
            (a, b)
62
296k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::unpack_value_array_2
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::unpack_value_array_2
63
64
        #[inline]
65
0
        fn pack_value_array_2(&mut self, a: Value, b: Value) -> ValueArray2 {
66
0
            [a, b]
67
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::pack_value_array_2
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::pack_value_array_2
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::pack_value_array_2
68
69
        #[inline]
70
38.3k
        fn unpack_value_array_3(&mut self, arr: &ValueArray3) -> (Value, Value, Value) {
71
38.3k
            let [a, b, c] = *arr;
72
38.3k
            (a, b, c)
73
38.3k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::unpack_value_array_3
Line
Count
Source
70
38.3k
        fn unpack_value_array_3(&mut self, arr: &ValueArray3) -> (Value, Value, Value) {
71
38.3k
            let [a, b, c] = *arr;
72
38.3k
            (a, b, c)
73
38.3k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::unpack_value_array_3
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::unpack_value_array_3
74
75
        #[inline]
76
0
        fn pack_value_array_3(&mut self, a: Value, b: Value, c: Value) -> ValueArray3 {
77
0
            [a, b, c]
78
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::pack_value_array_3
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::pack_value_array_3
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::pack_value_array_3
79
80
        #[inline]
81
408k
        fn value_reg(&mut self, reg: Reg) -> ValueRegs {
82
408k
            ValueRegs::one(reg)
83
408k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_reg
Line
Count
Source
81
408k
        fn value_reg(&mut self, reg: Reg) -> ValueRegs {
82
408k
            ValueRegs::one(reg)
83
408k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_reg
84
85
        #[inline]
86
564
        fn value_regs(&mut self, r1: Reg, r2: Reg) -> ValueRegs {
87
564
            ValueRegs::two(r1, r2)
88
564
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_regs
Line
Count
Source
86
564
        fn value_regs(&mut self, r1: Reg, r2: Reg) -> ValueRegs {
87
564
            ValueRegs::two(r1, r2)
88
564
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_regs
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_regs
89
90
        #[inline]
91
0
        fn value_regs_invalid(&mut self) -> ValueRegs {
92
0
            ValueRegs::invalid()
93
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_regs_invalid
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_regs_invalid
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_regs_invalid
94
95
        #[inline]
96
355k
        fn output_none(&mut self) -> InstOutput {
97
355k
            smallvec::smallvec![]
98
355k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output_none
Line
Count
Source
96
355k
        fn output_none(&mut self) -> InstOutput {
97
355k
            smallvec::smallvec![]
98
355k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output_none
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output_none
99
100
        #[inline]
101
409k
        fn output(&mut self, regs: ValueRegs) -> InstOutput {
102
409k
            smallvec::smallvec![regs]
103
409k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output
Line
Count
Source
101
409k
        fn output(&mut self, regs: ValueRegs) -> InstOutput {
102
409k
            smallvec::smallvec![regs]
103
409k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output
104
105
        #[inline]
106
0
        fn output_pair(&mut self, r1: ValueRegs, r2: ValueRegs) -> InstOutput {
107
0
            smallvec::smallvec![r1, r2]
108
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output_pair
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output_pair
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output_pair
109
110
        #[inline]
111
0
        fn output_builder_new(&mut self) -> InstOutputBuilder {
112
0
            std::cell::Cell::new(InstOutput::new())
113
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output_builder_new
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output_builder_new
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output_builder_new
114
115
        #[inline]
116
0
        fn output_builder_push(&mut self, builder: &InstOutputBuilder, regs: ValueRegs) -> Unit {
117
0
            let mut vec = builder.take();
118
0
            vec.push(regs);
119
0
            builder.set(vec);
120
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output_builder_push
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output_builder_push
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output_builder_push
121
122
        #[inline]
123
0
        fn output_builder_finish(&mut self, builder: &InstOutputBuilder) -> InstOutput {
124
0
            builder.take()
125
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::output_builder_finish
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::output_builder_finish
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::output_builder_finish
126
127
        #[inline]
128
590k
        fn temp_writable_reg(&mut self, ty: Type) -> WritableReg {
129
590k
            let value_regs = self.lower_ctx.alloc_tmp(ty);
130
590k
            value_regs.only_reg().unwrap()
131
590k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::temp_writable_reg
Line
Count
Source
128
590k
        fn temp_writable_reg(&mut self, ty: Type) -> WritableReg {
129
590k
            let value_regs = self.lower_ctx.alloc_tmp(ty);
130
590k
            value_regs.only_reg().unwrap()
131
590k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::temp_writable_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::temp_writable_reg
132
133
        #[inline]
134
657k
        fn is_valid_reg(&mut self, reg: Reg) -> bool {
135
657k
            use crate::machinst::valueregs::InvalidSentinel;
136
657k
            !reg.is_invalid_sentinel()
137
657k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::is_valid_reg
Line
Count
Source
134
657k
        fn is_valid_reg(&mut self, reg: Reg) -> bool {
135
657k
            use crate::machinst::valueregs::InvalidSentinel;
136
657k
            !reg.is_invalid_sentinel()
137
657k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::is_valid_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::is_valid_reg
138
139
        #[inline]
140
192k
        fn invalid_reg(&mut self) -> Reg {
141
192k
            use crate::machinst::valueregs::InvalidSentinel;
142
192k
            Reg::invalid_sentinel()
143
192k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::invalid_reg
Line
Count
Source
140
192k
        fn invalid_reg(&mut self) -> Reg {
141
192k
            use crate::machinst::valueregs::InvalidSentinel;
142
192k
            Reg::invalid_sentinel()
143
192k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::invalid_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::invalid_reg
144
145
        #[inline]
146
0
        fn mark_value_used(&mut self, val: Value) {
147
0
            self.lower_ctx.increment_lowered_uses(val);
148
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::mark_value_used
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::mark_value_used
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::mark_value_used
149
150
        #[inline]
151
677k
        fn put_in_reg(&mut self, val: Value) -> Reg {
152
677k
            self.lower_ctx.put_value_in_regs(val).only_reg().unwrap()
153
677k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::put_in_reg
Line
Count
Source
151
677k
        fn put_in_reg(&mut self, val: Value) -> Reg {
152
677k
            self.lower_ctx.put_value_in_regs(val).only_reg().unwrap()
153
677k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::put_in_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::put_in_reg
154
155
        #[inline]
156
13.8k
        fn put_in_regs(&mut self, val: Value) -> ValueRegs {
157
13.8k
            self.lower_ctx.put_value_in_regs(val)
158
13.8k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::put_in_regs
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::put_in_regs
Line
Count
Source
156
13.8k
        fn put_in_regs(&mut self, val: Value) -> ValueRegs {
157
13.8k
            self.lower_ctx.put_value_in_regs(val)
158
13.8k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::put_in_regs
159
160
        #[inline]
161
0
        fn ensure_in_vreg(&mut self, reg: Reg, ty: Type) -> Reg {
162
0
            self.lower_ctx.ensure_in_vreg(reg, ty)
163
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::ensure_in_vreg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::ensure_in_vreg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::ensure_in_vreg
164
165
        #[inline]
166
13.0k
        fn value_regs_get(&mut self, regs: ValueRegs, i: usize) -> Reg {
167
13.0k
            regs.regs()[i]
168
13.0k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_regs_get
Line
Count
Source
166
13.0k
        fn value_regs_get(&mut self, regs: ValueRegs, i: usize) -> Reg {
167
13.0k
            regs.regs()[i]
168
13.0k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_regs_get
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_regs_get
169
170
        #[inline]
171
0
        fn value_regs_len(&mut self, regs: ValueRegs) -> usize {
172
0
            regs.regs().len()
173
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_regs_len
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_regs_len
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_regs_len
174
175
        #[inline]
176
398k
        fn value_list_slice(&mut self, list: ValueList) -> ValueSlice {
177
398k
            (list, 0)
178
398k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_list_slice
Line
Count
Source
176
398k
        fn value_list_slice(&mut self, list: ValueList) -> ValueSlice {
177
398k
            (list, 0)
178
398k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_list_slice
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_list_slice
179
180
        #[inline]
181
0
        fn value_slice_empty(&mut self, slice: ValueSlice) -> Option<()> {
182
0
            let (list, off) = slice;
183
0
            if off >= list.len(&self.lower_ctx.dfg().value_lists) {
184
0
                Some(())
185
            } else {
186
0
                None
187
            }
188
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_slice_empty
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_slice_empty
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_slice_empty
189
190
        #[inline]
191
131k
        fn value_slice_unwrap(&mut self, slice: ValueSlice) -> Option<(Value, ValueSlice)> {
192
131k
            let (list, off) = slice;
193
131k
            if let Some(val) = list.get(off, &self.lower_ctx.dfg().value_lists) {
194
131k
                Some((val, (list, off + 1)))
195
            } else {
196
0
                None
197
            }
198
131k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_slice_unwrap
Line
Count
Source
191
131k
        fn value_slice_unwrap(&mut self, slice: ValueSlice) -> Option<(Value, ValueSlice)> {
192
131k
            let (list, off) = slice;
193
131k
            if let Some(val) = list.get(off, &self.lower_ctx.dfg().value_lists) {
194
131k
                Some((val, (list, off + 1)))
195
            } else {
196
0
                None
197
            }
198
131k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_slice_unwrap
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_slice_unwrap
199
200
        #[inline]
201
99.2k
        fn value_slice_len(&mut self, slice: ValueSlice) -> usize {
202
99.2k
            let (list, off) = slice;
203
99.2k
            list.len(&self.lower_ctx.dfg().value_lists) - off
204
99.2k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_slice_len
Line
Count
Source
201
99.2k
        fn value_slice_len(&mut self, slice: ValueSlice) -> usize {
202
99.2k
            let (list, off) = slice;
203
99.2k
            list.len(&self.lower_ctx.dfg().value_lists) - off
204
99.2k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_slice_len
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_slice_len
205
206
        #[inline]
207
0
        fn value_slice_get(&mut self, slice: ValueSlice, idx: usize) -> Value {
208
0
            let (list, off) = slice;
209
0
            list.get(off + idx, &self.lower_ctx.dfg().value_lists)
210
0
                .unwrap()
211
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_slice_get
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_slice_get
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_slice_get
212
213
        #[inline]
214
117k
        fn writable_reg_to_reg(&mut self, r: WritableReg) -> Reg {
215
117k
            r.to_reg()
216
117k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::writable_reg_to_reg
Line
Count
Source
214
117k
        fn writable_reg_to_reg(&mut self, r: WritableReg) -> Reg {
215
117k
            r.to_reg()
216
117k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::writable_reg_to_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::writable_reg_to_reg
217
218
        #[inline]
219
0
        fn inst_results(&mut self, inst: Inst) -> ValueSlice {
220
0
            (self.lower_ctx.dfg().inst_results_list(inst), 0)
221
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::inst_results
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::inst_results
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::inst_results
222
223
        #[inline]
224
5.99M
        fn first_result(&mut self, inst: Inst) -> Option<Value> {
225
5.99M
            self.lower_ctx.dfg().inst_results(inst).first().copied()
226
5.99M
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::first_result
Line
Count
Source
224
5.99M
        fn first_result(&mut self, inst: Inst) -> Option<Value> {
225
5.99M
            self.lower_ctx.dfg().inst_results(inst).first().copied()
226
5.99M
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::first_result
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::first_result
227
228
        #[inline]
229
12.6M
        fn inst_data(&mut self, inst: Inst) -> InstructionData {
230
12.6M
            self.lower_ctx.dfg()[inst]
231
12.6M
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::inst_data
Line
Count
Source
229
12.6M
        fn inst_data(&mut self, inst: Inst) -> InstructionData {
230
12.6M
            self.lower_ctx.dfg()[inst]
231
12.6M
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::inst_data
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::inst_data
232
233
        #[inline]
234
4.68M
        fn value_type(&mut self, val: Value) -> Type {
235
4.68M
            self.lower_ctx.dfg().value_type(val)
236
4.68M
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::value_type
Line
Count
Source
234
4.68M
        fn value_type(&mut self, val: Value) -> Type {
235
4.68M
            self.lower_ctx.dfg().value_type(val)
236
4.68M
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::value_type
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::value_type
237
238
        #[inline]
239
814k
        fn def_inst(&mut self, val: Value) -> Option<Inst> {
240
814k
            self.lower_ctx.dfg().value_def(val).inst()
241
814k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::def_inst
Line
Count
Source
239
814k
        fn def_inst(&mut self, val: Value) -> Option<Inst> {
240
814k
            self.lower_ctx.dfg().value_def(val).inst()
241
814k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::def_inst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::def_inst
242
243
0
        fn zero_value(&mut self, value: Value) -> Option<Value> {
244
0
            let insn = self.def_inst(value);
245
0
            if insn.is_some() {
246
0
                let insn = insn.unwrap();
247
0
                let inst_data = self.lower_ctx.data(insn);
248
0
                match inst_data {
249
                    InstructionData::Unary {
250
                        opcode: Opcode::Splat,
251
0
                        arg,
252
0
                    } => {
253
0
                        let arg = arg.clone();
254
0
                        return self.zero_value(arg);
255
                    }
256
                    InstructionData::UnaryConst {
257
                        opcode: Opcode::Vconst,
258
0
                        constant_handle,
259
0
                    } => {
260
0
                        let constant_data =
261
0
                            self.lower_ctx.get_constant_data(*constant_handle).clone();
262
0
                        if constant_data.into_vec().iter().any(|&x| x != 0) {
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::zero_value::{closure#0}
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::zero_value::{closure#0}
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::zero_value::{closure#0}
263
0
                            return None;
264
                        } else {
265
0
                            return Some(value);
266
                        }
267
                    }
268
0
                    InstructionData::UnaryImm { imm, .. } => {
269
0
                        if imm.bits() == 0 {
270
0
                            return Some(value);
271
                        } else {
272
0
                            return None;
273
                        }
274
                    }
275
0
                    InstructionData::UnaryIeee32 { imm, .. } => {
276
0
                        if imm.bits() == 0 {
277
0
                            return Some(value);
278
                        } else {
279
0
                            return None;
280
                        }
281
                    }
282
0
                    InstructionData::UnaryIeee64 { imm, .. } => {
283
0
                        if imm.bits() == 0 {
284
0
                            return Some(value);
285
                        } else {
286
0
                            return None;
287
                        }
288
                    }
289
0
                    _ => None,
290
                }
291
            } else {
292
0
                None
293
            }
294
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::zero_value
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::zero_value
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::zero_value
295
296
0
        fn avoid_div_traps(&mut self, _: Type) -> Option<()> {
297
0
            if self.flags.avoid_div_traps() {
298
0
                Some(())
299
            } else {
300
0
                None
301
            }
302
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::avoid_div_traps
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::avoid_div_traps
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::avoid_div_traps
303
304
        #[inline]
305
229k
        fn tls_model(&mut self, _: Type) -> TlsModel {
306
229k
            self.flags.tls_model()
307
229k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::tls_model
Line
Count
Source
305
229k
        fn tls_model(&mut self, _: Type) -> TlsModel {
306
229k
            self.flags.tls_model()
307
229k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::tls_model
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::tls_model
308
309
        #[inline]
310
0
        fn tls_model_is_elf_gd(&mut self) -> Option<()> {
311
0
            if self.flags.tls_model() == TlsModel::ElfGd {
312
0
                Some(())
313
            } else {
314
0
                None
315
            }
316
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::tls_model_is_elf_gd
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::tls_model_is_elf_gd
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::tls_model_is_elf_gd
317
318
        #[inline]
319
0
        fn tls_model_is_macho(&mut self) -> Option<()> {
320
0
            if self.flags.tls_model() == TlsModel::Macho {
321
0
                Some(())
322
            } else {
323
0
                None
324
            }
325
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::tls_model_is_macho
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::tls_model_is_macho
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::tls_model_is_macho
326
327
        #[inline]
328
0
        fn tls_model_is_coff(&mut self) -> Option<()> {
329
0
            if self.flags.tls_model() == TlsModel::Coff {
330
0
                Some(())
331
            } else {
332
0
                None
333
            }
334
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::tls_model_is_coff
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::tls_model_is_coff
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::tls_model_is_coff
335
336
        #[inline]
337
0
        fn preserve_frame_pointers(&mut self) -> Option<()> {
338
0
            if self.flags.preserve_frame_pointers() {
339
0
                Some(())
340
            } else {
341
0
                None
342
            }
343
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::preserve_frame_pointers
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::preserve_frame_pointers
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::preserve_frame_pointers
344
345
        #[inline]
346
26.7k
        fn func_ref_data(&mut self, func_ref: FuncRef) -> (SigRef, ExternalName, RelocDistance) {
347
26.7k
            let funcdata = &self.lower_ctx.dfg().ext_funcs[func_ref];
348
26.7k
            (
349
26.7k
                funcdata.signature,
350
26.7k
                funcdata.name.clone(),
351
26.7k
                funcdata.reloc_distance(),
352
26.7k
            )
353
26.7k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::func_ref_data
Line
Count
Source
346
26.7k
        fn func_ref_data(&mut self, func_ref: FuncRef) -> (SigRef, ExternalName, RelocDistance) {
347
26.7k
            let funcdata = &self.lower_ctx.dfg().ext_funcs[func_ref];
348
26.7k
            (
349
26.7k
                funcdata.signature,
350
26.7k
                funcdata.name.clone(),
351
26.7k
                funcdata.reloc_distance(),
352
26.7k
            )
353
26.7k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::func_ref_data
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::func_ref_data
354
355
        #[inline]
356
0
        fn box_external_name(&mut self, extname: ExternalName) -> BoxExternalName {
357
0
            Box::new(extname)
358
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::box_external_name
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::box_external_name
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::box_external_name
359
360
        #[inline]
361
0
        fn symbol_value_data(
362
0
            &mut self,
363
0
            global_value: GlobalValue,
364
0
        ) -> Option<(ExternalName, RelocDistance, i64)> {
365
0
            let (name, reloc, offset) = self.lower_ctx.symbol_value_data(global_value)?;
366
0
            Some((name.clone(), reloc, offset))
367
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::symbol_value_data
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::symbol_value_data
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::symbol_value_data
368
369
        #[inline]
370
0
        fn reloc_distance_near(&mut self, dist: RelocDistance) -> Option<()> {
371
0
            if dist == RelocDistance::Near {
372
0
                Some(())
373
            } else {
374
0
                None
375
            }
376
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::reloc_distance_near
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::reloc_distance_near
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::reloc_distance_near
377
378
        #[inline]
379
0
        fn u128_from_immediate(&mut self, imm: Immediate) -> Option<u128> {
380
0
            let bytes = self.lower_ctx.get_immediate_data(imm).as_slice();
381
0
            Some(u128::from_le_bytes(bytes.try_into().ok()?))
382
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::u128_from_immediate
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::u128_from_immediate
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::u128_from_immediate
383
384
        #[inline]
385
0
        fn vec_mask_from_immediate(&mut self, imm: Immediate) -> Option<VecMask> {
386
0
            let data = self.lower_ctx.get_immediate_data(imm);
387
0
            if data.len() == 16 {
388
0
                Some(Vec::from(data.as_slice()))
389
            } else {
390
0
                None
391
            }
392
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::vec_mask_from_immediate
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::vec_mask_from_immediate
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::vec_mask_from_immediate
393
394
        #[inline]
395
0
        fn u64_from_constant(&mut self, constant: Constant) -> Option<u64> {
396
0
            let bytes = self.lower_ctx.get_constant_data(constant).as_slice();
397
0
            Some(u64::from_le_bytes(bytes.try_into().ok()?))
398
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::u64_from_constant
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::u64_from_constant
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::u64_from_constant
399
400
        #[inline]
401
0
        fn u128_from_constant(&mut self, constant: Constant) -> Option<u128> {
402
0
            let bytes = self.lower_ctx.get_constant_data(constant).as_slice();
403
0
            Some(u128::from_le_bytes(bytes.try_into().ok()?))
404
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::u128_from_constant
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::u128_from_constant
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::u128_from_constant
405
406
        #[inline]
407
8.69k
        fn emit_u64_le_const(&mut self, value: u64) -> VCodeConstant {
408
8.69k
            let data = VCodeConstantData::U64(value.to_le_bytes());
409
8.69k
            self.lower_ctx.use_constant(data)
410
8.69k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::emit_u64_le_const
Line
Count
Source
407
8.69k
        fn emit_u64_le_const(&mut self, value: u64) -> VCodeConstant {
408
8.69k
            let data = VCodeConstantData::U64(value.to_le_bytes());
409
8.69k
            self.lower_ctx.use_constant(data)
410
8.69k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::emit_u64_le_const
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::emit_u64_le_const
411
412
        #[inline]
413
33.8k
        fn emit_u128_le_const(&mut self, value: u128) -> VCodeConstant {
414
33.8k
            let data = VCodeConstantData::Generated(value.to_le_bytes().as_slice().into());
415
33.8k
            self.lower_ctx.use_constant(data)
416
33.8k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::emit_u128_le_const
Line
Count
Source
413
33.8k
        fn emit_u128_le_const(&mut self, value: u128) -> VCodeConstant {
414
33.8k
            let data = VCodeConstantData::Generated(value.to_le_bytes().as_slice().into());
415
33.8k
            self.lower_ctx.use_constant(data)
416
33.8k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::emit_u128_le_const
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::emit_u128_le_const
417
418
        #[inline]
419
0
        fn const_to_vconst(&mut self, constant: Constant) -> VCodeConstant {
420
0
            self.lower_ctx.use_constant(VCodeConstantData::Pool(
421
0
                constant,
422
0
                self.lower_ctx.get_constant_data(constant).clone(),
423
0
            ))
424
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::const_to_vconst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::const_to_vconst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::const_to_vconst
425
426
0
        fn only_writable_reg(&mut self, regs: WritableValueRegs) -> Option<WritableReg> {
427
0
            regs.only_reg()
428
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::only_writable_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::only_writable_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::only_writable_reg
429
430
0
        fn writable_regs_get(&mut self, regs: WritableValueRegs, idx: usize) -> WritableReg {
431
0
            regs.regs()[idx]
432
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::writable_regs_get
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::writable_regs_get
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::writable_regs_get
433
434
0
        fn abi_num_args(&mut self, abi: &Sig) -> usize {
435
0
            self.lower_ctx.sigs().num_args(*abi)
436
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_num_args
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_num_args
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_num_args
437
438
0
        fn abi_get_arg(&mut self, abi: &Sig, idx: usize) -> ABIArg {
439
0
            self.lower_ctx.sigs().get_arg(*abi, idx)
440
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_get_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_get_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_get_arg
441
442
0
        fn abi_num_rets(&mut self, abi: &Sig) -> usize {
443
0
            self.lower_ctx.sigs().num_rets(*abi)
444
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_num_rets
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_num_rets
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_num_rets
445
446
0
        fn abi_get_ret(&mut self, abi: &Sig, idx: usize) -> ABIArg {
447
0
            self.lower_ctx.sigs().get_ret(*abi, idx)
448
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_get_ret
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_get_ret
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_get_ret
449
450
0
        fn abi_ret_arg(&mut self, abi: &Sig) -> Option<ABIArg> {
451
0
            self.lower_ctx.sigs().get_ret_arg(*abi)
452
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_ret_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_ret_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_ret_arg
453
454
0
        fn abi_no_ret_arg(&mut self, abi: &Sig) -> Option<()> {
455
0
            if let Some(_) = self.lower_ctx.sigs().get_ret_arg(*abi) {
456
0
                None
457
            } else {
458
0
                Some(())
459
            }
460
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_no_ret_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_no_ret_arg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_no_ret_arg
461
462
0
        fn abi_sized_stack_arg_space(&mut self, abi: &Sig) -> i64 {
463
0
            self.lower_ctx.sigs()[*abi].sized_stack_arg_space()
464
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_sized_stack_arg_space
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_sized_stack_arg_space
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_sized_stack_arg_space
465
466
0
        fn abi_sized_stack_ret_space(&mut self, abi: &Sig) -> i64 {
467
0
            self.lower_ctx.sigs()[*abi].sized_stack_ret_space()
468
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_sized_stack_ret_space
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_sized_stack_ret_space
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_sized_stack_ret_space
469
470
0
        fn abi_arg_only_slot(&mut self, arg: &ABIArg) -> Option<ABIArgSlot> {
471
0
            match arg {
472
0
                &ABIArg::Slots { ref slots, .. } => {
473
0
                    if slots.len() == 1 {
474
0
                        Some(slots[0])
475
                    } else {
476
0
                        None
477
                    }
478
                }
479
0
                _ => None,
480
            }
481
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_arg_only_slot
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_arg_only_slot
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_arg_only_slot
482
483
0
        fn abi_arg_struct_pointer(&mut self, arg: &ABIArg) -> Option<(ABIArgSlot, i64, u64)> {
484
0
            match arg {
485
                &ABIArg::StructArg {
486
0
                    pointer,
487
0
                    offset,
488
0
                    size,
489
                    ..
490
                } => {
491
0
                    if let Some(pointer) = pointer {
492
0
                        Some((pointer, offset, size))
493
                    } else {
494
0
                        None
495
                    }
496
                }
497
0
                _ => None,
498
            }
499
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_arg_struct_pointer
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_arg_struct_pointer
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_arg_struct_pointer
500
501
0
        fn abi_arg_implicit_pointer(&mut self, arg: &ABIArg) -> Option<(ABIArgSlot, i64, Type)> {
502
0
            match arg {
503
                &ABIArg::ImplicitPtrArg {
504
0
                    pointer,
505
0
                    offset,
506
0
                    ty,
507
0
                    ..
508
0
                } => Some((pointer, offset, ty)),
509
0
                _ => None,
510
            }
511
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_arg_implicit_pointer
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_arg_implicit_pointer
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_arg_implicit_pointer
512
513
0
        fn abi_stackslot_addr(
514
0
            &mut self,
515
0
            dst: WritableReg,
516
0
            stack_slot: StackSlot,
517
0
            offset: Offset32,
518
0
        ) -> MInst {
519
0
            let offset = u32::try_from(i32::from(offset)).unwrap();
520
0
            self.lower_ctx
521
0
                .abi()
522
0
                .sized_stackslot_addr(stack_slot, offset, dst)
523
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_stackslot_addr
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_stackslot_addr
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_stackslot_addr
524
525
0
        fn abi_dynamic_stackslot_addr(
526
0
            &mut self,
527
0
            dst: WritableReg,
528
0
            stack_slot: DynamicStackSlot,
529
0
        ) -> MInst {
530
0
            assert!(self
531
0
                .lower_ctx
532
0
                .abi()
533
0
                .dynamic_stackslot_offsets()
534
0
                .is_valid(stack_slot));
535
0
            self.lower_ctx.abi().dynamic_stackslot_addr(stack_slot, dst)
536
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::abi_dynamic_stackslot_addr
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::abi_dynamic_stackslot_addr
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::abi_dynamic_stackslot_addr
537
538
0
        fn real_reg_to_reg(&mut self, reg: RealReg) -> Reg {
539
0
            Reg::from(reg)
540
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::real_reg_to_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::real_reg_to_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::real_reg_to_reg
541
542
0
        fn real_reg_to_writable_reg(&mut self, reg: RealReg) -> WritableReg {
543
0
            Writable::from_reg(Reg::from(reg))
544
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::real_reg_to_writable_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::real_reg_to_writable_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::real_reg_to_writable_reg
545
546
0
        fn is_sinkable_inst(&mut self, val: Value) -> Option<Inst> {
547
0
            let input = self.lower_ctx.get_value_as_source_or_const(val);
548
549
0
            if let InputSourceInst::UniqueUse(inst, _) = input.inst {
550
0
                Some(inst)
551
            } else {
552
0
                None
553
            }
554
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::is_sinkable_inst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::is_sinkable_inst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::is_sinkable_inst
555
556
        #[inline]
557
0
        fn sink_inst(&mut self, inst: Inst) {
558
0
            self.lower_ctx.sink_inst(inst);
559
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::sink_inst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::sink_inst
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::sink_inst
560
561
        #[inline]
562
0
        fn preg_to_reg(&mut self, preg: PReg) -> Reg {
563
0
            preg.into()
564
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::preg_to_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::preg_to_reg
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::preg_to_reg
565
566
        #[inline]
567
0
        fn gen_move(&mut self, ty: Type, dst: WritableReg, src: Reg) -> MInst {
568
0
            MInst::gen_move(dst, src, ty)
569
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::gen_move
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::gen_move
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::gen_move
570
571
        #[inline]
572
5.71k
        fn intcc_reverse(&mut self, cc: &IntCC) -> IntCC {
573
5.71k
            cc.reverse()
574
5.71k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::intcc_reverse
Line
Count
Source
572
5.71k
        fn intcc_reverse(&mut self, cc: &IntCC) -> IntCC {
573
5.71k
            cc.reverse()
574
5.71k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::intcc_reverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::intcc_reverse
575
576
        #[inline]
577
0
        fn intcc_inverse(&mut self, cc: &IntCC) -> IntCC {
578
0
            cc.inverse()
579
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::intcc_inverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::intcc_inverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::intcc_inverse
580
581
        #[inline]
582
0
        fn floatcc_reverse(&mut self, cc: &FloatCC) -> FloatCC {
583
0
            cc.reverse()
584
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::floatcc_reverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::floatcc_reverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::floatcc_reverse
585
586
        #[inline]
587
0
        fn floatcc_inverse(&mut self, cc: &FloatCC) -> FloatCC {
588
0
            cc.inverse()
589
0
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::floatcc_inverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::floatcc_inverse
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::floatcc_inverse
590
591
        /// Generate the return instruction.
592
99.2k
        fn gen_return(&mut self, (list, off): ValueSlice) {
593
99.2k
            let rets = (off..list.len(&self.lower_ctx.dfg().value_lists))
594
99.2k
                .map(|ix| {
595
1.35k
                    let val = list.get(ix, &self.lower_ctx.dfg().value_lists).unwrap();
596
1.35k
                    self.put_in_regs(val)
597
99.2k
                })
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::gen_return::{closure#0}
Line
Count
Source
594
1.35k
                .map(|ix| {
595
1.35k
                    let val = list.get(ix, &self.lower_ctx.dfg().value_lists).unwrap();
596
1.35k
                    self.put_in_regs(val)
597
1.35k
                })
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::gen_return::{closure#0}
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::gen_return::{closure#0}
598
99.2k
                .collect();
599
99.2k
            self.lower_ctx.gen_return(rets);
600
99.2k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::gen_return
Line
Count
Source
592
99.2k
        fn gen_return(&mut self, (list, off): ValueSlice) {
593
99.2k
            let rets = (off..list.len(&self.lower_ctx.dfg().value_lists))
594
99.2k
                .map(|ix| {
595
                    let val = list.get(ix, &self.lower_ctx.dfg().value_lists).unwrap();
596
                    self.put_in_regs(val)
597
99.2k
                })
598
99.2k
                .collect();
599
99.2k
            self.lower_ctx.gen_return(rets);
600
99.2k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::gen_return
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::gen_return
601
    };
602
}
603
604
/// Helpers specifically for machines that use ABICaller.
605
#[macro_export]
606
#[doc(hidden)]
607
macro_rules! isle_prelude_caller_methods {
608
    ($abispec:ty, $abicaller:ty) => {
609
26.7k
        fn gen_call(
610
26.7k
            &mut self,
611
26.7k
            sig_ref: SigRef,
612
26.7k
            extname: ExternalName,
613
26.7k
            dist: RelocDistance,
614
26.7k
            args @ (inputs, off): ValueSlice,
615
26.7k
        ) -> InstOutput {
616
26.7k
            let caller_conv = self.lower_ctx.abi().call_conv(self.lower_ctx.sigs());
617
26.7k
            let sig = &self.lower_ctx.dfg().signatures[sig_ref];
618
26.7k
            let num_rets = sig.returns.len();
619
26.7k
            let abi = self.lower_ctx.sigs().abi_sig_for_sig_ref(sig_ref);
620
26.7k
            let caller = <$abicaller>::from_func(
621
26.7k
                self.lower_ctx.sigs(),
622
26.7k
                sig_ref,
623
26.7k
                &extname,
624
26.7k
                dist,
625
26.7k
                caller_conv,
626
26.7k
                self.flags.clone(),
627
26.7k
            )
628
26.7k
            .unwrap();
629
26.7k
630
26.7k
            assert_eq!(
631
26.7k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
632
26.7k
                sig.params.len()
633
26.7k
            );
634
635
26.7k
            self.gen_call_common(abi, num_rets, caller, args)
636
26.7k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::gen_call
Line
Count
Source
609
26.7k
        fn gen_call(
610
26.7k
            &mut self,
611
26.7k
            sig_ref: SigRef,
612
26.7k
            extname: ExternalName,
613
26.7k
            dist: RelocDistance,
614
26.7k
            args @ (inputs, off): ValueSlice,
615
26.7k
        ) -> InstOutput {
616
26.7k
            let caller_conv = self.lower_ctx.abi().call_conv(self.lower_ctx.sigs());
617
26.7k
            let sig = &self.lower_ctx.dfg().signatures[sig_ref];
618
26.7k
            let num_rets = sig.returns.len();
619
26.7k
            let abi = self.lower_ctx.sigs().abi_sig_for_sig_ref(sig_ref);
620
26.7k
            let caller = <$abicaller>::from_func(
621
26.7k
                self.lower_ctx.sigs(),
622
26.7k
                sig_ref,
623
26.7k
                &extname,
624
26.7k
                dist,
625
26.7k
                caller_conv,
626
26.7k
                self.flags.clone(),
627
26.7k
            )
628
26.7k
            .unwrap();
629
26.7k
630
26.7k
            assert_eq!(
631
26.7k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
632
26.7k
                sig.params.len()
633
26.7k
            );
634
635
26.7k
            self.gen_call_common(abi, num_rets, caller, args)
636
26.7k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::gen_call
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::gen_call
637
638
77.9k
        fn gen_call_indirect(
639
77.9k
            &mut self,
640
77.9k
            sig_ref: SigRef,
641
77.9k
            val: Value,
642
77.9k
            args @ (inputs, off): ValueSlice,
643
77.9k
        ) -> InstOutput {
644
77.9k
            let caller_conv = self.lower_ctx.abi().call_conv(self.lower_ctx.sigs());
645
77.9k
            let ptr = self.put_in_reg(val);
646
77.9k
            let sig = &self.lower_ctx.dfg().signatures[sig_ref];
647
77.9k
            let num_rets = sig.returns.len();
648
77.9k
            let abi = self.lower_ctx.sigs().abi_sig_for_sig_ref(sig_ref);
649
77.9k
            let caller = <$abicaller>::from_ptr(
650
77.9k
                self.lower_ctx.sigs(),
651
77.9k
                sig_ref,
652
77.9k
                ptr,
653
77.9k
                Opcode::CallIndirect,
654
77.9k
                caller_conv,
655
77.9k
                self.flags.clone(),
656
77.9k
            )
657
77.9k
            .unwrap();
658
77.9k
659
77.9k
            assert_eq!(
660
77.9k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
661
77.9k
                sig.params.len()
662
77.9k
            );
663
664
77.9k
            self.gen_call_common(abi, num_rets, caller, args)
665
77.9k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6> as cranelift_codegen::isa::x64::lower::isle::generated_code::Context>::gen_call_indirect
Line
Count
Source
638
77.9k
        fn gen_call_indirect(
639
77.9k
            &mut self,
640
77.9k
            sig_ref: SigRef,
641
77.9k
            val: Value,
642
77.9k
            args @ (inputs, off): ValueSlice,
643
77.9k
        ) -> InstOutput {
644
77.9k
            let caller_conv = self.lower_ctx.abi().call_conv(self.lower_ctx.sigs());
645
77.9k
            let ptr = self.put_in_reg(val);
646
77.9k
            let sig = &self.lower_ctx.dfg().signatures[sig_ref];
647
77.9k
            let num_rets = sig.returns.len();
648
77.9k
            let abi = self.lower_ctx.sigs().abi_sig_for_sig_ref(sig_ref);
649
77.9k
            let caller = <$abicaller>::from_ptr(
650
77.9k
                self.lower_ctx.sigs(),
651
77.9k
                sig_ref,
652
77.9k
                ptr,
653
77.9k
                Opcode::CallIndirect,
654
77.9k
                caller_conv,
655
77.9k
                self.flags.clone(),
656
77.9k
            )
657
77.9k
            .unwrap();
658
77.9k
659
77.9k
            assert_eq!(
660
77.9k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
661
77.9k
                sig.params.len()
662
77.9k
            );
663
664
77.9k
            self.gen_call_common(abi, num_rets, caller, args)
665
77.9k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6> as cranelift_codegen::isa::aarch64::lower::isle::generated_code::Context>::gen_call_indirect
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6> as cranelift_codegen::isa::riscv64::lower::isle::generated_code::Context>::gen_call_indirect
666
    };
667
}
668
669
/// Helpers for the above ISLE prelude implementations. Meant to go
670
/// inside the `impl` for the context type, not the trait impl.
671
#[macro_export]
672
#[doc(hidden)]
673
macro_rules! isle_prelude_method_helpers {
674
    ($abicaller:ty) => {
675
104k
        fn gen_call_common(
676
104k
            &mut self,
677
104k
            abi: Sig,
678
104k
            num_rets: usize,
679
104k
            mut caller: $abicaller,
680
104k
            (inputs, off): ValueSlice,
681
104k
        ) -> InstOutput {
682
104k
            caller.emit_stack_pre_adjust(self.lower_ctx);
683
104k
684
104k
            let num_args = self.lower_ctx.sigs().num_args(abi);
685
104k
686
104k
            assert_eq!(
687
104k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
688
104k
                num_args
689
104k
            );
690
104k
            let mut arg_regs = vec![];
691
211k
            for i in 0..num_args {
692
211k
                let input = inputs
693
211k
                    .get(off + i, &self.lower_ctx.dfg().value_lists)
694
211k
                    .unwrap();
695
211k
                arg_regs.push(self.lower_ctx.put_value_in_regs(input));
696
211k
            }
697
211k
            for (i, arg_regs) in arg_regs.iter().enumerate() {
698
211k
                caller.emit_copy_regs_to_buffer(self.lower_ctx, i, *arg_regs);
699
211k
            }
700
211k
            for (i, arg_regs) in arg_regs.iter().enumerate() {
701
211k
                for inst in caller.gen_arg(self.lower_ctx, i, *arg_regs) {
702
5.27k
                    self.lower_ctx.emit(inst);
703
5.27k
                }
704
            }
705
706
            // Handle retvals prior to emitting call, so the
707
            // constraints are on the call instruction; but buffer the
708
            // instructions till after the call.
709
104k
            let mut outputs = InstOutput::new();
710
104k
            let mut retval_insts: crate::machinst::abi::SmallInstVec<_> = smallvec::smallvec![];
711
            // We take the *last* `num_rets` returns of the sig:
712
            // this skips a StructReturn, if any, that is present.
713
104k
            let sigdata_num_rets = self.lower_ctx.sigs().num_rets(abi);
714
104k
            debug_assert!(num_rets <= sigdata_num_rets);
715
104k
            for i in (sigdata_num_rets - num_rets)..sigdata_num_rets {
716
49.6k
                // Borrow `sigdata` again so we don't hold a `self`
717
49.6k
                // borrow across the `&mut self` arg to
718
49.6k
                // `abi_arg_slot_regs()` below.
719
49.6k
                let ret = self.lower_ctx.sigs().get_ret(abi, i);
720
49.6k
                let retval_regs = self.abi_arg_slot_regs(&ret).unwrap();
721
49.6k
                retval_insts.extend(
722
49.6k
                    caller
723
49.6k
                        .gen_retval(self.lower_ctx, i, retval_regs.clone())
724
49.6k
                        .into_iter(),
725
49.6k
                );
726
49.6k
                outputs.push(valueregs::non_writable_value_regs(retval_regs));
727
49.6k
            }
728
729
104k
            caller.emit_call(self.lower_ctx);
730
731
104k
            for inst in retval_insts {
732
0
                self.lower_ctx.emit(inst);
733
0
            }
734
735
104k
            caller.emit_stack_post_adjust(self.lower_ctx);
736
104k
737
104k
            outputs
738
104k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6>>::gen_call_common
Line
Count
Source
675
104k
        fn gen_call_common(
676
104k
            &mut self,
677
104k
            abi: Sig,
678
104k
            num_rets: usize,
679
104k
            mut caller: $abicaller,
680
104k
            (inputs, off): ValueSlice,
681
104k
        ) -> InstOutput {
682
104k
            caller.emit_stack_pre_adjust(self.lower_ctx);
683
104k
684
104k
            let num_args = self.lower_ctx.sigs().num_args(abi);
685
104k
686
104k
            assert_eq!(
687
104k
                inputs.len(&self.lower_ctx.dfg().value_lists) - off,
688
104k
                num_args
689
104k
            );
690
104k
            let mut arg_regs = vec![];
691
211k
            for i in 0..num_args {
692
211k
                let input = inputs
693
211k
                    .get(off + i, &self.lower_ctx.dfg().value_lists)
694
211k
                    .unwrap();
695
211k
                arg_regs.push(self.lower_ctx.put_value_in_regs(input));
696
211k
            }
697
211k
            for (i, arg_regs) in arg_regs.iter().enumerate() {
698
211k
                caller.emit_copy_regs_to_buffer(self.lower_ctx, i, *arg_regs);
699
211k
            }
700
211k
            for (i, arg_regs) in arg_regs.iter().enumerate() {
701
211k
                for inst in caller.gen_arg(self.lower_ctx, i, *arg_regs) {
702
5.27k
                    self.lower_ctx.emit(inst);
703
5.27k
                }
704
            }
705
706
            // Handle retvals prior to emitting call, so the
707
            // constraints are on the call instruction; but buffer the
708
            // instructions till after the call.
709
104k
            let mut outputs = InstOutput::new();
710
104k
            let mut retval_insts: crate::machinst::abi::SmallInstVec<_> = smallvec::smallvec![];
711
            // We take the *last* `num_rets` returns of the sig:
712
            // this skips a StructReturn, if any, that is present.
713
104k
            let sigdata_num_rets = self.lower_ctx.sigs().num_rets(abi);
714
104k
            debug_assert!(num_rets <= sigdata_num_rets);
715
104k
            for i in (sigdata_num_rets - num_rets)..sigdata_num_rets {
716
49.6k
                // Borrow `sigdata` again so we don't hold a `self`
717
49.6k
                // borrow across the `&mut self` arg to
718
49.6k
                // `abi_arg_slot_regs()` below.
719
49.6k
                let ret = self.lower_ctx.sigs().get_ret(abi, i);
720
49.6k
                let retval_regs = self.abi_arg_slot_regs(&ret).unwrap();
721
49.6k
                retval_insts.extend(
722
49.6k
                    caller
723
49.6k
                        .gen_retval(self.lower_ctx, i, retval_regs.clone())
724
49.6k
                        .into_iter(),
725
49.6k
                );
726
49.6k
                outputs.push(valueregs::non_writable_value_regs(retval_regs));
727
49.6k
            }
728
729
104k
            caller.emit_call(self.lower_ctx);
730
731
104k
            for inst in retval_insts {
732
0
                self.lower_ctx.emit(inst);
733
0
            }
734
735
104k
            caller.emit_stack_post_adjust(self.lower_ctx);
736
104k
737
104k
            outputs
738
104k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6>>::gen_call_common
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6>>::gen_call_common
739
740
49.6k
        fn abi_arg_slot_regs(&mut self, arg: &ABIArg) -> Option<WritableValueRegs> {
741
49.6k
            match arg {
742
49.6k
                &ABIArg::Slots { ref slots, .. } => match slots.len() {
743
                    1 => {
744
49.6k
                        let a = self.temp_writable_reg(slots[0].get_type());
745
49.6k
                        Some(WritableValueRegs::one(a))
746
                    }
747
                    2 => {
748
0
                        let a = self.temp_writable_reg(slots[0].get_type());
749
0
                        let b = self.temp_writable_reg(slots[1].get_type());
750
0
                        Some(WritableValueRegs::two(a, b))
751
                    }
752
0
                    _ => panic!("Expected to see one or two slots only from {:?}", arg),
753
                },
754
0
                _ => None,
755
            }
756
49.6k
        }
<cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, 6>>::abi_arg_slot_regs
Line
Count
Source
740
49.6k
        fn abi_arg_slot_regs(&mut self, arg: &ABIArg) -> Option<WritableValueRegs> {
741
49.6k
            match arg {
742
49.6k
                &ABIArg::Slots { ref slots, .. } => match slots.len() {
743
                    1 => {
744
49.6k
                        let a = self.temp_writable_reg(slots[0].get_type());
745
49.6k
                        Some(WritableValueRegs::one(a))
746
                    }
747
                    2 => {
748
0
                        let a = self.temp_writable_reg(slots[0].get_type());
749
0
                        let b = self.temp_writable_reg(slots[1].get_type());
750
0
                        Some(WritableValueRegs::two(a, b))
751
                    }
752
0
                    _ => panic!("Expected to see one or two slots only from {:?}", arg),
753
                },
754
0
                _ => None,
755
            }
756
49.6k
        }
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, 6>>::abi_arg_slot_regs
Unexecuted instantiation: <cranelift_codegen::machinst::isle::IsleContext<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, 6>>::abi_arg_slot_regs
757
    };
758
}
759
760
/// This structure is used to implement the ISLE-generated `Context` trait and
761
/// internally has a temporary reference to a machinst `LowerCtx`.
762
pub(crate) struct IsleContext<'a, 'b, I, Flags, IsaFlags, const N: usize>
763
where
764
    I: VCodeInst,
765
    [(I, bool); N]: smallvec::Array,
766
{
767
    pub lower_ctx: &'a mut Lower<'b, I>,
768
    pub triple: &'a Triple,
769
    pub flags: &'a Flags,
770
    pub isa_flags: &'a IsaFlags,
771
}
772
773
/// Shared lowering code amongst all backends for doing ISLE-based lowering.
774
///
775
/// The `isle_lower` argument here is an ISLE-generated function for `lower` and
776
/// then this function otherwise handles register mapping and such around the
777
/// lowering.
778
869k
pub(crate) fn lower_common<I, Flags, IsaFlags, IsleFunction, const N: usize>(
779
869k
    lower_ctx: &mut Lower<I>,
780
869k
    triple: &Triple,
781
869k
    flags: &Flags,
782
869k
    isa_flags: &IsaFlags,
783
869k
    outputs: &[InsnOutput],
784
869k
    inst: Inst,
785
869k
    isle_lower: IsleFunction,
786
869k
) -> Result<(), ()>
787
869k
where
788
869k
    I: VCodeInst,
789
869k
    [(I, bool); N]: smallvec::Array<Item = (I, bool)>,
790
869k
    IsleFunction: Fn(&mut IsleContext<'_, '_, I, Flags, IsaFlags, N>, Inst) -> Option<InstOutput>,
791
869k
{
792
869k
    // TODO: reuse the ISLE context across lowerings so we can reuse its
793
869k
    // internal heap allocations.
794
869k
    let mut isle_ctx = IsleContext {
795
869k
        lower_ctx,
796
869k
        triple,
797
869k
        flags,
798
869k
        isa_flags,
799
869k
    };
800
801
869k
    let temp_regs = isle_lower(&mut isle_ctx, inst).ok_or(())?;
802
803
    #[cfg(debug_assertions)]
804
    {
805
        debug_assert_eq!(
806
            temp_regs.len(),
807
            outputs.len(),
808
            "the number of temporary values and destination values do \
809
         not match ({} != {}); ensure the correct registers are being \
810
         returned.",
811
            temp_regs.len(),
812
            outputs.len(),
813
        );
814
    }
815
816
    // The ISLE generated code emits its own registers to define the
817
    // instruction's lowered values in. However, other instructions
818
    // that use this SSA value will be lowered assuming that the value
819
    // is generated into a pre-assigned, different, register.
820
    //
821
    // To connect the two, we set up "aliases" in the VCodeBuilder
822
    // that apply when it is building the Operand table for the
823
    // regalloc to use. These aliases effectively rewrite any use of
824
    // the pre-assigned register to the register that was returned by
825
    // the ISLE lowering logic.
826
869k
    for i in 0..outputs.len() {
827
458k
        let regs = temp_regs[i];
828
458k
        let dsts = get_output_reg(isle_ctx.lower_ctx, outputs[i]);
829
458k
        let ty = isle_ctx
830
458k
            .lower_ctx
831
458k
            .output_ty(outputs[i].insn, outputs[i].output);
832
458k
        if ty == types::IFLAGS || ty == types::FFLAGS {
833
            // Flags values do not occupy any registers.
834
0
            assert!(regs.len() == 0);
835
        } else {
836
458k
            for (dst, temp) in dsts.regs().iter().zip(regs.regs().iter()) {
837
458k
                isle_ctx.lower_ctx.set_vreg_alias(dst.to_reg(), *temp);
838
458k
            }
839
        }
840
    }
841
842
869k
    Ok(())
843
869k
}
cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, cranelift_codegen::isa::x64::lower::isle::lower_branch::{closure#0}, 6>
Line
Count
Source
778
167k
pub(crate) fn lower_common<I, Flags, IsaFlags, IsleFunction, const N: usize>(
779
167k
    lower_ctx: &mut Lower<I>,
780
167k
    triple: &Triple,
781
167k
    flags: &Flags,
782
167k
    isa_flags: &IsaFlags,
783
167k
    outputs: &[InsnOutput],
784
167k
    inst: Inst,
785
167k
    isle_lower: IsleFunction,
786
167k
) -> Result<(), ()>
787
167k
where
788
167k
    I: VCodeInst,
789
167k
    [(I, bool); N]: smallvec::Array<Item = (I, bool)>,
790
167k
    IsleFunction: Fn(&mut IsleContext<'_, '_, I, Flags, IsaFlags, N>, Inst) -> Option<InstOutput>,
791
167k
{
792
167k
    // TODO: reuse the ISLE context across lowerings so we can reuse its
793
167k
    // internal heap allocations.
794
167k
    let mut isle_ctx = IsleContext {
795
167k
        lower_ctx,
796
167k
        triple,
797
167k
        flags,
798
167k
        isa_flags,
799
167k
    };
800
801
167k
    let temp_regs = isle_lower(&mut isle_ctx, inst).ok_or(())?;
802
803
    #[cfg(debug_assertions)]
804
    {
805
        debug_assert_eq!(
806
            temp_regs.len(),
807
            outputs.len(),
808
            "the number of temporary values and destination values do \
809
         not match ({} != {}); ensure the correct registers are being \
810
         returned.",
811
            temp_regs.len(),
812
            outputs.len(),
813
        );
814
    }
815
816
    // The ISLE generated code emits its own registers to define the
817
    // instruction's lowered values in. However, other instructions
818
    // that use this SSA value will be lowered assuming that the value
819
    // is generated into a pre-assigned, different, register.
820
    //
821
    // To connect the two, we set up "aliases" in the VCodeBuilder
822
    // that apply when it is building the Operand table for the
823
    // regalloc to use. These aliases effectively rewrite any use of
824
    // the pre-assigned register to the register that was returned by
825
    // the ISLE lowering logic.
826
167k
    for i in 0..outputs.len() {
827
0
        let regs = temp_regs[i];
828
0
        let dsts = get_output_reg(isle_ctx.lower_ctx, outputs[i]);
829
0
        let ty = isle_ctx
830
0
            .lower_ctx
831
0
            .output_ty(outputs[i].insn, outputs[i].output);
832
0
        if ty == types::IFLAGS || ty == types::FFLAGS {
833
            // Flags values do not occupy any registers.
834
0
            assert!(regs.len() == 0);
835
        } else {
836
0
            for (dst, temp) in dsts.regs().iter().zip(regs.regs().iter()) {
837
0
                isle_ctx.lower_ctx.set_vreg_alias(dst.to_reg(), *temp);
838
0
            }
839
        }
840
    }
841
842
167k
    Ok(())
843
167k
}
cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::x64::settings::Flags, cranelift_codegen::isa::x64::lower::isle::lower::{closure#0}, 6>
Line
Count
Source
778
702k
pub(crate) fn lower_common<I, Flags, IsaFlags, IsleFunction, const N: usize>(
779
702k
    lower_ctx: &mut Lower<I>,
780
702k
    triple: &Triple,
781
702k
    flags: &Flags,
782
702k
    isa_flags: &IsaFlags,
783
702k
    outputs: &[InsnOutput],
784
702k
    inst: Inst,
785
702k
    isle_lower: IsleFunction,
786
702k
) -> Result<(), ()>
787
702k
where
788
702k
    I: VCodeInst,
789
702k
    [(I, bool); N]: smallvec::Array<Item = (I, bool)>,
790
702k
    IsleFunction: Fn(&mut IsleContext<'_, '_, I, Flags, IsaFlags, N>, Inst) -> Option<InstOutput>,
791
702k
{
792
702k
    // TODO: reuse the ISLE context across lowerings so we can reuse its
793
702k
    // internal heap allocations.
794
702k
    let mut isle_ctx = IsleContext {
795
702k
        lower_ctx,
796
702k
        triple,
797
702k
        flags,
798
702k
        isa_flags,
799
702k
    };
800
801
702k
    let temp_regs = isle_lower(&mut isle_ctx, inst).ok_or(())?;
802
803
    #[cfg(debug_assertions)]
804
    {
805
        debug_assert_eq!(
806
            temp_regs.len(),
807
            outputs.len(),
808
            "the number of temporary values and destination values do \
809
         not match ({} != {}); ensure the correct registers are being \
810
         returned.",
811
            temp_regs.len(),
812
            outputs.len(),
813
        );
814
    }
815
816
    // The ISLE generated code emits its own registers to define the
817
    // instruction's lowered values in. However, other instructions
818
    // that use this SSA value will be lowered assuming that the value
819
    // is generated into a pre-assigned, different, register.
820
    //
821
    // To connect the two, we set up "aliases" in the VCodeBuilder
822
    // that apply when it is building the Operand table for the
823
    // regalloc to use. These aliases effectively rewrite any use of
824
    // the pre-assigned register to the register that was returned by
825
    // the ISLE lowering logic.
826
702k
    for i in 0..outputs.len() {
827
458k
        let regs = temp_regs[i];
828
458k
        let dsts = get_output_reg(isle_ctx.lower_ctx, outputs[i]);
829
458k
        let ty = isle_ctx
830
458k
            .lower_ctx
831
458k
            .output_ty(outputs[i].insn, outputs[i].output);
832
458k
        if ty == types::IFLAGS || ty == types::FFLAGS {
833
            // Flags values do not occupy any registers.
834
0
            assert!(regs.len() == 0);
835
        } else {
836
458k
            for (dst, temp) in dsts.regs().iter().zip(regs.regs().iter()) {
837
458k
                isle_ctx.lower_ctx.set_vreg_alias(dst.to_reg(), *temp);
838
458k
            }
839
        }
840
    }
841
842
702k
    Ok(())
843
702k
}
Unexecuted instantiation: cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, cranelift_codegen::isa::aarch64::lower::isle::lower_branch::{closure#0}, 6>
Unexecuted instantiation: cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::aarch64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::aarch64::settings::Flags, cranelift_codegen::isa::aarch64::lower::isle::lower::{closure#0}, 6>
Unexecuted instantiation: cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, cranelift_codegen::isa::riscv64::lower::isle::lower_branch::{closure#0}, 6>
Unexecuted instantiation: cranelift_codegen::machinst::isle::lower_common::<cranelift_codegen::isa::riscv64::lower::isle::generated_code::MInst, cranelift_codegen::settings::Flags, cranelift_codegen::isa::riscv64::settings::Flags, cranelift_codegen::isa::riscv64::lower::isle::lower::{closure#0}, 6>