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