Skip to content

Instantly share code, notes, and snippets.

@alexanderkyte
Created April 3, 2019 19:38
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/84be1514a9c86c5223cd3ff3a2be265f to your computer and use it in GitHub Desktop.
Save alexanderkyte/84be1514a9c86c5223cd3ff3a2be265f to your computer and use it in GitHub Desktop.
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ MONO_EXECUTABLE="/Users/akyte/perf_mono/mono/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/perf_mono/mono/runtime/mono-wrapper --aot-path=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x-macos/monolinker.exe --annotate-unseen-callers -a NoThrowInline.exe
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ monodis output/NoThrowInline.exe
.assembly extern mscorlib
{
.ver 4:0:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
}
.assembly 'NoThrowInline'
{
.custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) = (01 00 08 00 00 00 00 00 ) // ........
.custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = (
01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
.custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 02 00 00 00 00 00 ) // ........
.custom instance void class [mscorlib]System.Reflection.AssemblyTitleAttribute::'.ctor'(string) = (
01 00 0D 4E 6F 54 68 72 6F 77 49 6E 6C 69 6E 65 // ...NoThrowInline
00 00 ) // ..
.custom instance void class [mscorlib]System.Reflection.AssemblyDescriptionAttribute::'.ctor'(string) = (01 00 00 00 00 ) // .....
.custom instance void class [mscorlib]System.Reflection.AssemblyConfigurationAttribute::'.ctor'(string) = (01 00 00 00 00 ) // .....
.custom instance void class [mscorlib]System.Reflection.AssemblyCompanyAttribute::'.ctor'(string) = (01 00 00 00 00 ) // .....
.custom instance void class [mscorlib]System.Reflection.AssemblyProductAttribute::'.ctor'(string) = (01 00 00 00 00 ) // .....
.custom instance void class [mscorlib]System.Reflection.AssemblyCopyrightAttribute::'.ctor'(string) = (
01 00 12 24 7B 41 75 74 68 6F 72 43 6F 70 79 72 // ...${AuthorCopyr
69 67 68 74 7D 00 00 ) // ight}..
.custom instance void class [mscorlib]System.Reflection.AssemblyTrademarkAttribute::'.ctor'(string) = (01 00 00 00 00 ) // .....
.custom instance void class [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::'.ctor'(string) = (
01 00 1A 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B // ....NETFramework
2C 56 65 72 73 69 6F 6E 3D 76 34 2E 37 01 00 54 // ,Version=v4.7..T
0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C // ..FrameworkDispl
61 79 4E 61 6D 65 12 2E 4E 45 54 20 46 72 61 6D // ayName..NET Fram
65 77 6F 72 6B 20 34 2E 37 ) // ework 4.7
.hash algorithm 0x00008004
.ver 1:0:6995:31559
}
.module NoThrowInline.exe // GUID = {8A2EA137-7AAD-4F46-95D0-22253D73D504}
.namespace NoThrowInline
{
.class private auto ansi beforefieldinit MainClass
extends [mscorlib]System.Object
{
// method line 1
.method private static hidebysig
default void ThrowIfNull (string s) cil managed
{
.custom instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() = (01 00 00 00 ) // ....
// Method begins at RVA 0x2050
// Code size 9 (0x9)
.maxstack 8
IL_0000: ldarg.0
IL_0001: brtrue.s IL_0008
IL_0003: call void class NoThrowInline.MainClass::ThrowArgumentNullException()
IL_0008: ret
} // end of method MainClass::ThrowIfNull
// method line 2
.method private static hidebysig
default void ThrowArgumentNullException () cil managed
{
.custom instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() = (01 00 00 00 ) // ....
// Method begins at RVA 0x205a
// Code size 6 (0x6)
.maxstack 8
IL_0000: newobj instance void class [mscorlib]System.ArgumentNullException::'.ctor'()
IL_0005: throw
} // end of method MainClass::ThrowArgumentNullException
// method line 3
.method private static hidebysig
default int32 Bench (string a, string b, string c, string d) cil managed noinlining
{
.custom instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() = (01 00 00 00 ) // ....
// Method begins at RVA 0x2061
// Code size 52 (0x34)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call void class NoThrowInline.MainClass::ThrowIfNull(string)
IL_0006: ldarg.1
IL_0007: call void class NoThrowInline.MainClass::ThrowIfNull(string)
IL_000c: ldarg.2
IL_000d: call void class NoThrowInline.MainClass::ThrowIfNull(string)
IL_0012: ldarg.3
IL_0013: call void class NoThrowInline.MainClass::ThrowIfNull(string)
IL_0018: ldarg.0
IL_0019: callvirt instance int32 string::get_Length()
IL_001e: ldarg.1
IL_001f: callvirt instance int32 string::get_Length()
IL_0024: add
IL_0025: ldarg.2
IL_0026: callvirt instance int32 string::get_Length()
IL_002b: add
IL_002c: ldarg.3
IL_002d: callvirt instance int32 string::get_Length()
IL_0032: add
IL_0033: ret
} // end of method MainClass::Bench
// method line 4
.method public hidebysig
instance default void TestMethod () cil managed
{
// Method begins at RVA 0x2096
// Code size 27 (0x1b)
.maxstack 8
IL_0000: ldstr "a"
IL_0005: ldstr "bc"
IL_000a: ldstr "def"
IL_000f: ldstr "ghij"
IL_0014: call int32 class NoThrowInline.MainClass::Bench(string, string, string, string)
IL_0019: pop
IL_001a: ret
} // end of method MainClass::TestMethod
// method line 5
.method public static hidebysig
default void Main (string[] args) cil managed
{
// Method begins at RVA 0x20b4
.entrypoint
// Code size 64 (0x40)
.maxstack 2
.locals init (
class NoThrowInline.MainClass V_0,
int32 V_1,
int32 V_2)
IL_0000: newobj instance void class NoThrowInline.MainClass::'.ctor'()
IL_0005: stloc.0
IL_0006: ldc.i4 700000
IL_000b: stloc.1
IL_000c: ldarg.0
IL_000d: ldlen
IL_000e: brfalse.s IL_0019
IL_0010: ldarg.0
IL_0011: ldc.i4.0
IL_0012: ldelem.ref
IL_0013: call int32 class [mscorlib]System.Convert::ToInt32(string)
IL_0018: stloc.1
IL_0019: ldstr "Before loops"
IL_001e: call void class [mscorlib]System.Console::WriteLine(string)
IL_0023: ldc.i4.0
IL_0024: stloc.2
IL_0025: br.s IL_0031
IL_0027: ldloc.0
IL_0028: callvirt instance void class NoThrowInline.MainClass::TestMethod()
IL_002d: ldloc.2
IL_002e: ldc.i4.1
IL_002f: add
IL_0030: stloc.2
IL_0031: ldloc.2
IL_0032: ldloc.1
IL_0033: blt.s IL_0027
IL_0035: ldstr "Donep"
IL_003a: call void class [mscorlib]System.Console::WriteLine(string)
IL_003f: ret
} // end of method MainClass::Main
// method line 6
.method public hidebysig specialname rtspecialname
instance default void '.ctor' () cil managed
{
// Method begins at RVA 0x2100
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void object::'.ctor'()
IL_0006: ret
} // end of method MainClass::.ctor
} // end of class NoThrowInline.MainClass
}
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ export PATH="/Users/akyte/perf_mono/mono/llvm/usr/bin:$PATH"
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ rm -rf mono_aot* ; MONO_EXECUTABLE="/Users/akyte/perf_mono/mono/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/perf_mono/mono/runtime/mono-wrapper --aot-path=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x --aot=llvm,keep-temps output/NoThrowInline.exe
Mono Ahead of Time compiler - compiling assembly /Users/akyte/Projects/NoThrowInline/NoThrowInline/bin/Release/output/NoThrowInline.exe
AOTID 08E3DE47-6FA2-7836-5852-83FE6D0A5D28
Executing opt: "opt" -f -O2 -disable-tail-calls -place-safepoints -spp-all-backedges -o "mono_aot_nAdBsc/temp.opt.bc" "mono_aot_nAdBsc/temp.bc"
Executing llc: "llc" -march=x86-64 -mcpu=generic -asm-verbose=false -disable-gnu-eh-frame -enable-mono-eh-frame -mono-eh-frame-symbol=_mono_aot_NoThrowInline_eh_frame -disable-tail-calls -no-x86-call-frame-opt -relocation-model=pic -filetype=obj -o "mono_aot_nAdBsc/temp-llvm.o" "mono_aot_nAdBsc/temp.opt.bc"
Compiled: 10/10
Executing the native assembler: "clang" -c -x assembler -o /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_HKmSzm.o /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_HKmSzm
Executing the native linker: clang --shared -o /Users/akyte/Projects/NoThrowInline/NoThrowInline/bin/Release/output/NoThrowInline.exe.dylib.tmp "mono_aot_nAdBsc/temp-llvm.o" /var/folders/00/v8q_733j1hd8br7nxhxs41d80000gn/T/mono_aot_HKmSzm.o
Executing dsymutil: dsymutil "/Users/akyte/Projects/NoThrowInline/NoThrowInline/bin/Release/output/NoThrowInline.exe.dylib"
warning: no debug symbols in executable (-arch x86_64)
Retained input file.
JIT time: 3 ms, Generation time: 245 ms, Assembly+Link time: 570 ms.
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ llvm-dis mono_aot_nAdBsc/temp.opt.bc
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ cat mono_aot_nAdBsc/temp.opt.ll
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ MONO_EXECUTABLE="/Users/akyte/perf_mono/mono/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/perf_mono/mono/runtime/mono-wrapper --aot-path=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/linker/test/Mono.Linker.Tests/bin/Debug/monolinker.exe --annotate-unseen-callers -a NoThrowInline.exe
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ mv output/NoThrowInline.exe NoThrowInlineFoo.exe
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ monodis --customattr output/NoThrowInline.exe
Custom Attributes Table (1..14)
1: MethodDef: 1: instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() []
2: Assembly: 1: instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) [8]
3: Assembly: 1: instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() [ 1 named args: ( 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01)]
4: Assembly: 1: instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) [2]
5: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyTitleAttribute::'.ctor'(string) ["NoThrowInline"]
6: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyDescriptionAttribute::'.ctor'(string) [""]
7: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyConfigurationAttribute::'.ctor'(string) [""]
8: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyCompanyAttribute::'.ctor'(string) [""]
9: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyProductAttribute::'.ctor'(string) [""]
10: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyCopyrightAttribute::'.ctor'(string) ["${AuthorCopyright}"]
11: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyTrademarkAttribute::'.ctor'(string) [""]
12: Assembly: 1: instance void class [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::'.ctor'(string) [".NETFramework,Version=v4.7" 1 named args: ( 01 00 54 0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C 61 79 4E 61 6D 65 12 2E 4E 45 54 20 46 72 61 6D 65 77 6F 72 6B 20 34 2E 37)]
13: MethodDef: 2: instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() []
14: MethodDef: 3: instance void class [mscorlib]System.Runtime.CompilerServices.ReflectionBlockedAttribute::'.ctor'() []
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ MONO_EXECUTABLE="/Users/akyte/perf_mono/mono/mono/mini/mono-sgen --" MONO_PATH=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/perf_mono/mono/runtime/mono-wrapper --aot-path=/Users/akyte/perf_mono/mono/mcs/class/lib/net_4_x /Users/akyte/linker/test/Mono.Linker.Tests/bin/Debug/monolinker.exe --strip-codegen-annotations NoThrowInlineFoo.exe
akyte@Alexanders-MacBook-Pro-3 ~/Projects/NoThrowInline/NoThrowInline/bin/Release (master*) $ monodis --customattr output/NoThrowInlineFoo.exe
Custom Attributes Table (1..11)
1: Assembly: 1: instance void class [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::'.ctor'(int32) [8]
2: Assembly: 1: instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() [ 1 named args: ( 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01)]
3: Assembly: 1: instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) [2]
4: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyTitleAttribute::'.ctor'(string) ["NoThrowInline"]
5: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyDescriptionAttribute::'.ctor'(string) [""]
6: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyConfigurationAttribute::'.ctor'(string) [""]
7: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyCompanyAttribute::'.ctor'(string) [""]
8: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyProductAttribute::'.ctor'(string) [""]
9: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyCopyrightAttribute::'.ctor'(string) ["${AuthorCopyright}"]
10: Assembly: 1: instance void class [mscorlib]System.Reflection.AssemblyTrademarkAttribute::'.ctor'(string) [""]
11: Assembly: 1: instance void class [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::'.ctor'(string) [".NETFramework,Version=v4.7" 1 named args: ( 01 00 54 0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C 61 79 4E 61 6D 65 12 2E 4E 45 54 20 46 72 61 6D 65 77 6F 72 6B 20 34 2E 37)]
; ModuleID = 'mono_aot_nAdBsc/temp.opt.bc'
source_filename = "aot"
%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] }
@method_info_offsets = internal constant [35 x i8] c"\0B\00\00\00\0A\00\00\00\02\00\00\00\02\00\00\00\00\00\0E\00\01\01\01\01\06\05\FF\FF\FF\FF\F1\10\01\01\13", 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\14\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00,\00\00\00\0A\00\00\00\00\00\00\00\1C\00\00\00\08\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\09\00\00\00\00\00\00\00", align 8
@extra_method_info_offsets = internal constant [36 x i8] c"\04\00\00\00\07\00\00\00\14\00\00\00\08\00\00\00\1C\00\00\00\09\00\00\00$\00\00\00\0A\00\00\00,\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\004\02\01\01\01\01\01\01\01\02A\02\02\02\02\02\02\02\02\1B\80\84%''(#\1A!\1D\19", align 8
@llvm_got_info_offsets = internal constant [65 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\82W\02\01\01\01\01\01\01\01\02\82d\02\02\02\02\02\02\02\02\1B\82\A7%''(#\1A!\1D\19\83\EE\03\03\03\03\04\03", align 8
@ex_info_offsets = internal constant [38 x i8] c"\0B\00\00\00\0A\00\00\00\02\00\00\00\02\00\00\00\00\00\10\00\84\04\05\05\05\05\05\FF\FF\FF\FB\E3\84\22\05\05\841", 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\846\07", align 8
@image_table = internal constant [172 x i8] c"\02\00\00\00mscorlib\00FC87B481-708A-4D04-BEBC-6A9A47EDB68A\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\00NoThrowInline\008A2EA137-7AAD-4F46-95D0-22253D73D504\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00S\1B\00\00G{\00\00", align 8
@weak_field_indexes = internal constant [4 x i8] zeroinitializer, align 8
@blob = internal constant [1105 x i8] c"\00\00\00\00\04\04! \1F\1E\04\03\22$#\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\03\C1\00\00\02\07\1Emono_create_corlib_exception_0\00\07\19mono_arch_throw_exception\00\03\C1\00\00\01\03\C1\00\00\03\03\FF\FC\00\00\00\19\02\03\98\EC\03\C1\00\00\04\07*llvm_throw_corlib_exception_abs_trampoline\00\03\86\FA\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\10\01\01\10\01\05\10\01\0B\10\01\13\0E\02\02\01\10\01\1D\10\017\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\18\00\00\00\00\00\80\90\10\00\00\01\04\80\90\10\00\00\01\9A\CF\9A\CC\9A\CB\9A\C8sgen\00", align 8
@runtime_version = internal constant [1 x i8] zeroinitializer, align 8
@assembly_guid = internal constant [37 x i8] c"8A2EA137-7AAD-4F46-95D0-22253D73D504\00", align 8
@assembly_name = internal constant [14 x i8] c"NoThrowInline\00", align 8
@mono_aot_NoThrowInline_llvm_got = hidden global [37 x i64*] zeroinitializer
@mono_inited = internal unnamed_addr global [5 x i8] zeroinitializer
@NoThrowInline_unbox_tramp_indexes = local_unnamed_addr global [0 x i16] zeroinitializer
@NoThrowInline_unbox_trampolines = local_unnamed_addr global [0 x i8*] zeroinitializer
@mono_aot_file_info = local_unnamed_addr global %MonoAotFileInfo { i32 157, i32 0, i8* @mono_aot_NoThrowInlinejit_got, i8* bitcast ([37 x i64*]* @mono_aot_NoThrowInline_llvm_got to i8*), i8* bitcast (i8** @mono_aot_NoThrowInline_eh_frame to i8*), i8* bitcast (i8* (i32)* @mono_aot_NoThrowInline_get_method to i8*), i8* null, i8* null, i8* null, i8* @mono_aot_NoThrowInlinemethod_addresses, i8* null, i8* null, i8* getelementptr inbounds ([1105 x i8], [1105 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 ([35 x i8], [35 x i8]* @method_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([38 x i8], [38 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 ([65 x i8], [65 x i8]* @llvm_got_info_offsets, i32 0, i32 0), i8* getelementptr inbounds ([172 x i8], [172 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 ([14 x i8], [14 x i8]* @assembly_name, i32 0, i32 0), i8* @mono_aot_NoThrowInlineplt, i8* @mono_aot_NoThrowInlineplt_end, i8* @mono_aot_NoThrowInlineunwind_info, i8* @mono_aot_NoThrowInlineunbox_trampolines, i8* @mono_aot_NoThrowInlineunbox_trampolines_end, i8* @mono_aot_NoThrowInlineunbox_trampoline_addresses, i32 30, i32 328, i32 11, i32 11, i32 4, i32 33, i32 374434303, i32 63, i32 1100, 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"G\DE\E3\08\A2o6xXR\83\FEm\0A](" }
@mono_aot_NoThrowInlinejit_got = external hidden global i8
@mono_aot_NoThrowInline_eh_frame = external global i8*
@mono_aot_NoThrowInlinemethod_addresses = external hidden global i8
@mono_aot_NoThrowInlineplt = external hidden global i8
@mono_aot_NoThrowInlineplt_end = external hidden global i8
@mono_aot_NoThrowInlineunwind_info = external hidden global i8
@mono_aot_NoThrowInlineunbox_trampolines = external hidden global i8
@mono_aot_NoThrowInlineunbox_trampolines_end = external hidden global i8
@mono_aot_NoThrowInlineunbox_trampoline_addresses = external hidden global i8
@llvm.used = appending global [13 x i8*] [i8* bitcast (i32 (i64*, i64*, i64*, i64*)* @NoThrowInline_MainClass_Bench_string_string_string_string to i8*), i8* bitcast (void (i64*)* @NoThrowInline_MainClass_Main_string__ to i8*), i8* bitcast (void (i64*)* @NoThrowInline_MainClass_TestMethod to i8*), i8* bitcast (void ()* @NoThrowInline_MainClass_ThrowArgumentNullException to i8*), i8* bitcast (void (i64*)* @NoThrowInline_MainClass_ThrowIfNull_string to i8*), i8* bitcast (void (i64*)* @NoThrowInline_MainClass__ctor to i8*), i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* bitcast (i8* (i32)* @mono_aot_NoThrowInline_get_method to i8*), i8* bitcast ([37 x i64*]* @mono_aot_NoThrowInline_llvm_got to i8*), i8* bitcast (void (i32)* @mono_aot_NoThrowInlineinit_method to i8*), i8* bitcast (void (i32, i64)* @mono_aot_NoThrowInlineinit_method_gshared_mrgctx to i8*), i8* bitcast (void (i32, i64*)* @mono_aot_NoThrowInlineinit_method_gshared_this to i8*), i8* bitcast (void (i32, i64)* @mono_aot_NoThrowInlineinit_method_gshared_vtable to i8*)], section "llvm.metadata"
; Function Attrs: nounwind
define weak_odr void @gc.safepoint_poll() local_unnamed_addr #0 {
gc.safepoint_poll.entry:
%0 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%1 = load i64, i64* %0, align 4
%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 void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %3() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %gc.safepoint_poll.poll, %gc.safepoint_poll.entry
ret void
}
; Function Attrs: norecurse nounwind readnone
define internal void @llvm_code_start() #1 {
ENTRY:
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_NoThrowInlineinit_method(i32) #2 {
ENTRY:
%1 = load i64, i64* bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 4) to i64*), align 16
%2 = load void (i64, i32)*, void (i64, i32)** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 19) to void (i64, i32)**), align 8
call void %2(i64 %1, i32 %0)
%3 = sext i32 %0 to i64
%4 = getelementptr [5 x i8], [5 x i8]* @mono_inited, i64 0, i64 %3
store i8 1, i8* %4, align 1
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_NoThrowInlineinit_method_gshared_mrgctx(i32, i64) #2 {
ENTRY:
%2 = load i64, i64* bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 4) to i64*), align 16
%3 = load void (i64, i32, i64)*, void (i64, i32, i64)** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 21) to void (i64, i32, i64)**), align 8
call void %3(i64 %2, i32 %0, i64 %1)
%4 = sext i32 %0 to i64
%5 = getelementptr [5 x i8], [5 x i8]* @mono_inited, i64 0, i64 %4
store i8 1, i8* %5, align 1
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_NoThrowInlineinit_method_gshared_this(i32, i64*) #2 {
ENTRY:
%2 = load i64, i64* bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 4) to i64*), align 16
%3 = load void (i64, i32, i64*)*, void (i64, i32, i64*)** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 20) to void (i64, i32, i64*)**), align 16
call void %3(i64 %2, i32 %0, i64* %1)
%4 = sext i32 %0 to i64
%5 = getelementptr [5 x i8], [5 x i8]* @mono_inited, i64 0, i64 %4
store i8 1, i8* %5, align 1
ret void
}
; Function Attrs: noinline
define hidden monocc void @mono_aot_NoThrowInlineinit_method_gshared_vtable(i32, i64) #2 {
ENTRY:
%2 = load i64, i64* bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 4) to i64*), align 16
%3 = load void (i64, i32, i64)*, void (i64, i32, i64)** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 22) to void (i64, i32, i64)**), align 16
call void %3(i64 %2, i32 %0, i64 %1)
%4 = sext i32 %0 to i64
%5 = getelementptr [5 x i8], [5 x i8]* @mono_inited, i64 0, i64 %4
store i8 1, i8* %5, align 1
ret void
}
declare i32 @__gxx_personality_v0(...) #3
; Function Attrs: norecurse nounwind readnone uwtable
define hidden monocc void @NoThrowInline_MainClass_ThrowIfNull_string(i64* nocapture nonnull %arg_s) #4 gc "mono" {
BB0:
%0 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%1 = load i64, i64* %0, align 4
%2 = icmp eq i64 %1, 0
br i1 %2, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB0
%3 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %3() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB0, %gc.safepoint_poll.poll.i
ret void
}
; Function Attrs: noreturn uwtable
define hidden monocc void @NoThrowInline_MainClass_ThrowArgumentNullException() #5 gc "mono" {
BB0:
%0 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%1 = load i64, i64* %0, align 4
%2 = icmp eq i64 %1, 0
br i1 %2, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB0
%3 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %3() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB0, %gc.safepoint_poll.poll.i
%4 = notail call i64* @p_2_plt__jit_icall_mono_create_corlib_exception_0_llvm(i64 33554618)
call void @p_3_plt__jit_icall_mono_arch_throw_exception_llvm(i64* %4)
unreachable
}
declare hidden i64* @p_2_plt__jit_icall_mono_create_corlib_exception_0_llvm(i64) local_unnamed_addr #3
declare hidden void @p_3_plt__jit_icall_mono_arch_throw_exception_llvm(i64*) local_unnamed_addr #3
; Function Attrs: noinline norecurse nounwind uwtable
define hidden monocc i32 @NoThrowInline_MainClass_Bench_string_string_string_string(i64* nonnull %arg_a, i64* nonnull %arg_b, i64* nonnull %arg_c, i64* nonnull %arg_d) #6 gc "mono" {
BB0:
%0 = getelementptr i64, i64* %arg_a, i64 2
%1 = bitcast i64* %0 to i32*
%t50 = load volatile i32, i32* %1, align 4
%2 = getelementptr i64, i64* %arg_b, i64 2
%3 = bitcast i64* %2 to i32*
%t52 = load volatile i32, i32* %3, align 4
%t53 = add i32 %t52, %t50
%4 = getelementptr i64, i64* %arg_c, i64 2
%5 = bitcast i64* %4 to i32*
%t55 = load volatile i32, i32* %5, align 4
%t56 = add i32 %t53, %t55
%6 = getelementptr i64, i64* %arg_d, i64 2
%7 = bitcast i64* %6 to i32*
%t58 = load volatile i32, i32* %7, align 4
%t60 = add i32 %t56, %t58
%8 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%9 = load i64, i64* %8, align 4
%10 = icmp eq i64 %9, 0
br i1 %10, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB0
%11 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %11() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB0, %gc.safepoint_poll.poll.i
ret i32 %t60
}
; Function Attrs: noinline uwtable
define hidden monocc void @NoThrowInline_MainClass_TestMethod(i64* nocapture readnone %this) #7 gc "mono" {
BB0:
%is_inited = load i8, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @mono_inited, i64 0, i64 3), align 1
%0 = icmp eq i8 %is_inited, 0
%1 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%2 = load i64, i64* %1, align 4
%3 = icmp eq i64 %2, 0
br i1 %3, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB0
%4 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %4() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB0, %gc.safepoint_poll.poll.i
br i1 %0, label %NOTINITED_BB3, label %BB2, !prof !15
BB2: ; preds = %NOTINITED_BB3, %gc.safepoint_poll.exit
%LDSTR_30 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 30), align 16, !invariant.load !16, !nonnull !16
%LDSTR_31 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 31), align 8, !invariant.load !16, !nonnull !16
%LDSTR_32 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 32), align 16, !invariant.load !16, !nonnull !16
%LDSTR_33 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 33), align 8, !invariant.load !16, !nonnull !16
%5 = notail call monocc i32 @NoThrowInline_MainClass_Bench_string_string_string_string(i64* nonnull %LDSTR_30, i64* nonnull %LDSTR_31, i64* nonnull %LDSTR_32, i64* nonnull %LDSTR_33)
ret void
NOTINITED_BB3: ; preds = %gc.safepoint_poll.exit
call monocc void @mono_aot_NoThrowInlineinit_method(i32 3)
br label %BB2
}
; Function Attrs: noinline uwtable
define hidden monocc void @NoThrowInline_MainClass_Main_string__(i64* %arg_args) #7 gc "mono" {
BB0:
%is_inited = load i8, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @mono_inited, i64 0, i64 4), align 1
%0 = icmp eq i8 %is_inited, 0
%1 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%2 = load i64, i64* %1, align 4
%3 = icmp eq i64 %2, 0
br i1 %3, label %gc.safepoint_poll.exit5, label %gc.safepoint_poll.poll.i4
gc.safepoint_poll.poll.i4: ; preds = %BB0
%4 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %4() #8
br label %gc.safepoint_poll.exit5
gc.safepoint_poll.exit5: ; preds = %BB0, %gc.safepoint_poll.poll.i4
br i1 %0, label %NOTINITED_BB6, label %BB2, !prof !15
BB2: ; preds = %NOTINITED_BB6, %gc.safepoint_poll.exit5
%VTABLE_341 = load i64, i64* bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 34) to i64*), align 16, !invariant.load !16
%5 = notail call monocc nonnull i64* @p_6_plt_wrapper_alloc_object_AllocSmall_intptr_intptr_llvm(i64 %VTABLE_341, i64 16)
%6 = getelementptr i64, i64* %arg_args, i64 3
%7 = bitcast i64* %6 to i32*
%t29 = load volatile i32, i32* %7, align 4
%8 = icmp eq i32 %t29, 0
br i1 %8, label %BB4.thread, label %BB5
BB4.thread: ; preds = %BB2
%LDSTR_353 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 35), align 8, !invariant.load !16, !nonnull !16
notail call monocc void @p_7_plt_System_Console_WriteLine_string_llvm(i64* nonnull %LDSTR_353)
br label %BB7.lr.ph
BB4: ; preds = %BB5
%9 = getelementptr i64, i64* %arg_args, i64 4
%10 = bitcast i64* %9 to i64**
%t532 = load i64*, i64** %10, align 8
%11 = notail call monocc i32 @p_10_plt_System_Convert_ToInt32_string_llvm(i64* %t532)
%LDSTR_35 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 35), align 8, !invariant.load !16, !nonnull !16
notail call monocc void @p_7_plt_System_Console_WriteLine_string_llvm(i64* nonnull %LDSTR_35)
%12 = icmp sgt i32 %11, 0
br i1 %12, label %BB7.lr.ph, label %BB8
BB7.lr.ph: ; preds = %BB4.thread, %BB4
%13 = phi i32 [ 700000, %BB4.thread ], [ %11, %BB4 ]
br label %BB7
BB5: ; preds = %BB2
%t72 = load volatile i32, i32* %7, align 4
%14 = icmp eq i32 %t72, 0
br i1 %14, label %EX_BB3, label %BB4
BB7: ; preds = %BB7.lr.ph, %gc.safepoint_poll.exit
%15 = phi i32 [ 0, %BB7.lr.ph ], [ %t70, %gc.safepoint_poll.exit ]
notail call monocc void @NoThrowInline_MainClass_TestMethod(i64* undef)
%t70 = add nuw nsw i32 %15, 1
%16 = icmp slt i32 %t70, %13
%17 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%18 = load i64, i64* %17, align 4
%19 = icmp eq i64 %18, 0
br i1 %19, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB7
%20 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %20() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB7, %gc.safepoint_poll.poll.i
br i1 %16, label %BB7, label %BB8
BB8: ; preds = %gc.safepoint_poll.exit, %BB4
%LDSTR_36 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 36), align 16, !invariant.load !16, !nonnull !16
notail call monocc void @p_7_plt_System_Console_WriteLine_string_llvm(i64* nonnull %LDSTR_36)
ret void
EX_BB3: ; preds = %BB5
call void @p_9_plt__jit_icall_llvm_throw_corlib_exception_abs_trampoline_llvm(i32 267)
unreachable
NOTINITED_BB6: ; preds = %gc.safepoint_poll.exit5
call monocc void @mono_aot_NoThrowInlineinit_method(i32 4)
br label %BB2
}
declare hidden i64* @p_6_plt_wrapper_alloc_object_AllocSmall_intptr_intptr_llvm(i64, i64) local_unnamed_addr #3
declare hidden void @p_7_plt_System_Console_WriteLine_string_llvm(i64*) local_unnamed_addr #3
declare hidden void @p_9_plt__jit_icall_llvm_throw_corlib_exception_abs_trampoline_llvm(i32) local_unnamed_addr #3
declare hidden i32 @p_10_plt_System_Convert_ToInt32_string_llvm(i64*) local_unnamed_addr #3
; Function Attrs: norecurse nounwind readnone uwtable
define hidden monocc void @NoThrowInline_MainClass__ctor(i64* nocapture %this) #4 gc "mono" {
BB0:
%0 = load i64*, i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 7), align 8
%1 = load i64, i64* %0, align 4
%2 = icmp eq i64 %1, 0
br i1 %2, label %gc.safepoint_poll.exit, label %gc.safepoint_poll.poll.i
gc.safepoint_poll.poll.i: ; preds = %BB0
%3 = load void ()*, void ()** bitcast (i64** getelementptr inbounds ([37 x i64*], [37 x i64*]* @mono_aot_NoThrowInline_llvm_got, i64 0, i64 25) to void ()**), align 8
call void %3() #8
br label %gc.safepoint_poll.exit
gc.safepoint_poll.exit: ; preds = %BB0, %gc.safepoint_poll.poll.i
ret void
}
; Function Attrs: norecurse nounwind readnone
define internal void @llvm_code_end() #1 {
ENTRY:
ret void
}
; Function Attrs: norecurse nounwind readnone
define hidden i8* @mono_aot_NoThrowInline_get_method(i32) #1 {
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
i32 10, label %BB_10
]
BB_CODE_START: ; preds = %FAIL, %BB_10, %BB_9, %BB_8, %BB_7, %BB_6, %BB_5, %BB_4, %BB_3, %BB_2, %BB_1, %BB_0, %BB_CODE_END, %ENTRY
%merge = phi i8* [ bitcast (void ()* @llvm_code_start to i8*), %ENTRY ], [ bitcast (void ()* @llvm_code_end to i8*), %BB_CODE_END ], [ bitcast (void (i64*)* @NoThrowInline_MainClass_ThrowIfNull_string to i8*), %BB_0 ], [ bitcast (void ()* @NoThrowInline_MainClass_ThrowArgumentNullException to i8*), %BB_1 ], [ bitcast (i32 (i64*, i64*, i64*, i64*)* @NoThrowInline_MainClass_Bench_string_string_string_string to i8*), %BB_2 ], [ bitcast (void (i64*)* @NoThrowInline_MainClass_TestMethod to i8*), %BB_3 ], [ bitcast (void (i64*)* @NoThrowInline_MainClass_Main_string__ to i8*), %BB_4 ], [ bitcast (void (i64*)* @NoThrowInline_MainClass__ctor to i8*), %BB_5 ], [ null, %BB_6 ], [ bitcast (void (i32)* @mono_aot_NoThrowInlineinit_method to i8*), %BB_7 ], [ bitcast (void (i32, i64)* @mono_aot_NoThrowInlineinit_method_gshared_mrgctx to i8*), %BB_8 ], [ bitcast (void (i32, i64)* @mono_aot_NoThrowInlineinit_method_gshared_vtable to i8*), %BB_9 ], [ bitcast (void (i32, i64*)* @mono_aot_NoThrowInlineinit_method_gshared_this to i8*), %BB_10 ], [ null, %FAIL ]
ret i8* %merge
BB_CODE_END: ; preds = %ENTRY
br label %BB_CODE_START
BB_0: ; preds = %ENTRY
br label %BB_CODE_START
BB_1: ; preds = %ENTRY
br label %BB_CODE_START
BB_2: ; preds = %ENTRY
br label %BB_CODE_START
BB_3: ; preds = %ENTRY
br label %BB_CODE_START
BB_4: ; preds = %ENTRY
br label %BB_CODE_START
BB_5: ; preds = %ENTRY
br label %BB_CODE_START
BB_6: ; preds = %ENTRY
br label %BB_CODE_START
BB_7: ; preds = %ENTRY
br label %BB_CODE_START
BB_8: ; preds = %ENTRY
br label %BB_CODE_START
BB_9: ; preds = %ENTRY
br label %BB_CODE_START
BB_10: ; preds = %ENTRY
br label %BB_CODE_START
FAIL: ; preds = %ENTRY
br label %BB_CODE_START
}
attributes #0 = { nounwind "disable-tail-calls"="true" }
attributes #1 = { norecurse nounwind readnone "disable-tail-calls"="true" }
attributes #2 = { noinline "disable-tail-calls"="true" }
attributes #3 = { "disable-tail-calls"="true" }
attributes #4 = { norecurse nounwind readnone uwtable "disable-tail-calls"="true" }
attributes #5 = { noreturn uwtable "disable-tail-calls"="true" }
attributes #6 = { noinline norecurse nounwind uwtable "disable-tail-calls"="true" }
attributes #7 = { noinline uwtable "disable-tail-calls"="true" }
attributes #8 = { nounwind }
!llvm.dbg.cu = !{!0}
!mono.function_indexes = !{!3, !4, !5, !6, !7, !8, !9, !10, !11, !12}
!llvm.module.flags = !{!13, !14}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "Mono AOT Compiler 6.1.0 (nonnull_attr_merge/b7c9d788613 Tue Apr 2 16:07:51 EDT 2019) (LLVM)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "NoThrowInline.exe", directory: ".")
!2 = !{}
!3 = !{!"NoThrowInline_MainClass_ThrowIfNull_string", i32 0}
!4 = !{!"NoThrowInline_MainClass_ThrowArgumentNullException", i32 1}
!5 = !{!"NoThrowInline_MainClass_Bench_string_string_string_string", i32 2}
!6 = !{!"NoThrowInline_MainClass_TestMethod", i32 3}
!7 = !{!"NoThrowInline_MainClass_Main_string__", i32 4}
!8 = !{!"NoThrowInline_MainClass__ctor", i32 5}
!9 = !{!"mono_aot_NoThrowInlineinit_method", i32 7}
!10 = !{!"mono_aot_NoThrowInlineinit_method_gshared_mrgctx", i32 8}
!11 = !{!"mono_aot_NoThrowInlineinit_method_gshared_vtable", i32 9}
!12 = !{!"mono_aot_NoThrowInlineinit_method_gshared_this", i32 10}
!13 = !{i32 2, !"Dwarf Version", i32 2}
!14 = !{i32 2, !"Debug Info Version", i64 3}
!15 = !{!"branch_weights", i32 1, i32 2000}
!16 = !{!"<index>"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment