summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Lo <stan.lo@shopify.com>2025-09-04 19:37:06 +0100
committerGitHub <noreply@github.com>2025-09-04 11:37:06 -0700
commit856db87a2a0718c5d5e1d00ec3da7bd3e20e6db2 (patch)
tree42cb8ed966e6894d7647575358264d24af5d04ac
parentaff3e5a6f6b78b65252aa106851d4e872f118561 (diff)
ZJIT: Add patchpoint for TracePoint (#14420)
ZJIT: Add patchpoint for TracePoint activation Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com> Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
-rw-r--r--test/ruby/test_zjit.rb46
-rw-r--r--zjit/bindgen/src/main.rs1
-rw-r--r--zjit/src/codegen.rs6
-rw-r--r--zjit/src/cruby_bindings.inc.rs1
-rw-r--r--zjit/src/hir.rs1877
-rw-r--r--zjit/src/invariants.rs19
6 files changed, 1026 insertions, 924 deletions
diff --git a/test/ruby/test_zjit.rb b/test/ruby/test_zjit.rb
index 9cd0f59ffb..3877a0ca26 100644
--- a/test/ruby/test_zjit.rb
+++ b/test/ruby/test_zjit.rb
@@ -2256,6 +2256,52 @@ class TestZJIT < Test::Unit::TestCase
}
end
+ def test_line_tracepoint_on_c_method
+ assert_compiles '"[[:line, true]]"', %q{
+ events = []
+ events.instance_variable_set(
+ :@tp,
+ TracePoint.new(:line) { |tp| events << [tp.event, tp.lineno] if tp.path == __FILE__ }
+ )
+ def events.to_str
+ @tp.enable; ''
+ end
+
+ # Stay in generated code while enabling tracing
+ def events.compiled(obj)
+ String(obj)
+ @tp.disable; __LINE__
+ end
+
+ line = events.compiled(events)
+ events[0][-1] = (events[0][-1] == line)
+
+ events.to_s # can't dump events as it's a singleton object AND it has a TracePoint instance variable, which also can't be dumped
+ }
+ end
+
+ def test_targeted_line_tracepoint_in_c_method_call
+ assert_compiles '"[true]"', %q{
+ events = []
+ events.instance_variable_set(:@tp, TracePoint.new(:line) { |tp| events << tp.lineno })
+ def events.to_str
+ @tp.enable(target: method(:compiled))
+ ''
+ end
+
+ # Stay in generated code while enabling tracing
+ def events.compiled(obj)
+ String(obj)
+ __LINE__
+ end
+
+ line = events.compiled(events)
+ events[0] = (events[0] == line)
+
+ events.to_s # can't dump events as it's a singleton object AND it has a TracePoint instance variable, which also can't be dumped
+ }
+ end
+
def test_opt_case_dispatch
assert_compiles '[true, false]', %q{
def test(x)
diff --git a/zjit/bindgen/src/main.rs b/zjit/bindgen/src/main.rs
index c608d482e2..354ea6338f 100644
--- a/zjit/bindgen/src/main.rs
+++ b/zjit/bindgen/src/main.rs
@@ -330,6 +330,7 @@ fn main() {
.allowlist_type("vm_check_match_type")
.allowlist_type("vm_opt_newarray_send_type")
.allowlist_type("rb_iseq_type")
+ .allowlist_type("rb_event_flag_t")
// From zjit.c
.allowlist_function("rb_object_shape_count")
diff --git a/zjit/src/codegen.rs b/zjit/src/codegen.rs
index 7501cbd2c5..bea7706854 100644
--- a/zjit/src/codegen.rs
+++ b/zjit/src/codegen.rs
@@ -9,7 +9,7 @@ use std::slice;
use crate::asm::Label;
use crate::backend::current::{Reg, ALLOC_REGS};
-use crate::invariants::{track_bop_assumption, track_cme_assumption, track_single_ractor_assumption, track_stable_constant_names_assumption};
+use crate::invariants::{track_bop_assumption, track_cme_assumption, track_single_ractor_assumption, track_stable_constant_names_assumption, track_no_trace_point_assumption};
use crate::gc::{append_gc_offsets, get_or_create_iseq_payload, get_or_create_iseq_payload_ptr, IseqPayload, IseqStatus};
use crate::state::ZJITState;
use crate::stats::{exit_counter_for_compile_error, incr_counter, incr_counter_by, CompileError};
@@ -593,6 +593,10 @@ fn gen_patch_point(jit: &mut JITState, asm: &mut Assembler, invariant: &Invarian
let side_exit_ptr = cb.resolve_label(label);
track_stable_constant_names_assumption(idlist, code_ptr, side_exit_ptr, payload_ptr);
}
+ Invariant::NoTracePoint => {
+ let side_exit_ptr = cb.resolve_label(label);
+ track_no_trace_point_assumption(code_ptr, side_exit_ptr, payload_ptr);
+ }
Invariant::SingleRactorMode => {
let side_exit_ptr = cb.resolve_label(label);
track_single_ractor_assumption(code_ptr, side_exit_ptr, payload_ptr);
diff --git a/zjit/src/cruby_bindings.inc.rs b/zjit/src/cruby_bindings.inc.rs
index 9572756688..071ec28247 100644
--- a/zjit/src/cruby_bindings.inc.rs
+++ b/zjit/src/cruby_bindings.inc.rs
@@ -162,6 +162,7 @@ pub const RMODULE_IS_REFINEMENT: ruby_rmodule_flags = 8192;
pub type ruby_rmodule_flags = u32;
pub const ROBJECT_HEAP: ruby_robject_flags = 65536;
pub type ruby_robject_flags = u32;
+pub type rb_event_flag_t = u32;
pub const RUBY_ENCODING_INLINE_MAX: ruby_encoding_consts = 127;
pub const RUBY_ENCODING_SHIFT: ruby_encoding_consts = 22;
pub const RUBY_ENCODING_MASK: ruby_encoding_consts = 532676608;
diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs
index 3a0b3e976f..467d8483eb 100644
--- a/zjit/src/hir.rs
+++ b/zjit/src/hir.rs
@@ -134,6 +134,8 @@ pub enum Invariant {
StableConstantNames {
idlist: *const ID,
},
+ /// TracePoint is not enabled. If TracePoint is enabled, this is invalidated.
+ NoTracePoint,
/// There is one ractor running. If a non-root ractor gets spawned, this is invalidated.
SingleRactorMode,
}
@@ -247,6 +249,7 @@ impl<'a> std::fmt::Display for InvariantPrinter<'a> {
}
write!(f, ")")
}
+ Invariant::NoTracePoint => write!(f, "NoTracePoint"),
Invariant::SingleRactorMode => write!(f, "SingleRactorMode"),
}
}
@@ -939,7 +942,7 @@ impl Block {
/// Pretty printer for [`Function`].
pub struct FunctionPrinter<'a> {
fun: &'a Function,
- display_snapshot: bool,
+ display_snapshot_and_tp_patchpoints: bool,
ptr_map: PtrPrintMap,
}
@@ -949,12 +952,12 @@ impl<'a> FunctionPrinter<'a> {
if cfg!(test) {
ptr_map.map_ptrs = true;
}
- Self { fun, display_snapshot: false, ptr_map }
+ Self { fun, display_snapshot_and_tp_patchpoints: false, ptr_map }
}
pub fn with_snapshot(fun: &'a Function) -> FunctionPrinter<'a> {
let mut printer = Self::without_snapshot(fun);
- printer.display_snapshot = true;
+ printer.display_snapshot_and_tp_patchpoints = true;
printer
}
}
@@ -2571,7 +2574,8 @@ impl<'a> std::fmt::Display for FunctionPrinter<'a> {
writeln!(f, "):")?;
for insn_id in &fun.blocks[block_id.0].insns {
let insn = fun.find(*insn_id);
- if !self.display_snapshot && matches!(insn, Insn::Snapshot {..}) {
+ if !self.display_snapshot_and_tp_patchpoints &&
+ matches!(insn, Insn::Snapshot {..} | Insn::PatchPoint { invariant: Invariant::NoTracePoint, .. }) {
continue;
}
write!(f, " ")?;
@@ -3068,6 +3072,17 @@ pub fn iseq_to_hir(iseq: *const rb_iseq_t) -> Result<Function, ParseError> {
profiles.profile_stack(&exit_state);
}
+ unsafe extern "C" {
+ fn rb_iseq_event_flags(iseq: IseqPtr, pos: usize) -> rb_event_flag_t;
+ }
+
+ // We add NoTracePoint patch points before every instruction that could be affected by TracePoint.
+ // This ensures that if TracePoint is enabled, we can exit the generated code as fast as possible.
+ if unsafe { rb_iseq_event_flags(iseq, insn_idx as usize) } != 0 {
+ let exit_id = fun.push_insn(block, Insn::Snapshot { state: exit_state.clone() });
+ fun.push_insn(block, Insn::PatchPoint { invariant: Invariant::NoTracePoint, state: exit_id });
+ }
+
// Increment zjit_insn_count for each YARV instruction if --zjit-stats is enabled.
if get_option!(stats) {
fun.push_insn(block, Insn::IncrCounter(Counter::zjit_insn_count));
@@ -4133,9 +4148,9 @@ mod tests {
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject):
v3:Fixnum[1] = Const Value(1)
- v4:Fixnum[123] = Const Value(123)
+ v6:Fixnum[123] = Const Value(123)
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4146,9 +4161,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:Fixnum[123] = Const Value(123)
+ v4:Fixnum[123] = Const Value(123)
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -4159,9 +4174,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v3:ArrayExact = NewArray
+ v5:ArrayExact = NewArray
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -4172,9 +4187,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject):
- v4:ArrayExact = NewArray v1
+ v6:ArrayExact = NewArray v1
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4185,9 +4200,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:ArrayExact = NewArray v1, v2
+ v7:ArrayExact = NewArray v1, v2
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4198,10 +4213,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[10] = Const Value(10)
- v5:RangeExact = NewRange v1 NewRangeInclusive v3
+ v5:Fixnum[10] = Const Value(10)
+ v7:RangeExact = NewRange v1 NewRangeInclusive v5
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4212,9 +4227,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:RangeExact = NewRange v1 NewRangeInclusive v2
+ v7:RangeExact = NewRange v1 NewRangeInclusive v2
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4225,10 +4240,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[10] = Const Value(10)
- v5:RangeExact = NewRange v1 NewRangeExclusive v3
+ v5:Fixnum[10] = Const Value(10)
+ v7:RangeExact = NewRange v1 NewRangeExclusive v5
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4239,9 +4254,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:RangeExact = NewRange v1 NewRangeExclusive v2
+ v7:RangeExact = NewRange v1 NewRangeExclusive v2
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4252,10 +4267,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:ArrayExact = ArrayDup v2
+ v4:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:ArrayExact = ArrayDup v4
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4266,10 +4281,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:HashExact = HashDup v2
+ v4:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:HashExact = HashDup v4
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4280,9 +4295,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v3:HashExact = NewHash
+ v5:HashExact = NewHash
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -4293,11 +4308,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v4:StaticSymbol[:a] = Const Value(VALUE(0x1000))
- v5:StaticSymbol[:b] = Const Value(VALUE(0x1008))
- v7:HashExact = NewHash v4: v1, v5: v2
+ v6:StaticSymbol[:a] = Const Value(VALUE(0x1000))
+ v7:StaticSymbol[:b] = Const Value(VALUE(0x1008))
+ v9:HashExact = NewHash v6: v1, v7: v2
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -4308,10 +4323,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:StringExact = StringCopy v2
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact = StringCopy v4
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4322,9 +4337,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:Bignum[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:Bignum[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -4335,9 +4350,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:Flonum[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:Flonum[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -4348,9 +4363,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:HeapFloat[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:HeapFloat[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -4361,9 +4376,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:StaticSymbol[:foo] = Const Value(VALUE(0x1000))
+ v4:StaticSymbol[:foo] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -4374,11 +4389,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
- v5:BasicObject = SendWithoutBlock v2, :+, v3
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
+ v9:BasicObject = SendWithoutBlock v4, :+, v5
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4391,10 +4406,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:BasicObject = SendWithoutBlock v3, :freeze
+ v5:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:BasicObject = SendWithoutBlock v5, :freeze
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4407,10 +4422,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:BasicObject = SendWithoutBlock v3, :freeze
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:BasicObject = SendWithoutBlock v5, :freeze
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4423,10 +4438,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:BasicObject = SendWithoutBlock v3, :freeze
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:BasicObject = SendWithoutBlock v5, :freeze
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4439,10 +4454,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:BasicObject = SendWithoutBlock v3, :-@
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:BasicObject = SendWithoutBlock v5, :-@
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -4459,9 +4474,9 @@ mod tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -4490,18 +4505,18 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn block (3 levels) in <compiled>@<compiled>:10:
bb0(v0:BasicObject):
- v2:BasicObject = GetLocal l2, EP@4
- SetLocal l1, EP@3, v2
- v4:BasicObject = GetLocal l1, EP@3
- v5:BasicObject = GetLocal l2, EP@4
- v7:BasicObject = SendWithoutBlock v4, :+, v5
- SetLocal l2, EP@4, v7
+ v4:BasicObject = GetLocal l2, EP@4
+ SetLocal l1, EP@3, v4
+ v8:BasicObject = GetLocal l1, EP@3
v9:BasicObject = GetLocal l2, EP@4
- v10:BasicObject = GetLocal l3, EP@5
- v12:BasicObject = SendWithoutBlock v9, :+, v10
- SetLocal l3, EP@5, v12
- CheckInterrupts
- Return v12
+ v13:BasicObject = SendWithoutBlock v8, :+, v9
+ SetLocal l2, EP@4, v13
+ v17:BasicObject = GetLocal l2, EP@4
+ v18:BasicObject = GetLocal l3, EP@5
+ v22:BasicObject = SendWithoutBlock v17, :+, v18
+ SetLocal l3, EP@5, v22
+ CheckInterrupts
+ Return v22
"
);
}
@@ -4515,9 +4530,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:BasicObject = DefinedIvar v0, :@foo
+ v5:BasicObject = DefinedIvar v0, :@foo
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -4530,14 +4545,14 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:NilClass = Const Value(nil)
- v4:StringExact|NilClass = Defined constant, v2
- v6:StringExact|NilClass = Defined func, v0
- v7:NilClass = Const Value(nil)
- v9:StringExact|NilClass = Defined global-variable, v7
- v11:ArrayExact = NewArray v4, v6, v9
+ v4:NilClass = Const Value(nil)
+ v6:StringExact|NilClass = Defined constant, v4
+ v8:StringExact|NilClass = Defined func, v0
+ v9:NilClass = Const Value(nil)
+ v11:StringExact|NilClass = Defined global-variable, v9
+ v13:ArrayExact = NewArray v6, v8, v11
CheckInterrupts
- Return v11
+ Return v13
");
}
@@ -4557,15 +4572,15 @@ mod tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
CheckInterrupts
- v5:CBool = Test v1
- IfFalse v5, bb1(v0, v1)
- v7:Fixnum[3] = Const Value(3)
+ v7:CBool = Test v1
+ IfFalse v7, bb1(v0, v1)
+ v11:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v7
- bb1(v11:BasicObject, v12:BasicObject):
- v14:Fixnum[4] = Const Value(4)
+ Return v11
+ bb1(v17:BasicObject, v18:BasicObject):
+ v22:Fixnum[4] = Const Value(4)
CheckInterrupts
- Return v14
+ Return v22
");
}
@@ -4586,17 +4601,17 @@ mod tests {
bb0(v0:BasicObject, v1:BasicObject):
v2:NilClass = Const Value(nil)
CheckInterrupts
- v6:CBool = Test v1
- IfFalse v6, bb1(v0, v1, v2)
- v8:Fixnum[3] = Const Value(3)
+ v8:CBool = Test v1
+ IfFalse v8, bb1(v0, v1, v2)
+ v12:Fixnum[3] = Const Value(3)
CheckInterrupts
- Jump bb2(v0, v1, v8)
- bb1(v12:BasicObject, v13:BasicObject, v14:NilClass):
- v16:Fixnum[4] = Const Value(4)
- Jump bb2(v12, v13, v16)
- bb2(v18:BasicObject, v19:BasicObject, v20:Fixnum):
+ Jump bb2(v0, v1, v12)
+ bb1(v16:BasicObject, v17:BasicObject, v18:NilClass):
+ v22:Fixnum[4] = Const Value(4)
+ Jump bb2(v16, v17, v22)
+ bb2(v24:BasicObject, v25:BasicObject, v26:Fixnum):
CheckInterrupts
- Return v20
+ Return v26
");
}
@@ -4610,9 +4625,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :+, v2
+ v9:BasicObject = SendWithoutBlock v1, :+, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4626,9 +4641,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :-, v2
+ v9:BasicObject = SendWithoutBlock v1, :-, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4642,9 +4657,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :*, v2
+ v9:BasicObject = SendWithoutBlock v1, :*, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4658,9 +4673,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :/, v2
+ v9:BasicObject = SendWithoutBlock v1, :/, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4674,9 +4689,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :%, v2
+ v9:BasicObject = SendWithoutBlock v1, :%, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4690,9 +4705,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :==, v2
+ v9:BasicObject = SendWithoutBlock v1, :==, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4706,9 +4721,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :!=, v2
+ v9:BasicObject = SendWithoutBlock v1, :!=, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4722,9 +4737,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :<, v2
+ v9:BasicObject = SendWithoutBlock v1, :<, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4738,9 +4753,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :<=, v2
+ v9:BasicObject = SendWithoutBlock v1, :<=, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4754,9 +4769,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :>, v2
+ v9:BasicObject = SendWithoutBlock v1, :>, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4779,25 +4794,25 @@ mod tests {
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
v2:NilClass = Const Value(nil)
- v4:Fixnum[0] = Const Value(0)
- v5:Fixnum[10] = Const Value(10)
+ v6:Fixnum[0] = Const Value(0)
+ v9:Fixnum[10] = Const Value(10)
CheckInterrupts
- Jump bb2(v0, v4, v5)
- bb2(v9:BasicObject, v10:BasicObject, v11:BasicObject):
- v13:Fixnum[0] = Const Value(0)
- v15:BasicObject = SendWithoutBlock v11, :>, v13
+ Jump bb2(v0, v6, v9)
+ bb2(v15:BasicObject, v16:BasicObject, v17:BasicObject):
+ v19:Fixnum[0] = Const Value(0)
+ v23:BasicObject = SendWithoutBlock v17, :>, v19
CheckInterrupts
- v18:CBool = Test v15
- IfTrue v18, bb1(v9, v10, v11)
- v20:NilClass = Const Value(nil)
+ v26:CBool = Test v23
+ IfTrue v26, bb1(v15, v16, v17)
+ v28:NilClass = Const Value(nil)
CheckInterrupts
- Return v10
- bb1(v24:BasicObject, v25:BasicObject, v26:BasicObject):
- v28:Fixnum[1] = Const Value(1)
- v30:BasicObject = SendWithoutBlock v25, :+, v28
- v31:Fixnum[1] = Const Value(1)
- v33:BasicObject = SendWithoutBlock v26, :-, v31
- Jump bb2(v24, v30, v33)
+ Return v16
+ bb1(v36:BasicObject, v37:BasicObject, v38:BasicObject):
+ v42:Fixnum[1] = Const Value(1)
+ v46:BasicObject = SendWithoutBlock v37, :+, v42
+ v49:Fixnum[1] = Const Value(1)
+ v53:BasicObject = SendWithoutBlock v38, :-, v49
+ Jump bb2(v36, v46, v53)
");
}
@@ -4811,9 +4826,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :>=, v2
+ v9:BasicObject = SendWithoutBlock v1, :>=, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -4833,17 +4848,17 @@ mod tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v3:TrueClass = Const Value(true)
+ v5:TrueClass = Const Value(true)
CheckInterrupts
- v6:CBool[true] = Test v3
- IfFalse v6, bb1(v0, v3)
- v8:Fixnum[3] = Const Value(3)
+ v10:CBool[true] = Test v5
+ IfFalse v10, bb1(v0, v5)
+ v14:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v8
- bb1(v12, v13):
- v15 = Const Value(4)
+ Return v14
+ bb1(v20, v21):
+ v25 = Const Value(4)
CheckInterrupts
- Return v15
+ Return v25
");
}
@@ -4861,11 +4876,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:6:
bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- v3:Fixnum[3] = Const Value(3)
- v5:BasicObject = SendWithoutBlock v0, :bar, v2, v3
+ v4:Fixnum[2] = Const Value(2)
+ v5:Fixnum[3] = Const Value(3)
+ v7:BasicObject = SendWithoutBlock v0, :bar, v4, v5
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4883,11 +4898,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:BasicObject = GetLocal l0, EP@3
- v5:BasicObject = Send v3, 0x1000, :each
- v6:BasicObject = GetLocal l0, EP@3
+ v5:BasicObject = GetLocal l0, EP@3
+ v7:BasicObject = Send v5, 0x1000, :each
+ v8:BasicObject = GetLocal l0, EP@3
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -4902,14 +4917,14 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v3:Fixnum[123] = Const Value(123)
- v5:BasicObject = ObjToString v3
- v7:String = AnyToString v3, str: v5
- v9:StringExact = StringConcat v2, v7
- v11:Symbol = StringIntern v9
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:Fixnum[123] = Const Value(123)
+ v7:BasicObject = ObjToString v5
+ v9:String = AnyToString v5, str: v7
+ v11:StringExact = StringConcat v4, v9
+ v13:Symbol = StringIntern v11
CheckInterrupts
- Return v11
+ Return v13
");
}
@@ -4921,17 +4936,17 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:1:
bb0(v0:BasicObject):
- v2:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:ArrayExact = ArrayDup v2
- v5:ArrayExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
- v7:ArrayExact = ArrayDup v5
- v8:StringExact[VALUE(0x1010)] = Const Value(VALUE(0x1010))
- v10:StringExact = StringCopy v8
- v11:StringExact[VALUE(0x1010)] = Const Value(VALUE(0x1010))
- v13:StringExact = StringCopy v11
- v15:BasicObject = SendWithoutBlock v0, :unknown_method, v4, v7, v10, v13
+ v4:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:ArrayExact = ArrayDup v4
+ v7:ArrayExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v9:ArrayExact = ArrayDup v7
+ v10:StringExact[VALUE(0x1010)] = Const Value(VALUE(0x1010))
+ v12:StringExact = StringCopy v10
+ v13:StringExact[VALUE(0x1010)] = Const Value(VALUE(0x1010))
+ v15:StringExact = StringCopy v13
+ v17:BasicObject = SendWithoutBlock v0, :unknown_method, v6, v9, v12, v15
CheckInterrupts
- Return v15
+ Return v17
");
}
@@ -4943,7 +4958,7 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:ArrayExact = ToArray v1
+ v6:ArrayExact = ToArray v1
SideExit UnhandledCallType(Splat)
");
}
@@ -4956,7 +4971,7 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:BasicObject = GetLocal l0, EP@3
+ v5:BasicObject = GetLocal l0, EP@3
SideExit UnhandledCallType(BlockArg)
");
}
@@ -4969,7 +4984,7 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
SideExit UnhandledCallType(Kwarg)
");
}
@@ -5036,13 +5051,13 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
- v5:HashExact = NewHash
- v7:BasicObject = SendWithoutBlock v3, :core#hash_merge_kwd, v5, v1
- v8:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
- v9:StaticSymbol[:b] = Const Value(VALUE(0x1008))
- v10:Fixnum[1] = Const Value(1)
- v12:BasicObject = SendWithoutBlock v8, :core#hash_merge_ptr, v7, v9, v10
+ v5:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
+ v7:HashExact = NewHash
+ v9:BasicObject = SendWithoutBlock v5, :core#hash_merge_kwd, v7, v1
+ v10:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
+ v11:StaticSymbol[:b] = Const Value(VALUE(0x1008))
+ v12:Fixnum[1] = Const Value(1)
+ v14:BasicObject = SendWithoutBlock v10, :core#hash_merge_ptr, v9, v11, v12
SideExit UnhandledCallType(KwSplatMut)
");
}
@@ -5055,9 +5070,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:ArrayExact):
- v4:ArrayExact = ToNewArray v1
- v5:Fixnum[1] = Const Value(1)
- ArrayPush v4, v5
+ v6:ArrayExact = ToNewArray v1
+ v7:Fixnum[1] = Const Value(1)
+ ArrayPush v6, v7
SideExit UnhandledCallType(SplatMut)
");
}
@@ -5080,16 +5095,16 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:BasicObject = GetConstantPath 0x1000
- v4:NilClass = Const Value(nil)
+ v5:BasicObject = GetConstantPath 0x1000
+ v6:NilClass = Const Value(nil)
CheckInterrupts
- Jump bb1(v0, v4, v3)
- bb1(v8:BasicObject, v9:NilClass, v10:BasicObject):
- v13:BasicObject = SendWithoutBlock v10, :new
- Jump bb2(v8, v13, v9)
- bb2(v15:BasicObject, v16:BasicObject, v17:NilClass):
+ Jump bb1(v0, v6, v5)
+ bb1(v10:BasicObject, v11:NilClass, v12:BasicObject):
+ v15:BasicObject = SendWithoutBlock v12, :new
+ Jump bb2(v10, v15, v11)
+ bb2(v17:BasicObject, v18:BasicObject, v19:NilClass):
CheckInterrupts
- Return v16
+ Return v18
");
}
@@ -5104,9 +5119,9 @@ mod tests {
fn test@<compiled>:2:
bb0(v0:BasicObject):
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_MAX)
- v4:BasicObject = ArrayMax
+ v6:BasicObject = ArrayMax
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -5120,9 +5135,9 @@ mod tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_MAX)
- v6:BasicObject = ArrayMax v1, v2
+ v8:BasicObject = ArrayMax v1, v2
CheckInterrupts
- Return v6
+ Return v8
");
}
@@ -5137,14 +5152,14 @@ mod tests {
end
");
assert_contains_opcode("test", YARVINSN_opt_newarray_send);
- assert_snapshot!(hir_string("test"), @r#"
- fn test@<compiled>:3:
- bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v3:NilClass = Const Value(nil)
- v4:NilClass = Const Value(nil)
- v7:BasicObject = SendWithoutBlock v1, :+, v2
- SideExit UnknownNewarraySend(MIN)
- "#);
+ assert_snapshot!(hir_string("test"), @r"
+ fn test@<compiled>:3:
+ bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
+ v3:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
+ v11:BasicObject = SendWithoutBlock v1, :+, v2
+ SideExit UnknownNewarraySend(MIN)
+ ");
}
#[test]
@@ -5158,14 +5173,14 @@ mod tests {
end
");
assert_contains_opcode("test", YARVINSN_opt_newarray_send);
- assert_snapshot!(hir_string("test"), @r#"
- fn test@<compiled>:3:
- bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v3:NilClass = Const Value(nil)
- v4:NilClass = Const Value(nil)
- v7:BasicObject = SendWithoutBlock v1, :+, v2
- SideExit UnknownNewarraySend(HASH)
- "#);
+ assert_snapshot!(hir_string("test"), @r"
+ fn test@<compiled>:3:
+ bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
+ v3:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
+ v11:BasicObject = SendWithoutBlock v1, :+, v2
+ SideExit UnknownNewarraySend(HASH)
+ ");
}
#[test]
@@ -5179,16 +5194,16 @@ mod tests {
end
");
assert_contains_opcode("test", YARVINSN_opt_newarray_send);
- assert_snapshot!(hir_string("test"), @r#"
- fn test@<compiled>:3:
- bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v3:NilClass = Const Value(nil)
- v4:NilClass = Const Value(nil)
- v7:BasicObject = SendWithoutBlock v1, :+, v2
- v8:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v10:StringExact = StringCopy v8
- SideExit UnknownNewarraySend(PACK)
- "#);
+ assert_snapshot!(hir_string("test"), @r"
+ fn test@<compiled>:3:
+ bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
+ v3:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
+ v11:BasicObject = SendWithoutBlock v1, :+, v2
+ v14:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v16:StringExact = StringCopy v14
+ SideExit UnknownNewarraySend(PACK)
+ ");
}
// TODO(max): Add a test for VM_OPT_NEWARRAY_SEND_PACK_BUFFER
@@ -5204,14 +5219,14 @@ mod tests {
end
");
assert_contains_opcode("test", YARVINSN_opt_newarray_send);
- assert_snapshot!(hir_string("test"), @r#"
- fn test@<compiled>:3:
- bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v3:NilClass = Const Value(nil)
- v4:NilClass = Const Value(nil)
- v7:BasicObject = SendWithoutBlock v1, :+, v2
- SideExit UnknownNewarraySend(INCLUDE_P)
- "#);
+ assert_snapshot!(hir_string("test"), @r"
+ fn test@<compiled>:3:
+ bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
+ v3:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
+ v11:BasicObject = SendWithoutBlock v1, :+, v2
+ SideExit UnknownNewarraySend(INCLUDE_P)
+ ");
}
#[test]
@@ -5223,10 +5238,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:ArrayExact = NewArray v1, v2
- v7:BasicObject = SendWithoutBlock v5, :length
+ v7:ArrayExact = NewArray v1, v2
+ v11:BasicObject = SendWithoutBlock v7, :length
CheckInterrupts
- Return v7
+ Return v11
");
}
@@ -5239,10 +5254,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:ArrayExact = NewArray v1, v2
- v7:BasicObject = SendWithoutBlock v5, :size
+ v7:ArrayExact = NewArray v1, v2
+ v11:BasicObject = SendWithoutBlock v7, :size
CheckInterrupts
- Return v7
+ Return v11
");
}
@@ -5257,9 +5272,9 @@ mod tests {
fn test@<compiled>:2:
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
- v4:BasicObject = GetIvar v0, :@foo
+ v6:BasicObject = GetIvar v0, :@foo
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -5273,11 +5288,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
PatchPoint SingleRactorMode
- SetIvar v0, :@foo, v2
+ SetIvar v0, :@foo, v4
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -5291,10 +5306,10 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- SetGlobal :$foo, v2
+ v4:Fixnum[1] = Const Value(1)
+ SetGlobal :$foo, v4
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -5308,9 +5323,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:BasicObject = GetGlobal :$foo
+ v5:BasicObject = GetGlobal :$foo
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -5323,9 +5338,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:ArrayExact = ToNewArray v1
+ v6:ArrayExact = ToNewArray v1
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -5338,12 +5353,12 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
- v5:ArrayExact = NewArray v3
- v7:ArrayExact = ToArray v1
- ArrayExtend v5, v7
+ v5:Fixnum[1] = Const Value(1)
+ v7:ArrayExact = NewArray v5
+ v9:ArrayExact = ToArray v1
+ ArrayExtend v7, v9
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -5356,11 +5371,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:ArrayExact = ToNewArray v1
- v5:Fixnum[1] = Const Value(1)
- ArrayPush v4, v5
+ v6:ArrayExact = ToNewArray v1
+ v7:Fixnum[1] = Const Value(1)
+ ArrayPush v6, v7
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -5373,15 +5388,15 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:ArrayExact = ToNewArray v1
- v5:Fixnum[1] = Const Value(1)
- v6:Fixnum[2] = Const Value(2)
- v7:Fixnum[3] = Const Value(3)
- ArrayPush v4, v5
- ArrayPush v4, v6
- ArrayPush v4, v7
+ v6:ArrayExact = ToNewArray v1
+ v7:Fixnum[1] = Const Value(1)
+ v8:Fixnum[2] = Const Value(2)
+ v9:Fixnum[3] = Const Value(3)
+ ArrayPush v6, v7
+ ArrayPush v6, v8
+ ArrayPush v6, v9
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -5394,11 +5409,11 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v4:NilClass = Const Value(nil)
- v5:Fixnum[1] = Const Value(1)
- v7:BasicObject = SendWithoutBlock v1, :[]=, v2, v5
+ v6:NilClass = Const Value(nil)
+ v7:Fixnum[1] = Const Value(1)
+ v11:BasicObject = SendWithoutBlock v1, :[]=, v2, v7
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -5411,9 +5426,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :[], v2
+ v9:BasicObject = SendWithoutBlock v1, :[], v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -5426,9 +5441,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:BasicObject = SendWithoutBlock v1, :empty?
+ v8:BasicObject = SendWithoutBlock v1, :empty?
CheckInterrupts
- Return v4
+ Return v8
");
}
@@ -5441,9 +5456,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:BasicObject = SendWithoutBlock v1, :succ
+ v8:BasicObject = SendWithoutBlock v1, :succ
CheckInterrupts
- Return v4
+ Return v8
");
}
@@ -5456,9 +5471,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :&, v2
+ v9:BasicObject = SendWithoutBlock v1, :&, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -5471,9 +5486,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :|, v2
+ v9:BasicObject = SendWithoutBlock v1, :|, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -5486,9 +5501,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v4:BasicObject = SendWithoutBlock v1, :!
+ v8:BasicObject = SendWithoutBlock v1, :!
CheckInterrupts
- Return v4
+ Return v8
");
}
@@ -5501,9 +5516,9 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :=~, v2
+ v9:BasicObject = SendWithoutBlock v1, :=~, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -5520,13 +5535,13 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
- v3:BasicObject = PutSpecialObject CBase
- v4:StaticSymbol[:aliased] = Const Value(VALUE(0x1008))
- v5:StaticSymbol[:__callee__] = Const Value(VALUE(0x1010))
- v7:BasicObject = SendWithoutBlock v2, :core#set_method_alias, v3, v4, v5
+ v4:Class[VMFrozenCore] = Const Value(VALUE(0x1000))
+ v5:BasicObject = PutSpecialObject CBase
+ v6:StaticSymbol[:aliased] = Const Value(VALUE(0x1008))
+ v7:StaticSymbol[:__callee__] = Const Value(VALUE(0x1010))
+ v9:BasicObject = SendWithoutBlock v4, :core#set_method_alias, v5, v6, v7
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -5551,14 +5566,14 @@ mod tests {
v2:NilClass = Const Value(nil)
v3:NilClass = Const Value(nil)
PatchPoint SingleRactorMode
- v7:BasicObject = GetIvar v0, :@a
+ v9:BasicObject = GetIvar v0, :@a
PatchPoint SingleRactorMode
- v10:BasicObject = GetIvar v0, :@b
+ v12:BasicObject = GetIvar v0, :@b
PatchPoint SingleRactorMode
- v13:BasicObject = GetIvar v0, :@c
- v15:ArrayExact = NewArray v7, v10, v13
+ v15:BasicObject = GetIvar v0, :@c
+ v19:ArrayExact = NewArray v9, v12, v15
CheckInterrupts
- Return v15
+ Return v19
");
assert_contains_opcode("reverse_even", YARVINSN_opt_reverse);
assert_snapshot!(hir_string("reverse_even"), @r"
@@ -5569,16 +5584,16 @@ mod tests {
v3:NilClass = Const Value(nil)
v4:NilClass = Const Value(nil)
PatchPoint SingleRactorMode
- v8:BasicObject = GetIvar v0, :@a
+ v10:BasicObject = GetIvar v0, :@a
PatchPoint SingleRactorMode
- v11:BasicObject = GetIvar v0, :@b
+ v13:BasicObject = GetIvar v0, :@b
PatchPoint SingleRactorMode
- v14:BasicObject = GetIvar v0, :@c
+ v16:BasicObject = GetIvar v0, :@c
PatchPoint SingleRactorMode
- v17:BasicObject = GetIvar v0, :@d
- v19:ArrayExact = NewArray v8, v11, v14, v17
+ v19:BasicObject = GetIvar v0, :@d
+ v23:ArrayExact = NewArray v10, v13, v16, v19
CheckInterrupts
- Return v19
+ Return v23
");
}
@@ -5592,13 +5607,13 @@ mod tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
CheckInterrupts
- v5:CBool = IsNil v1
- IfTrue v5, bb1(v0, v1, v1)
- v8:BasicObject = SendWithoutBlock v1, :itself
- Jump bb1(v0, v1, v8)
- bb1(v10:BasicObject, v11:BasicObject, v12:BasicObject):
+ v7:CBool = IsNil v1
+ IfTrue v7, bb1(v0, v1, v1)
+ v10:BasicObject = SendWithoutBlock v1, :itself
+ Jump bb1(v0, v1, v10)
+ bb1(v12:BasicObject, v13:BasicObject, v14:BasicObject):
CheckInterrupts
- Return v12
+ Return v14
");
}
@@ -5608,11 +5623,11 @@ mod tests {
assert_snapshot!(hir_string("Float"), @r"
fn Float@<internal:kernel>:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject):
- v6:Float = InvokeBuiltin rb_f_float, v0, v1, v2
- Jump bb1(v0, v1, v2, v3, v6)
- bb1(v8:BasicObject, v9:BasicObject, v10:BasicObject, v11:BasicObject, v12:Float):
+ v8:Float = InvokeBuiltin rb_f_float, v0, v1, v2
+ Jump bb1(v0, v1, v2, v3, v8)
+ bb1(v10:BasicObject, v11:BasicObject, v12:BasicObject, v13:BasicObject, v14:Float):
CheckInterrupts
- Return v12
+ Return v14
");
}
@@ -5622,11 +5637,11 @@ mod tests {
assert_snapshot!(hir_string("class"), @r"
fn class@<internal:kernel>:
bb0(v0:BasicObject):
- v3:Class = InvokeBuiltin _bi20, v0
- Jump bb1(v0, v3)
- bb1(v5:BasicObject, v6:Class):
+ v5:Class = InvokeBuiltin _bi20, v0
+ Jump bb1(v0, v5)
+ bb1(v7:BasicObject, v8:Class):
CheckInterrupts
- Return v6
+ Return v8
");
}
@@ -5640,7 +5655,7 @@ mod tests {
fn open@<internal:dir>:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
v5:NilClass = Const Value(nil)
- v8:BasicObject = InvokeBuiltin dir_s_open, v0, v1, v2
+ v10:BasicObject = InvokeBuiltin dir_s_open, v0, v1, v2
SideExit UnhandledYARVInsn(getblockparamproxy)
");
}
@@ -5653,11 +5668,11 @@ mod tests {
assert_snapshot!(hir_string_function(&function), @r"
fn enable@<internal:gc>:
bb0(v0:BasicObject):
- v3:BasicObject = InvokeBuiltin gc_enable, v0
- Jump bb1(v0, v3)
- bb1(v5:BasicObject, v6:BasicObject):
+ v5:BasicObject = InvokeBuiltin gc_enable, v0
+ Jump bb1(v0, v5)
+ bb1(v7:BasicObject, v8:BasicObject):
CheckInterrupts
- Return v6
+ Return v8
");
}
@@ -5669,10 +5684,10 @@ mod tests {
assert_snapshot!(hir_string_function(&function), @r"
fn start@<internal:gc>:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
- v6:FalseClass = Const Value(false)
- v8:BasicObject = InvokeBuiltin gc_start_internal, v0, v1, v2, v3, v6
+ v8:FalseClass = Const Value(false)
+ v10:BasicObject = InvokeBuiltin gc_start_internal, v0, v1, v2, v3, v8
CheckInterrupts
- Return v8
+ Return v10
");
}
@@ -5685,20 +5700,20 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:NilClass = Const Value(nil)
- v4:Fixnum[0] = Const Value(0)
- v5:Fixnum[1] = Const Value(1)
- v7:BasicObject = SendWithoutBlock v1, :[], v4, v5
+ v5:NilClass = Const Value(nil)
+ v6:Fixnum[0] = Const Value(0)
+ v7:Fixnum[1] = Const Value(1)
+ v9:BasicObject = SendWithoutBlock v1, :[], v6, v7
CheckInterrupts
- v10:CBool = Test v7
- IfTrue v10, bb1(v0, v1, v3, v1, v4, v5, v7)
- v12:Fixnum[2] = Const Value(2)
- v14:BasicObject = SendWithoutBlock v1, :[]=, v4, v5, v12
+ v12:CBool = Test v9
+ IfTrue v12, bb1(v0, v1, v5, v1, v6, v7, v9)
+ v14:Fixnum[2] = Const Value(2)
+ v16:BasicObject = SendWithoutBlock v1, :[]=, v6, v7, v14
CheckInterrupts
- Return v12
- bb1(v18:BasicObject, v19:BasicObject, v20:NilClass, v21:BasicObject, v22:Fixnum[0], v23:Fixnum[1], v24:BasicObject):
+ Return v14
+ bb1(v22:BasicObject, v23:BasicObject, v24:NilClass, v25:BasicObject, v26:Fixnum[0], v27:Fixnum[1], v28:BasicObject):
CheckInterrupts
- Return v24
+ Return v28
");
}
@@ -5711,13 +5726,13 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v3:Fixnum[1] = Const Value(1)
- v5:BasicObject = ObjToString v3
- v7:String = AnyToString v3, str: v5
- v9:StringExact = StringConcat v2, v7
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:Fixnum[1] = Const Value(1)
+ v7:BasicObject = ObjToString v5
+ v9:String = AnyToString v5, str: v7
+ v11:StringExact = StringConcat v4, v9
CheckInterrupts
- Return v9
+ Return v11
");
}
@@ -5730,18 +5745,18 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v4:BasicObject = ObjToString v2
- v6:String = AnyToString v2, str: v4
- v7:Fixnum[2] = Const Value(2)
- v9:BasicObject = ObjToString v7
- v11:String = AnyToString v7, str: v9
- v12:Fixnum[3] = Const Value(3)
- v14:BasicObject = ObjToString v12
- v16:String = AnyToString v12, str: v14
- v18:StringExact = StringConcat v6, v11, v16
+ v4:Fixnum[1] = Const Value(1)
+ v6:BasicObject = ObjToString v4
+ v8:String = AnyToString v4, str: v6
+ v9:Fixnum[2] = Const Value(2)
+ v11:BasicObject = ObjToString v9
+ v13:String = AnyToString v9, str: v11
+ v14:Fixnum[3] = Const Value(3)
+ v16:BasicObject = ObjToString v14
+ v18:String = AnyToString v14, str: v16
+ v20:StringExact = StringConcat v8, v13, v18
CheckInterrupts
- Return v18
+ Return v20
");
}
@@ -5754,13 +5769,13 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v3:NilClass = Const Value(nil)
- v5:BasicObject = ObjToString v3
- v7:String = AnyToString v3, str: v5
- v9:StringExact = StringConcat v2, v7
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:NilClass = Const Value(nil)
+ v7:BasicObject = ObjToString v5
+ v9:String = AnyToString v5, str: v7
+ v11:StringExact = StringConcat v4, v9
CheckInterrupts
- Return v9
+ Return v11
");
}
@@ -5773,18 +5788,18 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v4:BasicObject = ObjToString v2
- v6:String = AnyToString v2, str: v4
- v7:Fixnum[2] = Const Value(2)
- v9:BasicObject = ObjToString v7
- v11:String = AnyToString v7, str: v9
- v12:Fixnum[3] = Const Value(3)
- v14:BasicObject = ObjToString v12
- v16:String = AnyToString v12, str: v14
- v18:RegexpExact = ToRegexp v6, v11, v16
+ v4:Fixnum[1] = Const Value(1)
+ v6:BasicObject = ObjToString v4
+ v8:String = AnyToString v4, str: v6
+ v9:Fixnum[2] = Const Value(2)
+ v11:BasicObject = ObjToString v9
+ v13:String = AnyToString v9, str: v11
+ v14:Fixnum[3] = Const Value(3)
+ v16:BasicObject = ObjToString v14
+ v18:String = AnyToString v14, str: v16
+ v20:RegexpExact = ToRegexp v8, v13, v18
CheckInterrupts
- Return v18
+ Return v20
");
}
@@ -5797,15 +5812,15 @@ mod tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v4:BasicObject = ObjToString v2
- v6:String = AnyToString v2, str: v4
- v7:Fixnum[2] = Const Value(2)
- v9:BasicObject = ObjToString v7
- v11:String = AnyToString v7, str: v9
- v13:RegexpExact = ToRegexp v6, v11, MULTILINE|IGNORECASE|EXTENDED|NOENCODING
+ v4:Fixnum[1] = Const Value(1)
+ v6:BasicObject = ObjToString v4
+ v8:String = AnyToString v4, str: v6
+ v9:Fixnum[2] = Const Value(2)
+ v11:BasicObject = ObjToString v9
+ v13:String = AnyToString v9, str: v11
+ v15:RegexpExact = ToRegexp v8, v13, MULTILINE|IGNORECASE|EXTENDED|NOENCODING
CheckInterrupts
- Return v13
+ Return v15
");
}
@@ -5816,19 +5831,19 @@ mod tests {
define_method(:throw_break) { break 2 }
");
assert_contains_opcode("throw_return", YARVINSN_throw);
- assert_snapshot!(hir_string("throw_return"), @r#"
- fn block in <compiled>@<compiled>:2:
- bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- Throw TAG_RETURN, v2
- "#);
+ assert_snapshot!(hir_string("throw_return"), @r"
+ fn block in <compiled>@<compiled>:2:
+ bb0(v0:BasicObject):
+ v6:Fixnum[1] = Const Value(1)
+ Throw TAG_RETURN, v6
+ ");
assert_contains_opcode("throw_break", YARVINSN_throw);
- assert_snapshot!(hir_string("throw_break"), @r#"
- fn block in <compiled>@<compiled>:3:
- bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- Throw TAG_BREAK, v2
- "#);
+ assert_snapshot!(hir_string("throw_break"), @r"
+ fn block in <compiled>@<compiled>:3:
+ bb0(v0:BasicObject):
+ v6:Fixnum[2] = Const Value(2)
+ Throw TAG_BREAK, v6
+ ");
}
}
@@ -5860,12 +5875,15 @@ mod graphviz_tests {
mode=hier; overlap=false; splines=true;
bb0 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v9">PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v10">v10:Fixnum = GuardType v1, Fixnum&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v11">v11:Fixnum = GuardType v2, Fixnum&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v12">v12:Fixnum = FixnumOr v10, v11&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v7">CheckInterrupts&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v8">Return v12&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v5">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v7">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v15">PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29)&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v16">v16:Fixnum = GuardType v1, Fixnum&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v17">v17:Fixnum = GuardType v2, Fixnum&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v18">v18:Fixnum = FixnumOr v16, v17&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v11">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v13">CheckInterrupts&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v14">Return v18&nbsp;</TD></TR>
</TABLE>>];
}
"#);
@@ -5891,19 +5909,24 @@ mod graphviz_tests {
mode=hier; overlap=false; splines=true;
bb0 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb0(v0:BasicObject, v1:BasicObject)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v4">CheckInterrupts&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v5">v5:CBool = Test v1&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v6">IfFalse v5, bb1(v0, v1)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v7">v7:Fixnum[3] = Const Value(3)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v9">CheckInterrupts&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v10">Return v7&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v4">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v6">CheckInterrupts&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v7">v7:CBool = Test v1&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v8">IfFalse v7, bb1(v0, v1)&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v10">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v11">v11:Fixnum[3] = Const Value(3)&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v13">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v15">CheckInterrupts&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v16">Return v11&nbsp;</TD></TR>
</TABLE>>];
- bb0:v6 -> bb1:params:n;
+ bb0:v8 -> bb1:params:n;
bb1 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
- <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb1(v11:BasicObject, v12:BasicObject)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v14">v14:Fixnum[4] = Const Value(4)&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v16">CheckInterrupts&nbsp;</TD></TR>
- <TR><TD ALIGN="left" PORT="v17">Return v14&nbsp;</TD></TR>
+ <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb1(v17:BasicObject, v18:BasicObject)&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v21">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v22">v22:Fixnum[4] = Const Value(4)&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v24">PatchPoint NoTracePoint&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v26">CheckInterrupts&nbsp;</TD></TR>
+ <TR><TD ALIGN="left" PORT="v27">Return v22&nbsp;</TD></TR>
</TABLE>>];
}
"#);
@@ -5940,11 +5963,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:TrueClass = Const Value(true)
+ v1:NilClass = Const Value(nil)
+ v5:TrueClass = Const Value(true)
CheckInterrupts
- v8:Fixnum[3] = Const Value(3)
+ v14:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v8
+ Return v14
");
}
@@ -5963,11 +5987,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:FalseClass = Const Value(false)
+ v1:NilClass = Const Value(nil)
+ v5:FalseClass = Const Value(false)
CheckInterrupts
- v15:Fixnum[4] = Const Value(4)
+ v25:Fixnum[4] = Const Value(4)
CheckInterrupts
- Return v15
+ Return v25
");
}
@@ -5981,15 +6006,15 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v16:Fixnum[3] = Const Value(3)
- v6:Fixnum[3] = Const Value(3)
+ v24:Fixnum[3] = Const Value(3)
+ v10:Fixnum[3] = Const Value(3)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v17:Fixnum[6] = Const Value(6)
+ v25:Fixnum[6] = Const Value(6)
CheckInterrupts
- Return v17
+ Return v25
");
}
@@ -6003,15 +6028,15 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[5] = Const Value(5)
- v3:Fixnum[3] = Const Value(3)
+ v4:Fixnum[5] = Const Value(5)
+ v5:Fixnum[3] = Const Value(3)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS)
- v16:Fixnum[2] = Const Value(2)
- v6:Fixnum[1] = Const Value(1)
+ v24:Fixnum[2] = Const Value(2)
+ v10:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS)
- v17:Fixnum[1] = Const Value(1)
+ v25:Fixnum[1] = Const Value(1)
CheckInterrupts
- Return v17
+ Return v25
");
}
@@ -6025,12 +6050,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[0] = Const Value(0)
- v3:Fixnum[1073741825] = Const Value(1073741825)
+ v4:Fixnum[0] = Const Value(0)
+ v5:Fixnum[1073741825] = Const Value(1073741825)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS)
- v11:Fixnum[-1073741825] = Const Value(-1073741825)
+ v17:Fixnum[-1073741825] = Const Value(-1073741825)
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6044,12 +6069,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[6] = Const Value(6)
- v3:Fixnum[7] = Const Value(7)
+ v4:Fixnum[6] = Const Value(6)
+ v5:Fixnum[7] = Const Value(7)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT)
- v11:Fixnum[42] = Const Value(42)
+ v17:Fixnum[42] = Const Value(42)
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6064,18 +6089,18 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[0] = Const Value(0)
+ v5:Fixnum[0] = Const Value(0)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT)
- v15:Fixnum = GuardType v1, Fixnum
- v22:Fixnum[0] = Const Value(0)
- v6:Fixnum[0] = Const Value(0)
+ v25:Fixnum = GuardType v1, Fixnum
+ v32:Fixnum[0] = Const Value(0)
+ v10:Fixnum[0] = Const Value(0)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT)
- v18:Fixnum = GuardType v1, Fixnum
- v23:Fixnum[0] = Const Value(0)
+ v28:Fixnum = GuardType v1, Fixnum
+ v33:Fixnum[0] = Const Value(0)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v24:Fixnum[0] = Const Value(0)
+ v34:Fixnum[0] = Const Value(0)
CheckInterrupts
- Return v24
+ Return v34
");
}
@@ -6093,14 +6118,14 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT)
- v22:TrueClass = Const Value(true)
+ v34:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[3] = Const Value(3)
+ v16:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -6118,19 +6143,19 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE)
- v32:TrueClass = Const Value(true)
+ v46:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[2] = Const Value(2)
- v11:Fixnum[2] = Const Value(2)
+ v14:Fixnum[2] = Const Value(2)
+ v15:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE)
- v34:TrueClass = Const Value(true)
+ v48:TrueClass = Const Value(true)
CheckInterrupts
- v18:Fixnum[3] = Const Value(3)
+ v26:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v18
+ Return v26
");
}
@@ -6148,14 +6173,14 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- v3:Fixnum[1] = Const Value(1)
+ v4:Fixnum[2] = Const Value(2)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GT)
- v22:TrueClass = Const Value(true)
+ v34:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[3] = Const Value(3)
+ v16:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -6173,19 +6198,19 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- v3:Fixnum[1] = Const Value(1)
+ v4:Fixnum[2] = Const Value(2)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE)
- v32:TrueClass = Const Value(true)
+ v46:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[2] = Const Value(2)
- v11:Fixnum[2] = Const Value(2)
+ v14:Fixnum[2] = Const Value(2)
+ v15:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE)
- v34:TrueClass = Const Value(true)
+ v48:TrueClass = Const Value(true)
CheckInterrupts
- v18:Fixnum[3] = Const Value(3)
+ v26:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v18
+ Return v26
");
}
@@ -6203,14 +6228,14 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
- v22:FalseClass = Const Value(false)
+ v34:FalseClass = Const Value(false)
CheckInterrupts
- v16:Fixnum[4] = Const Value(4)
+ v26:Fixnum[4] = Const Value(4)
CheckInterrupts
- Return v16
+ Return v26
");
}
@@ -6228,14 +6253,14 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[2] = Const Value(2)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
- v22:TrueClass = Const Value(true)
+ v34:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[3] = Const Value(3)
+ v16:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -6253,15 +6278,15 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ)
- v23:TrueClass = Const Value(true)
+ v35:TrueClass = Const Value(true)
CheckInterrupts
- v10:Fixnum[3] = Const Value(3)
+ v16:Fixnum[3] = Const Value(3)
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -6279,15 +6304,15 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[2] = Const Value(2)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[2] = Const Value(2)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ)
- v23:FalseClass = Const Value(false)
+ v35:FalseClass = Const Value(false)
CheckInterrupts
- v16:Fixnum[4] = Const Value(4)
+ v26:Fixnum[4] = Const Value(4)
CheckInterrupts
- Return v16
+ Return v26
");
}
@@ -6302,12 +6327,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = FixnumAdd v10, v3
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = FixnumAdd v16, v5
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6343,9 +6368,9 @@ mod opt_tests {
assert_snapshot!(hir_string("block"), @r"
fn block@<compiled>:6:
bb0(v0:BasicObject, v1:BasicObject):
- v3:NilClass = Const Value(nil)
+ v5:NilClass = Const Value(nil)
CheckInterrupts
- Return v3
+ Return v5
");
assert_snapshot!(hir_string("post"), @r"
fn post@<compiled>:5:
@@ -6369,10 +6394,10 @@ mod opt_tests {
fn test@<compiled>:5:
bb0(v0:BasicObject):
PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010)
- v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038)
+ v12:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v13:BasicObject = SendWithoutBlockDirect v12, :foo (0x1038)
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -6390,9 +6415,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:5:
bb0(v0:BasicObject):
- v3:BasicObject = SendWithoutBlock v0, :foo
+ v5:BasicObject = SendWithoutBlock v0, :foo
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -6411,10 +6436,10 @@ mod opt_tests {
fn test@<compiled>:6:
bb0(v0:BasicObject):
PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010)
- v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038)
+ v12:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v13:BasicObject = SendWithoutBlockDirect v12, :foo (0x1038)
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -6429,12 +6454,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[3] = Const Value(3)
+ v4:Fixnum[3] = Const Value(3)
PatchPoint MethodRedefined(Object@0x1000, Integer@0x1008, cme:0x1010)
- v9:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v10:BasicObject = SendWithoutBlockDirect v9, :Integer (0x1038), v2
+ v13:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v14:BasicObject = SendWithoutBlockDirect v13, :Integer (0x1038), v4
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -6451,13 +6476,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:5:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[2] = Const Value(2)
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[2] = Const Value(2)
PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010)
- v10:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v11:BasicObject = SendWithoutBlockDirect v10, :foo (0x1038), v2, v3
+ v14:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v15:BasicObject = SendWithoutBlockDirect v14, :foo (0x1038), v4, v5
CheckInterrupts
- Return v11
+ Return v15
");
}
@@ -6478,13 +6503,13 @@ mod opt_tests {
fn test@<compiled>:7:
bb0(v0:BasicObject):
PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010)
- v10:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v11:BasicObject = SendWithoutBlockDirect v10, :foo (0x1038)
+ v16:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v17:BasicObject = SendWithoutBlockDirect v16, :foo (0x1038)
PatchPoint MethodRedefined(Object@0x1000, bar@0x1040, cme:0x1048)
- v13:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v14:BasicObject = SendWithoutBlockDirect v13, :bar (0x1038)
+ v19:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v20:BasicObject = SendWithoutBlockDirect v19, :bar (0x1038)
CheckInterrupts
- Return v14
+ Return v20
");
}
@@ -6502,9 +6527,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:7:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:BasicObject = SendWithoutBlock v1, :+, v2
+ v9:BasicObject = SendWithoutBlock v1, :+, v2
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -6518,11 +6543,11 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = GuardType v2, Fixnum
- v12:Fixnum = FixnumAdd v10, v11
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = GuardType v2, Fixnum
+ v18:Fixnum = FixnumAdd v16, v17
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -6535,12 +6560,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = FixnumAdd v10, v3
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = FixnumAdd v16, v5
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6553,12 +6578,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = FixnumAdd v3, v10
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = FixnumAdd v5, v16
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6572,11 +6597,11 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = GuardType v2, Fixnum
- v12:BoolExact = FixnumLt v10, v11
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = GuardType v2, Fixnum
+ v18:BoolExact = FixnumLt v16, v17
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -6589,12 +6614,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT)
- v10:Fixnum = GuardType v1, Fixnum
- v11:BoolExact = FixnumLt v10, v3
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:BoolExact = FixnumLt v16, v5
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6607,12 +6632,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT)
- v10:Fixnum = GuardType v1, Fixnum
- v11:BoolExact = FixnumLt v3, v10
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:BoolExact = FixnumLt v5, v16
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -6627,9 +6652,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -6644,9 +6669,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -6661,11 +6686,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
- v9:Fixnum = GuardType v1, Fixnum
- v10:RangeExact = NewRangeFixnum v3 NewRangeInclusive v9
+ v5:Fixnum[1] = Const Value(1)
+ v13:Fixnum = GuardType v1, Fixnum
+ v14:RangeExact = NewRangeFixnum v5 NewRangeInclusive v13
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -6680,11 +6705,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
- v9:Fixnum = GuardType v1, Fixnum
- v10:RangeExact = NewRangeFixnum v3 NewRangeExclusive v9
+ v5:Fixnum[1] = Const Value(1)
+ v13:Fixnum = GuardType v1, Fixnum
+ v14:RangeExact = NewRangeFixnum v5 NewRangeExclusive v13
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -6699,11 +6724,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[10] = Const Value(10)
- v9:Fixnum = GuardType v1, Fixnum
- v10:RangeExact = NewRangeFixnum v9 NewRangeInclusive v3
+ v5:Fixnum[10] = Const Value(10)
+ v13:Fixnum = GuardType v1, Fixnum
+ v14:RangeExact = NewRangeFixnum v13 NewRangeInclusive v5
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -6718,11 +6743,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[10] = Const Value(10)
- v9:Fixnum = GuardType v1, Fixnum
- v10:RangeExact = NewRangeFixnum v9 NewRangeExclusive v3
+ v5:Fixnum[10] = Const Value(10)
+ v13:Fixnum = GuardType v1, Fixnum
+ v14:RangeExact = NewRangeFixnum v13 NewRangeExclusive v5
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -6739,10 +6764,10 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:ArrayExact = NewArray
- v5:Fixnum[5] = Const Value(5)
+ v6:ArrayExact = NewArray
+ v9:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -6758,10 +6783,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:Fixnum[5] = Const Value(5)
+ v1:NilClass = Const Value(nil)
+ v5:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v8:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v4
+ Return v8
");
}
@@ -6778,14 +6804,14 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_UMINUS)
- v6:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
- v8:StringExact = StringCopy v6
- v10:RangeExact = NewRange v4 NewRangeInclusive v8
- v11:Fixnum[0] = Const Value(0)
+ v8:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v10:StringExact = StringCopy v8
+ v12:RangeExact = NewRange v6 NewRangeInclusive v10
+ v15:Fixnum[0] = Const Value(0)
CheckInterrupts
- Return v11
+ Return v15
");
}
@@ -6802,10 +6828,10 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
v2:NilClass = Const Value(nil)
- v5:ArrayExact = NewArray v1
- v6:Fixnum[5] = Const Value(5)
+ v7:ArrayExact = NewArray v1
+ v10:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v10
");
}
@@ -6821,10 +6847,10 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:HashExact = NewHash
- v5:Fixnum[5] = Const Value(5)
+ v6:HashExact = NewHash
+ v9:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v5
+ Return v9
");
}
@@ -6840,12 +6866,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
v3:NilClass = Const Value(nil)
- v5:StaticSymbol[:a] = Const Value(VALUE(0x1000))
- v6:StaticSymbol[:b] = Const Value(VALUE(0x1008))
- v8:HashExact = NewHash v5: v1, v6: v2
- v9:Fixnum[5] = Const Value(5)
+ v7:StaticSymbol[:a] = Const Value(VALUE(0x1000))
+ v8:StaticSymbol[:b] = Const Value(VALUE(0x1008))
+ v10:HashExact = NewHash v7: v1, v8: v2
+ v13:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -6862,11 +6888,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v5:ArrayExact = ArrayDup v3
- v6:Fixnum[5] = Const Value(5)
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v7:ArrayExact = ArrayDup v5
+ v10:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v10
");
}
@@ -6882,11 +6908,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v5:HashExact = HashDup v3
- v6:Fixnum[5] = Const Value(5)
+ v5:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v7:HashExact = HashDup v5
+ v10:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v10
");
}
@@ -6902,9 +6928,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:Fixnum[5] = Const Value(5)
+ v1:NilClass = Const Value(nil)
+ v7:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v3
+ Return v7
");
}
@@ -6921,11 +6948,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v5:StringExact = StringCopy v3
- v6:Fixnum[5] = Const Value(5)
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v7:StringExact = StringCopy v5
+ v10:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v10
");
}
@@ -6942,11 +6969,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -6963,11 +6990,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -6984,11 +7011,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7005,12 +7032,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_DIV)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v13:Fixnum = FixnumDiv v11, v12
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v21:Fixnum = FixnumDiv v19, v20
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7027,12 +7054,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MOD)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v13:Fixnum = FixnumMod v11, v12
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v21:Fixnum = FixnumMod v19, v20
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7049,11 +7076,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7070,11 +7097,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7091,11 +7118,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GT)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7112,11 +7139,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7133,11 +7160,11 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
- v11:Fixnum = GuardType v1, Fixnum
- v12:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v19:Fixnum = GuardType v1, Fixnum
+ v20:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7155,11 +7182,11 @@ mod opt_tests {
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ)
- v12:Fixnum = GuardType v1, Fixnum
- v13:Fixnum = GuardType v2, Fixnum
- v6:Fixnum[5] = Const Value(5)
+ v20:Fixnum = GuardType v1, Fixnum
+ v21:Fixnum = GuardType v2, Fixnum
+ v12:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v6
+ Return v12
");
}
@@ -7174,10 +7201,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:BasicObject = GetConstantPath 0x1000
- v4:Fixnum[5] = Const Value(5)
+ v5:BasicObject = GetConstantPath 0x1000
+ v8:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v4
+ Return v8
");
}
@@ -7192,10 +7219,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Integer@0x1000, itself@0x1008, cme:0x1010)
- v9:Fixnum = GuardType v1, Fixnum
- v10:BasicObject = CCall itself@0x1038, v9
+ v13:Fixnum = GuardType v1, Fixnum
+ v14:BasicObject = CCall itself@0x1038, v13
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -7207,11 +7234,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact = NewArray
+ v5:ArrayExact = NewArray
PatchPoint MethodRedefined(Array@0x1000, itself@0x1008, cme:0x1010)
- v10:BasicObject = CCall itself@0x1038, v3
+ v14:BasicObject = CCall itself@0x1038, v5
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -7227,12 +7254,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:ArrayExact = NewArray
+ v6:ArrayExact = NewArray
PatchPoint MethodRedefined(Array@0x1000, itself@0x1008, cme:0x1010)
- v12:BasicObject = CCall itself@0x1038, v4
- v7:Fixnum[1] = Const Value(1)
+ v18:BasicObject = CCall itself@0x1038, v6
+ v11:Fixnum[1] = Const Value(1)
CheckInterrupts
- Return v7
+ Return v11
");
}
@@ -7252,12 +7279,12 @@ mod opt_tests {
v1:NilClass = Const Value(nil)
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, M)
- v13:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v19:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint MethodRedefined(Module@0x1010, name@0x1018, cme:0x1020)
- v15:StringExact|NilClass = CCall name@0x1048, v13
- v7:Fixnum[1] = Const Value(1)
+ v21:StringExact|NilClass = CCall name@0x1048, v19
+ v11:Fixnum[1] = Const Value(1)
CheckInterrupts
- Return v7
+ Return v11
");
}
@@ -7273,12 +7300,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:ArrayExact = NewArray
+ v6:ArrayExact = NewArray
PatchPoint MethodRedefined(Array@0x1000, length@0x1008, cme:0x1010)
- v12:Fixnum = CCall length@0x1038, v4
- v7:Fixnum[5] = Const Value(5)
+ v20:Fixnum = CCall length@0x1038, v6
+ v13:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v7
+ Return v13
");
}
@@ -7294,9 +7321,9 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, C)
- v9:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v13:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -7311,19 +7338,19 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, String)
- v17:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v21:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1010, Class)
- v20:Class[VALUE(0x1018)] = Const Value(VALUE(0x1018))
+ v24:Class[VALUE(0x1018)] = Const Value(VALUE(0x1018))
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1020, Module)
- v23:Class[VALUE(0x1028)] = Const Value(VALUE(0x1028))
+ v27:Class[VALUE(0x1028)] = Const Value(VALUE(0x1028))
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1030, BasicObject)
- v26:Class[VALUE(0x1038)] = Const Value(VALUE(0x1038))
- v11:ArrayExact = NewArray v17, v20, v23, v26
+ v30:Class[VALUE(0x1038)] = Const Value(VALUE(0x1038))
+ v13:ArrayExact = NewArray v21, v24, v27, v30
CheckInterrupts
- Return v11
+ Return v13
");
}
@@ -7338,13 +7365,13 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, Enumerable)
- v13:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v17:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1010, Kernel)
- v16:ModuleExact[VALUE(0x1018)] = Const Value(VALUE(0x1018))
- v7:ArrayExact = NewArray v13, v16
+ v20:ModuleExact[VALUE(0x1018)] = Const Value(VALUE(0x1018))
+ v9:ArrayExact = NewArray v17, v20
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -7361,9 +7388,9 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, MY_MODULE)
- v9:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v13:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -7379,12 +7406,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
v1:NilClass = Const Value(nil)
- v4:ArrayExact = NewArray
+ v6:ArrayExact = NewArray
PatchPoint MethodRedefined(Array@0x1000, size@0x1008, cme:0x1010)
- v12:Fixnum = CCall size@0x1038, v4
- v7:Fixnum[5] = Const Value(5)
+ v20:Fixnum = CCall size@0x1038, v6
+ v13:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v7
+ Return v13
");
}
@@ -7399,11 +7426,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v3:Fixnum[0] = Const Value(0)
- v5:BasicObject = SendWithoutBlock v2, :itself, v3
+ v4:Fixnum[1] = Const Value(1)
+ v5:Fixnum[0] = Const Value(0)
+ v7:BasicObject = SendWithoutBlock v4, :itself, v5
CheckInterrupts
- Return v5
+ Return v7
");
}
@@ -7415,11 +7442,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v5:Fixnum[1] = Const Value(1)
PatchPoint MethodRedefined(Integer@0x1000, zero?@0x1008, cme:0x1010)
- v10:BasicObject = SendWithoutBlockDirect v3, :zero? (0x1038)
+ v14:BasicObject = SendWithoutBlockDirect v5, :zero? (0x1038)
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -7435,12 +7462,12 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject):
v2:NilClass = Const Value(nil)
- v4:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v6:ArrayExact = ArrayDup v4
+ v6:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v8:ArrayExact = ArrayDup v6
PatchPoint MethodRedefined(Array@0x1008, first@0x1010, cme:0x1018)
- v13:BasicObject = SendWithoutBlockDirect v6, :first (0x1040)
+ v19:BasicObject = SendWithoutBlockDirect v8, :first (0x1040)
CheckInterrupts
- Return v13
+ Return v19
");
}
@@ -7457,11 +7484,11 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, M)
- v11:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v15:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint MethodRedefined(Module@0x1010, class@0x1018, cme:0x1020)
- v13:BasicObject = SendWithoutBlockDirect v11, :class (0x1048)
+ v17:BasicObject = SendWithoutBlockDirect v15, :class (0x1048)
CheckInterrupts
- Return v13
+ Return v17
");
}
@@ -7484,10 +7511,10 @@ mod opt_tests {
fn test@<compiled>:8:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010)
- v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v10:BasicObject = SendWithoutBlockDirect v9, :foo (0x1038)
+ v13:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v14:BasicObject = SendWithoutBlockDirect v13, :foo (0x1038)
CheckInterrupts
- Return v10
+ Return v14
");
}
@@ -7502,10 +7529,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v4:BasicObject = SendWithoutBlock v0, :foo, v2
+ v4:Fixnum[1] = Const Value(1)
+ v6:BasicObject = SendWithoutBlock v0, :foo, v4
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -7520,9 +7547,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:BasicObject = Send v0, 0x1000, :foo
+ v5:BasicObject = Send v0, 0x1000, :foo
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7541,12 +7568,14 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:4:
bb0(v0:BasicObject):
- v3:Fixnum[1] = Const Value(1)
- SetLocal l0, EP@3, v3
- v6:BasicObject = Send v0, 0x1000, :foo
- v8:BasicObject = GetLocal l0, EP@3
+ v1:NilClass = Const Value(nil)
+ v5:Fixnum[1] = Const Value(1)
+ SetLocal l0, EP@3, v5
+ v10:BasicObject = Send v0, 0x1000, :foo
+ v11:BasicObject = GetLocal l0, EP@3
+ v14:BasicObject = GetLocal l0, EP@3
CheckInterrupts
- Return v8
+ Return v14
");
}
@@ -7561,10 +7590,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
- v4:BasicObject = SendWithoutBlock v0, :foo, v2
+ v4:Fixnum[1] = Const Value(1)
+ v6:BasicObject = SendWithoutBlock v0, :foo, v4
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -7579,7 +7608,7 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
SideExit UnhandledCallType(Kwarg)
");
}
@@ -7595,7 +7624,7 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
SideExit UnhandledCallType(Kwarg)
");
}
@@ -7610,12 +7639,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:StringExact = StringCopy v2
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact = StringCopy v4
PatchPoint MethodRedefined(String@0x1008, bytesize@0x1010, cme:0x1018)
- v11:Fixnum = CCall bytesize@0x1040, v4
+ v15:Fixnum = CCall bytesize@0x1040, v6
CheckInterrupts
- Return v11
+ Return v15
");
}
@@ -7627,9 +7656,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:BasicObject = GetConstantPath 0x1000
+ v5:BasicObject = GetConstantPath 0x1000
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7643,9 +7672,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:BasicObject = GetConstantPath 0x1000
+ v5:BasicObject = GetConstantPath 0x1000
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7660,9 +7689,9 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, Kernel)
- v9:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v13:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -7683,9 +7712,9 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, Foo::Bar::C)
- v9:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v13:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -7701,12 +7730,12 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, C)
- v24:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
- v4:NilClass = Const Value(nil)
+ v28:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v6:NilClass = Const Value(nil)
CheckInterrupts
- v13:BasicObject = SendWithoutBlock v24, :new
+ v15:BasicObject = SendWithoutBlock v28, :new
CheckInterrupts
- Return v13
+ Return v15
");
}
@@ -7726,13 +7755,13 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, C)
- v26:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
- v4:NilClass = Const Value(nil)
- v5:Fixnum[1] = Const Value(1)
+ v30:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v6:NilClass = Const Value(nil)
+ v7:Fixnum[1] = Const Value(1)
CheckInterrupts
- v15:BasicObject = SendWithoutBlock v26, :new, v5
+ v17:BasicObject = SendWithoutBlock v30, :new, v7
CheckInterrupts
- Return v15
+ Return v17
");
}
@@ -7744,11 +7773,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:ArrayExact = NewArray v1, v2
+ v7:ArrayExact = NewArray v1, v2
PatchPoint MethodRedefined(Array@0x1000, length@0x1008, cme:0x1010)
- v12:Fixnum = CCall length@0x1038, v5
+ v18:Fixnum = CCall length@0x1038, v7
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -7760,11 +7789,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
- v5:ArrayExact = NewArray v1, v2
+ v7:ArrayExact = NewArray v1, v2
PatchPoint MethodRedefined(Array@0x1000, size@0x1008, cme:0x1010)
- v12:Fixnum = CCall size@0x1038, v5
+ v18:Fixnum = CCall size@0x1038, v7
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -7777,9 +7806,9 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
- v4:BasicObject = GetIvar v0, :@foo
+ v6:BasicObject = GetIvar v0, :@foo
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -7791,11 +7820,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
PatchPoint SingleRactorMode
- SetIvar v0, :@foo, v2
+ SetIvar v0, :@foo, v4
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -7807,10 +7836,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7825,10 +7854,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:5:
bb0(v0:BasicObject):
- v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:BasicObject = SendWithoutBlock v3, :freeze
+ v5:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:BasicObject = SendWithoutBlock v5, :freeze
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -7840,11 +7869,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE)
PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7856,11 +7885,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:HashExact = NewHash
- v5:BasicObject = SendWithoutBlock v3, :dup
- v7:BasicObject = SendWithoutBlock v5, :freeze
+ v5:HashExact = NewHash
+ v7:BasicObject = SendWithoutBlock v5, :dup
+ v9:BasicObject = SendWithoutBlock v7, :freeze
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -7872,11 +7901,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:HashExact = NewHash
- v4:NilClass = Const Value(nil)
- v6:BasicObject = SendWithoutBlock v3, :freeze, v4
+ v5:HashExact = NewHash
+ v6:NilClass = Const Value(nil)
+ v8:BasicObject = SendWithoutBlock v5, :freeze, v6
CheckInterrupts
- Return v6
+ Return v8
");
}
@@ -7888,10 +7917,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7903,11 +7932,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7919,11 +7948,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact = NewArray
- v5:BasicObject = SendWithoutBlock v3, :dup
- v7:BasicObject = SendWithoutBlock v5, :freeze
+ v5:ArrayExact = NewArray
+ v7:BasicObject = SendWithoutBlock v5, :dup
+ v9:BasicObject = SendWithoutBlock v7, :freeze
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -7935,11 +7964,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact = NewArray
- v4:NilClass = Const Value(nil)
- v6:BasicObject = SendWithoutBlock v3, :freeze, v4
+ v5:ArrayExact = NewArray
+ v6:NilClass = Const Value(nil)
+ v8:BasicObject = SendWithoutBlock v5, :freeze, v6
CheckInterrupts
- Return v6
+ Return v8
");
}
@@ -7951,10 +7980,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7966,11 +7995,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE)
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -7982,12 +8011,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:StringExact = StringCopy v2
- v6:BasicObject = SendWithoutBlock v4, :dup
- v8:BasicObject = SendWithoutBlock v6, :freeze
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact = StringCopy v4
+ v8:BasicObject = SendWithoutBlock v6, :dup
+ v10:BasicObject = SendWithoutBlock v8, :freeze
CheckInterrupts
- Return v8
+ Return v10
");
}
@@ -7999,12 +8028,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:StringExact = StringCopy v2
- v5:NilClass = Const Value(nil)
- v7:BasicObject = SendWithoutBlock v4, :freeze, v5
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact = StringCopy v4
+ v7:NilClass = Const Value(nil)
+ v9:BasicObject = SendWithoutBlock v6, :freeze, v7
CheckInterrupts
- Return v7
+ Return v9
");
}
@@ -8016,10 +8045,10 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_UMINUS)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -8031,11 +8060,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE)
PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_UMINUS)
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -8047,12 +8076,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:StringExact = StringCopy v2
- v6:BasicObject = SendWithoutBlock v4, :dup
- v8:BasicObject = SendWithoutBlock v6, :-@
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:StringExact = StringCopy v4
+ v8:BasicObject = SendWithoutBlock v6, :dup
+ v10:BasicObject = SendWithoutBlock v8, :-@
CheckInterrupts
- Return v8
+ Return v10
");
}
@@ -8064,12 +8093,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v3:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
- v5:StringExact = StringCopy v3
- v11:StringExact = StringConcat v2, v5
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v7:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v9:StringExact = StringCopy v7
+ v15:StringExact = StringConcat v4, v9
CheckInterrupts
- Return v11
+ Return v15
");
}
@@ -8081,13 +8110,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v3:Fixnum[1] = Const Value(1)
- v5:BasicObject = ObjToString v3
- v7:String = AnyToString v3, str: v5
- v9:StringExact = StringConcat v2, v7
+ v4:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:Fixnum[1] = Const Value(1)
+ v7:BasicObject = ObjToString v5
+ v9:String = AnyToString v5, str: v7
+ v11:StringExact = StringConcat v4, v9
CheckInterrupts
- Return v9
+ Return v11
");
}
@@ -8103,10 +8132,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:NilClass = Const Value(nil)
+ v1:NilClass = Const Value(nil)
+ v5:NilClass = Const Value(nil)
CheckInterrupts
CheckInterrupts
- Return v3
+ Return v5
");
}
@@ -8122,12 +8152,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v3:Fixnum[1] = Const Value(1)
+ v1:NilClass = Const Value(nil)
+ v5:Fixnum[1] = Const Value(1)
CheckInterrupts
PatchPoint MethodRedefined(Integer@0x1000, itself@0x1008, cme:0x1010)
- v19:BasicObject = CCall itself@0x1038, v3
+ v25:BasicObject = CCall itself@0x1038, v5
CheckInterrupts
- Return v19
+ Return v25
");
}
@@ -8139,13 +8170,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
- v5:Fixnum[1] = Const Value(1)
+ v7:Fixnum[1] = Const Value(1)
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF)
- v13:Fixnum[5] = Const Value(5)
+ v19:Fixnum[5] = Const Value(5)
CheckInterrupts
- Return v13
+ Return v19
");
}
@@ -8157,13 +8188,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
- v5:Fixnum[-3] = Const Value(-3)
+ v7:Fixnum[-3] = Const Value(-3)
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF)
- v13:Fixnum[4] = Const Value(4)
+ v19:Fixnum[4] = Const Value(4)
CheckInterrupts
- Return v13
+ Return v19
");
}
@@ -8175,13 +8206,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
- v5:Fixnum[-10] = Const Value(-10)
+ v7:Fixnum[-10] = Const Value(-10)
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF)
- v13:NilClass = Const Value(nil)
+ v19:NilClass = Const Value(nil)
CheckInterrupts
- Return v13
+ Return v19
");
}
@@ -8193,13 +8224,13 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
- v5:Fixnum[10] = Const Value(10)
+ v7:Fixnum[10] = Const Value(10)
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF)
- v13:NilClass = Const Value(nil)
+ v19:NilClass = Const Value(nil)
CheckInterrupts
- Return v13
+ Return v19
");
}
@@ -8214,12 +8245,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:5:
bb0(v0:BasicObject):
- v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v5:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE)
- v5:Fixnum[10] = Const Value(10)
- v7:BasicObject = SendWithoutBlock v3, :[], v5
+ v7:Fixnum[10] = Const Value(10)
+ v11:BasicObject = SendWithoutBlock v5, :[], v7
CheckInterrupts
- Return v7
+ Return v11
");
}
@@ -8234,12 +8265,12 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:5:
bb0(v0:BasicObject):
- v2:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
- v4:ArrayExact = ArrayDup v2
+ v4:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v6:ArrayExact = ArrayDup v4
PatchPoint MethodRedefined(Array@0x1008, max@0x1010, cme:0x1018)
- v11:BasicObject = SendWithoutBlockDirect v4, :max (0x1040)
+ v15:BasicObject = SendWithoutBlockDirect v6, :max (0x1040)
CheckInterrupts
- Return v11
+ Return v15
");
}
@@ -8258,9 +8289,9 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, MY_SET)
- v9:SetExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v13:SetExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -8272,9 +8303,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:RegexpExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
+ v4:RegexpExact[VALUE(0x1000)] = Const Value(VALUE(0x1000))
CheckInterrupts
- Return v2
+ Return v4
");
}
@@ -8286,11 +8317,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010)
- v9:TrueClass = CCall nil?@0x1038, v2
+ v15:TrueClass = CCall nil?@0x1038, v4
CheckInterrupts
- Return v9
+ Return v15
");
}
@@ -8305,11 +8336,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:NilClass = Const Value(nil)
+ v4:NilClass = Const Value(nil)
PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010)
- v5:Fixnum[1] = Const Value(1)
+ v11:Fixnum[1] = Const Value(1)
CheckInterrupts
- Return v5
+ Return v11
");
}
@@ -8321,11 +8352,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:2:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010)
- v9:FalseClass = CCall nil?@0x1038, v2
+ v15:FalseClass = CCall nil?@0x1038, v4
CheckInterrupts
- Return v9
+ Return v15
");
}
@@ -8340,11 +8371,11 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:3:
bb0(v0:BasicObject):
- v2:Fixnum[1] = Const Value(1)
+ v4:Fixnum[1] = Const Value(1)
PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010)
- v5:Fixnum[2] = Const Value(2)
+ v11:Fixnum[2] = Const Value(2)
CheckInterrupts
- Return v5
+ Return v11
");
}
@@ -8359,10 +8390,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010)
- v9:NilClass = GuardType v1, NilClass
- v10:TrueClass = CCall nil?@0x1038, v9
+ v15:NilClass = GuardType v1, NilClass
+ v16:TrueClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8377,10 +8408,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(FalseClass@0x1000, nil?@0x1008, cme:0x1010)
- v9:FalseClass = GuardType v1, FalseClass
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:FalseClass = GuardType v1, FalseClass
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8395,10 +8426,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(TrueClass@0x1000, nil?@0x1008, cme:0x1010)
- v9:TrueClass = GuardType v1, TrueClass
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:TrueClass = GuardType v1, TrueClass
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8413,10 +8444,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Symbol@0x1000, nil?@0x1008, cme:0x1010)
- v9:StaticSymbol = GuardType v1, StaticSymbol
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:StaticSymbol = GuardType v1, StaticSymbol
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8431,10 +8462,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010)
- v9:Fixnum = GuardType v1, Fixnum
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:Fixnum = GuardType v1, Fixnum
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8449,10 +8480,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Float@0x1000, nil?@0x1008, cme:0x1010)
- v9:Flonum = GuardType v1, Flonum
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:Flonum = GuardType v1, Flonum
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8467,10 +8498,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(String@0x1000, nil?@0x1008, cme:0x1010)
- v9:StringExact = GuardType v1, StringExact
- v10:FalseClass = CCall nil?@0x1038, v9
+ v15:StringExact = GuardType v1, StringExact
+ v16:FalseClass = CCall nil?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8485,10 +8516,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Array@0x1000, !@0x1008, cme:0x1010)
- v9:ArrayExact = GuardType v1, ArrayExact
- v10:BoolExact = CCall !@0x1038, v9
+ v15:ArrayExact = GuardType v1, ArrayExact
+ v16:BoolExact = CCall !@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8503,10 +8534,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Array@0x1000, empty?@0x1008, cme:0x1010)
- v9:ArrayExact = GuardType v1, ArrayExact
- v10:BoolExact = CCall empty?@0x1038, v9
+ v15:ArrayExact = GuardType v1, ArrayExact
+ v16:BoolExact = CCall empty?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8521,10 +8552,10 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(Hash@0x1000, empty?@0x1008, cme:0x1010)
- v9:HashExact = GuardType v1, HashExact
- v10:BoolExact = CCall empty?@0x1038, v9
+ v15:HashExact = GuardType v1, HashExact
+ v16:BoolExact = CCall empty?@0x1038, v15
CheckInterrupts
- Return v10
+ Return v16
");
}
@@ -8540,10 +8571,10 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint MethodRedefined(C@0x1000, ==@0x1008, cme:0x1010)
- v10:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v11:BoolExact = CCall ==@0x1038, v10, v2
+ v16:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v17:BoolExact = CCall ==@0x1038, v16, v2
CheckInterrupts
- Return v11
+ Return v17
");
}
@@ -8558,11 +8589,11 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 28)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = GuardType v2, Fixnum
- v12:Fixnum = FixnumAnd v10, v11
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = GuardType v2, Fixnum
+ v18:Fixnum = FixnumAnd v16, v17
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -8577,11 +8608,11 @@ mod opt_tests {
fn test@<compiled>:2:
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject):
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29)
- v10:Fixnum = GuardType v1, Fixnum
- v11:Fixnum = GuardType v2, Fixnum
- v12:Fixnum = FixnumOr v10, v11
+ v16:Fixnum = GuardType v1, Fixnum
+ v17:Fixnum = GuardType v2, Fixnum
+ v18:Fixnum = FixnumOr v16, v17
CheckInterrupts
- Return v12
+ Return v18
");
}
@@ -8598,10 +8629,10 @@ mod opt_tests {
fn test@<compiled>:3:
bb0(v0:BasicObject):
PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010)
- v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
- v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038)
+ v12:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)]
+ v13:BasicObject = SendWithoutBlockDirect v12, :foo (0x1038)
CheckInterrupts
- Return v9
+ Return v13
");
}
@@ -8624,11 +8655,11 @@ mod opt_tests {
fn test@<compiled>:10:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010)
- v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v12:HeapObject[class_exact:C] = GuardShape v9, 0x1038
- v13:BasicObject = LoadIvarEmbedded v12, :@foo@0x1039
+ v13:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v16:HeapObject[class_exact:C] = GuardShape v13, 0x1038
+ v17:BasicObject = LoadIvarEmbedded v16, :@foo@0x1039
CheckInterrupts
- Return v13
+ Return v17
");
}
@@ -8651,11 +8682,11 @@ mod opt_tests {
fn test@<compiled>:10:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010)
- v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v12:HeapObject[class_exact:C] = GuardShape v9, 0x1038
- v13:BasicObject = LoadIvarEmbedded v12, :@foo@0x1039
+ v13:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v16:HeapObject[class_exact:C] = GuardShape v13, 0x1038
+ v17:BasicObject = LoadIvarEmbedded v16, :@foo@0x1039
CheckInterrupts
- Return v13
+ Return v17
");
}
@@ -8689,9 +8720,9 @@ mod opt_tests {
assert_snapshot!(hir_string("test"), @r"
fn test@<compiled>:20:
bb0(v0:BasicObject, v1:BasicObject):
- v4:BasicObject = SendWithoutBlock v1, :foo
+ v6:BasicObject = SendWithoutBlock v1, :foo
CheckInterrupts
- Return v4
+ Return v6
");
}
@@ -8712,13 +8743,13 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, O)
- v11:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v15:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint MethodRedefined(C@0x1010, foo@0x1018, cme:0x1020)
- v14:HeapObject[VALUE(0x1008)] = GuardType v11, HeapObject
- v15:HeapObject[VALUE(0x1008)] = GuardShape v14, 0x1048
- v16:NilClass = Const Value(nil)
+ v18:HeapObject[VALUE(0x1008)] = GuardType v15, HeapObject
+ v19:HeapObject[VALUE(0x1008)] = GuardShape v18, 0x1048
+ v20:NilClass = Const Value(nil)
CheckInterrupts
- Return v16
+ Return v20
");
}
@@ -8739,13 +8770,13 @@ mod opt_tests {
bb0(v0:BasicObject):
PatchPoint SingleRactorMode
PatchPoint StableConstantNames(0x1000, O)
- v11:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
+ v15:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008))
PatchPoint MethodRedefined(C@0x1010, foo@0x1018, cme:0x1020)
- v14:HeapObject[VALUE(0x1008)] = GuardType v11, HeapObject
- v15:HeapObject[VALUE(0x1008)] = GuardShape v14, 0x1048
- v16:NilClass = Const Value(nil)
+ v18:HeapObject[VALUE(0x1008)] = GuardType v15, HeapObject
+ v19:HeapObject[VALUE(0x1008)] = GuardShape v18, 0x1048
+ v20:NilClass = Const Value(nil)
CheckInterrupts
- Return v16
+ Return v20
");
}
@@ -8764,11 +8795,11 @@ mod opt_tests {
fn test@<compiled>:6:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010)
- v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v12:HeapObject[class_exact:C] = GuardShape v9, 0x1038
- v13:NilClass = Const Value(nil)
+ v13:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v16:HeapObject[class_exact:C] = GuardShape v13, 0x1038
+ v17:NilClass = Const Value(nil)
CheckInterrupts
- Return v13
+ Return v17
");
}
@@ -8787,11 +8818,11 @@ mod opt_tests {
fn test@<compiled>:6:
bb0(v0:BasicObject, v1:BasicObject):
PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010)
- v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
- v12:HeapObject[class_exact:C] = GuardShape v9, 0x1038
- v13:NilClass = Const Value(nil)
+ v13:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C]
+ v16:HeapObject[class_exact:C] = GuardShape v13, 0x1038
+ v17:NilClass = Const Value(nil)
CheckInterrupts
- Return v13
+ Return v17
");
}
}
diff --git a/zjit/src/invariants.rs b/zjit/src/invariants.rs
index 345d815bf2..0b44fd4624 100644
--- a/zjit/src/invariants.rs
+++ b/zjit/src/invariants.rs
@@ -54,6 +54,9 @@ pub struct Invariants {
/// Map from constant ID to patch points that assume the constant hasn't been redefined
constant_state_patch_points: HashMap<ID, HashSet<PatchPoint>>,
+ /// Set of patch points that assume that the TracePoint is not enabled
+ no_trace_point_patch_points: HashSet<PatchPoint>,
+
/// Set of patch points that assume that the interpreter is running with only one ractor
single_ractor_patch_points: HashSet<PatchPoint>,
}
@@ -272,6 +275,15 @@ pub extern "C" fn rb_zjit_before_ractor_spawn() {
});
}
+pub fn track_no_trace_point_assumption(patch_point_ptr: CodePtr, side_exit_ptr: CodePtr, payload_ptr: *mut IseqPayload) {
+ let invariants = ZJITState::get_invariants();
+ invariants.no_trace_point_patch_points.insert(PatchPoint {
+ patch_point_ptr,
+ side_exit_ptr,
+ payload_ptr,
+ });
+}
+
#[unsafe(no_mangle)]
pub extern "C" fn rb_zjit_tracing_invalidate_all() {
use crate::gc::{get_or_create_iseq_payload, IseqStatus};
@@ -291,5 +303,12 @@ pub extern "C" fn rb_zjit_tracing_invalidate_all() {
payload.status = IseqStatus::NotCompiled;
unsafe { rb_iseq_reset_jit_func(iseq) };
});
+
+ let cb = ZJITState::get_code_block();
+ let patch_points = mem::take(&mut ZJITState::get_invariants().no_trace_point_patch_points);
+
+ compile_patch_points!(cb, patch_points, "TracePoint is enabled, invalidating no TracePoint assumption");
+
+ cb.mark_all_executable();
});
}