-
-
Save alexanderkyte/c41042febf7d7511fb15bb997bf1c77b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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