Skip to content

Instantly share code, notes, and snippets.

@alexanderkyte
Created April 29, 2019 21:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexanderkyte/682fcd37f127d1c475bb5a26b775634f to your computer and use it in GitHub Desktop.
Save alexanderkyte/682fcd37f127d1c475bb5a26b775634f to your computer and use it in GitHub Desktop.
define monocc i32 @"System.SpanHelpers:IndexOf (byte&,byte,int)"(i64* %arg_searchSpace, i32 %arg_value, i32 %arg_length) #0 {
BB0:
%0 = alloca <16 x i8>, align 16
%1 = alloca <2 x i64>, align 16
%2 = alloca <16 x i8>, align 16
%3 = alloca i64, align 8
%4 = load volatile i64, i64* inttoptr (i64 4497641040 to i64*)
%5 = icmp eq i64 %4, 0
%6 = call i1 @llvm.expect.i1(i1 %5, i1 true)
%7 = alloca <16 x i8>, align 16
%8 = alloca <16 x i8>, align 16
br i1 %6, label %CONT_BB2, label %POLL_BB1
POLL_BB1: ; preds = %BB0
%9 = load void ()*, void ()** @mono_threads_state_poll
call void %9()
br label %CONT_BB2
CONT_BB2: ; preds = %POLL_BB1, %BB0
br label %BB3
BB3: ; preds = %CONT_BB2
br label %BB2
BB2: ; preds = %BB3
store i64 0, i64* %3
%10 = getelementptr i64, i64* %3, i32 0
store volatile i64 0, i64* %10
%11 = load volatile i64, i64* %3
%t22 = sext i32 %arg_length to i64
br i1 false, label %BB4, label %BB5
BB4: ; preds = %BB6, %BB5, %BB42, %BB23, %BB2
%12 = phi i64 [ %t22, %BB2 ], [ %t22, %BB5 ], [ %t1102, %BB6 ], [ %t105, %BB23 ], [ %t1112, %BB42 ]
%13 = phi i64 [ %11, %BB2 ], [ %11, %BB5 ], [ %11, %BB6 ], [ %t394, %BB23 ], [ %103, %BB42 ]
%14 = icmp uge i64 %12, 8
br i1 %14, label %BB7, label %BB24
BB5: ; preds = %BB2
%15 = icmp slt i32 %arg_length, 32
br i1 %15, label %BB4, label %BB6
BB7: ; preds = %BB4
%16 = load volatile i64, i64* inttoptr (i64 4497641040 to i64*)
%17 = icmp eq i64 %16, 0
%18 = call i1 @llvm.expect.i1(i1 %17, i1 true)
br i1 %18, label %CONT_BB4, label %POLL_BB3
BB24: ; preds = %BB4
%19 = icmp ult i64 %12, 4
br i1 %19, label %BB25, label %BB26
POLL_BB3: ; preds = %BB7
%20 = load void ()*, void ()** @mono_threads_state_poll.1
call void %20()
br label %CONT_BB4
CONT_BB4: ; preds = %POLL_BB3, %BB7
%t105 = sub i64 %12, 8
%21 = ptrtoint i64* %arg_searchSpace to i64
%t124 = add i64 %21, %13
%22 = inttoptr i64 %t124 to i8*
%23 = load i8, i8* %22
%24 = zext i8 %23 to i32
%25 = icmp eq i32 %arg_value, %24
br i1 %25, label %BB8, label %BB9
BB8: ; preds = %BB26, %CONT_BB6, %CONT_BB4
%26 = phi i64 [ %13, %CONT_BB4 ], [ %13, %BB26 ], [ %80, %CONT_BB6 ]
%27 = trunc i64 %26 to i32
%t1133 = sext i32 %27 to i64
%28 = trunc i64 %t1133 to i32
br label %BB1
BB9: ; preds = %CONT_BB4
%t144 = add i64 %13, 1
%29 = ptrtoint i64* %arg_searchSpace to i64
%t160 = add i64 %29, %t144
%30 = inttoptr i64 %t160 to i8*
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = icmp eq i32 %arg_value, %32
br i1 %33, label %BB10, label %BB11
BB1: ; preds = %BB550, %BB34, %BB22, %BB20, %BB18, %BB16, %BB14, %BB12, %BB10, %BB8
%34 = phi i32 [ %t1122, %BB550 ], [ -1, %BB34 ], [ %28, %BB8 ], [ %36, %BB10 ], [ %43, %BB12 ], [ %50, %BB14 ], [ %57, %BB16 ], [ %64, %BB18 ], [ %71, %BB20 ], [ %78, %BB22 ]
ret i32 %34
BB10: ; preds = %BB27, %BB9
%t889 = add i64 %13, 1
%35 = trunc i64 %t889 to i32
%t1130 = sext i32 %35 to i64
%36 = trunc i64 %t1130 to i32
br label %BB1
BB11: ; preds = %BB9
%t180 = add i64 %13, 2
%37 = ptrtoint i64* %arg_searchSpace to i64
%t196 = add i64 %37, %t180
%38 = inttoptr i64 %t196 to i8*
%39 = load i8, i8* %38
%40 = zext i8 %39 to i32
%41 = icmp eq i32 %arg_value, %40
br i1 %41, label %BB12, label %BB13
BB12: ; preds = %BB28, %BB11
%t921 = add i64 %13, 2
%42 = trunc i64 %t921 to i32
%t1129 = sext i32 %42 to i64
%43 = trunc i64 %t1129 to i32
br label %BB1
BB13: ; preds = %BB11
%t216 = add i64 %13, 3
%44 = ptrtoint i64* %arg_searchSpace to i64
%t232 = add i64 %44, %t216
%45 = inttoptr i64 %t232 to i8*
%46 = load i8, i8* %45
%47 = zext i8 %46 to i32
%48 = icmp eq i32 %arg_value, %47
br i1 %48, label %BB14, label %BB15
BB14: ; preds = %BB29, %BB13
%t953 = add i64 %13, 3
%49 = trunc i64 %t953 to i32
%t1128 = sext i32 %49 to i64
%50 = trunc i64 %t1128 to i32
br label %BB1
BB15: ; preds = %BB13
%t252 = add i64 %13, 4
%51 = ptrtoint i64* %arg_searchSpace to i64
%t268 = add i64 %51, %t252
%52 = inttoptr i64 %t268 to i8*
%53 = load i8, i8* %52
%54 = zext i8 %53 to i32
%55 = icmp eq i32 %arg_value, %54
br i1 %55, label %BB16, label %BB17
BB16: ; preds = %BB15
%t985 = add i64 %13, 4
%56 = trunc i64 %t985 to i32
%t1139 = sext i32 %56 to i64
%57 = trunc i64 %t1139 to i32
br label %BB1
BB17: ; preds = %BB15
%t288 = add i64 %13, 5
%58 = ptrtoint i64* %arg_searchSpace to i64
%t304 = add i64 %58, %t288
%59 = inttoptr i64 %t304 to i8*
%60 = load i8, i8* %59
%61 = zext i8 %60 to i32
%62 = icmp eq i32 %arg_value, %61
br i1 %62, label %BB18, label %BB19
BB18: ; preds = %BB17
%t1017 = add i64 %13, 5
%63 = trunc i64 %t1017 to i32
%t1138 = sext i32 %63 to i64
%64 = trunc i64 %t1138 to i32
br label %BB1
BB19: ; preds = %BB17
%t324 = add i64 %13, 6
%65 = ptrtoint i64* %arg_searchSpace to i64
%t340 = add i64 %65, %t324
%66 = inttoptr i64 %t340 to i8*
%67 = load i8, i8* %66
%68 = zext i8 %67 to i32
%69 = icmp eq i32 %arg_value, %68
br i1 %69, label %BB20, label %BB21
BB20: ; preds = %BB19
%t1049 = add i64 %13, 6
%70 = trunc i64 %t1049 to i32
%t1137 = sext i32 %70 to i64
%71 = trunc i64 %t1137 to i32
br label %BB1
BB21: ; preds = %BB19
%t360 = add i64 %13, 7
%72 = ptrtoint i64* %arg_searchSpace to i64
%t376 = add i64 %72, %t360
%73 = inttoptr i64 %t376 to i8*
%74 = load i8, i8* %73
%75 = zext i8 %74 to i32
%76 = icmp eq i32 %arg_value, %75
br i1 %76, label %BB22, label %BB23
BB22: ; preds = %BB21
%t1081 = add i64 %13, 7
%77 = trunc i64 %t1081 to i32
%t1136 = sext i32 %77 to i64
%78 = trunc i64 %t1136 to i32
br label %BB1
BB23: ; preds = %BB21
%t394 = add i64 %13, 8
br label %BB4
BB25: ; preds = %BB30, %BB32, %BB24
%79 = phi i64 [ %12, %BB24 ], [ %t436, %BB30 ], [ %t607, %BB32 ]
%80 = phi i64 [ %13, %BB24 ], [ %t581, %BB30 ], [ %t644, %BB32 ]
%81 = icmp ugt i64 %79, 0
br i1 %81, label %BB31, label %BB33
BB26: ; preds = %BB24
%t436 = sub i64 %12, 4
%82 = ptrtoint i64* %arg_searchSpace to i64
%t455 = add i64 %82, %13
%83 = inttoptr i64 %t455 to i8*
%84 = load i8, i8* %83
%85 = zext i8 %84 to i32
%86 = icmp eq i32 %arg_value, %85
br i1 %86, label %BB8, label %BB27
BB31: ; preds = %BB25
%87 = load volatile i64, i64* inttoptr (i64 4497641040 to i64*)
%88 = icmp eq i64 %87, 0
%89 = call i1 @llvm.expect.i1(i1 %88, i1 true)
br i1 %89, label %CONT_BB6, label %POLL_BB5
BB33: ; preds = %BB25
br i1 false, label %BB34, label %BB35
POLL_BB5: ; preds = %BB31
%90 = load void ()*, void ()** @mono_threads_state_poll.2
call void %90()
br label %CONT_BB6
CONT_BB6: ; preds = %POLL_BB5, %BB31
%t607 = sub i64 %79, 1
%91 = ptrtoint i64* %arg_searchSpace to i64
%t626 = add i64 %91, %80
%92 = inttoptr i64 %t626 to i8*
%93 = load i8, i8* %92
%94 = zext i8 %93 to i32
%95 = icmp eq i32 %arg_value, %94
br i1 %95, label %BB8, label %BB32
BB32: ; preds = %CONT_BB6
%t644 = add i64 %80, 1
br label %BB25
BB34: ; preds = %BB41, %BB35, %BB33
br label %BB1
BB35: ; preds = %BB33
%96 = trunc i64 %80 to i32
%t669 = sext i32 %96 to i64
%97 = trunc i64 %t669 to i32
%98 = icmp sge i32 %97, %arg_length
br i1 %98, label %BB34, label %BB36
BB36: ; preds = %BB35
%99 = trunc i64 %80 to i32
%t678 = sext i32 %99 to i64
%100 = trunc i64 %t678 to i32
%t679 = sub i32 %arg_length, %100
%t687 = and i32 %t679, -16
%t1109 = sext i32 %t687 to i64
%t702 = mul i32 %arg_value, 16843009
%101 = insertelement <4 x i32> zeroinitializer, i32 %t702, i32 0
%102 = shufflevector <4 x i32> %101, <4 x i32> undef, <4 x i32> zeroinitializer
br label %BB37
BB37: ; preds = %BB40, %BB36
%103 = phi i64 [ %80, %BB36 ], [ %t758, %BB40 ]
%104 = icmp ugt i64 %t1109, %103
br i1 %104, label %BB38, label %BB41
BB38: ; preds = %BB37
%105 = load volatile i64, i64* inttoptr (i64 4497641040 to i64*)
%106 = icmp eq i64 %105, 0
%107 = call i1 @llvm.expect.i1(i1 %106, i1 true)
br i1 %107, label %CONT_BB8, label %POLL_BB7
BB41: ; preds = %BB37
%108 = trunc i64 %103 to i32
%t842 = sext i32 %108 to i64
%109 = trunc i64 %t842 to i32
%110 = icmp sge i32 %109, %arg_length
br i1 %110, label %BB34, label %BB42
POLL_BB7: ; preds = %BB38
%111 = load void ()*, void ()** @mono_threads_state_poll.3
call void %111()
br label %CONT_BB8
CONT_BB8: ; preds = %POLL_BB7, %BB38
%112 = ptrtoint i64* %arg_searchSpace to i64
%t724 = add i64 %112, %103
%113 = load void (i64*, i64*, i32)*, void (i64*, i64*, i32)** @tramp_25
%114 = bitcast <16 x i8>* %2 to i64*
%115 = inttoptr i64 %t724 to i64*
notail call monocc void %113(i64* %114, i64* %115, i32 16)
%116 = load volatile <16 x i8>, <16 x i8>* %2
%117 = bitcast <4 x i32> %102 to <16 x i8>
store <16 x i8> %117, <16 x i8>* %8
store <16 x i8> %116, <16 x i8>* %7
%118 = load void (i64, i64, i64, i64, i64)*, void (i64, i64, i64, i64, i64)** @tramp_26
%119 = ptrtoint <16 x i8>* %0 to i64
%120 = bitcast <16 x i8>* %8 to i8*
%121 = getelementptr i8, i8* %120, i32 0
%122 = bitcast i8* %121 to i64*
%123 = load i64, i64* %122
%124 = getelementptr i8, i8* %120, i32 8
%125 = bitcast i8* %124 to i64*
%126 = load i64, i64* %125
%127 = bitcast <16 x i8>* %7 to i8*
%128 = getelementptr i8, i8* %127, i32 0
%129 = bitcast i8* %128 to i64*
%130 = load i64, i64* %129
%131 = getelementptr i8, i8* %127, i32 8
%132 = bitcast i8* %131 to i64*
%133 = load i64, i64* %132
notail call monocc void %118(i64 %119, i64 %123, i64 %126, i64 %130, i64 %133)
%134 = load <16 x i8>, <16 x i8>* %0
%135 = load volatile <16 x i8>, <16 x i8>* %0
%136 = icmp eq <16 x i8> zeroinitializer, %135
%137 = sext <16 x i1> %136 to <16 x i8>
%t741 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %137)
%138 = sext i32 %t741 to i64
%139 = icmp eq i64 %138, 65535
%t1115 = zext i1 %139 to i32
%140 = icmp eq i32 %t1115, 0
br i1 %140, label %BB39, label %BB40
BB39: ; preds = %CONT_BB8
%141 = trunc i64 %103 to i32
%t774 = sext i32 %141 to i64
%142 = load volatile <16 x i8>, <16 x i8>* %0
store <2 x i64> zeroinitializer, <2 x i64>* %1
br label %BB546
BB40: ; preds = %CONT_BB8
%t758 = add i64 %103, 16
br label %BB37
BB546: ; preds = %BB39
%143 = bitcast <16 x i8> %142 to <2 x i64>
store <2 x i64> %143, <2 x i64>* %1
br label %BB548
BB548: ; preds = %BB551, %BB546
%144 = phi i32 [ 0, %BB546 ], [ %t1124, %BB551 ]
%145 = phi i64 [ 0, %BB546 ], [ %157, %BB551 ]
%146 = icmp slt i32 %144, 2
br i1 %146, label %BB549, label %BB550
BB549: ; preds = %BB548
%147 = load volatile i64, i64* inttoptr (i64 4497641040 to i64*)
%148 = icmp eq i64 %147, 0
%149 = call i1 @llvm.expect.i1(i1 %148, i1 true)
br i1 %149, label %CONT_BB10, label %POLL_BB9
BB550: ; preds = %CONT_BB10, %BB548
%150 = phi i64 [ %157, %CONT_BB10 ], [ %145, %BB548 ]
%t803 = shl i32 %144, 3
%t812 = sub i64 %150, 1
%t814 = xor i64 %150, %t812
%t816 = mul i64 %t814, 283686952306184
%t818 = lshr i64 %t816, 57
%151 = trunc i64 %t818 to i32
%t820 = sext i32 %151 to i64
%152 = trunc i64 %t820 to i32
%t822 = add i32 %t803, %152
%153 = trunc i64 %t774 to i32
%t1122 = add i32 %153, %t822
br label %BB1
POLL_BB9: ; preds = %BB549
%154 = load void ()*, void ()** @mono_threads_state_poll.4
call void %154()
br label %CONT_BB10
CONT_BB10: ; preds = %POLL_BB9, %BB549
%155 = load i64 (i64*, i32)*, i64 (i64*, i32)** @tramp_27
%156 = bitcast <2 x i64>* %1 to i64*
%157 = notail call monocc i64 %155(i64* %156, i32 %144)
%158 = icmp ne i64 %157, 0
br i1 %158, label %BB550, label %BB551
BB551: ; preds = %CONT_BB10
%t1124 = add i32 %144, 1
br label %BB548
BB42: ; preds = %BB41
%159 = trunc i64 %103 to i32
%t851 = sext i32 %159 to i64
%160 = trunc i64 %t851 to i32
%t855 = sub i32 %arg_length, %160
%t1112 = sext i32 %t855 to i64
br label %BB4
BB27: ; preds = %BB26
%t475 = add i64 %13, 1
%161 = ptrtoint i64* %arg_searchSpace to i64
%t491 = add i64 %161, %t475
%162 = inttoptr i64 %t491 to i8*
%163 = load i8, i8* %162
%164 = zext i8 %163 to i32
%165 = icmp eq i32 %arg_value, %164
br i1 %165, label %BB10, label %BB28
BB28: ; preds = %BB27
%t511 = add i64 %13, 2
%166 = ptrtoint i64* %arg_searchSpace to i64
%t527 = add i64 %166, %t511
%167 = inttoptr i64 %t527 to i8*
%168 = load i8, i8* %167
%169 = zext i8 %168 to i32
%170 = icmp eq i32 %arg_value, %169
br i1 %170, label %BB12, label %BB29
BB29: ; preds = %BB28
%t547 = add i64 %13, 3
%171 = ptrtoint i64* %arg_searchSpace to i64
%t563 = add i64 %171, %t547
%172 = inttoptr i64 %t563 to i8*
%173 = load i8, i8* %172
%174 = zext i8 %173 to i32
%175 = icmp eq i32 %arg_value, %174
br i1 %175, label %BB14, label %BB30
BB30: ; preds = %BB29
%t581 = add i64 %13, 4
br label %BB25
BB6: ; preds = %BB5
%176 = ptrtoint i64* %arg_searchSpace to i32
%t65 = sext i32 %176 to i64
%t23 = and i64 %t65, 15
%177 = trunc i64 %t23 to i32
%t72 = sub i32 16, %177
%t79 = and i32 %t72, 15
%t1102 = sext i32 %t79 to i64
br label %BB4
}
; Function Attrs: uwtable
define monocc i32 @"System.SpanHelpers:IndexOf (byte&,byte,int)"(i64* %arg_searchSpace, i32 %arg_value, i32 %arg_length) #0 {
BB0:
%0 = alloca <2 x i64>, align 16
%1 = alloca <16 x i8>, align 16
%2 = alloca i64, align 8
%3 = load volatile i64, i64* inttoptr (i64 4425084496 to i64*)
%4 = icmp eq i64 %3, 0
%5 = call i1 @llvm.expect.i1(i1 %4, i1 true)
br i1 %5, label %CONT_BB2, label %POLL_BB1
POLL_BB1: ; preds = %BB0
%6 = load void ()*, void ()** @mono_threads_state_poll
call void %6()
br label %CONT_BB2
CONT_BB2: ; preds = %POLL_BB1, %BB0
br label %BB3
BB3: ; preds = %CONT_BB2
br label %BB2
BB2: ; preds = %BB3
store i64 0, i64* %2
%7 = getelementptr i64, i64* %2, i32 0
store volatile i64 0, i64* %7
%8 = load volatile i64, i64* %2
%t22 = sext i32 %arg_length to i64
br i1 false, label %BB4, label %BB5
BB4: ; preds = %BB6, %BB5, %BB42, %BB23, %BB2
%9 = phi i64 [ %t22, %BB2 ], [ %t22, %BB5 ], [ %t1105, %BB6 ], [ %t105, %BB23 ], [ %t1115, %BB42 ]
%10 = phi i64 [ %8, %BB2 ], [ %8, %BB5 ], [ %8, %BB6 ], [ %t394, %BB23 ], [ %100, %BB42 ]
%11 = icmp uge i64 %9, 8
br i1 %11, label %BB7, label %BB24
BB5: ; preds = %BB2
%12 = icmp slt i32 %arg_length, 32
br i1 %12, label %BB4, label %BB6
BB7: ; preds = %BB4
%13 = load volatile i64, i64* inttoptr (i64 4425084496 to i64*)
%14 = icmp eq i64 %13, 0
%15 = call i1 @llvm.expect.i1(i1 %14, i1 true)
br i1 %15, label %CONT_BB4, label %POLL_BB3
BB24: ; preds = %BB4
%16 = icmp ult i64 %9, 4
br i1 %16, label %BB25, label %BB26
POLL_BB3: ; preds = %BB7
%17 = load void ()*, void ()** @mono_threads_state_poll.1
call void %17()
br label %CONT_BB4
CONT_BB4: ; preds = %POLL_BB3, %BB7
%t105 = sub i64 %9, 8
%18 = ptrtoint i64* %arg_searchSpace to i64
%t124 = add i64 %18, %10
%19 = inttoptr i64 %t124 to i8*
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = icmp eq i32 %arg_value, %21
br i1 %22, label %BB8, label %BB9
BB8: ; preds = %BB26, %CONT_BB6, %CONT_BB4
%23 = phi i64 [ %10, %CONT_BB4 ], [ %10, %BB26 ], [ %77, %CONT_BB6 ]
%24 = trunc i64 %23 to i32
%t1136 = sext i32 %24 to i64
%25 = trunc i64 %t1136 to i32
br label %BB1
BB9: ; preds = %CONT_BB4
%t144 = add i64 %10, 1
%26 = ptrtoint i64* %arg_searchSpace to i64
%t160 = add i64 %26, %t144
%27 = inttoptr i64 %t160 to i8*
%28 = load i8, i8* %27
%29 = zext i8 %28 to i32
%30 = icmp eq i32 %arg_value, %29
br i1 %30, label %BB10, label %BB11
BB1: ; preds = %BB555, %BB34, %BB22, %BB20, %BB18, %BB16, %BB14, %BB12, %BB10, %BB8
%31 = phi i32 [ %t1125, %BB555 ], [ -1, %BB34 ], [ %25, %BB8 ], [ %33, %BB10 ], [ %40, %BB12 ], [ %47, %BB14 ], [ %54, %BB16 ], [ %61, %BB18 ], [ %68, %BB20 ], [ %75, %BB22 ]
ret i32 %31
BB10: ; preds = %BB27, %BB9
%t892 = add i64 %10, 1
%32 = trunc i64 %t892 to i32
%t1133 = sext i32 %32 to i64
%33 = trunc i64 %t1133 to i32
br label %BB1
BB11: ; preds = %BB9
%t180 = add i64 %10, 2
%34 = ptrtoint i64* %arg_searchSpace to i64
%t196 = add i64 %34, %t180
%35 = inttoptr i64 %t196 to i8*
%36 = load i8, i8* %35
%37 = zext i8 %36 to i32
%38 = icmp eq i32 %arg_value, %37
br i1 %38, label %BB12, label %BB13
BB12: ; preds = %BB28, %BB11
%t924 = add i64 %10, 2
%39 = trunc i64 %t924 to i32
%t1132 = sext i32 %39 to i64
%40 = trunc i64 %t1132 to i32
br label %BB1
BB13: ; preds = %BB11
%t216 = add i64 %10, 3
%41 = ptrtoint i64* %arg_searchSpace to i64
%t232 = add i64 %41, %t216
%42 = inttoptr i64 %t232 to i8*
%43 = load i8, i8* %42
%44 = zext i8 %43 to i32
%45 = icmp eq i32 %arg_value, %44
br i1 %45, label %BB14, label %BB15
BB14: ; preds = %BB29, %BB13
%t956 = add i64 %10, 3
%46 = trunc i64 %t956 to i32
%t1131 = sext i32 %46 to i64
%47 = trunc i64 %t1131 to i32
br label %BB1
BB15: ; preds = %BB13
%t252 = add i64 %10, 4
%48 = ptrtoint i64* %arg_searchSpace to i64
%t268 = add i64 %48, %t252
%49 = inttoptr i64 %t268 to i8*
%50 = load i8, i8* %49
%51 = zext i8 %50 to i32
%52 = icmp eq i32 %arg_value, %51
br i1 %52, label %BB16, label %BB17
BB16: ; preds = %BB15
%t988 = add i64 %10, 4
%53 = trunc i64 %t988 to i32
%t1142 = sext i32 %53 to i64
%54 = trunc i64 %t1142 to i32
br label %BB1
BB17: ; preds = %BB15
%t288 = add i64 %10, 5
%55 = ptrtoint i64* %arg_searchSpace to i64
%t304 = add i64 %55, %t288
%56 = inttoptr i64 %t304 to i8*
%57 = load i8, i8* %56
%58 = zext i8 %57 to i32
%59 = icmp eq i32 %arg_value, %58
br i1 %59, label %BB18, label %BB19
BB18: ; preds = %BB17
%t1020 = add i64 %10, 5
%60 = trunc i64 %t1020 to i32
%t1141 = sext i32 %60 to i64
%61 = trunc i64 %t1141 to i32
br label %BB1
BB19: ; preds = %BB17
%t324 = add i64 %10, 6
%62 = ptrtoint i64* %arg_searchSpace to i64
%t340 = add i64 %62, %t324
%63 = inttoptr i64 %t340 to i8*
%64 = load i8, i8* %63
%65 = zext i8 %64 to i32
%66 = icmp eq i32 %arg_value, %65
br i1 %66, label %BB20, label %BB21
BB20: ; preds = %BB19
%t1052 = add i64 %10, 6
%67 = trunc i64 %t1052 to i32
%t1140 = sext i32 %67 to i64
%68 = trunc i64 %t1140 to i32
br label %BB1
BB21: ; preds = %BB19
%t360 = add i64 %10, 7
%69 = ptrtoint i64* %arg_searchSpace to i64
%t376 = add i64 %69, %t360
%70 = inttoptr i64 %t376 to i8*
%71 = load i8, i8* %70
%72 = zext i8 %71 to i32
%73 = icmp eq i32 %arg_value, %72
br i1 %73, label %BB22, label %BB23
BB22: ; preds = %BB21
%t1084 = add i64 %10, 7
%74 = trunc i64 %t1084 to i32
%t1139 = sext i32 %74 to i64
%75 = trunc i64 %t1139 to i32
br label %BB1
BB23: ; preds = %BB21
%t394 = add i64 %10, 8
br label %BB4
BB25: ; preds = %BB30, %BB32, %BB24
%76 = phi i64 [ %9, %BB24 ], [ %t436, %BB30 ], [ %t607, %BB32 ]
%77 = phi i64 [ %10, %BB24 ], [ %t581, %BB30 ], [ %t644, %BB32 ]
%78 = icmp ugt i64 %76, 0
br i1 %78, label %BB31, label %BB33
BB26: ; preds = %BB24
%t436 = sub i64 %9, 4
%79 = ptrtoint i64* %arg_searchSpace to i64
%t455 = add i64 %79, %10
%80 = inttoptr i64 %t455 to i8*
%81 = load i8, i8* %80
%82 = zext i8 %81 to i32
%83 = icmp eq i32 %arg_value, %82
br i1 %83, label %BB8, label %BB27
BB31: ; preds = %BB25
%84 = load volatile i64, i64* inttoptr (i64 4425084496 to i64*)
%85 = icmp eq i64 %84, 0
%86 = call i1 @llvm.expect.i1(i1 %85, i1 true)
br i1 %86, label %CONT_BB6, label %POLL_BB5
BB33: ; preds = %BB25
br i1 false, label %BB34, label %BB35
POLL_BB5: ; preds = %BB31
%87 = load void ()*, void ()** @mono_threads_state_poll.2
call void %87()
br label %CONT_BB6
CONT_BB6: ; preds = %POLL_BB5, %BB31
%t607 = sub i64 %76, 1
%88 = ptrtoint i64* %arg_searchSpace to i64
%t626 = add i64 %88, %77
%89 = inttoptr i64 %t626 to i8*
%90 = load i8, i8* %89
%91 = zext i8 %90 to i32
%92 = icmp eq i32 %arg_value, %91
br i1 %92, label %BB8, label %BB32
BB32: ; preds = %CONT_BB6
%t644 = add i64 %77, 1
br label %BB25
BB34: ; preds = %BB41, %BB35, %BB33
br label %BB1
BB35: ; preds = %BB33
%93 = trunc i64 %77 to i32
%t669 = sext i32 %93 to i64
%94 = trunc i64 %t669 to i32
%95 = icmp sge i32 %94, %arg_length
br i1 %95, label %BB34, label %BB36
BB36: ; preds = %BB35
%96 = trunc i64 %77 to i32
%t678 = sext i32 %96 to i64
%97 = trunc i64 %t678 to i32
%t679 = sub i32 %arg_length, %97
%t687 = and i32 %t679, -16
%t1112 = sext i32 %t687 to i64
%t702 = mul i32 %arg_value, 16843009
%98 = insertelement <4 x i32> zeroinitializer, i32 %t702, i32 0
%99 = shufflevector <4 x i32> %98, <4 x i32> undef, <4 x i32> zeroinitializer
br label %BB37
BB37: ; preds = %BB40, %BB36
%100 = phi i64 [ %77, %BB36 ], [ %t761, %BB40 ]
%101 = icmp ugt i64 %t1112, %100
br i1 %101, label %BB38, label %BB41
BB38: ; preds = %BB37
%102 = load volatile i64, i64* inttoptr (i64 4425084496 to i64*)
%103 = icmp eq i64 %102, 0
%104 = call i1 @llvm.expect.i1(i1 %103, i1 true)
br i1 %104, label %CONT_BB8, label %POLL_BB7
BB41: ; preds = %BB37
%105 = trunc i64 %100 to i32
%t845 = sext i32 %105 to i64
%106 = trunc i64 %t845 to i32
%107 = icmp sge i32 %106, %arg_length
br i1 %107, label %BB34, label %BB42
POLL_BB7: ; preds = %BB38
%108 = load void ()*, void ()** @mono_threads_state_poll.3
call void %108()
br label %CONT_BB8
CONT_BB8: ; preds = %POLL_BB7, %BB38
%109 = ptrtoint i64* %arg_searchSpace to i64
%t724 = add i64 %109, %100
%110 = load void (i64*, i64*, i32)*, void (i64*, i64*, i32)** @tramp_25
%111 = bitcast <16 x i8>* %1 to i64*
%112 = inttoptr i64 %t724 to i64*
notail call monocc void %110(i64* %111, i64* %112, i32 16)
%113 = load volatile <16 x i8>, <16 x i8>* %1
%114 = icmp eq <4 x i32> %99, <16 x i8> %113
%115 = sext <4 x i1> %114 to <4 x i32>
%116 = icmp eq <16 x i8> zeroinitializer, <4 x i32> %115
%117 = sext <16 x i1> %116 to <16 x i8>
%t744 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %117)
%118 = sext i32 %t744 to i64
%119 = icmp eq i64 %118, 65535
%t1118 = zext i1 %119 to i32
%120 = icmp eq i32 %t1118, 0
br i1 %120, label %BB39, label %BB40
BB39: ; preds = %CONT_BB8
%121 = trunc i64 %100 to i32
%t777 = sext i32 %121 to i64
store <2 x i64> zeroinitializer, <2 x i64>* %0
br label %BB551
BB40: ; preds = %CONT_BB8
%t761 = add i64 %100, 16
br label %BB37
BB551: ; preds = %BB39
%122 = bitcast <4 x i32> %115 to <2 x i64>
store <2 x i64> %122, <2 x i64>* %0
br label %BB553
BB553: ; preds = %BB556, %BB551
%123 = phi i32 [ 0, %BB551 ], [ %t1127, %BB556 ]
%124 = phi i64 [ 0, %BB551 ], [ %136, %BB556 ]
%125 = icmp slt i32 %123, 2
br i1 %125, label %BB554, label %BB555
BB554: ; preds = %BB553
%126 = load volatile i64, i64* inttoptr (i64 4425084496 to i64*)
%127 = icmp eq i64 %126, 0
%128 = call i1 @llvm.expect.i1(i1 %127, i1 true)
br i1 %128, label %CONT_BB10, label %POLL_BB9
BB555: ; preds = %CONT_BB10, %BB553
%129 = phi i64 [ %136, %CONT_BB10 ], [ %124, %BB553 ]
%t806 = shl i32 %123, 3
%t815 = sub i64 %129, 1
%t817 = xor i64 %129, %t815
%t819 = mul i64 %t817, 283686952306184
%t821 = lshr i64 %t819, 57
%130 = trunc i64 %t821 to i32
%t823 = sext i32 %130 to i64
%131 = trunc i64 %t823 to i32
%t825 = add i32 %t806, %131
%132 = trunc i64 %t777 to i32
%t1125 = add i32 %132, %t825
br label %BB1
POLL_BB9: ; preds = %BB554
%133 = load void ()*, void ()** @mono_threads_state_poll.4
call void %133()
br label %CONT_BB10
CONT_BB10: ; preds = %POLL_BB9, %BB554
%134 = load i64 (i64*, i32)*, i64 (i64*, i32)** @tramp_26
%135 = bitcast <2 x i64>* %0 to i64*
%136 = notail call monocc i64 %134(i64* %135, i32 %123)
%137 = icmp ne i64 %136, 0
br i1 %137, label %BB555, label %BB556
BB556: ; preds = %CONT_BB10
%t1127 = add i32 %123, 1
br label %BB553
BB42: ; preds = %BB41
%138 = trunc i64 %100 to i32
%t854 = sext i32 %138 to i64
%139 = trunc i64 %t854 to i32
%t858 = sub i32 %arg_length, %139
%t1115 = sext i32 %t858 to i64
br label %BB4
BB27: ; preds = %BB26
%t475 = add i64 %10, 1
%140 = ptrtoint i64* %arg_searchSpace to i64
%t491 = add i64 %140, %t475
%141 = inttoptr i64 %t491 to i8*
%142 = load i8, i8* %141
%143 = zext i8 %142 to i32
%144 = icmp eq i32 %arg_value, %143
br i1 %144, label %BB10, label %BB28
BB28: ; preds = %BB27
%t511 = add i64 %10, 2
%145 = ptrtoint i64* %arg_searchSpace to i64
%t527 = add i64 %145, %t511
%146 = inttoptr i64 %t527 to i8*
%147 = load i8, i8* %146
%148 = zext i8 %147 to i32
%149 = icmp eq i32 %arg_value, %148
br i1 %149, label %BB12, label %BB29
BB29: ; preds = %BB28
%t547 = add i64 %10, 3
%150 = ptrtoint i64* %arg_searchSpace to i64
%t563 = add i64 %150, %t547
%151 = inttoptr i64 %t563 to i8*
%152 = load i8, i8* %151
%153 = zext i8 %152 to i32
%154 = icmp eq i32 %arg_value, %153
br i1 %154, label %BB14, label %BB30
BB30: ; preds = %BB29
%t581 = add i64 %10, 4
br label %BB25
BB6: ; preds = %BB5
%155 = ptrtoint i64* %arg_searchSpace to i32
%t65 = sext i32 %155 to i64
%t23 = and i64 %t65, 15
%156 = trunc i64 %t23 to i32
%t72 = sub i32 16, %156
%t79 = and i32 %t72, 15
%t1105 = sext i32 %t79 to i64
br label %BB4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment