Skip to content

Instantly share code, notes, and snippets.

@alexanderkyte
Created April 29, 2019 17:04
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/1583bc6e27bb0f1bc56eda4d1bd86a21 to your computer and use it in GitHub Desktop.
Save alexanderkyte/1583bc6e27bb0f1bc56eda4d1bd86a21 to your computer and use it in GitHub Desktop.
More split up
using System;
using System.Runtime.CompilerServices;
namespace SpanCrash
{
class MainClass
{
[MethodImpl(MethodImplOptions.NoInlining)]
private static int SpanIndexOfInner (Span<byte> span)
{
byte ByteLF = (byte)'\n';
return span.IndexOf(ByteLF);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static int SpanIndexOf(byte[] backingArray)
{
var span = new Span<byte>(backingArray);
return SpanIndexOfInner (span);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void AssertOnBytes()
{
byte[] backingArray = new byte[195];
backingArray[0] = (byte)71;
backingArray[1] = (byte)69;
backingArray[2] = (byte)84;
backingArray[3] = (byte)32;
backingArray[4] = (byte)47;
backingArray[5] = (byte)112;
backingArray[6] = (byte)108;
backingArray[7] = (byte)97;
backingArray[8] = (byte)105;
backingArray[9] = (byte)110;
backingArray[10] = (byte)116;
backingArray[11] = (byte)101;
backingArray[12] = (byte)120;
backingArray[13] = (byte)116;
backingArray[14] = (byte)32;
backingArray[15] = (byte)72;
backingArray[16] = (byte)84;
backingArray[17] = (byte)84;
backingArray[18] = (byte)80;
backingArray[19] = (byte)47;
backingArray[20] = (byte)49;
backingArray[21] = (byte)46;
backingArray[22] = (byte)49;
backingArray[23] = (byte)13;
backingArray[24] = (byte)10;
backingArray[25] = (byte)72;
backingArray[26] = (byte)111;
backingArray[27] = (byte)115;
backingArray[28] = (byte)116;
backingArray[29] = (byte)58;
backingArray[30] = (byte)32;
backingArray[31] = (byte)49;
backingArray[32] = (byte)50;
backingArray[33] = (byte)55;
backingArray[34] = (byte)46;
backingArray[35] = (byte)48;
backingArray[36] = (byte)46;
backingArray[37] = (byte)48;
backingArray[38] = (byte)46;
backingArray[39] = (byte)49;
backingArray[40] = (byte)58;
backingArray[41] = (byte)56;
backingArray[42] = (byte)48;
backingArray[43] = (byte)56;
backingArray[44] = (byte)48;
backingArray[45] = (byte)13;
backingArray[46] = (byte)10;
backingArray[47] = (byte)85;
backingArray[48] = (byte)115;
backingArray[49] = (byte)101;
backingArray[50] = (byte)114;
backingArray[51] = (byte)45;
backingArray[52] = (byte)65;
backingArray[53] = (byte)103;
backingArray[54] = (byte)101;
backingArray[55] = (byte)110;
backingArray[56] = (byte)116;
backingArray[57] = (byte)58;
backingArray[58] = (byte)32;
backingArray[59] = (byte)99;
backingArray[60] = (byte)117;
backingArray[61] = (byte)114;
backingArray[62] = (byte)108;
backingArray[63] = (byte)47;
backingArray[64] = (byte)55;
backingArray[65] = (byte)46;
backingArray[66] = (byte)52;
backingArray[67] = (byte)55;
backingArray[68] = (byte)46;
backingArray[69] = (byte)48;
backingArray[70] = (byte)13;
backingArray[71] = (byte)10;
backingArray[72] = (byte)65;
backingArray[73] = (byte)99;
backingArray[74] = (byte)99;
backingArray[75] = (byte)101;
backingArray[76] = (byte)112;
backingArray[77] = (byte)116;
backingArray[78] = (byte)58;
backingArray[79] = (byte)32;
backingArray[80] = (byte)116;
backingArray[81] = (byte)101;
backingArray[82] = (byte)120;
backingArray[83] = (byte)116;
backingArray[84] = (byte)47;
backingArray[85] = (byte)112;
backingArray[86] = (byte)108;
backingArray[87] = (byte)97;
backingArray[88] = (byte)105;
backingArray[89] = (byte)110;
backingArray[90] = (byte)44;
backingArray[91] = (byte)116;
backingArray[92] = (byte)101;
backingArray[93] = (byte)120;
backingArray[94] = (byte)116;
backingArray[95] = (byte)47;
backingArray[96] = (byte)104;
backingArray[97] = (byte)116;
backingArray[98] = (byte)109;
backingArray[99] = (byte)108;
backingArray[100] = (byte)59;
backingArray[101] = (byte)113;
backingArray[102] = (byte)61;
backingArray[103] = (byte)48;
backingArray[104] = (byte)46;
backingArray[105] = (byte)57;
backingArray[106] = (byte)44;
backingArray[107] = (byte)97;
backingArray[108] = (byte)112;
backingArray[109] = (byte)112;
backingArray[110] = (byte)108;
backingArray[111] = (byte)105;
backingArray[112] = (byte)99;
backingArray[113] = (byte)97;
backingArray[114] = (byte)116;
backingArray[115] = (byte)105;
backingArray[116] = (byte)111;
backingArray[117] = (byte)110;
backingArray[118] = (byte)47;
backingArray[119] = (byte)120;
backingArray[120] = (byte)104;
backingArray[121] = (byte)116;
backingArray[122] = (byte)109;
backingArray[123] = (byte)108;
backingArray[124] = (byte)43;
backingArray[125] = (byte)120;
backingArray[126] = (byte)109;
backingArray[127] = (byte)108;
backingArray[128] = (byte)59;
backingArray[129] = (byte)113;
backingArray[130] = (byte)61;
backingArray[131] = (byte)48;
backingArray[132] = (byte)46;
backingArray[133] = (byte)57;
backingArray[134] = (byte)44;
backingArray[135] = (byte)97;
backingArray[136] = (byte)112;
backingArray[137] = (byte)112;
backingArray[138] = (byte)108;
backingArray[139] = (byte)105;
backingArray[140] = (byte)99;
backingArray[141] = (byte)97;
backingArray[142] = (byte)116;
backingArray[143] = (byte)105;
backingArray[144] = (byte)111;
backingArray[145] = (byte)110;
backingArray[146] = (byte)47;
backingArray[147] = (byte)120;
backingArray[148] = (byte)109;
backingArray[149] = (byte)108;
backingArray[150] = (byte)59;
backingArray[151] = (byte)113;
backingArray[152] = (byte)61;
backingArray[153] = (byte)48;
backingArray[154] = (byte)46;
backingArray[155] = (byte)56;
backingArray[156] = (byte)44;
backingArray[157] = (byte)42;
backingArray[158] = (byte)47;
backingArray[159] = (byte)42;
backingArray[160] = (byte)59;
backingArray[161] = (byte)113;
backingArray[162] = (byte)61;
backingArray[163] = (byte)48;
backingArray[164] = (byte)46;
backingArray[165] = (byte)55;
backingArray[166] = (byte)13;
backingArray[167] = (byte)10;
backingArray[168] = (byte)67;
backingArray[169] = (byte)111;
backingArray[170] = (byte)110;
backingArray[171] = (byte)110;
backingArray[172] = (byte)101;
backingArray[173] = (byte)99;
backingArray[174] = (byte)116;
backingArray[175] = (byte)105;
backingArray[176] = (byte)111;
backingArray[177] = (byte)110;
backingArray[178] = (byte)58;
backingArray[179] = (byte)32;
backingArray[180] = (byte)107;
backingArray[181] = (byte)101;
backingArray[182] = (byte)101;
backingArray[183] = (byte)112;
backingArray[184] = (byte)45;
backingArray[185] = (byte)97;
backingArray[186] = (byte)108;
backingArray[187] = (byte)105;
backingArray[188] = (byte)118;
backingArray[189] = (byte)101;
backingArray[190] = (byte)13;
backingArray[191] = (byte)10;
backingArray[192] = (byte)13;
backingArray[193] = (byte)10;
var lineIndex = SpanIndexOf(backingArray);
Console.WriteLine("Line Index Was {0}", lineIndex);
byte ByteLF = (byte)'\n';
for (int i = 0; i < lineIndex; i++)
{
if (backingArray[i] == ByteLF)
{
var error = String.Format("Missed index {0} as ByteLF", i);
Console.WriteLine(error);
throw new Exception(error);
}
}
}
public static void Main(string[] args)
{
AssertOnBytes();
}
}
}
; ModuleID = 'mono_aot_kj68YA/temp.bc'
source_filename = "aot"
%MONO_GOT_SpanCrash.exe = type { i64**, i64**, i64**, i64**, i64*, i64**, i64**, i64*, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, void (i64, i32)*, void (i64, i32, i64*)*, void (i64, i32, i64)*, void (i64, i32, i64)*, i64**, i64**, void ()*, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64**, i64** }
%MonoAotFileInfo = type { i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [11 x i32], [6 x i32], [6 x i32], [6 x i32], [6 x i32], [16 x i8] }
%"System.Span`1<byte>" = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
%System.ParamsArray = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
@_ZTIPi = external constant i8*
@method_info_offsets = internal constant [32 x i8] c"\0A\00\00\00\0A\00\00\00\01\00\00\00\02\00\00\00\00\00\01\06\06\05\01\FF\FF\FF\FF\ED\14\01\01\01", align 8
@extra_method_table = internal constant [148 x i8] c"\0B\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\18\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\09\00\00\00\00\00\00\00 \00\00\00\07\00\00\00\0B\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00(\00\00\00\08\00\00\00\00\00\00\00", align 8
@extra_method_info_offsets = internal constant [36 x i8] c"\04\00\00\00\06\00\00\00\18\00\00\00\07\00\00\00 \00\00\00\08\00\00\00(\00\00\00\09\00\00\000\00\00\00", align 8
@class_name_table = internal constant [50 x i8] c"\0B\00\01\00\0B\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00", align 8
@got_info_offsets = internal constant [53 x i8] c"\1E\00\00\00\0A\00\00\00\03\00\00\00\02\00\00\00\00\00\0A\00\14\008\02\01\01\01\01\01\01\01\02E\02\02\02\02\02\02\02\02\1B\80\88%''(#\1A!\1D\19", align 8
@llvm_got_info_offsets = internal constant [68 x i8] c"(\00\00\00\0A\00\00\00\04\00\00\00\02\00\00\00\00\00\0B\00\16\00!\00\82\DE\02\01\01\01\01\01\01\01\02\82\EB\02\02\02\02\02\02\02\02\1B\83.%''(#\1A!\1D\19\84u\0A\0A\14\14\04\06\0A\06\03", align 8
@ex_info_offsets = internal constant [34 x i8] c"\0A\00\00\00\0A\00\00\00\01\00\00\00\02\00\00\00\00\00\84\D2\05\05\05\05\FF\FF\FF\FB\1A\84\EB\05\05\05", align 8
@class_info_offsets = internal constant [21 x i8] c"\02\00\00\00\0A\00\00\00\01\00\00\00\02\00\00\00\00\00\84\FF\07", align 8
@image_table = internal constant [364 x i8] c"\04\00\00\00mscorlib\00F53F0FCF-E639-4B5A-8CC3-3FAE7DFE8C12\00\00b77a5c561934e089\00\00\00\00\00\01\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00SpanCrash\00A26453A0-73D7-4E2B-A5FB-A1FC09A4BDA1\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\92\1B\00\00\A9[\00\00System.Memory\00EAD79779-B248-4629-B72A-74757C91B215\00\00cc7b13ffcd2ddd51\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00System.Runtime.CompilerServices.Unsafe\00E8ADE3B6-27CC-4A94-903F-BB71C974A4BA\00\00\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00", align 8
@weak_field_indexes = internal constant [4 x i8] zeroinitializer, align 8
@blob = internal constant [1306 x i8] c"\00\04\04\1E \1E\1F\04\04!$#\22\04\03%'&\00\00\00\00\00\00\FF\FC\00\00\00\16\1D\00\FF\FC\00\00\00\16\1D\01\FF\FC\00\00\00\16\1D\03\FF\FC\00\00\00\16\1D\02\0C\01$&.24 07\008\007\018\017\028\027\038\037\048\049\18mono_threads_attach_coop\00\07\15mini_llvm_init_method\00\07\22mini_llvm_init_gshared_method_this\00\07$mini_llvm_init_gshared_method_mrgctx\00\07$mini_llvm_init_gshared_method_vtable\00\07%mini_llvmonly_throw_nullref_exception\00\07 mono_llvm_throw_corlib_exception\00\07\17mono_threads_state_poll\00\07\1Emini_llvmonly_init_vtable_slot\00\07\1Amono_helper_ldstr_mscorlib\00\07\16mono_fill_method_rgctx\00\07\15mono_fill_class_rgctx\00\01\01\80\CA\03\FF\FD\00\00\00\02\1C\02\02\81u\02\81\CF\03\FF\FD\00\00\00\02\13\02\02\81(\02\81\CF\03\C2\00\01!\03\C2\00\01\12\03\C1\00\00\01\07\17mono_generic_class_init\00\03\C2\00\00\0C\03\FF\FC\00\00\00\19\01\03\C1\00\00\02\03\FF\FC\00\00\00\19\02\03\98\F5\07*llvm_throw_corlib_exception_abs_trampoline\00\07\11mono_helper_ldstr\00\07\1Bmono_helper_newobj_mscorlib\00\03\8E\18\03\98\F2\07\1Emono_create_corlib_exception_1\00\07\19mono_arch_throw_exception\00\03\C1\00\00\03\0C\01$&.24 07\008\007\018\017\028\027\038\037\048\049\18mono_threads_attach_coop\00\07\15mini_llvm_init_method\00\07\22mini_llvm_init_gshared_method_this\00\07$mini_llvm_init_gshared_method_mrgctx\00\07$mini_llvm_init_gshared_method_vtable\00\07%mini_llvmonly_throw_nullref_exception\00\07 mono_llvm_throw_corlib_exception\00\07\17mono_threads_state_poll\00\07\1Emini_llvmonly_init_vtable_slot\00\07\1Amono_helper_ldstr_mscorlib\00\07\16mono_fill_method_rgctx\00\07\15mono_fill_class_rgctx\00\12\02\DB\00\00\0D\01\02\81\CF\12\02\C1\00\00M\01\02\81\CF\12\02\C1\00\00]\01\02\81\CF\04\02\15\02\81\CF\01\07\84\93!\FF\FD\00\00\00\02\02\03\03\13\02\84\99\04\02:\02\81\CF\0E\07\84\AB\0F\07\84\AB\80\DE\12\02\DB\00\00\14\01\01\81\CF\0E\06\01\01\80\CA\10\01\01\0E\01\81\10\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\18\00\00\00\00\00\80\90\10\00\00\01\04\80\90\10\00\00\01\9A\D5\9A\D2\9A\D1\9A\CEsgen\00", align 8
@runtime_version = internal constant [1 x i8] zeroinitializer, align 8
@assembly_guid = internal constant [37 x i8] c"A26453A0-73D7-4E2B-A5FB-A1FC09A4BDA1\00", align 8
@assembly_name = internal constant [10 x i8] c"SpanCrash\00", align 8
@mono_aot_SpanCrash_llvm_got = hidden global %MONO_GOT_SpanCrash.exe zeroinitializer
@mono_inited = internal global [3 x i8] zeroinitializer
@SpanCrash_unbox_tramp_indexes = global [0 x i16] zeroinitializer
@SpanCrash_unbox_trampolines = global [0 x i8*] zeroinitializer
@llvm.used = appending global [12 x i8*] [i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* bitcast (i32 (%"System.Span`1<byte>"*)* @SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte to i8*), i8* bitcast (i32 (i64*)* @SpanCrash_MainClass_SpanIndexOf_byte__ to i8*), i8* bitcast (void ()* @SpanCrash_MainClass_AssertOnBytes to i8*), i8* bitcast (void (i64*)* @SpanCrash_MainClass_Main_string__ to i8*), i8* bitcast (void (i64*)* @SpanCrash_MainClass__ctor to i8*), i8* bitcast (void (i32)* @mono_aot_SpanCrashinit_method to i8*), i8* bitcast (void (i32, i64)* @mono_aot_SpanCrashinit_method_gshared_mrgctx to i8*), i8* bitcast (void (i32, i64)* @mono_aot_SpanCrashinit_method_gshared_vtable to i8*), i8* bitcast (void (i32, i64*)* @mono_aot_SpanCrashinit_method_gshared_this to i8*), i8* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to i8*), i8* bitcast (i8* (i32)* @mono_aot_SpanCrash_get_method to i8*)], section "llvm.metadata"
@mono_aot_file_info = global %MonoAotFileInfo { i32 159, i32 0, i8* @mono_aot_SpanCrashjit_got, i8* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to i8*), i8* bitcast (i8** @mono_aot_SpanCrash_eh_frame to i8*), i8* bitcast (i8* (i32)* @mono_aot_SpanCrash_get_method to i8*), i8* null, i8* null, i8* null, i8* @mono_aot_SpanCrashmethod_addresses, i8* null, i8* null, i8* getelementptr inbounds ([1306 x i8], [1306 x i8]* @blob, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @class_name_table, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @class_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @method_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @ex_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @extra_method_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([148 x i8], [148 x i8]* @extra_method_table, i32 0, i32 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @got_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([68 x i8], [68 x i8]* @llvm_got_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([364 x i8], [364 x i8]* @image_table, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @weak_field_indexes, i32 0, i32 0), i8* null, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @assembly_guid, i32 0, i32 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @runtime_version, i32 0, i32 0), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @assembly_name, i32 0, i32 0), i8* @mono_aot_SpanCrashplt, i8* @mono_aot_SpanCrashplt_end, i8* @mono_aot_SpanCrashunwind_info, i8* @mono_aot_SpanCrashunbox_trampolines, i8* @mono_aot_SpanCrashunbox_trampolines_end, i8* @mono_aot_SpanCrashunbox_trampoline_addresses, i32 30, i32 400, i32 20, i32 10, i32 4, i32 33, i32 374434303, i32 63, i32 1301, i32 128, i32 8, i32 8, i32 8, i32 9, i32 8388607, i32 0, i32 30, i32 0, i32 0, i32 2, [11 x i32] zeroinitializer, [6 x i32] zeroinitializer, [6 x i32] zeroinitializer, [6 x i32] zeroinitializer, [6 x i32] zeroinitializer, [16 x i8] c"\CA8\0D\A3&o\10\D3\C3\F6\D9\8Di\BF\1A\E2" }
@mono_aot_SpanCrashjit_got = external hidden global i8
@mono_aot_SpanCrash_eh_frame = external global i8*
@mono_aot_SpanCrashmethod_addresses = external hidden global i8
@mono_aot_SpanCrashplt = external hidden global i8
@mono_aot_SpanCrashplt_end = external hidden global i8
@mono_aot_SpanCrashunwind_info = external hidden global i8
@mono_aot_SpanCrashunbox_trampolines = external hidden global i8
@mono_aot_SpanCrashunbox_trampolines_end = external hidden global i8
@mono_aot_SpanCrashunbox_trampoline_addresses = external hidden global i8
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i32, i1) #0
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1) #0
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.usub.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone speculatable
declare double @llvm.sin.f64(double) #1
; Function Attrs: nounwind readnone speculatable
declare double @llvm.cos.f64(double) #1
; Function Attrs: nounwind readnone speculatable
declare double @llvm.sqrt.f64(double) #1
declare double @fabs(double)
; Function Attrs: nounwind readnone speculatable
declare float @llvm.fabs.f32(float) #1
; Function Attrs: nounwind readnone speculatable
declare float @llvm.sin.f32(float) #1
; Function Attrs: nounwind readnone speculatable
declare float @llvm.cos.f32(float) #1
; Function Attrs: nounwind readnone speculatable
declare float @llvm.sqrt.f32(float) #1
; Function Attrs: nounwind readnone speculatable
declare float @llvm.pow.f32(float, float) #1
; Function Attrs: nounwind readnone
declare i8 @llvm.expect.i8(i8, i8) #2
; Function Attrs: nounwind readnone
declare i1 @llvm.expect.i1(i1, i1) #2
; Function Attrs: nounwind readnone
declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16>, i32) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16>, i32) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16>, i32) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32>, i32) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32>, i32) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32>, i32) #2
; Function Attrs: nounwind readnone
declare <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64>, i32) #2
; Function Attrs: nounwind readnone
declare <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64>, i32) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double>) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) #2
; Function Attrs: nounwind readnone
declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double>, <2 x double>, i8) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.packssdw.128(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float>, <4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float>, <4 x float>) #2
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float>, <4 x float>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse2.min.pd(<2 x double>, <2 x double>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double>, <2 x double>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16>, <8 x i16>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8>, <16 x i8>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8>, <16 x i8>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8>, <16 x i8>) #2
; Function Attrs: nounwind readnone
declare <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8>, <16 x i8>) #2
; Function Attrs: nounwind
declare void @llvm.x86.sse2.pause() #3
; Function Attrs: nounwind readnone
declare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) #2
; Function Attrs: nounwind readnone
declare <2 x double> @llvm.x86.sse41.round.pd(<4 x float>, i32) #2
declare void @mono_personality()
declare void @llvm_resume_unwind_trampoline()
declare i8 @llvm.mono.load.i8.p0i8(i8*, i32, i1, i32)
declare void @llvm.mono.store.i8.p0i8(i8, i8*, i32, i1, i32)
declare i16 @llvm.mono.load.i16.p0i16(i16*, i32, i1, i32)
declare void @llvm.mono.store.i16.p0i16(i16, i16*, i32, i1, i32)
declare i32 @llvm.mono.load.i32.p0i32(i32*, i32, i1, i32)
declare void @llvm.mono.store.i32.p0i32(i32, i32*, i32, i1, i32)
declare i64 @llvm.mono.load.i64.p0i64(i64*, i32, i1, i32)
declare void @llvm.mono.store.i64.p0i64(i64, i64*, i32, i1, i32)
; Function Attrs: nounwind
define weak_odr void @gc.safepoint_poll() #3 {
gc.safepoint_poll.entry:
%0 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 7)
%1 = load i64, i64* %0
%2 = icmp eq i64 %1, 0
br i1 %2, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll
gc.safepoint_poll.poll: ; preds = %gc.safepoint_poll.entry
%3 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 25)
%4 = bitcast i64* %3 to void ()*
call void %4()
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %gc.safepoint_poll.poll, %gc.safepoint_poll.entry
ret void
}
; Function Attrs: nounwind
define internal void @llvm_code_start() #3 {
ENTRY:
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_SpanCrashinit_method(i32) #4 {
ENTRY:
%1 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 4)
%2 = ptrtoint i64* %1 to i64
%3 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 19)
%4 = bitcast i64* %3 to void (i64, i32)*
call void %4(i64 %2, i32 %0)
%5 = getelementptr [0 x i8], [0 x i8]* bitcast ([3 x i8]* @mono_inited to [0 x i8]*), i32 0, i32 %0
store i8 1, i8* %5
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_SpanCrashinit_method_gshared_mrgctx(i32, i64) #4 {
ENTRY:
%2 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 4)
%3 = ptrtoint i64* %2 to i64
%4 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 21)
%5 = bitcast i64* %4 to void (i64, i32, i64)*
call void %5(i64 %3, i32 %0, i64 %1)
%6 = getelementptr [0 x i8], [0 x i8]* bitcast ([3 x i8]* @mono_inited to [0 x i8]*), i32 0, i32 %0
store i8 1, i8* %6
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_SpanCrashinit_method_gshared_this(i32, i64*) #4 {
ENTRY:
%2 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 4)
%3 = ptrtoint i64* %2 to i64
%4 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 20)
%5 = bitcast i64* %4 to void (i64, i32, i64*)*
call void %5(i64 %3, i32 %0, i64* %1)
%6 = getelementptr [0 x i8], [0 x i8]* bitcast ([3 x i8]* @mono_inited to [0 x i8]*), i32 0, i32 %0
store i8 1, i8* %6
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_SpanCrashinit_method_gshared_vtable(i32, i64) #4 {
ENTRY:
%2 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 4)
%3 = ptrtoint i64* %2 to i64
%4 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 22)
%5 = bitcast i64* %4 to void (i64, i32, i64)*
call void %5(i64 %3, i32 %0, i64 %1)
%6 = getelementptr [0 x i8], [0 x i8]* bitcast ([3 x i8]* @mono_inited to [0 x i8]*), i32 0, i32 %0
store i8 1, i8* %6
ret void
}
declare i32 @__gxx_personality_v0(...)
; Function Attrs: noinline uwtable
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 ([3 x i8], [3 x i8]* @mono_inited, 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
%8 = bitcast %"System.Span`1<byte>"* %arg_span to i8*
%9 = bitcast %"System.Span`1<byte>"* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %9, i8* %8, i32 24, i32 0, i1 false)
store i8 10, i8* %0
br label %BB8
BB8: ; preds = %BB2
%TYPE_FROM_HANDLE_30 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 30), !invariant.load !14
%TYPE_FROM_HANDLE_31 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 31), !invariant.load !14
%10 = icmp eq i64* %TYPE_FROM_HANDLE_30, %TYPE_FROM_HANDLE_31
%t29 = zext i1 %10 to i32
%11 = icmp eq i32 %t29, 0
br i1 %11, label %BB10, label %BB11
BB10: ; preds = %BB8
%TYPE_FROM_HANDLE_301 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 30), !invariant.load !14
%TYPE_FROM_HANDLE_32 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 32), !invariant.load !14
%12 = icmp eq i64* %TYPE_FROM_HANDLE_301, %TYPE_FROM_HANDLE_32
%t55 = zext i1 %12 to i32
%13 = icmp eq i32 %t55, 0
br i1 %13, label %BB12, label %BB13
BB11: ; preds = %BB8
%14 = bitcast %"System.Span`1<byte>"* %1 to i8*
%15 = bitcast %"System.Span`1<byte>"* %3 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %15, i8* %14, i32 24, i32 0, i1 false)
%16 = notail call monocc i64* @p_1_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %3)
%17 = load volatile i8, i8* %0
%18 = zext i8 %17 to i32
%19 = bitcast %"System.Span`1<byte>"* %1 to i32*
%20 = getelementptr i32, i32* %19, i32 4
%t48 = load volatile i32, i32* %20
%21 = notail call monocc i32 @p_4_plt_System_SpanHelpers_IndexOf_byte__byte_int_llvm(i64* %16, i32 %18, i32 %t48)
br label %BB7
BB12: ; preds = %BB10
%22 = bitcast %"System.Span`1<byte>"* %1 to i8*
%23 = bitcast %"System.Span`1<byte>"* %5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %23, i8* %22, i32 24, i32 0, i1 false)
%24 = notail call monocc i64* @p_1_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %5)
%25 = load volatile i8, i8* %0
%26 = zext i8 %25 to i32
%27 = bitcast %"System.Span`1<byte>"* %1 to i32*
%28 = getelementptr i32, i32* %27, i32 4
%t88 = load volatile i32, i32* %28
%29 = notail call monocc i32 @p_2_plt_System_SpanHelpers_IndexOf_byte_byte__byte_int_llvm(i64* %24, i32 %26, i32 %t88)
br label %BB7
BB13: ; preds = %BB10
%30 = bitcast %"System.Span`1<byte>"* %1 to i8*
%31 = bitcast %"System.Span`1<byte>"* %4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %31, i8* %30, i32 24, i32 0, i1 false)
%32 = notail call monocc i64* @p_1_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"* byval %4)
%33 = bitcast i8* %0 to i16*
%34 = load i16, i16* %33
%35 = zext i16 %34 to i32
%36 = bitcast %"System.Span`1<byte>"* %1 to i32*
%37 = getelementptr i32, i32* %36, i32 4
%t74 = load volatile i32, i32* %37
%38 = notail call monocc i32 @p_3_plt_System_SpanHelpers_IndexOf_char__char_int_llvm(i64* %32, i32 %35, i32 %t74)
br label %BB7
BB7: ; preds = %BB13, %BB12, %BB11
%39 = phi i32 [ %21, %BB11 ], [ %38, %BB13 ], [ %29, %BB12 ]
br label %BB4
BB4: ; preds = %BB7
br label %BB1
BB1: ; preds = %BB4
ret i32 %39
NOTINITED_BB3: ; preds = %INIT_BB1
call monocc void @mono_aot_SpanCrashinit_method(i32 0)
br label %INITED_BB2
}
declare hidden i64* @p_1_plt_System_Runtime_InteropServices_MemoryMarshal_GetReference_byte_System_Span_1_byte_llvm(%"System.Span`1<byte>"*)
declare hidden i32 @p_2_plt_System_SpanHelpers_IndexOf_byte_byte__byte_int_llvm(i64*, i32, i32)
declare hidden i32 @p_3_plt_System_SpanHelpers_IndexOf_char__char_int_llvm(i64*, i32, i32)
declare hidden i32 @p_4_plt_System_SpanHelpers_IndexOf_byte__byte_int_llvm(i64*, i32, i32)
; Function Attrs: noinline uwtable
define hidden monocc i32 @SpanCrash_MainClass_SpanIndexOf_byte__(i64* %arg_backingArray) #5 gc "mono" {
BB0:
%0 = alloca %"System.Span`1<byte>", align 8
%1 = alloca %"System.Span`1<byte>", align 8
br label %INIT_BB1
INIT_BB1: ; preds = %BB0
%is_inited = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @mono_inited, i32 0, i32 1)
%2 = call i8 @llvm.expect.i8(i8 %is_inited, i8 1)
%3 = icmp eq i8 %2, 0
br i1 %3, label %NOTINITED_BB3, label %INITED_BB2
INITED_BB2: ; preds = %NOTINITED_BB3, %INIT_BB1
br label %BB3
BB3: ; preds = %INITED_BB2
%4 = bitcast %"System.Span`1<byte>"* %0 to i8*
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 24, i32 0, i1 false)
br label %BB2
BB2: ; preds = %BB3
br label %BB8
BB8: ; preds = %BB2
%5 = ptrtoint i64* %arg_backingArray to i64
%6 = icmp ne i64 %5, 0
br i1 %6, label %BB10, label %BB11
BB10: ; preds = %BB8
br i1 true, label %BB12, label %BB13
BB11: ; preds = %BB8
%7 = bitcast %"System.Span`1<byte>"* %0 to i64*
%8 = getelementptr i64, i64* %7, i32 0
store i64 0, i64* %8
%9 = bitcast %"System.Span`1<byte>"* %0 to i64*
%10 = getelementptr i64, i64* %9, i32 1
store i64 0, i64* %10
%11 = bitcast %"System.Span`1<byte>"* %0 to i64*
%12 = getelementptr i64, i64* %11, i32 2
store i64 0, i64* %12
br label %BB7
BB12: ; preds = %BB14, %BB13, %BB10
%13 = bitcast i64* %arg_backingArray to i32*
%14 = getelementptr i32, i32* %13, i32 6
%t47 = load volatile i32, i32* %14
%15 = bitcast %"System.Span`1<byte>"* %0 to i32*
%16 = getelementptr i32, i32* %15, i32 4
store volatile i32 %t47, i32* %16
%METHOD_RGCTX_33 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 33), !invariant.load !14
%17 = bitcast %"System.Span`1<byte>"* %0 to i64*
%18 = getelementptr i64, i64* %17, i32 0
%19 = ptrtoint i64* %arg_backingArray to i64
store volatile i64 %19, i64* %18
%20 = ptrtoint %"System.Span`1<byte>"* %0 to i64
%t56 = lshr i64 %20, 9
%t69 = and i64 %t56, 8388607
%GC_CARD_TABLE_ADDR_2 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 2), !invariant.load !14
%21 = ptrtoint i64* %GC_CARD_TABLE_ADDR_2 to i64
%t70 = add i64 %t69, %21
%22 = inttoptr i64 %t70 to i8*
%23 = getelementptr i8, i8* %22, i32 0
store i8 1, i8* %23
%VTABLE_34 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 34), !invariant.load !14
%24 = bitcast i64* %VTABLE_34 to i8*
%25 = getelementptr i8, i8* %24, i32 45
%26 = load i8, i8* %25
%27 = zext i8 %26 to i32
%28 = sext i32 %27 to i64
%29 = icmp ne i64 %28, 0
br i1 %29, label %BB30, label %BB31
BB13: ; preds = %BB10
%t32 = load volatile i64, i64* %arg_backingArray
%30 = inttoptr i64 %t32 to i64*
%31 = getelementptr i64, i64* %30, i32 3
%t31 = load i64, i64* %31
%TYPE_FROM_HANDLE_36 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 36), !invariant.load !14
%32 = ptrtoint i64* %TYPE_FROM_HANDLE_36 to i64
%33 = icmp eq i64 %t31, %32
%t39 = zext i1 %33 to i32
%34 = icmp eq i32 %t39, 0
%t42 = zext i1 %34 to i32
%35 = trunc i32 %t42 to i8
%t43 = zext i8 %35 to i32
%36 = icmp eq i32 %t43, 0
br i1 %36, label %BB12, label %BB14
BB30: ; preds = %BB31, %BB12
%SFLDA_35 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 35), !invariant.load !14
%t63 = load i64, i64* %SFLDA_35
%37 = bitcast %"System.Span`1<byte>"* %0 to i64*
%38 = getelementptr i64, i64* %37, i32 1
store volatile i64 %t63, i64* %38
br label %BB7
BB31: ; preds = %BB12
%39 = ptrtoint i64* %VTABLE_34 to i64
notail call void @p_6_plt__jit_icall_mono_generic_class_init_llvm(i64 %39)
br label %BB30
BB7: ; preds = %BB30, %BB11
%40 = bitcast %"System.Span`1<byte>"* %0 to i8*
%41 = bitcast %"System.Span`1<byte>"* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %41, i8* %40, i32 24, i32 0, i1 false)
%42 = notail call monocc i32 @SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte(%"System.Span`1<byte>"* byval %1)
br label %BB4
BB4: ; preds = %BB7
br label %BB1
BB1: ; preds = %BB4
ret i32 %42
BB14: ; preds = %BB13
notail call monocc void @p_7_plt_System_ThrowHelper_ThrowArrayTypeMismatchException_llvm()
br label %BB12
NOTINITED_BB3: ; preds = %INIT_BB1
call monocc void @mono_aot_SpanCrashinit_method(i32 1)
br label %INITED_BB2
}
declare hidden i32 @p_5_plt_SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte_llvm(%"System.Span`1<byte>"*)
declare hidden void @p_6_plt__jit_icall_mono_generic_class_init_llvm(i64)
declare hidden void @p_7_plt_System_ThrowHelper_ThrowArrayTypeMismatchException_llvm()
; Function Attrs: noinline uwtable
define hidden monocc void @SpanCrash_MainClass_AssertOnBytes() #5 gc "mono" {
BB0:
%0 = alloca %System.ParamsArray, align 8
br label %INIT_BB1
INIT_BB1: ; preds = %BB0
%is_inited = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @mono_inited, i32 0, i32 2)
%1 = call i8 @llvm.expect.i8(i8 %is_inited, i8 1)
%2 = icmp eq i8 %1, 0
br i1 %2, label %NOTINITED_BB6, label %INITED_BB2
INITED_BB2: ; preds = %NOTINITED_BB6, %INIT_BB1
br label %BB3
BB3: ; preds = %INITED_BB2
br label %BB2
BB2: ; preds = %BB3
%VTABLE_37 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 37), !invariant.load !14
%3 = ptrtoint i64* %VTABLE_37 to i64
%4 = notail call monocc noalias nonnull i64* @p_8_plt_wrapper_alloc_object_AllocVector_intptr_intptr_llvm(i64 %3, i64 195)
%5 = bitcast i64* %4 to i8*
%6 = getelementptr i8, i8* %5, i32 32
store i8 71, i8* %6
%7 = bitcast i64* %4 to i8*
%8 = getelementptr i8, i8* %7, i32 33
store i8 69, i8* %8
%9 = bitcast i64* %4 to i8*
%10 = getelementptr i8, i8* %9, i32 34
store i8 84, i8* %10
%11 = bitcast i64* %4 to i8*
%12 = getelementptr i8, i8* %11, i32 35
store i8 32, i8* %12
%13 = bitcast i64* %4 to i8*
%14 = getelementptr i8, i8* %13, i32 36
store i8 47, i8* %14
%15 = bitcast i64* %4 to i8*
%16 = getelementptr i8, i8* %15, i32 37
store i8 112, i8* %16
%17 = bitcast i64* %4 to i8*
%18 = getelementptr i8, i8* %17, i32 38
store i8 108, i8* %18
%19 = bitcast i64* %4 to i8*
%20 = getelementptr i8, i8* %19, i32 39
store i8 97, i8* %20
%21 = bitcast i64* %4 to i8*
%22 = getelementptr i8, i8* %21, i32 40
store i8 105, i8* %22
%23 = bitcast i64* %4 to i8*
%24 = getelementptr i8, i8* %23, i32 41
store i8 110, i8* %24
%25 = bitcast i64* %4 to i8*
%26 = getelementptr i8, i8* %25, i32 42
store i8 116, i8* %26
%27 = bitcast i64* %4 to i8*
%28 = getelementptr i8, i8* %27, i32 43
store i8 101, i8* %28
%29 = bitcast i64* %4 to i8*
%30 = getelementptr i8, i8* %29, i32 44
store i8 120, i8* %30
%31 = bitcast i64* %4 to i8*
%32 = getelementptr i8, i8* %31, i32 45
store i8 116, i8* %32
%33 = bitcast i64* %4 to i8*
%34 = getelementptr i8, i8* %33, i32 46
store i8 32, i8* %34
%35 = bitcast i64* %4 to i8*
%36 = getelementptr i8, i8* %35, i32 47
store i8 72, i8* %36
%37 = bitcast i64* %4 to i8*
%38 = getelementptr i8, i8* %37, i32 48
store i8 84, i8* %38
%39 = bitcast i64* %4 to i8*
%40 = getelementptr i8, i8* %39, i32 49
store i8 84, i8* %40
%41 = bitcast i64* %4 to i8*
%42 = getelementptr i8, i8* %41, i32 50
store i8 80, i8* %42
%43 = bitcast i64* %4 to i8*
%44 = getelementptr i8, i8* %43, i32 51
store i8 47, i8* %44
%45 = bitcast i64* %4 to i8*
%46 = getelementptr i8, i8* %45, i32 52
store i8 49, i8* %46
%47 = bitcast i64* %4 to i8*
%48 = getelementptr i8, i8* %47, i32 53
store i8 46, i8* %48
%49 = bitcast i64* %4 to i8*
%50 = getelementptr i8, i8* %49, i32 54
store i8 49, i8* %50
%51 = bitcast i64* %4 to i8*
%52 = getelementptr i8, i8* %51, i32 55
store i8 13, i8* %52
%53 = bitcast i64* %4 to i8*
%54 = getelementptr i8, i8* %53, i32 56
store i8 10, i8* %54
%55 = bitcast i64* %4 to i8*
%56 = getelementptr i8, i8* %55, i32 57
store i8 72, i8* %56
%57 = bitcast i64* %4 to i8*
%58 = getelementptr i8, i8* %57, i32 58
store i8 111, i8* %58
%59 = bitcast i64* %4 to i8*
%60 = getelementptr i8, i8* %59, i32 59
store i8 115, i8* %60
%61 = bitcast i64* %4 to i8*
%62 = getelementptr i8, i8* %61, i32 60
store i8 116, i8* %62
%63 = bitcast i64* %4 to i8*
%64 = getelementptr i8, i8* %63, i32 61
store i8 58, i8* %64
%65 = bitcast i64* %4 to i8*
%66 = getelementptr i8, i8* %65, i32 62
store i8 32, i8* %66
%67 = bitcast i64* %4 to i8*
%68 = getelementptr i8, i8* %67, i32 63
store i8 49, i8* %68
%69 = bitcast i64* %4 to i8*
%70 = getelementptr i8, i8* %69, i32 64
store i8 50, i8* %70
%71 = bitcast i64* %4 to i8*
%72 = getelementptr i8, i8* %71, i32 65
store i8 55, i8* %72
%73 = bitcast i64* %4 to i8*
%74 = getelementptr i8, i8* %73, i32 66
store i8 46, i8* %74
%75 = bitcast i64* %4 to i8*
%76 = getelementptr i8, i8* %75, i32 67
store i8 48, i8* %76
%77 = bitcast i64* %4 to i8*
%78 = getelementptr i8, i8* %77, i32 68
store i8 46, i8* %78
%79 = bitcast i64* %4 to i8*
%80 = getelementptr i8, i8* %79, i32 69
store i8 48, i8* %80
%81 = bitcast i64* %4 to i8*
%82 = getelementptr i8, i8* %81, i32 70
store i8 46, i8* %82
%83 = bitcast i64* %4 to i8*
%84 = getelementptr i8, i8* %83, i32 71
store i8 49, i8* %84
%85 = bitcast i64* %4 to i8*
%86 = getelementptr i8, i8* %85, i32 72
store i8 58, i8* %86
%87 = bitcast i64* %4 to i8*
%88 = getelementptr i8, i8* %87, i32 73
store i8 56, i8* %88
%89 = bitcast i64* %4 to i8*
%90 = getelementptr i8, i8* %89, i32 74
store i8 48, i8* %90
%91 = bitcast i64* %4 to i8*
%92 = getelementptr i8, i8* %91, i32 75
store i8 56, i8* %92
%93 = bitcast i64* %4 to i8*
%94 = getelementptr i8, i8* %93, i32 76
store i8 48, i8* %94
%95 = bitcast i64* %4 to i8*
%96 = getelementptr i8, i8* %95, i32 77
store i8 13, i8* %96
%97 = bitcast i64* %4 to i8*
%98 = getelementptr i8, i8* %97, i32 78
store i8 10, i8* %98
%99 = bitcast i64* %4 to i8*
%100 = getelementptr i8, i8* %99, i32 79
store i8 85, i8* %100
%101 = bitcast i64* %4 to i8*
%102 = getelementptr i8, i8* %101, i32 80
store i8 115, i8* %102
%103 = bitcast i64* %4 to i8*
%104 = getelementptr i8, i8* %103, i32 81
store i8 101, i8* %104
%105 = bitcast i64* %4 to i8*
%106 = getelementptr i8, i8* %105, i32 82
store i8 114, i8* %106
%107 = bitcast i64* %4 to i8*
%108 = getelementptr i8, i8* %107, i32 83
store i8 45, i8* %108
%109 = bitcast i64* %4 to i8*
%110 = getelementptr i8, i8* %109, i32 84
store i8 65, i8* %110
%111 = bitcast i64* %4 to i8*
%112 = getelementptr i8, i8* %111, i32 85
store i8 103, i8* %112
%113 = bitcast i64* %4 to i8*
%114 = getelementptr i8, i8* %113, i32 86
store i8 101, i8* %114
%115 = bitcast i64* %4 to i8*
%116 = getelementptr i8, i8* %115, i32 87
store i8 110, i8* %116
%117 = bitcast i64* %4 to i8*
%118 = getelementptr i8, i8* %117, i32 88
store i8 116, i8* %118
%119 = bitcast i64* %4 to i8*
%120 = getelementptr i8, i8* %119, i32 89
store i8 58, i8* %120
%121 = bitcast i64* %4 to i8*
%122 = getelementptr i8, i8* %121, i32 90
store i8 32, i8* %122
%123 = bitcast i64* %4 to i8*
%124 = getelementptr i8, i8* %123, i32 91
store i8 99, i8* %124
%125 = bitcast i64* %4 to i8*
%126 = getelementptr i8, i8* %125, i32 92
store i8 117, i8* %126
%127 = bitcast i64* %4 to i8*
%128 = getelementptr i8, i8* %127, i32 93
store i8 114, i8* %128
%129 = bitcast i64* %4 to i8*
%130 = getelementptr i8, i8* %129, i32 94
store i8 108, i8* %130
%131 = bitcast i64* %4 to i8*
%132 = getelementptr i8, i8* %131, i32 95
store i8 47, i8* %132
%133 = bitcast i64* %4 to i8*
%134 = getelementptr i8, i8* %133, i32 96
store i8 55, i8* %134
%135 = bitcast i64* %4 to i8*
%136 = getelementptr i8, i8* %135, i32 97
store i8 46, i8* %136
%137 = bitcast i64* %4 to i8*
%138 = getelementptr i8, i8* %137, i32 98
store i8 52, i8* %138
%139 = bitcast i64* %4 to i8*
%140 = getelementptr i8, i8* %139, i32 99
store i8 55, i8* %140
%141 = bitcast i64* %4 to i8*
%142 = getelementptr i8, i8* %141, i32 100
store i8 46, i8* %142
%143 = bitcast i64* %4 to i8*
%144 = getelementptr i8, i8* %143, i32 101
store i8 48, i8* %144
%145 = bitcast i64* %4 to i8*
%146 = getelementptr i8, i8* %145, i32 102
store i8 13, i8* %146
%147 = bitcast i64* %4 to i8*
%148 = getelementptr i8, i8* %147, i32 103
store i8 10, i8* %148
%149 = bitcast i64* %4 to i8*
%150 = getelementptr i8, i8* %149, i32 104
store i8 65, i8* %150
%151 = bitcast i64* %4 to i8*
%152 = getelementptr i8, i8* %151, i32 105
store i8 99, i8* %152
%153 = bitcast i64* %4 to i8*
%154 = getelementptr i8, i8* %153, i32 106
store i8 99, i8* %154
%155 = bitcast i64* %4 to i8*
%156 = getelementptr i8, i8* %155, i32 107
store i8 101, i8* %156
%157 = bitcast i64* %4 to i8*
%158 = getelementptr i8, i8* %157, i32 108
store i8 112, i8* %158
%159 = bitcast i64* %4 to i8*
%160 = getelementptr i8, i8* %159, i32 109
store i8 116, i8* %160
%161 = bitcast i64* %4 to i8*
%162 = getelementptr i8, i8* %161, i32 110
store i8 58, i8* %162
%163 = bitcast i64* %4 to i8*
%164 = getelementptr i8, i8* %163, i32 111
store i8 32, i8* %164
%165 = bitcast i64* %4 to i8*
%166 = getelementptr i8, i8* %165, i32 112
store i8 116, i8* %166
%167 = bitcast i64* %4 to i8*
%168 = getelementptr i8, i8* %167, i32 113
store i8 101, i8* %168
%169 = bitcast i64* %4 to i8*
%170 = getelementptr i8, i8* %169, i32 114
store i8 120, i8* %170
%171 = bitcast i64* %4 to i8*
%172 = getelementptr i8, i8* %171, i32 115
store i8 116, i8* %172
%173 = bitcast i64* %4 to i8*
%174 = getelementptr i8, i8* %173, i32 116
store i8 47, i8* %174
%175 = bitcast i64* %4 to i8*
%176 = getelementptr i8, i8* %175, i32 117
store i8 112, i8* %176
%177 = bitcast i64* %4 to i8*
%178 = getelementptr i8, i8* %177, i32 118
store i8 108, i8* %178
%179 = bitcast i64* %4 to i8*
%180 = getelementptr i8, i8* %179, i32 119
store i8 97, i8* %180
%181 = bitcast i64* %4 to i8*
%182 = getelementptr i8, i8* %181, i32 120
store i8 105, i8* %182
%183 = bitcast i64* %4 to i8*
%184 = getelementptr i8, i8* %183, i32 121
store i8 110, i8* %184
%185 = bitcast i64* %4 to i8*
%186 = getelementptr i8, i8* %185, i32 122
store i8 44, i8* %186
%187 = bitcast i64* %4 to i8*
%188 = getelementptr i8, i8* %187, i32 123
store i8 116, i8* %188
%189 = bitcast i64* %4 to i8*
%190 = getelementptr i8, i8* %189, i32 124
store i8 101, i8* %190
%191 = bitcast i64* %4 to i8*
%192 = getelementptr i8, i8* %191, i32 125
store i8 120, i8* %192
%193 = bitcast i64* %4 to i8*
%194 = getelementptr i8, i8* %193, i32 126
store i8 116, i8* %194
%195 = bitcast i64* %4 to i8*
%196 = getelementptr i8, i8* %195, i32 127
store i8 47, i8* %196
%197 = bitcast i64* %4 to i8*
%198 = getelementptr i8, i8* %197, i32 128
store i8 104, i8* %198
%199 = bitcast i64* %4 to i8*
%200 = getelementptr i8, i8* %199, i32 129
store i8 116, i8* %200
%201 = bitcast i64* %4 to i8*
%202 = getelementptr i8, i8* %201, i32 130
store i8 109, i8* %202
%203 = bitcast i64* %4 to i8*
%204 = getelementptr i8, i8* %203, i32 131
store i8 108, i8* %204
%205 = bitcast i64* %4 to i8*
%206 = getelementptr i8, i8* %205, i32 132
store i8 59, i8* %206
%207 = bitcast i64* %4 to i8*
%208 = getelementptr i8, i8* %207, i32 133
store i8 113, i8* %208
%209 = bitcast i64* %4 to i8*
%210 = getelementptr i8, i8* %209, i32 134
store i8 61, i8* %210
%211 = bitcast i64* %4 to i8*
%212 = getelementptr i8, i8* %211, i32 135
store i8 48, i8* %212
%213 = bitcast i64* %4 to i8*
%214 = getelementptr i8, i8* %213, i32 136
store i8 46, i8* %214
%215 = bitcast i64* %4 to i8*
%216 = getelementptr i8, i8* %215, i32 137
store i8 57, i8* %216
%217 = bitcast i64* %4 to i8*
%218 = getelementptr i8, i8* %217, i32 138
store i8 44, i8* %218
%219 = bitcast i64* %4 to i8*
%220 = getelementptr i8, i8* %219, i32 139
store i8 97, i8* %220
%221 = bitcast i64* %4 to i8*
%222 = getelementptr i8, i8* %221, i32 140
store i8 112, i8* %222
%223 = bitcast i64* %4 to i8*
%224 = getelementptr i8, i8* %223, i32 141
store i8 112, i8* %224
%225 = bitcast i64* %4 to i8*
%226 = getelementptr i8, i8* %225, i32 142
store i8 108, i8* %226
%227 = bitcast i64* %4 to i8*
%228 = getelementptr i8, i8* %227, i32 143
store i8 105, i8* %228
%229 = bitcast i64* %4 to i8*
%230 = getelementptr i8, i8* %229, i32 144
store i8 99, i8* %230
%231 = bitcast i64* %4 to i8*
%232 = getelementptr i8, i8* %231, i32 145
store i8 97, i8* %232
%233 = bitcast i64* %4 to i8*
%234 = getelementptr i8, i8* %233, i32 146
store i8 116, i8* %234
%235 = bitcast i64* %4 to i8*
%236 = getelementptr i8, i8* %235, i32 147
store i8 105, i8* %236
%237 = bitcast i64* %4 to i8*
%238 = getelementptr i8, i8* %237, i32 148
store i8 111, i8* %238
%239 = bitcast i64* %4 to i8*
%240 = getelementptr i8, i8* %239, i32 149
store i8 110, i8* %240
%241 = bitcast i64* %4 to i8*
%242 = getelementptr i8, i8* %241, i32 150
store i8 47, i8* %242
%243 = bitcast i64* %4 to i8*
%244 = getelementptr i8, i8* %243, i32 151
store i8 120, i8* %244
%245 = bitcast i64* %4 to i8*
%246 = getelementptr i8, i8* %245, i32 152
store i8 104, i8* %246
%247 = bitcast i64* %4 to i8*
%248 = getelementptr i8, i8* %247, i32 153
store i8 116, i8* %248
%249 = bitcast i64* %4 to i8*
%250 = getelementptr i8, i8* %249, i32 154
store i8 109, i8* %250
%251 = bitcast i64* %4 to i8*
%252 = getelementptr i8, i8* %251, i32 155
store i8 108, i8* %252
%253 = bitcast i64* %4 to i8*
%254 = getelementptr i8, i8* %253, i32 156
store i8 43, i8* %254
%255 = bitcast i64* %4 to i8*
%256 = getelementptr i8, i8* %255, i32 157
store i8 120, i8* %256
%257 = bitcast i64* %4 to i8*
%258 = getelementptr i8, i8* %257, i32 158
store i8 109, i8* %258
%259 = bitcast i64* %4 to i8*
%260 = getelementptr i8, i8* %259, i32 159
store i8 108, i8* %260
%261 = bitcast i64* %4 to i8*
%262 = getelementptr i8, i8* %261, i32 160
store i8 59, i8* %262
%263 = bitcast i64* %4 to i8*
%264 = getelementptr i8, i8* %263, i32 161
store i8 113, i8* %264
%265 = bitcast i64* %4 to i8*
%266 = getelementptr i8, i8* %265, i32 162
store i8 61, i8* %266
%267 = bitcast i64* %4 to i8*
%268 = getelementptr i8, i8* %267, i32 163
store i8 48, i8* %268
%269 = bitcast i64* %4 to i8*
%270 = getelementptr i8, i8* %269, i32 164
store i8 46, i8* %270
%271 = bitcast i64* %4 to i8*
%272 = getelementptr i8, i8* %271, i32 165
store i8 57, i8* %272
%273 = bitcast i64* %4 to i8*
%274 = getelementptr i8, i8* %273, i32 166
store i8 44, i8* %274
%275 = bitcast i64* %4 to i8*
%276 = getelementptr i8, i8* %275, i32 167
store i8 97, i8* %276
%277 = bitcast i64* %4 to i8*
%278 = getelementptr i8, i8* %277, i32 168
store i8 112, i8* %278
%279 = bitcast i64* %4 to i8*
%280 = getelementptr i8, i8* %279, i32 169
store i8 112, i8* %280
%281 = bitcast i64* %4 to i8*
%282 = getelementptr i8, i8* %281, i32 170
store i8 108, i8* %282
%283 = bitcast i64* %4 to i8*
%284 = getelementptr i8, i8* %283, i32 171
store i8 105, i8* %284
%285 = bitcast i64* %4 to i8*
%286 = getelementptr i8, i8* %285, i32 172
store i8 99, i8* %286
%287 = bitcast i64* %4 to i8*
%288 = getelementptr i8, i8* %287, i32 173
store i8 97, i8* %288
%289 = bitcast i64* %4 to i8*
%290 = getelementptr i8, i8* %289, i32 174
store i8 116, i8* %290
%291 = bitcast i64* %4 to i8*
%292 = getelementptr i8, i8* %291, i32 175
store i8 105, i8* %292
%293 = bitcast i64* %4 to i8*
%294 = getelementptr i8, i8* %293, i32 176
store i8 111, i8* %294
%295 = bitcast i64* %4 to i8*
%296 = getelementptr i8, i8* %295, i32 177
store i8 110, i8* %296
%297 = bitcast i64* %4 to i8*
%298 = getelementptr i8, i8* %297, i32 178
store i8 47, i8* %298
%299 = bitcast i64* %4 to i8*
%300 = getelementptr i8, i8* %299, i32 179
store i8 120, i8* %300
%301 = bitcast i64* %4 to i8*
%302 = getelementptr i8, i8* %301, i32 180
store i8 109, i8* %302
%303 = bitcast i64* %4 to i8*
%304 = getelementptr i8, i8* %303, i32 181
store i8 108, i8* %304
%305 = bitcast i64* %4 to i8*
%306 = getelementptr i8, i8* %305, i32 182
store i8 59, i8* %306
%307 = bitcast i64* %4 to i8*
%308 = getelementptr i8, i8* %307, i32 183
store i8 113, i8* %308
%309 = bitcast i64* %4 to i8*
%310 = getelementptr i8, i8* %309, i32 184
store i8 61, i8* %310
%311 = bitcast i64* %4 to i8*
%312 = getelementptr i8, i8* %311, i32 185
store i8 48, i8* %312
%313 = bitcast i64* %4 to i8*
%314 = getelementptr i8, i8* %313, i32 186
store i8 46, i8* %314
%315 = bitcast i64* %4 to i8*
%316 = getelementptr i8, i8* %315, i32 187
store i8 56, i8* %316
%317 = bitcast i64* %4 to i8*
%318 = getelementptr i8, i8* %317, i32 188
store i8 44, i8* %318
%319 = bitcast i64* %4 to i8*
%320 = getelementptr i8, i8* %319, i32 189
store i8 42, i8* %320
%321 = bitcast i64* %4 to i8*
%322 = getelementptr i8, i8* %321, i32 190
store i8 47, i8* %322
%323 = bitcast i64* %4 to i8*
%324 = getelementptr i8, i8* %323, i32 191
store i8 42, i8* %324
%325 = bitcast i64* %4 to i8*
%326 = getelementptr i8, i8* %325, i32 192
store i8 59, i8* %326
%327 = bitcast i64* %4 to i8*
%328 = getelementptr i8, i8* %327, i32 193
store i8 113, i8* %328
%329 = bitcast i64* %4 to i8*
%330 = getelementptr i8, i8* %329, i32 194
store i8 61, i8* %330
%331 = bitcast i64* %4 to i8*
%332 = getelementptr i8, i8* %331, i32 195
store i8 48, i8* %332
%333 = bitcast i64* %4 to i8*
%334 = getelementptr i8, i8* %333, i32 196
store i8 46, i8* %334
%335 = bitcast i64* %4 to i8*
%336 = getelementptr i8, i8* %335, i32 197
store i8 55, i8* %336
%337 = bitcast i64* %4 to i8*
%338 = getelementptr i8, i8* %337, i32 198
store i8 13, i8* %338
%339 = bitcast i64* %4 to i8*
%340 = getelementptr i8, i8* %339, i32 199
store i8 10, i8* %340
%341 = bitcast i64* %4 to i8*
%342 = getelementptr i8, i8* %341, i32 200
store i8 67, i8* %342
%343 = bitcast i64* %4 to i8*
%344 = getelementptr i8, i8* %343, i32 201
store i8 111, i8* %344
%345 = bitcast i64* %4 to i8*
%346 = getelementptr i8, i8* %345, i32 202
store i8 110, i8* %346
%347 = bitcast i64* %4 to i8*
%348 = getelementptr i8, i8* %347, i32 203
store i8 110, i8* %348
%349 = bitcast i64* %4 to i8*
%350 = getelementptr i8, i8* %349, i32 204
store i8 101, i8* %350
%351 = bitcast i64* %4 to i8*
%352 = getelementptr i8, i8* %351, i32 205
store i8 99, i8* %352
%353 = bitcast i64* %4 to i8*
%354 = getelementptr i8, i8* %353, i32 206
store i8 116, i8* %354
%355 = bitcast i64* %4 to i8*
%356 = getelementptr i8, i8* %355, i32 207
store i8 105, i8* %356
%357 = bitcast i64* %4 to i8*
%358 = getelementptr i8, i8* %357, i32 208
store i8 111, i8* %358
%359 = bitcast i64* %4 to i8*
%360 = getelementptr i8, i8* %359, i32 209
store i8 110, i8* %360
%361 = bitcast i64* %4 to i8*
%362 = getelementptr i8, i8* %361, i32 210
store i8 58, i8* %362
%363 = bitcast i64* %4 to i8*
%364 = getelementptr i8, i8* %363, i32 211
store i8 32, i8* %364
%365 = bitcast i64* %4 to i8*
%366 = getelementptr i8, i8* %365, i32 212
store i8 107, i8* %366
%367 = bitcast i64* %4 to i8*
%368 = getelementptr i8, i8* %367, i32 213
store i8 101, i8* %368
%369 = bitcast i64* %4 to i8*
%370 = getelementptr i8, i8* %369, i32 214
store i8 101, i8* %370
%371 = bitcast i64* %4 to i8*
%372 = getelementptr i8, i8* %371, i32 215
store i8 112, i8* %372
%373 = bitcast i64* %4 to i8*
%374 = getelementptr i8, i8* %373, i32 216
store i8 45, i8* %374
%375 = bitcast i64* %4 to i8*
%376 = getelementptr i8, i8* %375, i32 217
store i8 97, i8* %376
%377 = bitcast i64* %4 to i8*
%378 = getelementptr i8, i8* %377, i32 218
store i8 108, i8* %378
%379 = bitcast i64* %4 to i8*
%380 = getelementptr i8, i8* %379, i32 219
store i8 105, i8* %380
%381 = bitcast i64* %4 to i8*
%382 = getelementptr i8, i8* %381, i32 220
store i8 118, i8* %382
%383 = bitcast i64* %4 to i8*
%384 = getelementptr i8, i8* %383, i32 221
store i8 101, i8* %384
%385 = bitcast i64* %4 to i8*
%386 = getelementptr i8, i8* %385, i32 222
store i8 13, i8* %386
%387 = bitcast i64* %4 to i8*
%388 = getelementptr i8, i8* %387, i32 223
store i8 10, i8* %388
%389 = bitcast i64* %4 to i8*
%390 = getelementptr i8, i8* %389, i32 224
store i8 13, i8* %390
%391 = bitcast i64* %4 to i8*
%392 = getelementptr i8, i8* %391, i32 225
store i8 10, i8* %392
%393 = notail call monocc i32 @SpanCrash_MainClass_SpanIndexOf_byte__(i64* %4)
%LDSTR_38 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 38), !invariant.load !14, !nonnull !14
%VTABLE_39 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 39), !invariant.load !14
%394 = ptrtoint i64* %VTABLE_39 to i64
%395 = notail call monocc noalias nonnull i64* @p_10_plt_wrapper_alloc_object_AllocSmall_intptr_intptr_llvm(i64 %394, i64 20)
%396 = bitcast i64* %395 to i32*
%397 = getelementptr i32, i32* %396, i32 4
store i32 %393, i32* %397
notail call monocc void @p_11_plt_System_Console_WriteLine_string_object_llvm(i64* %LDSTR_38, i64* %395)
br label %BB4
BB4: ; preds = %BB6, %BB2
%398 = phi i32 [ 0, %BB2 ], [ %t667, %BB6 ]
%399 = icmp slt i32 %398, %393
%t663 = zext i1 %399 to i32
%400 = trunc i32 %t663 to i8
%t22 = zext i8 %400 to i32
%401 = icmp ne i32 %t22, 0
br i1 %401, label %BB5, label %BB8
BB5: ; preds = %BB4
%t672 = sext i32 %398 to i64
%402 = bitcast i64* %4 to i32*
%403 = getelementptr i32, i32* %402, i32 6
%t673 = load i32, i32* %403, !invariant.load !14
%404 = sext i32 %t673 to i64
%405 = icmp ule i64 %404, %t672
br i1 %405, label %EX_BB3, label %NOEX_BB4
BB8: ; preds = %BB4
br label %BB1
EX_BB3: ; preds = %BB5
call void @p_12_plt__jit_icall_llvm_throw_corlib_exception_abs_trampoline_llvm(i32 269)
unreachable
NOEX_BB4: ; preds = %BB5
%406 = sext i32 %398 to i64
%407 = mul i64 %406, 1
%408 = ptrtoint i64* %4 to i64
%409 = add i64 %408, %407
%t625 = add i64 %409, 32
%410 = inttoptr i64 %t625 to i8*
%411 = load i8, i8* %410
%412 = zext i8 %411 to i32
%413 = icmp eq i32 %412, 10
%t628 = zext i1 %413 to i32
%414 = trunc i32 %t628 to i8
%t20 = zext i8 %414 to i32
%415 = icmp eq i32 %t20, 0
%416 = call i1 @llvm.expect.i1(i1 %415, i1 true)
br i1 %416, label %BB6, label %BB7
BB6: ; preds = %NOEX_BB4
%t667 = add i32 %398, 1
br label %BB4
BB7: ; preds = %NOEX_BB4
%IMAGE_0 = load i64*, i64** getelementptr inbounds ([0 x i64*], [0 x i64*]* bitcast (%MONO_GOT_SpanCrash.exe* @mono_aot_SpanCrash_llvm_got to [0 x i64*]*), i32 0, i32 0), !invariant.load !14
%417 = ptrtoint i64* %IMAGE_0 to i64
%418 = notail call i64* @p_13_plt__jit_icall_mono_helper_ldstr_llvm(i64 %417, i64 39)
%419 = notail call i64* @p_14_plt__jit_icall_mono_helper_newobj_mscorlib_llvm(i64 272)
%420 = bitcast i64* %419 to i32*
%421 = getelementptr i32, i32* %420, i32 4
store i32 %398, i32* %421
%422 = notail call monocc i64* @p_15_plt_string_Format_string_object_llvm(i64* %418, i64* %419)
notail call monocc void @p_16_plt_System_Console_WriteLine_string_llvm(i64* %422)
%423 = notail call i64* @p_17_plt__jit_icall_mono_create_corlib_exception_1_llvm(i64 33554896, i64* %422)
call void @p_18_plt__jit_icall_mono_arch_throw_exception_llvm(i64* %423)
unreachable
BB1: ; preds = %BB8
ret void
NOTINITED_BB6: ; preds = %INIT_BB1
call monocc void @mono_aot_SpanCrashinit_method(i32 2)
br label %INITED_BB2
}
declare hidden i64* @p_8_plt_wrapper_alloc_object_AllocVector_intptr_intptr_llvm(i64, i64)
declare hidden i32 @p_9_plt_SpanCrash_MainClass_SpanIndexOf_byte___llvm(i64*)
declare hidden i64* @p_10_plt_wrapper_alloc_object_AllocSmall_intptr_intptr_llvm(i64, i64)
declare hidden void @p_11_plt_System_Console_WriteLine_string_object_llvm(i64*, i64*)
declare hidden void @p_12_plt__jit_icall_llvm_throw_corlib_exception_abs_trampoline_llvm(i32)
declare hidden i64* @p_13_plt__jit_icall_mono_helper_ldstr_llvm(i64, i64)
declare hidden i64* @p_14_plt__jit_icall_mono_helper_newobj_mscorlib_llvm(i64)
declare hidden i64* @p_15_plt_string_Format_string_object_llvm(i64*, i64*)
declare hidden void @p_16_plt_System_Console_WriteLine_string_llvm(i64*)
declare hidden i64* @p_17_plt__jit_icall_mono_create_corlib_exception_1_llvm(i64, i64*)
declare hidden void @p_18_plt__jit_icall_mono_arch_throw_exception_llvm(i64*)
; Function Attrs: uwtable
define hidden monocc void @SpanCrash_MainClass_Main_string__(i64* %arg_args) #6 gc "mono" {
BB0:
br label %INIT_BB1
INIT_BB1: ; preds = %BB0
br label %INITED_BB2
INITED_BB2: ; preds = %INIT_BB1
br label %BB3
BB3: ; preds = %INITED_BB2
br label %BB2
BB2: ; preds = %BB3
notail call monocc void @SpanCrash_MainClass_AssertOnBytes()
br label %BB1
BB1: ; preds = %BB2
ret void
}
declare hidden void @p_19_plt_SpanCrash_MainClass_AssertOnBytes_llvm()
; Function Attrs: uwtable
define hidden monocc void @SpanCrash_MainClass__ctor(i64* %this) #6 {
BB0:
br label %INIT_BB1
INIT_BB1: ; preds = %BB0
br label %INITED_BB2
INITED_BB2: ; preds = %INIT_BB1
br label %BB3
BB3: ; preds = %INITED_BB2
br label %BB2
BB2: ; preds = %BB3
br label %BB1
BB1: ; preds = %BB2
ret void
}
; Function Attrs: nounwind
define internal void @llvm_code_end() #3 {
ENTRY:
ret void
}
; Function Attrs: nounwind
define hidden i8* @mono_aot_SpanCrash_get_method(i32) #3 {
ENTRY:
switch i32 %0, label %FAIL [
i32 -1, label %BB_CODE_START
i32 -2, label %BB_CODE_END
i32 0, label %BB_0
i32 1, label %BB_1
i32 2, label %BB_2
i32 3, label %BB_3
i32 4, label %BB_4
i32 5, label %BB_5
i32 6, label %BB_6
i32 7, label %BB_7
i32 8, label %BB_8
i32 9, label %BB_9
]
BB_CODE_START: ; preds = %ENTRY
ret i8* bitcast (void ()* @llvm_code_start to i8*)
BB_CODE_END: ; preds = %ENTRY
ret i8* bitcast (void ()* @llvm_code_end to i8*)
BB_0: ; preds = %ENTRY
ret i8* bitcast (i32 (%"System.Span`1<byte>"*)* @SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte to i8*)
BB_1: ; preds = %ENTRY
ret i8* bitcast (i32 (i64*)* @SpanCrash_MainClass_SpanIndexOf_byte__ to i8*)
BB_2: ; preds = %ENTRY
ret i8* bitcast (void ()* @SpanCrash_MainClass_AssertOnBytes to i8*)
BB_3: ; preds = %ENTRY
ret i8* bitcast (void (i64*)* @SpanCrash_MainClass_Main_string__ to i8*)
BB_4: ; preds = %ENTRY
ret i8* bitcast (void (i64*)* @SpanCrash_MainClass__ctor to i8*)
BB_5: ; preds = %ENTRY
ret i8* null
BB_6: ; preds = %ENTRY
ret i8* bitcast (void (i32)* @mono_aot_SpanCrashinit_method to i8*)
BB_7: ; preds = %ENTRY
ret i8* bitcast (void (i32, i64)* @mono_aot_SpanCrashinit_method_gshared_mrgctx to i8*)
BB_8: ; preds = %ENTRY
ret i8* bitcast (void (i32, i64)* @mono_aot_SpanCrashinit_method_gshared_vtable to i8*)
BB_9: ; preds = %ENTRY
ret i8* bitcast (void (i32, i64*)* @mono_aot_SpanCrashinit_method_gshared_this to i8*)
FAIL: ; preds = %ENTRY
ret i8* null
}
attributes #0 = { argmemonly nounwind }
attributes #1 = { nounwind readnone speculatable }
attributes #2 = { nounwind readnone }
attributes #3 = { nounwind }
attributes #4 = { noinline }
attributes #5 = { noinline uwtable }
attributes #6 = { uwtable }
!llvm.dbg.cu = !{!0}
!mono.function_indexes = !{!3, !4, !5, !6, !7, !8, !9, !10, !11}
!llvm.module.flags = !{!12, !13}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "Mono AOT Compiler 6.3.0 (master/344df07dd20 Mon Apr 29 12:25:29 EDT 2019) (LLVM)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "SpanCrash.exe", directory: ".")
!2 = !{}
!3 = !{!"SpanCrash_MainClass_SpanIndexOfInner_System_Span_1_byte", i32 0}
!4 = !{!"SpanCrash_MainClass_SpanIndexOf_byte__", i32 1}
!5 = !{!"SpanCrash_MainClass_AssertOnBytes", i32 2}
!6 = !{!"SpanCrash_MainClass_Main_string__", i32 3}
!7 = !{!"SpanCrash_MainClass__ctor", i32 4}
!8 = !{!"mono_aot_SpanCrashinit_method", i32 6}
!9 = !{!"mono_aot_SpanCrashinit_method_gshared_mrgctx", i32 7}
!10 = !{!"mono_aot_SpanCrashinit_method_gshared_vtable", i32 8}
!11 = !{!"mono_aot_SpanCrashinit_method_gshared_this", i32 9}
!12 = !{i32 2, !"Dwarf Version", i32 2}
!13 = !{i32 2, !"Debug Info Version", i64 3}
!14 = !{!"<index>"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment