Advertisement
Guest User

Untitled

a guest
Aug 15th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
LLVM 15.36 KB | None | 0 0
  1. define internal i64 @ruby_scope2(i64 %self, i8* %sel, i64 %n) {
  2. MainBlock:
  3.   %right_addr.i16 = alloca i64, align 8           ; <i64*> [#uses=2]
  4.   %right_addr.i5 = alloca i64, align 8            ; <i64*> [#uses=2]
  5.   %right_addr.i = alloca i64, align 8             ; <i64*> [#uses=2]
  6.   %argv = alloca i64, align 8                     ; <i64*> [#uses=2]
  7.   store i8 0, i8* @3
  8.   %0 = load i8* @2                                ; <i8> [#uses=1]
  9.   store i64 1, i64* %right_addr.i
  10.   %1 = icmp eq i8 %0, 0                           ; <i1> [#uses=1]
  11.   br i1 %1, label %bb.i, label %bb19.i
  12.  
  13. bb.i:                                             ; preds = %MainBlock
  14.   %2 = and i64 %n, 1                              ; <i64> [#uses=1]
  15.   %toBool.i = icmp eq i64 %2, 0                   ; <i1> [#uses=1]
  16.   br i1 %toBool.i, label %bb19.i, label %bb1.i
  17.  
  18. bb1.i:                                            ; preds = %bb.i
  19.   %3 = and i64 %n, 3                              ; <i64> [#uses=1]
  20.   switch i64 %3, label %bb11.i [
  21.     i64 1, label %bb4.i
  22.     i64 3, label %bb10.i
  23.   ]
  24.  
  25. bb4.i:                                            ; preds = %bb1.i
  26.   %4 = ashr i64 %n, 2                             ; <i64> [#uses=1]
  27.   %5 = icmp sgt i64 %4, 0                         ; <i1> [#uses=1]
  28.   %iftmp.323.0.i = select i1 %5, i64 0, i64 2     ; <i64> [#uses=1]
  29.   br label %vm_fast_le.exit
  30.  
  31. bb10.i:                                           ; preds = %bb1.i
  32.   %6 = and i64 %n, -4                             ; <i64> [#uses=1]
  33.   %tmp1.i.i = bitcast i64 %6 to double            ; <double> [#uses=1]
  34.   br label %bb12.i
  35.  
  36. bb11.i:                                           ; preds = %bb1.i
  37.   %7 = ashr i64 %n, 2                             ; <i64> [#uses=1]
  38.   %8 = sitofp i64 %7 to double                    ; <double> [#uses=1]
  39.   br label %bb12.i
  40.  
  41. bb12.i:                                           ; preds = %bb11.i, %bb10.i
  42.   %iftmp.328.0.i = phi double [ %tmp1.i.i, %bb10.i ], [ %8, %bb11.i ] ; <double> [#uses=1]
  43.   %9 = fcmp ugt double %iftmp.328.0.i, 0.000000e+00 ; <i1> [#uses=1]
  44.   %iftmp.327.0.i = select i1 %9, i64 0, i64 2     ; <i64> [#uses=1]
  45.   br label %vm_fast_le.exit
  46.  
  47. bb19.i:                                           ; preds = %bb.i, %MainBlock
  48.   %10 = load %struct.objc_selector** @selLE, align 8 ; <%struct.objc_selector*> [#uses=1]
  49.   %11 = bitcast %struct.objc_selector* %10 to i8* ; <i8*> [#uses=1]
  50.   %12 = call i64 @vm_dispatch(i64 0, i64 %n, i8* %11, i8* null, i8 zeroext 0, i32 1, i64* %right_addr.i) ; <i64> [#uses=1]
  51.   br label %vm_fast_le.exit
  52.  
  53. vm_fast_le.exit:                                  ; preds = %bb4.i, %bb12.i, %bb19.i
  54.   %13 = phi i64 [ %12, %bb19.i ], [ %iftmp.327.0.i, %bb12.i ], [ %iftmp.323.0.i, %bb4.i ] ; <i64> [#uses=1]
  55.   switch i64 %13, label %then [
  56.     i64 0, label %merge
  57.     i64 4, label %merge
  58.   ]
  59.  
  60. then:                                             ; preds = %vm_fast_le.exit
  61.   %14 = call i8* @rb_vm_current_vm() nounwind readnone ; <i8*> [#uses=2]
  62.   %15 = and i64 %self, 3                          ; <i64> [#uses=1]
  63.   switch i64 %15, label %bb4.i.i.i [
  64.     i64 0, label %bb7.i.i.i
  65.     i64 1, label %then.vm_dispatch.exit_crit_edge
  66.     i64 3, label %bb2.i.i.vm_class_of.exit_crit_edge.i
  67.   ]
  68.  
  69. then.vm_dispatch.exit_crit_edge:                  ; preds = %then
  70.   br label %vm_dispatch.exit
  71.  
  72. bb2.i.i.vm_class_of.exit_crit_edge.i:             ; preds = %then
  73.   br label %vm_dispatch.exit
  74.  
  75. bb4.i.i.i:                                        ; preds = %then
  76.   %16 = icmp eq i64 %self, 2                      ; <i1> [#uses=1]
  77.   br i1 %16, label %bb4.i.i.i.vm_dispatch.exit_crit_edge, label %bb12.i.i.i
  78.  
  79. bb4.i.i.i.vm_dispatch.exit_crit_edge:             ; preds = %bb4.i.i.i
  80.   br label %vm_dispatch.exit
  81.  
  82. bb7.i.i.i:                                        ; preds = %then
  83.   %17 = and i64 %self, -5                         ; <i64> [#uses=1]
  84.   %18 = icmp eq i64 %17, 0                        ; <i1> [#uses=1]
  85.   br i1 %18, label %bb8.i.i.i, label %bb12.i.i.i
  86.  
  87. bb8.i.i.i:                                        ; preds = %bb7.i.i.i
  88.   switch i64 %self, label %bb12.i.i.i [
  89.     i64 4, label %bb8.i.i.i.vm_dispatch.exit_crit_edge
  90.     i64 0, label %bb11.i.i.i
  91.   ]
  92.  
  93. bb8.i.i.i.vm_dispatch.exit_crit_edge:             ; preds = %bb8.i.i.i
  94.   br label %vm_dispatch.exit
  95.  
  96. bb11.i.i.i:                                       ; preds = %bb8.i.i.i
  97.   br label %vm_dispatch.exit
  98.  
  99. bb12.i.i.i:                                       ; preds = %bb8.i.i.i, %bb7.i.i.i, %bb4.i.i.i
  100.   %19 = inttoptr i64 %self to %struct.RBasic*     ; <%struct.RBasic*> [#uses=1]
  101.   %20 = bitcast %struct.RBasic* %19 to i64*       ; <i64*> [#uses=1]
  102.   br label %vm_dispatch.exit
  103.  
  104. 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
  105.   %.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]
  106.   %.0.i.i.i = load i64* %.0.in.i.i.i, align 8     ; <i64> [#uses=2]
  107.   %21 = inttoptr i64 %.0.i.i.i to %struct.objc_class* ; <%struct.objc_class*> [#uses=1]
  108.   %22 = lshr i64 %.0.i.i.i, 3                     ; <i64> [#uses=1]
  109.   %23 = and i64 %22, 4095                         ; <i64> [#uses=1]
  110.   %24 = xor i64 %23, 3209                         ; <i64> [#uses=1]
  111.   %25 = call %struct.mcache* @rb_vm_get_mcache(i8* %14) nounwind readnone ; <%struct.mcache*> [#uses=1]
  112.   %26 = getelementptr inbounds %struct.mcache* %25, i64 %24 ; <%struct.mcache*> [#uses=1]
  113.   %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]
  114.   ret i64 %27
  115.  
  116. merge:                                            ; preds = %vm_fast_le.exit, %vm_fast_le.exit
  117.   %28 = load i8* @3                               ; <i8> [#uses=1]
  118.   %29 = icmp eq i8 %28, 0                         ; <i1> [#uses=1]
  119.   %30 = load i8* @4                               ; <i8> [#uses=2]
  120.   br i1 %29, label %op_not_redef, label %op_dispatch
  121.  
  122. op_not_redef:                                     ; preds = %merge
  123.   store i64 5, i64* %right_addr.i5
  124.   %31 = icmp eq i8 %30, 0                         ; <i1> [#uses=1]
  125.   br i1 %31, label %bb.i7, label %bb19.i15
  126.  
  127. bb.i7:                                            ; preds = %op_not_redef
  128.   %32 = and i64 %n, 1                             ; <i64> [#uses=1]
  129.   %toBool.i6 = icmp eq i64 %32, 0                 ; <i1> [#uses=1]
  130.   br i1 %toBool.i6, label %bb19.i15, label %bb1.i8
  131.  
  132. bb1.i8:                                           ; preds = %bb.i7
  133.   %33 = and i64 %n, 3                             ; <i64> [#uses=1]
  134.   switch i64 %33, label %bb12.i12 [
  135.     i64 1, label %bb4.i9
  136.     i64 3, label %bb11.i11
  137.   ]
  138.  
  139. bb4.i9:                                           ; preds = %bb1.i8
  140.   %34 = ashr i64 %n, 2                            ; <i64> [#uses=1]
  141.   %.off.i = add i64 %34, 2305843009213693951      ; <i64> [#uses=1]
  142.   %35 = icmp ult i64 %.off.i, 4611686018427387904 ; <i1> [#uses=1]
  143.   br i1 %35, label %bb7.i, label %bb19.i15
  144.  
  145. bb7.i:                                            ; preds = %bb4.i9
  146.   %36 = add i64 %n, -4                            ; <i64> [#uses=1]
  147.   %37 = and i64 %36, -4                           ; <i64> [#uses=1]
  148.   %38 = or i64 %37, 1                             ; <i64> [#uses=1]
  149.   br label %vm_fast_minus.exit
  150.  
  151. bb11.i11:                                         ; preds = %bb1.i8
  152.   %39 = and i64 %n, -4                            ; <i64> [#uses=1]
  153.   %tmp1.i.i10 = bitcast i64 %39 to double         ; <double> [#uses=1]
  154.   br label %bb13.i
  155.  
  156. bb12.i12:                                         ; preds = %bb1.i8
  157.   %40 = ashr i64 %n, 2                            ; <i64> [#uses=1]
  158.   %41 = sitofp i64 %40 to double                  ; <double> [#uses=1]
  159.   br label %bb13.i
  160.  
  161. bb13.i:                                           ; preds = %bb12.i12, %bb11.i11
  162.   %iftmp.261.0.i = phi double [ %tmp1.i.i10, %bb11.i11 ], [ %41, %bb12.i12 ] ; <double> [#uses=1]
  163.   %42 = fadd double %iftmp.261.0.i, -1.000000e+00 ; <double> [#uses=1]
  164.   %tmp1.i = bitcast double %42 to i64             ; <i64> [#uses=1]
  165.   %43 = or i64 %tmp1.i, 3                         ; <i64> [#uses=1]
  166.   br label %vm_fast_minus.exit
  167.  
  168. bb19.i15:                                         ; preds = %bb4.i9, %bb.i7, %op_not_redef
  169.   %44 = load %struct.objc_selector** @selMINUS, align 8 ; <%struct.objc_selector*> [#uses=1]
  170.   %45 = bitcast %struct.objc_selector* %44 to i8* ; <i8*> [#uses=1]
  171.   %46 = call i64 @vm_dispatch(i64 0, i64 %n, i8* %45, i8* null, i8 zeroext 0, i32 1, i64* %right_addr.i5) ; <i64> [#uses=1]
  172.   br label %vm_fast_minus.exit
  173.  
  174. vm_fast_minus.exit:                               ; preds = %bb7.i, %bb13.i, %bb19.i15
  175.   %47 = phi i64 [ %46, %bb19.i15 ], [ %43, %bb13.i ], [ %38, %bb7.i ] ; <i64> [#uses=1]
  176.   %48 = tail call i64 @ruby_scope2(i64 %self, i8* %sel, i64 %47) ; <i64> [#uses=1]
  177.   ret i64 %48
  178.  
  179. op_dispatch:                                      ; preds = %merge
  180.   store i64 5, i64* %right_addr.i16
  181.   %49 = icmp eq i8 %30, 0                         ; <i1> [#uses=1]
  182.   br i1 %49, label %bb.i18, label %bb19.i32
  183.  
  184. bb.i18:                                           ; preds = %op_dispatch
  185.   %50 = and i64 %n, 1                             ; <i64> [#uses=1]
  186.   %toBool.i17 = icmp eq i64 %50, 0                ; <i1> [#uses=1]
  187.   br i1 %toBool.i17, label %bb19.i32, label %bb1.i19
  188.  
  189. bb1.i19:                                          ; preds = %bb.i18
  190.   %51 = and i64 %n, 3                             ; <i64> [#uses=1]
  191.   switch i64 %51, label %bb12.i25 [
  192.     i64 1, label %bb4.i20
  193.     i64 3, label %bb11.i24
  194.   ]
  195.  
  196. bb4.i20:                                          ; preds = %bb1.i19
  197.   %52 = ashr i64 %n, 2                            ; <i64> [#uses=1]
  198.   %.off.i21 = add i64 %52, 2305843009213693951    ; <i64> [#uses=1]
  199.   %53 = icmp ult i64 %.off.i21, 4611686018427387904 ; <i1> [#uses=1]
  200.   br i1 %53, label %bb7.i22, label %bb19.i32
  201.  
  202. bb7.i22:                                          ; preds = %bb4.i20
  203.   %54 = add i64 %n, -4                            ; <i64> [#uses=1]
  204.   %55 = and i64 %54, -4                           ; <i64> [#uses=1]
  205.   %56 = or i64 %55, 1                             ; <i64> [#uses=1]
  206.   br label %vm_fast_minus.exit33
  207.  
  208. bb11.i24:                                         ; preds = %bb1.i19
  209.   %57 = and i64 %n, -4                            ; <i64> [#uses=1]
  210.   %tmp1.i.i23 = bitcast i64 %57 to double         ; <double> [#uses=1]
  211.   br label %bb13.i27
  212.  
  213. bb12.i25:                                         ; preds = %bb1.i19
  214.   %58 = ashr i64 %n, 2                            ; <i64> [#uses=1]
  215.   %59 = sitofp i64 %58 to double                  ; <double> [#uses=1]
  216.   br label %bb13.i27
  217.  
  218. bb13.i27:                                         ; preds = %bb12.i25, %bb11.i24
  219.   %iftmp.261.0.i26 = phi double [ %tmp1.i.i23, %bb11.i24 ], [ %59, %bb12.i25 ] ; <double> [#uses=1]
  220.   %60 = fadd double %iftmp.261.0.i26, -1.000000e+00 ; <double> [#uses=1]
  221.   %tmp1.i30 = bitcast double %60 to i64           ; <i64> [#uses=1]
  222.   %61 = or i64 %tmp1.i30, 3                       ; <i64> [#uses=1]
  223.   br label %vm_fast_minus.exit33
  224.  
  225. bb19.i32:                                         ; preds = %bb4.i20, %bb.i18, %op_dispatch
  226.   %62 = load %struct.objc_selector** @selMINUS, align 8 ; <%struct.objc_selector*> [#uses=1]
  227.   %63 = bitcast %struct.objc_selector* %62 to i8* ; <i8*> [#uses=1]
  228.   %64 = call i64 @vm_dispatch(i64 0, i64 %n, i8* %63, i8* null, i8 zeroext 0, i32 1, i64* %right_addr.i16) ; <i64> [#uses=1]
  229.   br label %vm_fast_minus.exit33
  230.  
  231. vm_fast_minus.exit33:                             ; preds = %bb7.i22, %bb13.i27, %bb19.i32
  232.   %65 = phi i64 [ %64, %bb19.i32 ], [ %61, %bb13.i27 ], [ %56, %bb7.i22 ] ; <i64> [#uses=1]
  233.   store i64 %65, i64* %argv
  234.   %66 = call i8* @rb_vm_current_vm() nounwind readnone ; <i8*> [#uses=2]
  235.   %67 = and i64 %self, 3                          ; <i64> [#uses=1]
  236.   switch i64 %67, label %bb4.i.i.i44 [
  237.     i64 0, label %bb7.i.i.i46
  238.     i64 1, label %vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge
  239.     i64 3, label %bb2.i.i.vm_class_of.exit_crit_edge.i43
  240.   ]
  241.  
  242. vm_fast_minus.exit33.vm_dispatch.exit54_crit_edge: ; preds = %vm_fast_minus.exit33
  243.   br label %vm_dispatch.exit54
  244.  
  245. bb2.i.i.vm_class_of.exit_crit_edge.i43:           ; preds = %vm_fast_minus.exit33
  246.   br label %vm_dispatch.exit54
  247.  
  248. bb4.i.i.i44:                                      ; preds = %vm_fast_minus.exit33
  249.   %68 = icmp eq i64 %self, 2                      ; <i1> [#uses=1]
  250.   br i1 %68, label %bb4.i.i.i44.vm_dispatch.exit54_crit_edge, label %bb12.i.i.i50
  251.  
  252. bb4.i.i.i44.vm_dispatch.exit54_crit_edge:         ; preds = %bb4.i.i.i44
  253.   br label %vm_dispatch.exit54
  254.  
  255. bb7.i.i.i46:                                      ; preds = %vm_fast_minus.exit33
  256.   %69 = and i64 %self, -5                         ; <i64> [#uses=1]
  257.   %70 = icmp eq i64 %69, 0                        ; <i1> [#uses=1]
  258.   br i1 %70, label %bb8.i.i.i47, label %bb12.i.i.i50
  259.  
  260. bb8.i.i.i47:                                      ; preds = %bb7.i.i.i46
  261.   switch i64 %self, label %bb12.i.i.i50 [
  262.     i64 4, label %bb8.i.i.i47.vm_dispatch.exit54_crit_edge
  263.     i64 0, label %bb11.i.i.i49
  264.   ]
  265.  
  266. bb8.i.i.i47.vm_dispatch.exit54_crit_edge:         ; preds = %bb8.i.i.i47
  267.   br label %vm_dispatch.exit54
  268.  
  269. bb11.i.i.i49:                                     ; preds = %bb8.i.i.i47
  270.   br label %vm_dispatch.exit54
  271.  
  272. bb12.i.i.i50:                                     ; preds = %bb8.i.i.i47, %bb7.i.i.i46, %bb4.i.i.i44
  273.   %71 = inttoptr i64 %self to %struct.RBasic*     ; <%struct.RBasic*> [#uses=1]
  274.   %72 = bitcast %struct.RBasic* %71 to i64*       ; <i64*> [#uses=1]
  275.   br label %vm_dispatch.exit54
  276.  
  277. 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
  278.   %.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]
  279.   %.0.i.i.i52 = load i64* %.0.in.i.i.i51, align 8 ; <i64> [#uses=2]
  280.   %73 = inttoptr i64 %.0.i.i.i52 to %struct.objc_class* ; <%struct.objc_class*> [#uses=1]
  281.   %74 = lshr i64 %.0.i.i.i52, 3                   ; <i64> [#uses=1]
  282.   %75 = and i64 %74, 4095                         ; <i64> [#uses=1]
  283.   %76 = xor i64 %75, 1088                         ; <i64> [#uses=1]
  284.   %77 = call %struct.mcache* @rb_vm_get_mcache(i8* %66) nounwind readnone ; <%struct.mcache*> [#uses=1]
  285.   %78 = getelementptr inbounds %struct.mcache* %77, i64 %76 ; <%struct.mcache*> [#uses=1]
  286.   %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]
  287.   ret i64 %79
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement