Skip to content

Instantly share code, notes, and snippets.

@dbussink
Created August 30, 2009 07:41
Show Gist options
  • Save dbussink/177899 to your computer and use it in GitHub Desktop.
Save dbussink/177899 to your computer and use it in GitHub Desktop.
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) run
Starting program: /home/dbussink/rubinius/bin/rbx -XJ
[Thread debugging using libthread_db enabled]
[New Thread 0x7fb3a1e7a6f0 (LWP 28777)]
[New Thread 0x4257f950 (LWP 28780)]
[New Thread 0x40eab950 (LWP 28784)]
Overloaded intrinsic has incorrect suffix: '.i31'. It should be '.i63'
%0 (i63, i63)* @llvm.ssub.with.overflow.i31
Broken module found, verification continues.
ERROR: complication error detected.
ERROR: Please report the above message and the
code below to http://github.com/evanphx/rubinius/issues
define %"struct.rubinius::Object"* @13(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %previous, %"struct.rubinius::Dispatch"* %msg, %"struct.rubinius::Arguments"* %args) {
entry:
%valid_flag = alloca i1 ; <i1*> [#uses=0]
%cfstk = alloca %"struct.rubinius::Object"*, i32 15 ; <%"struct.rubinius::Object"**> [#uses=2]
%var_mem = alloca %"struct.rubinius::Object"*, i32 8 ; <%"struct.rubinius::Object"**> [#uses=1]
%total_pos = getelementptr %"struct.rubinius::Arguments"* %args, i32 0, i32 2 ; <i32*> [#uses=1]
%arg.total = load i32* %total_pos ; <i32> [#uses=1]
%arg_cmp = icmp ne i32 %arg.total, 0 ; <i1> [#uses=1]
%out_args = alloca %"struct.rubinius::Arguments" ; <%"struct.rubinius::Arguments"*> [#uses=11]
%out_args_recv = getelementptr %"struct.rubinius::Arguments"* %out_args, i32 0, i32 0 ; <%"struct.rubinius::Object"**> [#uses=6]
%out_args_block = getelementptr %"struct.rubinius::Arguments"* %out_args, i32 0, i32 1 ; <%"struct.rubinius::Object"**> [#uses=6]
%out_args_total = getelementptr %"struct.rubinius::Arguments"* %out_args, i32 0, i32 2 ; <i32*> [#uses=6]
%out_args_arguments = getelementptr %"struct.rubinius::Arguments"* %out_args, i32 0, i32 3 ; <%"struct.rubinius::Object"***> [#uses=5]
%out_args_array = getelementptr %"struct.rubinius::Arguments"* %out_args, i32 0, i32 4 ; <%"struct.rubinius::Array"**> [#uses=6]
br i1 %arg_cmp, label %arg_error, label %import_args
arg_error: ; preds = %entry
%ret = call %"struct.rubinius::Object"* @rbx_arg_error(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %previous, %"struct.rubinius::Dispatch"* %msg, %"struct.rubinius::Arguments"* %args, i32 0) ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %ret
import_args: ; preds = %entry
%call_frame = bitcast %"struct.rubinius::Object"** %cfstk to %"struct.rubinius::CallFrame"* ; <%"struct.rubinius::CallFrame"*> [#uses=28]
%stack = getelementptr %"struct.rubinius::Object"** %cfstk, i32 7 ; <%"struct.rubinius::Object"**> [#uses=85]
%vars = bitcast %"struct.rubinius::Object"** %var_mem to %"struct.rubinius::StackVariables"* ; <%"struct.rubinius::StackVariables"*> [#uses=32]
%0 = getelementptr %"struct.rubinius::Dispatch"* %msg, i32 0, i32 2 ; <%"struct.rubinius::Executable"**> [#uses=1]
%msg.exec = load %"struct.rubinius::Executable"** %0 ; <%"struct.rubinius::Executable"*> [#uses=1]
%1 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 3 ; <%"struct.rubinius::CompiledMethod"**> [#uses=1]
%cm = bitcast %"struct.rubinius::Executable"* %msg.exec to %"struct.rubinius::CompiledMethod"* ; <%"struct.rubinius::CompiledMethod"*> [#uses=1]
%2 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 0 ; <%"struct.rubinius::CallFrame"**> [#uses=1]
store %"struct.rubinius::CallFrame"* %previous, %"struct.rubinius::CallFrame"** %2
%3 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 2 ; <%"struct.rubinius::Dispatch"**> [#uses=1]
store %"struct.rubinius::Dispatch"* %msg, %"struct.rubinius::Dispatch"** %3
store %"struct.rubinius::CompiledMethod"* %cm, %"struct.rubinius::CompiledMethod"** %1
%4 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 4 ; <i32*> [#uses=1]
store i32 16, i32* %4
%5 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 5 ; <i32*> [#uses=1]
store i32 0, i32* %5
%6 = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 7 ; <%"struct.rubinius::StackVariables"**> [#uses=1]
store %"struct.rubinius::StackVariables"* %vars, %"struct.rubinius::StackVariables"** %6
%counter_alloca = alloca i32 ; <i32*> [#uses=3]
store i32 0, i32* %counter_alloca
br label %stack_nil
stack_nil: ; preds = %stack_nil, %import_args
%counter = load i32* %counter_alloca ; <i32> [#uses=2]
%stack_pos = getelementptr %"struct.rubinius::Object"** %stack, i32 %counter ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i32 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos
%added = add i32 %counter, 1 ; <i32> [#uses=2]
store i32 %added, i32* %counter_alloca
%loop_check = icmp eq i32 %added, 8 ; <i1> [#uses=1]
br i1 %loop_check, label %bottom, label %stack_nil
bottom: ; preds = %stack_nil
%7 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 0 ; <%"struct.rubinius::VariableScope"**> [#uses=1]
store %"struct.rubinius::VariableScope"* null, %"struct.rubinius::VariableScope"** %7
%8 = getelementptr %"struct.rubinius::Arguments"* %args, i32 0, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%args.recv = load %"struct.rubinius::Object"** %8 ; <%"struct.rubinius::Object"*> [#uses=1]
%9 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %args.recv, %"struct.rubinius::Object"** %9
%10 = getelementptr %"struct.rubinius::Dispatch"* %msg, i32 0, i32 1 ; <%"struct.rubinius::Module"**> [#uses=1]
%msg.module = load %"struct.rubinius::Module"** %10 ; <%"struct.rubinius::Module"*> [#uses=1]
%11 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 4 ; <%"struct.rubinius::Module"**> [#uses=1]
store %"struct.rubinius::Module"* %msg.module, %"struct.rubinius::Module"** %11
%12 = getelementptr %"struct.rubinius::Arguments"* %args, i32 0, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%args.block = load %"struct.rubinius::Object"** %12 ; <%"struct.rubinius::Object"*> [#uses=1]
%13 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %args.block, %"struct.rubinius::Object"** %13
%14 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 1 ; <%"struct.rubinius::VariableScope"**> [#uses=1]
store %"struct.rubinius::VariableScope"* null, %"struct.rubinius::VariableScope"** %14
%local_pos = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i32 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %local_pos
%local_pos1 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i32 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %local_pos1
%local_pos2 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i32 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %local_pos2
%arg_ary_pos = getelementptr %"struct.rubinius::Arguments"* %args, i32 0, i32 3 ; <%"struct.rubinius::Object"***> [#uses=1]
%arg_ary = load %"struct.rubinius::Object"*** %arg_ary_pos ; <%"struct.rubinius::Object"**> [#uses=0]
%ci294 = call %"struct.rubinius::Object"* @rbx_check_interrupts(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame) ; <%"struct.rubinius::Object"*> [#uses=1]
%15 = icmp eq %"struct.rubinius::Object"* %ci294, null ; <i1> [#uses=1]
br i1 %15, label %ret_null293, label %method_body
bail_out: ; No predecessors!
%rth = call i1 @rbx_return_to_here(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame) ; <i1> [#uses=1]
br i1 %rth, label %ret_raise_val, label %ret_null
ret_raise_val: ; preds = %bail_out
%crv = call %"struct.rubinius::Object"* @rbx_clear_raise_value(%"struct.rubinius::VM"* %state) ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %crv
ret_null: ; preds = %continue272, %cont197, %dispatch196, %continue174, %continue136, %ip64, %use_call, %ip48, %dispatch88, %continue57, %ip26, %dispatch, %continue, %continue6, %bail_out
ret %"struct.rubinius::Object"* null
method_body: ; preds = %bottom
%ip_pos = getelementptr %"struct.rubinius::CallFrame"* %call_frame, i32 0, i32 5 ; <i32*> [#uses=15]
%self_pos = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self = load %"struct.rubinius::Object"** %self_pos ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array = bitcast %"struct.rubinius::Object"* %self to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos = getelementptr %"struct.rubinius::Object"** %obj_array, i32 4 ; <%"struct.rubinius::Object"**> [#uses=1]
%field = load %"struct.rubinius::Object"** %field_pos ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos3 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field, %"struct.rubinius::Object"** %stack_pos3
%stack_pos4 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load = load %"struct.rubinius::Object"** %stack_pos4 ; <%"struct.rubinius::Object"*> [#uses=3]
%cast = ptrtoint %"struct.rubinius::Object"* %stack_load to i64 ; <i64> [#uses=1]
%masked = and i64 %cast, 3 ; <i64> [#uses=1]
%is_reference = icmp eq i64 %masked, 0 ; <i1> [#uses=1]
br i1 %is_reference, label %check_class_id, label %fallback
continue: ; preds = %continue7
%local_pos9 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_pos10 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load11 = load %"struct.rubinius::Object"** %stack_pos10 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load11, %"struct.rubinius::Object"** %local_pos9
%self_pos12 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self13 = load %"struct.rubinius::Object"** %self_pos12 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array14 = bitcast %"struct.rubinius::Object"* %self13 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos15 = getelementptr %"struct.rubinius::Object"** %obj_array14, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
%field16 = load %"struct.rubinius::Object"** %field_pos15 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos17 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field16, %"struct.rubinius::Object"** %stack_pos17
%local_pos18 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local = load %"struct.rubinius::Object"** %local_pos18 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos19 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local, %"struct.rubinius::Object"** %stack_pos19
%stack_pos20 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 7 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos20
%execute = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35563224 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos23 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load24 = load %"struct.rubinius::Object"** %stack_pos23 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load24, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 1, i32* %out_args_total
%stack_pos25 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"** %stack_pos25, %"struct.rubinius::Object"*** %out_args_arguments
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 13, i32* %ip_pos
%ic_send = call %"struct.rubinius::Object"* %execute(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35563224 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check27 = icmp eq %"struct.rubinius::Object"* %ic_send, null ; <i1> [#uses=1]
br i1 %null_check27, label %ret_null, label %continue26
check_class_id: ; preds = %method_body
%class_pos = getelementptr %"struct.rubinius::Object"* %stack_load, i32 0, i32 0, i32 1 ; <%"struct.rubinius::Class"**> [#uses=1]
%ref_class = load %"struct.rubinius::Class"** %class_pos ; <%"struct.rubinius::Class"*> [#uses=1]
%class_id_pos = getelementptr %"struct.rubinius::Class"* %ref_class, i32 0, i32 3 ; <i32*> [#uses=1]
%class_id = load i32* %class_id_pos ; <i32> [#uses=1]
%check_class_id5 = icmp eq i32 %class_id, 5 ; <i1> [#uses=1]
br i1 %check_class_id5, label %correct_class, label %fallback
correct_class: ; preds = %check_class_id
%prim_value = call %"struct.rubinius::Object"* @jit_stub_tuple_fields(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* %stack_load) ; <%"struct.rubinius::Object"*> [#uses=3]
%ptr2int = ptrtoint %"struct.rubinius::Object"* %prim_value to i64 ; <i64> [#uses=1]
%16 = icmp eq i64 %ptr2int, 34 ; <i1> [#uses=1]
br i1 %16, label %fallback, label %continue6
fallback: ; preds = %correct_class, %check_class_id, %method_body
store i32 2, i32* %ip_pos
%17 = call %"struct.rubinius::Object"* @rbx_continue_uncommon(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %args, i64 0) ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %17
continue6: ; preds = %correct_class
%null_check = icmp eq %"struct.rubinius::Object"* %prim_value, null ; <i1> [#uses=1]
br i1 %null_check, label %ret_null, label %continue7
continue7: ; preds = %continue6
%stack_pos8 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %prim_value, %"struct.rubinius::Object"** %stack_pos8
br label %continue
continue26: ; preds = %continue
%stack_pos28 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send, %"struct.rubinius::Object"** %stack_pos28
%stack_pos29 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load30 = load %"struct.rubinius::Object"** %stack_pos29 ; <%"struct.rubinius::Object"*> [#uses=2]
%stack_pos31 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load32 = load %"struct.rubinius::Object"** %stack_pos31 ; <%"struct.rubinius::Object"*> [#uses=2]
%cast33 = ptrtoint %"struct.rubinius::Object"* %stack_load30 to i64 ; <i64> [#uses=1]
%cast34 = ptrtoint %"struct.rubinius::Object"* %stack_load32 to i64 ; <i64> [#uses=1]
%both = and i64 %cast33, %cast34 ; <i64> [#uses=1]
%masked35 = and i64 %both, 1 ; <i64> [#uses=1]
%are_fixnums = icmp eq i64 %masked35, 1 ; <i1> [#uses=1]
br i1 %are_fixnums, label %fast, label %dispatch
fast: ; preds = %continue26
%imm_cmp = icmp sgt %"struct.rubinius::Object"* %stack_load30, %stack_load32 ; <i1> [#uses=1]
%select_bool = select i1 %imm_cmp, %"struct.rubinius::Object"* inttoptr (i64 18 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"* inttoptr (i64 10 to %"struct.rubinius::Object"*) ; <%"struct.rubinius::Object"*> [#uses=1]
br label %cont
dispatch: ; preds = %continue26
%stack_pos36 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store i32 16, i32* %ip_pos
%simple_send = call %"struct.rubinius::Object"* @rbx_simple_send(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* inttoptr (i64 2206 to %"struct.rubinius::Object"*), i64 1, %"struct.rubinius::Object"** %stack_pos36) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check37 = icmp eq %"struct.rubinius::Object"* %simple_send, null ; <i1> [#uses=1]
br i1 %null_check37, label %ret_null, label %cont
cont: ; preds = %fast, %dispatch
%compare = phi %"struct.rubinius::Object"* [ %simple_send, %dispatch ], [ %select_bool, %fast ] ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos38 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %compare, %"struct.rubinius::Object"** %stack_pos38
%stack_pos39 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load40 = load %"struct.rubinius::Object"** %stack_pos39 ; <%"struct.rubinius::Object"*> [#uses=1]
%as_int = ptrtoint %"struct.rubinius::Object"* %stack_load40 to i64 ; <i64> [#uses=1]
%and = and i64 %as_int, 15 ; <i64> [#uses=1]
%is_true = icmp eq i64 %and, 10 ; <i1> [#uses=1]
br i1 %is_true, label %ip24, label %continue41
continue41: ; preds = %cont
br label %ip20
ip20: ; preds = %continue41
%stack_pos42 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos42
%stack_pos43 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load44 = load %"struct.rubinius::Object"** %stack_pos43 ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %stack_load44
ip24: ; preds = %cont
%stack_pos45 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos45
br label %ip26
ip26: ; preds = %continue107, %ip24
%local_pos46 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local47 = load %"struct.rubinius::Object"** %local_pos46 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos48 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local47, %"struct.rubinius::Object"** %stack_pos48
%stack_pos49 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 5 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos49
%execute52 = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35563464 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos53 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load54 = load %"struct.rubinius::Object"** %stack_pos53 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load54, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 1, i32* %out_args_total
%stack_pos55 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"** %stack_pos55, %"struct.rubinius::Object"*** %out_args_arguments
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 29, i32* %ip_pos
%ic_send56 = call %"struct.rubinius::Object"* %execute52(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35563464 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check58 = icmp eq %"struct.rubinius::Object"* %ic_send56, null ; <i1> [#uses=1]
br i1 %null_check58, label %ret_null, label %continue57
continue57: ; preds = %ip26
%stack_pos59 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send56, %"struct.rubinius::Object"** %stack_pos59
%local_pos60 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_pos61 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load62 = load %"struct.rubinius::Object"** %stack_pos61 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load62, %"struct.rubinius::Object"** %local_pos60
%self_pos63 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self64 = load %"struct.rubinius::Object"** %self_pos63 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array65 = bitcast %"struct.rubinius::Object"* %self64 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos66 = getelementptr %"struct.rubinius::Object"** %obj_array65, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
%field67 = load %"struct.rubinius::Object"** %field_pos66 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos68 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field67, %"struct.rubinius::Object"** %stack_pos68
%local_pos69 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local70 = load %"struct.rubinius::Object"** %local_pos69 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos71 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local70, %"struct.rubinius::Object"** %stack_pos71
%stack_pos72 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 13 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos72
%execute75 = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35563584 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos76 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load77 = load %"struct.rubinius::Object"** %stack_pos76 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load77, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 1, i32* %out_args_total
%stack_pos78 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"** %stack_pos78, %"struct.rubinius::Object"*** %out_args_arguments
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 41, i32* %ip_pos
%ic_send79 = call %"struct.rubinius::Object"* %execute75(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35563584 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check81 = icmp eq %"struct.rubinius::Object"* %ic_send79, null ; <i1> [#uses=1]
br i1 %null_check81, label %ret_null, label %continue80
continue80: ; preds = %continue57
%stack_pos82 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send79, %"struct.rubinius::Object"** %stack_pos82
%stack_pos83 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load84 = load %"struct.rubinius::Object"** %stack_pos83 ; <%"struct.rubinius::Object"*> [#uses=2]
%stack_pos85 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load86 = load %"struct.rubinius::Object"** %stack_pos85 ; <%"struct.rubinius::Object"*> [#uses=2]
%cast90 = ptrtoint %"struct.rubinius::Object"* %stack_load84 to i64 ; <i64> [#uses=1]
%cast91 = ptrtoint %"struct.rubinius::Object"* %stack_load86 to i64 ; <i64> [#uses=1]
%both92 = and i64 %cast90, %cast91 ; <i64> [#uses=1]
%masked93 = and i64 %both92, 1 ; <i64> [#uses=1]
%are_fixnums94 = icmp eq i64 %masked93, 1 ; <i1> [#uses=1]
br i1 %are_fixnums94, label %fast87, label %dispatch88
fast87: ; preds = %continue80
%imm_cmp98 = icmp slt %"struct.rubinius::Object"* %stack_load84, %stack_load86 ; <i1> [#uses=1]
%select_bool99 = select i1 %imm_cmp98, %"struct.rubinius::Object"* inttoptr (i64 18 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"* inttoptr (i64 10 to %"struct.rubinius::Object"*) ; <%"struct.rubinius::Object"*> [#uses=1]
br label %cont89
dispatch88: ; preds = %continue80
%stack_pos95 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store i32 44, i32* %ip_pos
%simple_send96 = call %"struct.rubinius::Object"* @rbx_simple_send(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* inttoptr (i64 2198 to %"struct.rubinius::Object"*), i64 1, %"struct.rubinius::Object"** %stack_pos95) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check97 = icmp eq %"struct.rubinius::Object"* %simple_send96, null ; <i1> [#uses=1]
br i1 %null_check97, label %ret_null, label %cont89
cont89: ; preds = %fast87, %dispatch88
%addition = phi %"struct.rubinius::Object"* [ %simple_send96, %dispatch88 ], [ %select_bool99, %fast87 ] ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos100 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %addition, %"struct.rubinius::Object"** %stack_pos100
%stack_pos101 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load102 = load %"struct.rubinius::Object"** %stack_pos101 ; <%"struct.rubinius::Object"*> [#uses=1]
%as_int103 = ptrtoint %"struct.rubinius::Object"* %stack_load102 to i64 ; <i64> [#uses=1]
%and104 = and i64 %as_int103, 15 ; <i64> [#uses=1]
%is_true105 = icmp eq i64 %and104, 10 ; <i1> [#uses=1]
br i1 %is_true105, label %ip51, label %continue106
continue106: ; preds = %cont89
br label %ip48
ip48: ; preds = %continue106
store i32 48, i32* %ip_pos
%ci = call %"struct.rubinius::Object"* @rbx_check_interrupts(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame) ; <%"struct.rubinius::Object"*> [#uses=1]
%null_check108 = icmp eq %"struct.rubinius::Object"* %ci, null ; <i1> [#uses=1]
br i1 %null_check108, label %ret_null, label %continue107
continue107: ; preds = %ip48
br label %ip26
continue109: ; No predecessors!
br label %ip51
ip51: ; preds = %continue109, %cont89
%stack_pos110 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos110
%global_serial = load i64* inttoptr (i64 32663256 to i64*) ; <i64> [#uses=1]
%serial = load i64* inttoptr (i64 140409462604064 to i64*) ; <i64> [#uses=1]
%use_cache = icmp eq i64 %global_serial, %serial ; <i1> [#uses=1]
br i1 %use_cache, label %use_cache111, label %use_call
use_cache111: ; preds = %ip51
%cached_value = load %"struct.rubinius::Object"** inttoptr (i64 140409462604056 to %"struct.rubinius::Object"**; <%"struct.rubinius::Object"*> [#uses=1]
br label %continue112
use_call: ; preds = %ip51
store i32 53, i32* %ip_pos
%push_const_fast = call %"struct.rubinius::Object"* @rbx_push_const_fast(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* inttoptr (i64 1934 to %"struct.rubinius::Object"*), i32 9) nounwind readonly ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check114 = icmp eq %"struct.rubinius::Object"* %push_const_fast, null ; <i1> [#uses=1]
br i1 %null_check114, label %ret_null, label %continue113
continue112: ; preds = %continue113, %use_cache111
%constant = phi %"struct.rubinius::Object"* [ %cached_value, %use_cache111 ], [ %push_const_fast, %continue113 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos115 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %constant, %"struct.rubinius::Object"** %stack_pos115
%stack_pos116 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load117 = load %"struct.rubinius::Object"** %stack_pos116 ; <%"struct.rubinius::Object"*> [#uses=1]
store i32 56, i32* %ip_pos
%constant118 = call %"struct.rubinius::Object"* @rbx_find_const(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, i32 10, %"struct.rubinius::Object"* %stack_load117) ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos119 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %constant118, %"struct.rubinius::Object"** %stack_pos119
%stack_pos120 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load121 = load %"struct.rubinius::Object"** %stack_pos120 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos122 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %stack_load121, %"struct.rubinius::Object"** %stack_pos122
%stack_pos123 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load124 = load %"struct.rubinius::Object"** %stack_pos123 ; <%"struct.rubinius::Object"*> [#uses=1]
%cs = call %"struct.rubinius::Object"* @rbx_check_serial(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::InlineCache"* inttoptr (i64 35563824 to %"struct.rubinius::InlineCache"*), i32 47, %"struct.rubinius::Object"* %stack_load124) ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos125 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %cs, %"struct.rubinius::Object"** %stack_pos125
%stack_pos126 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load127 = load %"struct.rubinius::Object"** %stack_pos126 ; <%"struct.rubinius::Object"*> [#uses=1]
%as_int128 = ptrtoint %"struct.rubinius::Object"* %stack_load127 to i64 ; <i64> [#uses=1]
%and129 = and i64 %as_int128, 15 ; <i64> [#uses=1]
%is_true130 = icmp eq i64 %and129, 10 ; <i1> [#uses=1]
br i1 %is_true130, label %ip77, label %continue131
continue113: ; preds = %use_call
br label %continue112
continue131: ; preds = %continue112
br label %ip64
ip64: ; preds = %continue131
%execute132 = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35563944 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos133 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load134 = load %"struct.rubinius::Object"** %stack_pos133 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load134, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 0, i32* %out_args_total
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 65, i32* %ip_pos
%ic_send135 = call %"struct.rubinius::Object"* %execute132(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35563944 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check137 = icmp eq %"struct.rubinius::Object"* %ic_send135, null ; <i1> [#uses=1]
br i1 %null_check137, label %ret_null, label %continue136
continue136: ; preds = %ip64
%stack_pos138 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send135, %"struct.rubinius::Object"** %stack_pos138
%stack_pos139 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load140 = load %"struct.rubinius::Object"** %stack_pos139 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos141 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %stack_load140, %"struct.rubinius::Object"** %stack_pos141
%local_pos142 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local143 = load %"struct.rubinius::Object"** %local_pos142 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos144 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local143, %"struct.rubinius::Object"** %stack_pos144
%execute145 = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35564064 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos146 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load147 = load %"struct.rubinius::Object"** %stack_pos146 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load147, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 1, i32* %out_args_total
%stack_pos148 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"** %stack_pos148, %"struct.rubinius::Object"*** %out_args_arguments
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 71, i32* %ip_pos
%ic_send149 = call %"struct.rubinius::Object"* %execute145(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35564064 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check151 = icmp eq %"struct.rubinius::Object"* %ic_send149, null ; <i1> [#uses=1]
br i1 %null_check151, label %ret_null, label %continue150
continue150: ; preds = %continue136
%stack_pos152 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send149, %"struct.rubinius::Object"** %stack_pos152
br label %ip82
continue153: ; No predecessors!
br label %ip77
ip77: ; preds = %continue153, %continue112
%local_pos154 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local155 = load %"struct.rubinius::Object"** %local_pos154 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos156 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local155, %"struct.rubinius::Object"** %stack_pos156
%stack_pos159 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load160 = load %"struct.rubinius::Object"** %stack_pos159 ; <%"struct.rubinius::Object"*> [#uses=3]
%cast161 = ptrtoint %"struct.rubinius::Object"* %stack_load160 to i64 ; <i64> [#uses=1]
%masked162 = and i64 %cast161, 3 ; <i64> [#uses=1]
%is_reference163 = icmp eq i64 %masked162, 0 ; <i1> [#uses=1]
br i1 %is_reference163, label %check_class_id164, label %fallback157
continue158: ; preds = %continue176
br label %ip82
ip82: ; preds = %continue158, %continue150
%local_pos179 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_pos180 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load181 = load %"struct.rubinius::Object"** %stack_pos180 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load181, %"struct.rubinius::Object"** %local_pos179
%local_pos182 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%local183 = load %"struct.rubinius::Object"** %local_pos182 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos184 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local183, %"struct.rubinius::Object"** %stack_pos184
%self_pos185 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self186 = load %"struct.rubinius::Object"** %self_pos185 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array187 = bitcast %"struct.rubinius::Object"* %self186 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos188 = getelementptr %"struct.rubinius::Object"** %obj_array187, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
%field189 = load %"struct.rubinius::Object"** %field_pos188 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos190 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field189, %"struct.rubinius::Object"** %stack_pos190
%stack_pos191 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load192 = load %"struct.rubinius::Object"** %stack_pos191 ; <%"struct.rubinius::Object"*> [#uses=2]
%stack_pos193 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load194 = load %"struct.rubinius::Object"** %stack_pos193 ; <%"struct.rubinius::Object"*> [#uses=2]
%cast198 = ptrtoint %"struct.rubinius::Object"* %stack_load192 to i64 ; <i64> [#uses=1]
%cast199 = ptrtoint %"struct.rubinius::Object"* %stack_load194 to i64 ; <i64> [#uses=1]
%both200 = and i64 %cast198, %cast199 ; <i64> [#uses=1]
%masked201 = and i64 %both200, 1 ; <i64> [#uses=1]
%are_fixnums202 = icmp eq i64 %masked201, 1 ; <i1> [#uses=1]
br i1 %are_fixnums202, label %fast195, label %dispatch196
check_class_id164: ; preds = %ip77
%class_pos166 = getelementptr %"struct.rubinius::Object"* %stack_load160, i32 0, i32 0, i32 1 ; <%"struct.rubinius::Class"**> [#uses=1]
%ref_class167 = load %"struct.rubinius::Class"** %class_pos166 ; <%"struct.rubinius::Class"*> [#uses=1]
%class_id_pos168 = getelementptr %"struct.rubinius::Class"* %ref_class167, i32 0, i32 3 ; <i32*> [#uses=1]
%class_id169 = load i32* %class_id_pos168 ; <i32> [#uses=1]
%check_class_id170 = icmp eq i32 %class_id169, 14 ; <i1> [#uses=1]
br i1 %check_class_id170, label %correct_class165, label %fallback157
correct_class165: ; preds = %check_class_id164
%stack_pos171 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load172 = load %"struct.rubinius::Object"** %stack_pos171 ; <%"struct.rubinius::Object"*> [#uses=1]
%prim_value173 = call %"struct.rubinius::Object"* @jit_stub_tuple_allocate(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* %stack_load160, %"struct.rubinius::Object"* %stack_load172) ; <%"struct.rubinius::Object"*> [#uses=3]
%ptr2int175 = ptrtoint %"struct.rubinius::Object"* %prim_value173 to i64 ; <i64> [#uses=1]
%18 = icmp eq i64 %ptr2int175, 34 ; <i1> [#uses=1]
br i1 %18, label %fallback157, label %continue174
fallback157: ; preds = %correct_class165, %check_class_id164, %ip77
store i32 79, i32* %ip_pos
%19 = call %"struct.rubinius::Object"* @rbx_continue_uncommon(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %args, i64 1) ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %19
continue174: ; preds = %correct_class165
%null_check177 = icmp eq %"struct.rubinius::Object"* %prim_value173, null ; <i1> [#uses=1]
br i1 %null_check177, label %ret_null, label %continue176
continue176: ; preds = %continue174
%stack_pos178 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %prim_value173, %"struct.rubinius::Object"** %stack_pos178
br label %continue158
fast195: ; preds = %ip82
%as_int206 = ptrtoint %"struct.rubinius::Object"* %stack_load192 to i64 ; <i64> [#uses=1]
%lshr = lshr i64 %as_int206, 1 ; <i64> [#uses=1]
%stripped = trunc i64 %lshr to i63 ; <i63> [#uses=1]
%as_int207 = ptrtoint %"struct.rubinius::Object"* %stack_load194 to i64 ; <i64> [#uses=1]
%lshr208 = lshr i64 %as_int207, 1 ; <i64> [#uses=1]
%stripped209 = trunc i64 %lshr208 to i63 ; <i63> [#uses=1]
%sub.overflow = call %0 @llvm.ssub.with.overflow.i31(i63 %stripped, i63 %stripped209) ; <%0> [#uses=2]
%sub = extractvalue %0 %sub.overflow, 0 ; <i63> [#uses=1]
%did_overflow = extractvalue %0 %sub.overflow, 1 ; <i1> [#uses=1]
br i1 %did_overflow, label %dispatch196, label %tagnow
dispatch196: ; preds = %fast195, %ip82
%stack_pos203 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store i32 89, i32* %ip_pos
%simple_send204 = call %"struct.rubinius::Object"* @rbx_simple_send(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* inttoptr (i64 2166 to %"struct.rubinius::Object"*), i64 1, %"struct.rubinius::Object"** %stack_pos203) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check205 = icmp eq %"struct.rubinius::Object"* %simple_send204, null ; <i1> [#uses=1]
br i1 %null_check205, label %ret_null, label %cont197
cont197: ; preds = %tagnow, %dispatch196
%subtraction = phi %"struct.rubinius::Object"* [ %simple_send204, %dispatch196 ], [ %as_obj, %tagnow ] ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos210 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %subtraction, %"struct.rubinius::Object"** %stack_pos210
%stack_pos211 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* inttoptr (i64 5 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %stack_pos211
%execute214 = load %"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)** getelementptr (%"struct.rubinius::InlineCache"* inttoptr (i64 35564424 to %"struct.rubinius::InlineCache"*), i32 0, i32 3) ; <%"struct.rubinius::Object"* (%"struct.rubinius::VM"*, %"struct.rubinius::InlineCache"*, %"struct.rubinius::CallFrame"*, %"struct.rubinius::Arguments"*)*> [#uses=1]
%stack_pos215 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load216 = load %"struct.rubinius::Object"** %stack_pos215 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load216, %"struct.rubinius::Object"** %out_args_recv
store %"struct.rubinius::Object"* inttoptr (i64 26 to %"struct.rubinius::Object"*), %"struct.rubinius::Object"** %out_args_block
store i32 1, i32* %out_args_total
%stack_pos217 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"** %stack_pos217, %"struct.rubinius::Object"*** %out_args_arguments
store %"struct.rubinius::Array"* null, %"struct.rubinius::Array"** %out_args_array
store i32 92, i32* %ip_pos
%ic_send218 = call %"struct.rubinius::Object"* %execute214(%"struct.rubinius::VM"* %state, %"struct.rubinius::InlineCache"* inttoptr (i64 35564424 to %"struct.rubinius::InlineCache"*), %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %out_args) ; <%"struct.rubinius::Object"*> [#uses=2]
%null_check220 = icmp eq %"struct.rubinius::Object"* %ic_send218, null ; <i1> [#uses=1]
br i1 %null_check220, label %ret_null, label %continue219
tagnow: ; preds = %fast195
%as_native_int = zext i63 %sub to i64 ; <i64> [#uses=1]
%shl = shl i64 %as_native_int, 1 ; <i64> [#uses=1]
%or = or i64 %shl, 1 ; <i64> [#uses=1]
%as_obj = inttoptr i64 %or to %"struct.rubinius::Object"* ; <%"struct.rubinius::Object"*> [#uses=1]
br label %cont197
continue219: ; preds = %cont197
%stack_pos221 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %ic_send218, %"struct.rubinius::Object"** %stack_pos221
%local_pos222 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_pos223 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load224 = load %"struct.rubinius::Object"** %stack_pos223 ; <%"struct.rubinius::Object"*> [#uses=1]
store %"struct.rubinius::Object"* %stack_load224, %"struct.rubinius::Object"** %local_pos222
%local_pos225 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%local226 = load %"struct.rubinius::Object"** %local_pos225 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos227 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local226, %"struct.rubinius::Object"** %stack_pos227
%self_pos228 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self229 = load %"struct.rubinius::Object"** %self_pos228 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array230 = bitcast %"struct.rubinius::Object"* %self229 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos231 = getelementptr %"struct.rubinius::Object"** %obj_array230, i32 4 ; <%"struct.rubinius::Object"**> [#uses=1]
%field232 = load %"struct.rubinius::Object"** %field_pos231 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos233 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field232, %"struct.rubinius::Object"** %stack_pos233
%self_pos234 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self235 = load %"struct.rubinius::Object"** %self_pos234 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array236 = bitcast %"struct.rubinius::Object"* %self235 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos237 = getelementptr %"struct.rubinius::Object"** %obj_array236, i32 5 ; <%"struct.rubinius::Object"**> [#uses=1]
%field238 = load %"struct.rubinius::Object"** %field_pos237 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos239 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field238, %"struct.rubinius::Object"** %stack_pos239
%self_pos240 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self241 = load %"struct.rubinius::Object"** %self_pos240 ; <%"struct.rubinius::Object"*> [#uses=1]
%obj_array242 = bitcast %"struct.rubinius::Object"* %self241 to %"struct.rubinius::Object"** ; <%"struct.rubinius::Object"**> [#uses=1]
%field_pos243 = getelementptr %"struct.rubinius::Object"** %obj_array242, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
%field244 = load %"struct.rubinius::Object"** %field_pos243 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos245 = getelementptr %"struct.rubinius::Object"** %stack, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %field244, %"struct.rubinius::Object"** %stack_pos245
%local_pos246 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%local247 = load %"struct.rubinius::Object"** %local_pos246 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos248 = getelementptr %"struct.rubinius::Object"** %stack, i32 4 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local247, %"struct.rubinius::Object"** %stack_pos248
%stack_pos251 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load252 = load %"struct.rubinius::Object"** %stack_pos251 ; <%"struct.rubinius::Object"*> [#uses=3]
%cast253 = ptrtoint %"struct.rubinius::Object"* %stack_load252 to i64 ; <i64> [#uses=1]
%masked254 = and i64 %cast253, 3 ; <i64> [#uses=1]
%is_reference255 = icmp eq i64 %masked254, 0 ; <i1> [#uses=1]
br i1 %is_reference255, label %check_class_id256, label %fallback249
continue250: ; preds = %continue274
%local_pos277 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%local278 = load %"struct.rubinius::Object"** %local_pos277 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos279 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local278, %"struct.rubinius::Object"** %stack_pos279
%20 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self280 = load %"struct.rubinius::Object"** %20 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos281 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load282 = load %"struct.rubinius::Object"** %stack_pos281 ; <%"struct.rubinius::Object"*> [#uses=1]
%field283 = call %"struct.rubinius::Object"* @rbx_set_my_field(%"struct.rubinius::VM"* %state, %"struct.rubinius::Object"* %self280, i32 2, %"struct.rubinius::Object"* %stack_load282) ; <%"struct.rubinius::Object"*> [#uses=0]
%local_pos284 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 5, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%local285 = load %"struct.rubinius::Object"** %local_pos284 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos286 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %local285, %"struct.rubinius::Object"** %stack_pos286
%21 = getelementptr %"struct.rubinius::StackVariables"* %vars, i32 0, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%self287 = load %"struct.rubinius::Object"** %21 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos288 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load289 = load %"struct.rubinius::Object"** %stack_pos288 ; <%"struct.rubinius::Object"*> [#uses=1]
%field290 = call %"struct.rubinius::Object"* @rbx_set_my_field(%"struct.rubinius::VM"* %state, %"struct.rubinius::Object"* %self287, i32 1, %"struct.rubinius::Object"* %stack_load289) ; <%"struct.rubinius::Object"*> [#uses=0]
%stack_pos291 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load292 = load %"struct.rubinius::Object"** %stack_pos291 ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %stack_load292
check_class_id256: ; preds = %continue219
%class_pos258 = getelementptr %"struct.rubinius::Object"* %stack_load252, i32 0, i32 0, i32 1 ; <%"struct.rubinius::Class"**> [#uses=1]
%ref_class259 = load %"struct.rubinius::Class"** %class_pos258 ; <%"struct.rubinius::Class"*> [#uses=1]
%class_id_pos260 = getelementptr %"struct.rubinius::Class"* %ref_class259, i32 0, i32 3 ; <i32*> [#uses=1]
%class_id261 = load i32* %class_id_pos260 ; <i32> [#uses=1]
%check_class_id262 = icmp eq i32 %class_id261, 5 ; <i1> [#uses=1]
br i1 %check_class_id262, label %correct_class257, label %fallback249
correct_class257: ; preds = %check_class_id256
%stack_pos263 = getelementptr %"struct.rubinius::Object"** %stack, i32 1 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load264 = load %"struct.rubinius::Object"** %stack_pos263 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos265 = getelementptr %"struct.rubinius::Object"** %stack, i32 2 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load266 = load %"struct.rubinius::Object"** %stack_pos265 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos267 = getelementptr %"struct.rubinius::Object"** %stack, i32 3 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load268 = load %"struct.rubinius::Object"** %stack_pos267 ; <%"struct.rubinius::Object"*> [#uses=1]
%stack_pos269 = getelementptr %"struct.rubinius::Object"** %stack, i32 4 ; <%"struct.rubinius::Object"**> [#uses=1]
%stack_load270 = load %"struct.rubinius::Object"** %stack_pos269 ; <%"struct.rubinius::Object"*> [#uses=1]
%prim_value271 = call %"struct.rubinius::Object"* @jit_stub_tuple_copy_from(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Object"* %stack_load252, %"struct.rubinius::Object"* %stack_load264, %"struct.rubinius::Object"* %stack_load266, %"struct.rubinius::Object"* %stack_load268, %"struct.rubinius::Object"* %stack_load270) ; <%"struct.rubinius::Object"*> [#uses=3]
%ptr2int273 = ptrtoint %"struct.rubinius::Object"* %prim_value271 to i64 ; <i64> [#uses=1]
%22 = icmp eq i64 %ptr2int273, 34 ; <i1> [#uses=1]
br i1 %22, label %fallback249, label %continue272
fallback249: ; preds = %correct_class257, %check_class_id256, %continue219
store i32 108, i32* %ip_pos
%23 = call %"struct.rubinius::Object"* @rbx_continue_uncommon(%"struct.rubinius::VM"* %state, %"struct.rubinius::CallFrame"* %call_frame, %"struct.rubinius::Arguments"* %args, i64 4) ; <%"struct.rubinius::Object"*> [#uses=1]
ret %"struct.rubinius::Object"* %23
continue272: ; preds = %correct_class257
%null_check275 = icmp eq %"struct.rubinius::Object"* %prim_value271, null ; <i1> [#uses=1]
br i1 %null_check275, label %ret_null, label %continue274
continue274: ; preds = %continue272
%stack_pos276 = getelementptr %"struct.rubinius::Object"** %stack, i32 0 ; <%"struct.rubinius::Object"**> [#uses=1]
store %"struct.rubinius::Object"* %prim_value271, %"struct.rubinius::Object"** %stack_pos276
br label %continue250
ret_null293: ; preds = %bottom
ret %"struct.rubinius::Object"* null
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment