MainBlock:
%right_addr.i16 = alloca i64, align 8 ; <i64*> [#uses=2]
%right_addr.i5 = alloca i64, align 8 ; <i64*> [#uses=2]
%right_addr.i = alloca i64, align 8 ; <i64*> [#uses=2]
%argv = alloca i64, align 8 ; <i64*> [#uses=2]
%0 = load i8* @2 ; <i8> [#uses=1]
store i64 1, i64* %right_addr.i
%1 = icmp eq
i8 %0, 0 ; <i1> [#uses=1]
br i1 %1, label %bb.i, label %bb19.i
bb.i: ; preds = %MainBlock
%2 = and i64 %n, 1 ; <i64> [#uses=1]
%toBool.i = icmp eq
i64 %2, 0 ; <i1> [#uses=1]
br i1 %toBool.i, label %bb19.i, label %bb1.i
bb1.i: ; preds = %bb.i
%3 = and i64 %n, 3 ; <i64> [#uses=1]
switch i64 %3, label %bb11.i [
]
bb4.i: ; preds = %bb1.i
%4 = ashr i64 %n, 2 ; <i64> [#uses=1]
%5 = icmp sgt
i64 %4, 0 ; <i1> [#uses=1]
%iftmp.323.0.i = select i1 %5, i64 0, i64 2 ; <i64> [#uses=1]
br label %vm_fast_le.exit
bb10.i: ; preds = %bb1.i
%6 = and i64 %n, -4 ; <i64> [#uses=1]
%tmp1.i.i = bitcast i64 %6 to double ; <double> [#uses=1]
br label %bb12.i
bb11.i: ; preds = %bb1.i
%7 = ashr i64 %n, 2 ; <i64> [#uses=1]
%8 = sitofp i64 %7 to double ; <double> [#uses=1]
br label %bb12.i
bb12.i: ; preds = %bb11.i, %bb10.i
%iftmp.328.0.i = phi double [ %tmp1.i.i, %bb10.i ], [ %8, %bb11.i ] ; <double> [#uses=1]
%9 = fcmp ugt double %iftmp.328.0.i, 0.000000e+00 ; <i1> [#uses=1]
%iftmp.327.0.i = select i1 %9, i64 0, i64 2 ; <i64> [#uses=1]
br label %vm_fast_le.exit
bb19.i: ; preds = %bb.i, %MainBlock
%10 = load %struct.objc_selector** @selLE, align 8 ; <%struct.objc_selector*> [#uses=1]
%11 = bitcast %struct.objc_selector* %10 to i8* ; <i8*> [#uses=1]
br label %vm_fast_le.exit
vm_fast_le.exit: ; preds = %bb4.i, %bb12.i, %bb19.i
%13 = phi i64 [ %12, %bb19.i ], [ %iftmp.327.0.i, %bb12.i ], [ %iftmp.323.0.i, %bb4.i ] ; <i64> [#uses=1]
switch i64 %13, label %then [
]
then: ; preds = %vm_fast_le.exit
%15 = and i64 %self, 3 ; <i64> [#uses=1]
switch i64 %15, label %bb4.i.i.i [
i64 1, label %then.vm_dispatch.exit_crit_edge
i64 3, label %bb2.i.i.vm_class_of.exit_crit_edge.i
]
then.vm_dispatch.exit_crit_edge: ; preds = %then
br label %vm_dispatch.exit
bb2.i.i.vm_class_of.exit_crit_edge.i: ; preds = %then
br label %vm_dispatch.exit
bb4.i.i.i: ; preds = %then
%16 = icmp eq
i64 %self, 2 ; <i1> [#uses=1]
br i1 %16, label %bb4.i.i.i.vm_dispatch.exit_crit_edge, label %bb12.i.i.i
bb4.i.i.i.vm_dispatch.exit_crit_edge: ; preds = %bb4.i.i.i
br label %vm_dispatch.exit
bb7.i.i.i: ; preds = %then
%17 = and i64 %self, -5 ; <i64> [#uses=1]
%18 = icmp eq
i64 %17, 0 ; <i1> [#uses=1]
br i1 %18, label %bb8.i.i.i, label %bb12.i.i.i
bb8.i.i.i: ; preds = %bb7.i.i.i
switch i64 %self, label %bb12.i.i.i [
i64 4, label %bb8.i.i.i.vm_dispatch.exit_crit_edge
]
bb8.i.i.i.vm_dispatch.exit_crit_edge: ; preds = %bb8.i.i.i
br label %vm_dispatch.exit
bb11.i.i.i: ; preds = %bb8.i.i.i
br label %vm_dispatch.exit
bb12.i.i.i: ; preds = %bb8.i.i.i, %bb7.i.i.i, %bb4.i.i.i
%19 = inttoptr i64 %self to %struct.RBasic* ; <%struct.RBasic*> [#uses=1]
%20 = bitcast %struct.RBasic* %19 to i64* ; <i64*> [#uses=1]
br label %vm_dispatch.exit
vm_dispatch.exit: ; preds = %bb8.i.i.i.vm_dispatch.exit_crit_edge, %bb4.i.i.i.vm_dispatch.exit_crit_edge, %then.vm_dispatch.exit_crit_edge, %bb2.i.i.vm_class_of.exit_crit_edge.i, %bb11.i.i.i, %bb12.i.i.i
%.0.in.i.i.i = phi i64* [ %20, %bb12.i.i.i ], [ @rb_cFalseClass, %bb11.i.i.i ], [ @rb_cFloat, %bb2.i.i.vm_class_of.exit_crit_edge.i ], [ @rb_cFixnum, %then.vm_dispatch.exit_crit_edge ], [ @rb_cTrueClass, %bb4.i.i.i.vm_dispatch.exit_crit_edge ], [ @rb_cNilClass, %bb8.i.i.i.vm_dispatch.exit_crit_edge ] ; <i64*> [#uses=1]
%.0.i.i.i = load i64* %.0.in.i.i.i, align 8 ; <i64> [#uses=2]
%21 = inttoptr i64 %.0.i.i.i to %struct.objc_class* ; <%struct.objc_class*> [#uses=1]
%22 = lshr i64 %.0.i.i.i, 3 ; <i64> [#uses=1]
%23 = and i64 %22, 4095 ; <i64> [#uses=1]
%24 = xor i64 %23, 3209 ; <i64> [#uses=1]
%25 = call %struct.mcache* @rb_vm_get_mcache(i8* %14) nounwind readnone ; <%struct.mcache*> [#uses=1]
%26 = getelementptr inbounds %struct.mcache* %25, i64 %24 ; <%struct.mcache*> [#uses=1]
%27 = call i64 @rb_vm_dispatch(i8* %14, %struct.mcache* %26, i64 %self, i64 %self, %struct.objc_class* %21, %struct.objc_selector* inttoptr (i64 140735464385673 to %struct.objc_selector*), %struct.rb_vm_block_t* null, i8 zeroext 1, i32 0, i64* null) ; <i64> [#uses=1]
merge: ; preds = %vm_fast_le.exit, %vm_fast_le.exit
%28 = load i8* @3 ; <i8> [#uses=1]
%29 = icmp eq
i8 %28, 0 ; <i1> [#uses=1]
%30 = load i8* @4 ; <i8> [#uses=2]
br i1 %29, label %op_not_redef, label %op_dispatch
op_not_redef: ; preds = %merge
%31 = icmp eq
i8 %30, 0 ; <i1> [#uses=1]
br i1 %31, label %bb.i7, label %bb19.i15
bb.i7: ; preds = %op_not_redef
%32 = and i64 %n, 1 ; <i64> [#uses=1]
%toBool.i6 = icmp eq
i64 %32, 0 ; <i1> [#uses=1]
br i1 %toBool.i6, label %bb19.i15, label %bb1.i8
%33 = and i64 %n, 3 ; <i64> [#uses=1]
switch i64 %33, label %bb12.i12 [
]
bb4.i9: ; preds = %bb1.i8
%34 = ashr i64 %n, 2 ; <i64> [#uses=1]
%.off.i = add i64 %34, 2305843009213693951 ; <i64> [#uses=1]
%35 = icmp ult
i64 %.off.i, 4611686018427387904 ; <i1> [#uses=1]
br i1 %35, label %bb7.i, label %bb19.i15
bb7.i: ; preds = %bb4.i9
%36 = add i64 %n, -4 ; <i64> [#uses=1]
%37 = and i64 %36, -4 ; <i64> [#uses=1]
%38 = or i64 %37, 1 ; <i64> [#uses=1]
br label %vm_fast_minus.exit
bb11.i11: ; preds = %bb1.i8
%39 = and i64 %n, -4 ; <i64> [#uses=1]
%tmp1.i.i10 = bitcast i64 %39 to double ; <double> [#uses=1]
br label %bb13.i
bb12.i12: ; preds = %bb1.i8
%40 = ashr i64 %n, 2 ; <i64> [#uses=1]
%41 = sitofp i64 %40 to double ; <double> [#uses=1]
br label %bb13.i
bb13.i: ; preds = %bb12.i12, %bb11.i11
%iftmp.261.0.i = phi double [ %tmp1.i.i10, %bb11.i11 ], [ %41, %bb12.i12 ] ; <double> [#uses=1]
%42 = fadd double %iftmp.261.0.i, -1.000000e+00 ; <double> [#uses=1]
%tmp1.i = bitcast double %42 to i64 ; <i64> [#uses=1]
%43 = or i64 %tmp1.i, 3 ; <i64> [#uses=1]
br label %vm_fast_minus.exit
bb19.i15: ; preds = %bb4.i9, %bb.i7, %op_not_redef
%44 = load %struct.objc_selector** @selMINUS, align 8 ; <%struct.objc_selector*> [#uses=1]
%45 = bitcast %struct.objc_selector* %44 to i8* ; <i8*> [#uses=1]
br label %vm_fast_minus.exit
vm_fast_minus.exit: ; preds = %bb7.i, %bb13.i, %bb19.i15
%47 = phi i64 [ %46, %bb19.i15 ], [ %43, %bb13.i ], [ %38, %bb7.i ] ; <i64> [#uses=1]
op_dispatch: ; preds = %merge
%49 = icmp eq
i8 %30, 0 ; <i1> [#uses=1]
br i1 %49, label %bb.i18, label %bb19.i32
bb.i18: ; preds = %op_dispatch
%50 = and i64 %n, 1 ; <i64> [#uses=1]
%toBool.i17 = icmp eq
i64 %50, 0 ; <i1> [#uses=1]
bb1.i19: ; preds = %bb.i18
%51 = and i64 %n, 3 ; <i64> [#uses=1]
switch i64 %51, label %bb12.i25 [
]
bb4.i20: ; preds = %bb1.i19
%52 = ashr i64 %n, 2 ; <i64> [#uses=1]
%.off.i21 = add i64 %52, 2305843009213693951 ; <i64> [#uses=1]
%53 = icmp ult
i64 %.off.i21, 4611686018427387904 ; <i1> [#uses=1]
br i1 %53, label %bb7.i22, label %bb19.i32
bb7.i22: ; preds = %bb4.i20
%54 = add i64 %n, -4 ; <i64> [#uses=1]
%55 = and i64 %54, -4 ; <i64> [#uses=1]
%56 = or i64 %55, 1 ; <i64> [#uses=1]
br label %vm_fast_minus.exit33
bb11.i24: ; preds = %bb1.i19
%57 = and i64 %n, -4 ; <i64> [#uses=1]
%tmp1.i.i23 = bitcast i64 %57 to double ; <double> [#uses=1]
bb12.i25: ; preds = %bb1.i19
%58 = ashr i64 %n, 2 ; <i64> [#uses=1]
%59 = sitofp i64 %58 to double ; <double> [#uses=1]
bb13.i27: ; preds = %bb12.i25, %bb11.i24
%iftmp.261.0.i26 = phi double [ %tmp1.i.i23, %bb11.i24 ], [ %59, %bb12.i25 ] ; <double> [#uses=1]
%60 = fadd double %iftmp.261.0.i26, -1.000000e+00 ; <double> [#uses=1]
%tmp1.i30 = bitcast double %60 to i64 ; <i64> [#uses=1]
%61 = or i64 %tmp1.i30, 3 ; <i64> [#uses=1]
br label %vm_fast_minus.exit33
bb19.i32: ; preds = %bb4.i20, %bb.i18, %op_dispatch
%62 = load %struct.objc_selector** @selMINUS, align 8 ; <%struct.objc_selector*> [#uses=1]
%63 = bitcast %struct.objc_selector* %62 to i8* ; <i8*> [#uses=1]
br label %vm_fast_minus.exit33
vm_fast_minus.exit33: ; preds = %bb7.i22, %bb13.i27, %bb19.i32
%65 = phi i64 [ %64, %bb19.i32 ], [ %61, %bb13.i27 ], [ %56, %bb7.i22 ] ; <i64> [#uses=1]
%67 = and i64 %self, 3 ; <i64> [#uses=1]
switch i64 %67, label %bb4.i.i.i44 [
i64 1, label %vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge
i64 3, label %bb2.i.i.vm_class_of.exit_crit_edge.i43
]
vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge: ; preds = %vm_fast_minus.exit33
br label %vm_dispatch.exit54
bb2.i.i.vm_class_of.exit_crit_edge.i43: ; preds = %vm_fast_minus.exit33
br label %vm_dispatch.exit54
bb4.i.i.i44: ; preds = %vm_fast_minus.exit33
%68 = icmp eq
i64 %self, 2 ; <i1> [#uses=1]
br i1 %68, label %bb4.i.i.i44.vm_dispatch.exit54_crit_edge, label %bb12.i.i.i50
bb4.i.i.i44.vm_dispatch.exit54_crit_edge: ; preds = %bb4.i.i.i44
br label %vm_dispatch.exit54
bb7.i.i.i46: ; preds = %vm_fast_minus.exit33
%69 = and i64 %self, -5 ; <i64> [#uses=1]
%70 = icmp eq
i64 %69, 0 ; <i1> [#uses=1]
br i1 %70, label %bb8.i.i.i47, label %bb12.i.i.i50
bb8.i.i.i47: ; preds = %bb7.i.i.i46
switch i64 %self, label %bb12.i.i.i50 [
i64 4, label %bb8.i.i.i47.vm_dispatch.exit54_crit_edge
]
bb8.i.i.i47.vm_dispatch.exit54_crit_edge: ; preds = %bb8.i.i.i47
br label %vm_dispatch.exit54
bb11.i.i.i49: ; preds = %bb8.i.i.i47
br label %vm_dispatch.exit54
bb12.i.i.i50: ; preds = %bb8.i.i.i47, %bb7.i.i.i46, %bb4.i.i.i44
%71 = inttoptr i64 %self to %struct.RBasic* ; <%struct.RBasic*> [#uses=1]
%72 = bitcast %struct.RBasic* %71 to i64* ; <i64*> [#uses=1]
br label %vm_dispatch.exit54
vm_dispatch.exit54: ; preds = %bb8.i.i.i47.vm_dispatch.exit54_crit_edge, %bb4.i.i.i44.vm_dispatch.exit54_crit_edge, %vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge, %bb2.i.i.vm_class_of.exit_crit_edge.i43, %bb11.i.i.i49, %bb12.i.i.i50
%.0.in.i.i.i51 = phi i64* [ %72, %bb12.i.i.i50 ], [ @rb_cFalseClass, %bb11.i.i.i49 ], [ @rb_cFloat, %bb2.i.i.vm_class_of.exit_crit_edge.i43 ], [ @rb_cFixnum, %vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge ], [ @rb_cTrueClass, %bb4.i.i.i44.vm_dispatch.exit54_crit_edge ], [ @rb_cNilClass, %bb8.i.i.i47.vm_dispatch.exit54_crit_edge ] ; <i64*> [#uses=1]
%.0.i.i.i52 = load i64* %.0.in.i.i.i51, align 8 ; <i64> [#uses=2]
%73 = inttoptr i64 %.0.i.i.i52 to %struct.objc_class* ; <%struct.objc_class*> [#uses=1]
%74 = lshr i64 %.0.i.i.i52, 3 ; <i64> [#uses=1]
%75 = and i64 %74, 4095 ; <i64> [#uses=1]
%76 = xor i64 %75, 1088 ; <i64> [#uses=1]
%77 = call %struct.mcache* @rb_vm_get_mcache(i8* %66) nounwind readnone ; <%struct.mcache*> [#uses=1]
%78 = getelementptr inbounds %struct.mcache* %77, i64 %76 ; <%struct.mcache*> [#uses=1]
%79 = call i64 @rb_vm_dispatch(i8* %66, %struct.mcache* %78, i64 %self, i64 %self, %struct.objc_class* %73, %struct.objc_selector* inttoptr (i64 140590543475776 to %struct.objc_selector*), %struct.rb_vm_block_t* null, i8 zeroext 2, i32 1, i64* %argv) ; <i64> [#uses=1]
}