Skip to content

Instantly share code, notes, and snippets.

@alexanderkyte
Created April 29, 2019 18:54
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/c41042febf7d7511fb15bb997bf1c77b to your computer and use it in GitHub Desktop.
Save alexanderkyte/c41042febf7d7511fb15bb997bf1c77b to your computer and use it in GitHub Desktop.
define monocc i32 @"SpanCodegen:SpanIndexOfInner (System.Span`1<byte>)"(i64 %arg_span, i64) #0 {
BB0:
%1 = alloca %"System.Span`1<byte>", align 8
%2 = alloca %"System.Span`1<byte>", align 8
%3 = alloca %"System.ByReference`1<byte>", align 8
%4 = alloca %"System.Span`1<byte>", align 8
%5 = alloca %"System.ByReference`1<byte>", align 8
%6 = alloca %"System.Span`1<byte>", align 8
%7 = alloca %"System.ByReference`1<byte>", align 8
%8 = alloca i8, align 1
%9 = alloca %"System.Span`1<byte>", align 8
%10 = alloca %"System.Span`1<byte>", align 8
%11 = bitcast %"System.Span`1<byte>"* %1 to i64*
%12 = getelementptr i64, i64* %11, i32 0
store i64 %arg_span, i64* %12
%13 = bitcast %"System.Span`1<byte>"* %1 to i64*
%14 = getelementptr i64, i64* %13, i32 1
store i64 %0, i64* %14
%15 = load volatile i64, i64* inttoptr (i64 4385504848 to i64*)
%16 = icmp eq i64 %15, 0
%17 = call i1 @llvm.expect.i1(i1 %16, i1 true)
br i1 %17, label %CONT_BB2, label %POLL_BB1
POLL_BB1: ; preds = %BB0
%18 = load void ()*, void ()** @mono_threads_state_poll
call void %18()
br label %CONT_BB2
CONT_BB2: ; preds = %POLL_BB1, %BB0
br label %BB3
BB3: ; preds = %CONT_BB2
br label %BB2
BB2: ; preds = %BB3
%19 = load i64* (i64, i64)*, i64* (i64, i64)** @tramp_17
%20 = notail call monocc noalias nonnull i64* %19(i64 140707633666112, i64 17)
%21 = bitcast i64* %20 to i8*
%22 = getelementptr i8, i8* %21, i32 16
store i8 10, i8* %22
%23 = load i32 (i64*)*, i32 (i64*)** @tramp_18
%24 = notail call monocc i32 %23(i64* %20)
%25 = bitcast %"System.Span`1<byte>"* %1 to i8*
%26 = bitcast %"System.Span`1<byte>"* %9 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %26, i8* %25, i32 16, i32 0, i1 false)
store i8 10, i8* %8
br label %BB8
BB8: ; preds = %BB2
br i1 false, label %BB10, label %BB11
BB10: ; preds = %BB8
br i1 true, label %BB12, label %BB13
BB11: ; preds = %BB8
%27 = bitcast %"System.Span`1<byte>"* %9 to i8*
%28 = bitcast %"System.Span`1<byte>"* %6 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %28, i8* %27, i32 16, i32 0, i1 false)
%29 = bitcast %"System.ByReference`1<byte>"* %7 to i8*
call void @llvm.memset.p0i8.i32(i8* %29, i8 0, i32 8, i32 0, i1 false)
%30 = ptrtoint %"System.Span`1<byte>"* %6 to i64
%31 = add i64 %30, 0
%32 = inttoptr i64 %31 to i8*
%33 = bitcast %"System.ByReference`1<byte>"* %7 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %33, i8* %32, i32 8, i32 0, i1 false)
%34 = bitcast %"System.ByReference`1<byte>"* %7 to i64*
%t47 = load i64, i64* %34
%35 = load volatile i8, i8* %8
%36 = zext i8 %35 to i32
%37 = bitcast %"System.Span`1<byte>"* %9 to i32*
%38 = getelementptr i32, i32* %37, i32 2
%t52 = load i32, i32* %38
%39 = load i32 (i64*, i32, i32)*, i32 (i64*, i32, i32)** @tramp_21
%40 = inttoptr i64 %t47 to i64*
%41 = notail call monocc i32 %39(i64* %40, i32 %36, i32 %t52)
br label %BB7
BB12: ; preds = %BB10
%42 = bitcast %"System.Span`1<byte>"* %9 to i8*
%43 = bitcast %"System.Span`1<byte>"* %2 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %43, i8* %42, i32 16, i32 0, i1 false)
%44 = bitcast %"System.ByReference`1<byte>"* %3 to i8*
call void @llvm.memset.p0i8.i32(i8* %44, i8 0, i32 8, i32 0, i1 false)
%45 = ptrtoint %"System.Span`1<byte>"* %2 to i64
%46 = add i64 %45, 0
%47 = inttoptr i64 %46 to i8*
%48 = bitcast %"System.ByReference`1<byte>"* %3 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %48, i8* %47, i32 8, i32 0, i1 false)
%49 = bitcast %"System.ByReference`1<byte>"* %3 to i64*
%t87 = load i64, i64* %49
%50 = load volatile i8, i8* %8
%51 = zext i8 %50 to i32
%52 = bitcast %"System.Span`1<byte>"* %9 to i32*
%53 = getelementptr i32, i32* %52, i32 2
%t90 = load i32, i32* %53
%54 = load i32 (i64*, i32, i32)*, i32 (i64*, i32, i32)** @tramp_19
%55 = inttoptr i64 %t87 to i64*
%56 = notail call monocc i32 %54(i64* %55, i32 %51, i32 %t90)
br label %BB7
BB13: ; preds = %BB10
%57 = bitcast %"System.Span`1<byte>"* %9 to i8*
%58 = bitcast %"System.Span`1<byte>"* %4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %58, i8* %57, i32 16, i32 0, i1 false)
%59 = bitcast %"System.ByReference`1<byte>"* %5 to i8*
call void @llvm.memset.p0i8.i32(i8* %59, i8 0, i32 8, i32 0, i1 false)
%60 = ptrtoint %"System.Span`1<byte>"* %4 to i64
%61 = add i64 %60, 0
%62 = inttoptr i64 %61 to i8*
%63 = bitcast %"System.ByReference`1<byte>"* %5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %63, i8* %62, i32 8, i32 0, i1 false)
%64 = bitcast %"System.ByReference`1<byte>"* %5 to i64*
%t69 = load i64, i64* %64
%65 = bitcast i8* %8 to i16*
%66 = load i16, i16* %65
%67 = zext i16 %66 to i32
%68 = bitcast %"System.Span`1<byte>"* %9 to i32*
%69 = getelementptr i32, i32* %68, i32 2
%t74 = load i32, i32* %69
%70 = load i32 (i64*, i32, i32)*, i32 (i64*, i32, i32)** @tramp_20
%71 = inttoptr i64 %t69 to i64*
%72 = notail call monocc i32 %70(i64* %71, i32 %67, i32 %t74)
br label %BB7
BB7: ; preds = %BB11, %BB13, %BB12
%73 = phi i32 [ %41, %BB11 ], [ %72, %BB13 ], [ %56, %BB12 ]
br label %BB4
BB4: ; preds = %BB7
br label %BB1
BB1: ; preds = %BB4
ret i32 %73
}
define hidden monocc i32 @SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte(%"System.Span`1<byte>"* byval %arg_span) #5 gc "mono" {
BB0:
%0 = alloca i8, align 1
%1 = alloca %"System.Span`1<byte>", align 8
%2 = alloca %"System.Span`1<byte>", align 8
%3 = alloca %"System.Span`1<byte>", align 8
%4 = alloca %"System.Span`1<byte>", align 8
%5 = alloca %"System.Span`1<byte>", align 8
br label %INIT_BB1
INIT_BB1: ; preds = %BB0
%is_inited = load i8, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @mono_inited_tmp, i32 0, i32 0)
%6 = call i8 @llvm.expect.i8(i8 %is_inited, i8 1)
%7 = icmp eq i8 %6, 0
br i1 %7, label %NOTINITED_BB3, label %INITED_BB2
INITED_BB2: ; preds = %NOTINITED_BB3, %INIT_BB1
br label %BB3
BB3: ; preds = %INITED_BB2
br label %BB2
BB2: ; preds = %BB3
%VTABLE_30 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* @mono_dummy_got, i32 0, i32 30), !invariant.load !2
%8 = ptrtoint i64* %VTABLE_30 to i64
%9 = notail call monocc noalias nonnull i64* @p_1_plt_wrapper_alloc_object_AllocSmall_intptr_intptr_llvm(i64 %8, i64 17)
%10 = bitcast i64* %9 to i8*
%11 = getelementptr i8, i8* %10, i32 16
store i8 10, i8* %11
%12 = notail call monocc i32 @p_2_plt_System_GC_GetGeneration_object_llvm(i64* %9)
%13 = bitcast %"System.Span`1<byte>"* %arg_span to i8*
%14 = bitcast %"System.Span`1<byte>"* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %14, i8* %13, i32 24, i32 0, i1 false)
store i8 10, i8* %0
br label %BB8
BB8: ; preds = %BB2
%TYPE_FROM_HANDLE_31 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* @mono_dummy_got, i32 0, i32 31), !invariant.load !2
%TYPE_FROM_HANDLE_32 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* @mono_dummy_got, i32 0, i32 32), !invariant.load !2
%15 = icmp eq i64* %TYPE_FROM_HANDLE_31, %TYPE_FROM_HANDLE_32
%t37 = zext i1 %15 to i32
%16 = icmp eq i32 %t37, 0
br i1 %16, label %BB10, label %BB11
BB10: ; preds = %BB8
%TYPE_FROM_HANDLE_311 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* @mono_dummy_got, i32 0, i32 31), !invariant.load !2
%TYPE_FROM_HANDLE_33 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* @mono_dummy_got, i32 0, i32 33), !invariant.load !2
%17 = icmp eq i64* %TYPE_FROM_HANDLE_311, %TYPE_FROM_HANDLE_33
%t63 = zext i1 %17 to i32
%18 = icmp eq i32 %t63, 0
br i1 %18, label %BB12, label %BB13
BB11: ; preds = %BB8
%19 = bitcast %"System.Span`1<byte>"* %1 to i8*
%20 = bitcast %"System.Span`1<byte>"* %3 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %20, i8* %19, i32 24, i32 0, i1 false)
%21 = notail call monocc i64* @p_3_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %3)
%22 = load volatile i8, i8* %0
%23 = zext i8 %22 to i32
%24 = bitcast %"System.Span`1<byte>"* %1 to i32*
%25 = getelementptr i32, i32* %24, i32 4
%t56 = load volatile i32, i32* %25
%26 = notail call monocc i32 @p_6_plt_System_SpanHelpers_IndexOf_byte__byte_int_llvm(i64* %21, i32 %23, i32 %t56)
br label %BB7
BB12: ; preds = %BB10
%27 = bitcast %"System.Span`1<byte>"* %1 to i8*
%28 = bitcast %"System.Span`1<byte>"* %5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %28, i8* %27, i32 24, i32 0, i1 false)
%29 = notail call monocc i64* @p_3_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %5)
%30 = load volatile i8, i8* %0
%31 = zext i8 %30 to i32
%32 = bitcast %"System.Span`1<byte>"* %1 to i32*
%33 = getelementptr i32, i32* %32, i32 4
%t96 = load volatile i32, i32* %33
%34 = notail call monocc i32 @p_4_plt_System_SpanHelpers_IndexOf_byte_byte__byte_int_llvm(i64* %29, i32 %31, i32 %t96)
br label %BB7
BB13: ; preds = %BB10
%35 = bitcast %"System.Span`1<byte>"* %1 to i8*
%36 = bitcast %"System.Span`1<byte>"* %4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %36, i8* %35, i32 24, i32 0, i1 false)
%37 = notail call monocc i64* @p_3_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %4)
%38 = bitcast i8* %0 to i16*
%39 = load i16, i16* %38
%40 = zext i16 %39 to i32
%41 = bitcast %"System.Span`1<byte>"* %1 to i32*
%42 = getelementptr i32, i32* %41, i32 4
%t82 = load volatile i32, i32* %42
%43 = notail call monocc i32 @p_5_plt_System_SpanHelpers_IndexOf_char__char_int_llvm(i64* %37, i32 %40, i32 %t82)
br label %BB7
BB7: ; preds = %BB11, %BB13, %BB12
%44 = phi i32 [ %26, %BB11 ], [ %43, %BB13 ], [ %34, %BB12 ]
br label %BB4
BB4: ; preds = %BB7
br label %BB1
BB1: ; preds = %BB4
ret i32 %44
NOTINITED_BB3: ; preds = %INIT_BB1
call monocc void @mono_aot_SpanCrashinit_method(i32 0)
br label %INITED_BB2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment