2 .assembly extern TestDriver {}
3 .assembly extern mscorlib {}
5 .class public auto ansi sealed beforefieldinit Tests {
7 .method static public int32 Main(string[] args) il managed {
11 call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
13 call int32 [TestDriver]TestDriver::RunTests(class [mscorlib]System.Type, string[])
17 // make sure the register allocator works when the return value of
19 .method static public int32 test_0_div_regalloc () il managed {
33 .method static public int32 test_1_ceq_to_i4 () il managed {
47 .method static public int32 test_3_shl_regvars () il managed {
94 .method static public int32 test_1_fceq_to_i4 () il managed {
114 // This should be manually checked. Basically under -O=linears,
115 // you should not see tons of register spilling.
117 .method static public int32 test_1_bytedreg_free () il managed {
153 // This should be manually checked. Basically under -O=linears,
154 // you should not see tons of register spilling.
156 .method static public int32 test_0_bytesreg1_free () il managed {
195 .method static public int32 test_1_shift_regvar () il managed {
216 // this only happens with the managed pointer, not an unmanaged one.
217 .method static public int32 test_0_foo () il managed {
234 .method static public int32 test_0_localloc () cil managed {
235 .locals init (native int, native int, native int, native int, int32)
260 // Check zero initialized
309 // Try allocations bigger than one page
335 .method private static void do_localloc () cil managed {
340 IL_0001: ldc.i4 131072
347 // Check that localloc can't be inlined
348 .method static public int32 test_0_localloc_inline () cil managed {
358 START: call void class Tests::do_localloc()
371 .method static public int32 test_3_copy_used_bug () il managed {
397 // demonstrate that the copy_used_var is not a fix for the above bug
398 .method static public int32 test_3_copy_used_indir_bug () il managed {
425 .method static public void do_nothing (int32 a) il managed {
429 // demonstrate the block_split failure: needs -O=inline
430 // mini -O=inline --compile Tests:test_0_split_block_bug iltests.exe
431 .method static public int32 test_0_split_block_bug () il managed {
441 call void class Tests::do_nothing (int32)
449 .method public void inline_do_nothing () il managed {
452 .method static public int32 test_1_checkthis_inlining () il managed {
454 call instance void class Tests::inline_do_nothing ()
459 .class nested private auto ansi sealed beforefieldinit TailCallStruct
460 extends [mscorlib]System.ValueType {
461 .field public int32 a
462 .field public int32 b
465 .method static valuetype Tests/TailCallStruct tail1 (valuetype Tests/TailCallStruct arg) {
468 ldfld int32 Tests/TailCallStruct::a
471 stfld int32 Tests/TailCallStruct::a
474 ldfld int32 Tests/TailCallStruct::a
477 stfld int32 Tests/TailCallStruct::a
482 .method static valuetype Tests/TailCallStruct tail2 (valuetype Tests/TailCallStruct arg) {
485 call valuetype Tests/TailCallStruct Tests::tail1 (valuetype Tests/TailCallStruct)
489 .class nested private auto ansi sealed beforefieldinit TailCallStructBig
490 extends [mscorlib]System.ValueType {
491 .field public int32 a
492 .field public int32 b
493 .field public int32 c
494 .field public int32 d
495 .field public int32 e
498 .method static valuetype Tests/TailCallStructBig tail_vret_by_addr_inner (valuetype Tests/TailCallStructBig arg) {
501 ldfld int32 Tests/TailCallStructBig::a
504 stfld int32 Tests/TailCallStructBig::a
509 .method static valuetype Tests/TailCallStructBig tail_vret_by_addr (valuetype Tests/TailCallStructBig arg) {
512 call valuetype Tests/TailCallStructBig Tests::tail_vret_by_addr_inner (valuetype Tests/TailCallStructBig)
516 .method static public int32 test_3_tail_call_vret_by_addr () il managed {
519 valuetype Tests/TailCallStructBig arg2
524 stfld int32 Tests/TailCallStructBig::a
526 call valuetype Tests/TailCallStructBig Tests::tail_vret_by_addr (valuetype Tests/TailCallStructBig)
530 ldfld int32 Tests/TailCallStructBig::a
534 .method static public int32 test_9_tail_call_vret_by_val () il managed {
537 valuetype Tests/TailCallStruct arg
541 stfld int32 Tests/TailCallStruct::a
544 stfld int32 Tests/TailCallStruct::b
546 call valuetype Tests/TailCallStruct Tests::tail2 (valuetype Tests/TailCallStruct)
550 ldfld int32 Tests/TailCallStruct::a
552 ldfld int32 Tests/TailCallStruct::b
557 .method static public int32 tail3 (int32 i, int32 j) il managed {
564 .method static public int32 tail4 (int32 i, int32 j) il managed {
569 // Test arg0 allocated to a register
579 // Test switched up argument variables as the actual arguments
583 call int32 Tests::tail3 (int32, int32)
587 .method static public int32 test_24_tail_calls2 () il managed {
600 call int32 Tests::tail4 (int32, int32)
604 .method public static int32 test_5_jmp () cil managed {
607 call int32 Tests::jmp2 (int32, int32)
611 .method public static int32 jmp2 (int32, int32) cil managed {
620 jmp int32 Tests::jmp3 (int32, int32)
625 .method public static int32 jmp3 (int32 i, int32 j) cil managed {
632 .method static public int32 test_11_switch_with_nonempty_stack () il managed {
647 .method public static int32 test_5_endfinally_with_nonempty_stack () il managed {
661 .method public static int32 test_0_conv_ovf_i8_neg () il managed {
676 .method public static int32 test_1234_conv_u4 () cil managed {
685 .method public static int32 test_0_conv_ovf_i_un () cil managed {
704 sizeof [mscorlib]System.IntPtr
711 } catch [mscorlib]System.OverflowException {
723 .method public static int32 test_0_conv_ovf_u_un () cil managed {
738 .method public static int32 test_0_conv_ovf_i () cil managed {
753 .method public static int32 test_0_conv_ovf_u () cil managed {
768 .method public static int32 test_1234_conv_ovf_i8_un () cil managed {
777 .method public static int32 test_0_lconv_ovf_i () cil managed {
793 .method public static int32 test_0_lconv_ovf_u () cil managed {
809 .method public static int32 test_0_lconv_ovf_i_un () cil managed {
825 .method public static int32 test_0_lconv_ovf_u_un () cil managed {
841 .method public static int32 test_0_lconv_to_ovf_i8 () cil managed {
857 .method public static int32 test_0_lconv_to_ovf_u8_un () cil managed {
873 .method public static int32 test_2_lconv_to_ovf_i4_un () cil managed {
875 .locals init (int32 res)
892 } catch [mscorlib]System.OverflowException {
900 ldc.i8 0xffffffff80000000
906 } catch [mscorlib]System.OverflowException {
916 .method public static int32 test_1_lconv_to_ovf_i_un () cil managed {
918 .locals init (int32 res)
930 .method public static int32 test_32_lconv_to_u8 () cil managed
941 .method public static int32 test_32_lconv_to_i8 () cil managed
952 .method public static int32 test_15_lconv_to_u () cil managed
960 #if !defined(__ppc__) && !defined(__powerpc__) && !defined(__arm__) && !defined(__sparc__)
961 // PPC handles overflow by clipping, but this test assumes
962 // no overflow handling. According to ECMA the result of
963 // float->int conversion is undefined if overflow occurs, so
964 // both behaviours are valid.
965 .method public static int32 test_0_fconv_to_i () cil managed {
981 .method public static int32 test_0_get_type_from_handle_on_bblock_boundary () cil managed
988 ldtoken [mscorlib]System.String
991 ldtoken [mscorlib]System.Object
993 call class [mscorlib]'System.Type' class [mscorlib]'System.Type'::'GetTypeFromHandle'(valuetype [mscorlib]'System.RuntimeTypeHandle')
994 callvirt instance string class [mscorlib]System.Type::get_FullName ()
995 ldstr "System.String"
996 callvirt instance bool class [mscorlib]System.Object::Equals(object)
1002 .method public static int32 test_0_bug59580 ()
1004 ldc.r4 float32(0x7FC00000)
1005 ldc.r4 float32(0x7FC00000)
1016 .method public static int32 test_1_bug60056 () {
1017 .locals init (int32 m5)
1035 .method public static int32 test_1_conv_u8_cfold () {
1039 ldc.i8 0x00000000ffffffff
1045 .method public static int32 test_1_array_type_mismatch_ldelema () {
1046 .locals init (int32 r)
1062 } catch [mscorlib]System.ArrayTypeMismatchException {
1073 .method public static int32 test_1_conv_ovf_i8_with_i4 () {
1082 .method public static int32 test_0_initlocals_float_ptr () {
1086 float32& pinned V_1,
1089 newarr [mscorlib]System.Single
1097 ldelema [mscorlib]System.Single
1107 .method public static int32 test_7_conv_ovf_u8_un () {
1109 .locals init (unsigned int64)
1119 .method public static int32 test_7_conv_ovf_u4_un () {
1121 .locals init (unsigned int32)
1131 .method public static int32 test_1_bug_74591 () {
1133 .locals init (int32)
1146 .class nested public auto ansi Integer
1147 extends [mscorlib]System.Object {
1149 .field public bool n
1151 .method public hidebysig specialname rtspecialname
1152 instance default void .ctor (unsigned int64 i, bool n) cil managed
1156 call instance void class [mscorlib]System.Object::.ctor()
1159 stfld bool Tests/Integer::n
1164 .method public static int32 test_1_bug_74726 () {
1173 newobj instance void class Tests/Integer::.ctor(unsigned int64, bool)
1174 ldfld bool Tests/Integer::n
1180 .class nested private auto ansi sealed xxx
1181 extends [mscorlib]System.ValueType
1183 .field public object a
1185 .method public hidebysig specialname rtspecialname
1186 instance default void .ctor () cil managed
1191 } // end of class xxx
1193 .method public static int32 test_0_newobj_vtype () {
1196 valuetype Tests/xxx V_0
1199 newobj instance void valuetype Tests/xxx::.ctor ()
1202 ldfld object Tests/xxx::a
1211 .method public static int32 test_0_newobj_vtype_primitive () {
1218 newobj instance void native int::'.ctor'(int32)
1230 .method public static int32 test_1_filters () {
1238 ldstr "OnErrorSub test Exception"
1239 newobj instance void class [mscorlib]System.Exception::.ctor(string)
1249 // Should not be called
1271 .class nested private auto ansi sealed beforefieldinit TheStruct
1272 extends [mscorlib]System.ValueType {
1273 .field public int32 a
1274 .field public int32 b
1277 .method public static int32 test_5_cpobj () {
1280 valuetype Tests/TheStruct v_0,
1281 valuetype Tests/TheStruct v_1
1286 stfld int32 Tests/TheStruct::a
1290 stfld int32 Tests/TheStruct::b
1294 cpobj Tests/TheStruct
1297 ldfld int32 Tests/TheStruct::a
1299 ldfld int32 Tests/TheStruct::b
1305 .method public static int32 test_5_ldobj_stloc_optimization () {
1308 valuetype Tests/TheStruct v_0,
1309 valuetype Tests/TheStruct v_1
1314 stfld int32 Tests/TheStruct::a
1318 stfld int32 Tests/TheStruct::b
1321 ldobj valuetype Tests/TheStruct
1325 ldfld int32 Tests/TheStruct::a
1327 ldfld int32 Tests/TheStruct::b
1333 .method public static int32 test_1_cpobj_reference () {
1340 newobj instance void object::.ctor()
1353 .method public static int32 test_1_initobj_reference () {
1359 newobj instance void object::.ctor()
1371 .method public static int32 test_1_ldobj_reference () {
1377 newobj instance void object::.ctor()
1387 .method public static int32 test_5_vtype_on_bb_boundary () {
1390 valuetype Tests/TheStruct v_0,
1391 valuetype Tests/TheStruct v_1
1396 stfld int32 Tests/TheStruct::a
1400 stfld int32 Tests/TheStruct::b
1407 ldfld int32 Tests/TheStruct::a
1409 ldfld int32 Tests/TheStruct::b
1414 .method public static int32 test_5_different_in_stacks () cil managed {
1438 .method public static int32 test_3_larray_get_set () {
1443 newobj instance void int32[0...]::.ctor(int32)
1448 call instance void int32[0...]::Set(int32, int32)
1452 call instance void int32[0...]::Set(int32, int32)
1456 call instance int32 int32[0...]::Get(int32)
1459 call instance int32 int32[0...]::Get(int32)
1464 .method public static int32 test_0_pop_side_effects () {
1473 catch [mscorlib]System.ArithmeticException {
1485 .method public static void regalloc_regress_78314_helper (object o) cil managed
1490 .method public static int32 test_1_regalloc_regress_78314 () cil managed
1492 // Code size 68 (0x44)
1494 .locals init (int32 V_0, bool V_1)
1497 IL_0002: br.s IL_003b
1500 IL_001e: ldc.i4.s 10
1503 IL_0022: ldc.i4.s 10
1507 IL_0028: box [mscorlib]System.Boolean
1508 IL_0032: call void Tests::regalloc_regress_78314_helper(object)
1515 IL_003f: blt.s IL_0004
1524 .method public static void try_block_end_remove_if_useless () cil managed {
1542 .try T_START to T1_END finally handler F1_START to F1_END
1545 .method public static int32 test_0_try_block_end_remove_if_useless () cil managed {
1546 call void class Tests::try_block_end_remove_if_useless ()
1551 .method private static int32 test_0_regress_78629_switch_next_ins_target () cil managed
1561 // This belongs to basic-float.cs, but its hard to tell mcs/csc to
1562 // generate the non .un version of the opcodes
1563 .method private static hidebysig
1564 default int32 test_4_float_branch_nan () cil managed
1566 // Method begins at RVA 0x27a4
1567 // Code size 74 (0x4a)
1573 IL_0000: ldc.r8 (00 00 00 00 00 00 f8 ff)
1581 IL_0018: bge.s IL_001a
1593 IL_0022: ble.s IL_002e
1604 IL_0036: blt.s IL_0038
1615 IL_0040: bgt.s IL_0042
1626 } // end of method Tests::test_5_float_branch_nan
1628 .method private static hidebysig
1629 default void regress_80622_inner (object x) cil managed
1631 .locals (unsigned int8 i)
1632 // Method begins at RVA 0x2050
1633 // Code size 14 (0xe)
1636 IL_1001: unbox unsigned int8
1637 IL_1006: ldobj unsigned int8
1638 IL_000b: conv.ovf.i4.un
1644 .method private static hidebysig
1645 default int32 test_0_regress_80622 () cil managed
1649 IL_0005: box unsigned int8
1650 IL_000a: call void class Tests::regress_80622_inner (object)
1655 .method private static default int32 test_0_regresss_80190 () cil managed
1658 .locals init (int32 V_0,
1662 IL_0002: ldloca.s V_0
1673 .class interface nested public auto ansi abstract IFaceWithStaticMethod
1675 .method public static specialname
1676 default void foo () cil managed noinlining
1683 .class nested public auto ansi AClass extends [mscorlib]System.Object implements Tests/IFaceWithStaticMethod
1685 .method public hidebysig specialname rtspecialname
1686 instance default void .ctor () cil managed
1694 // Test that static methods in interfaces are ignored during vtable construction
1695 .method private static default int32 test_0_ifaces_with_static_methods () cil managed
1699 newobj instance void class Tests/AClass::.ctor()
1705 .method private static hidebysig default int32 Foo<T> (!!T n) cil managed {
1716 .method static public int32 test_0_nullable_box_brtrue () cil managed {
1718 .locals init (valuetype [mscorlib]System.Nullable`1<int32> V_0)
1721 call int32 class Tests::Foo<valuetype [mscorlib]System.Nullable`1<int32>> (!!0)
1726 .method static public int32 test_0_ldelema_type_check () cil managed {
1728 .locals init (object[] V_0,
1740 } catch [mscorlib]System.ArrayTypeMismatchException {
1754 } catch [mscorlib]System.ArrayTypeMismatchException {
1766 readonly. ldelema object
1768 } catch [mscorlib]System.ArrayTypeMismatchException {
1792 .method static public int32 test_0_array_address_type_check () cil managed {
1794 .locals init (object[] V_0,
1799 newobj instance void object[,]::.ctor(int32, int32)
1806 call instance object& object[,]::Address(int32, int32)
1808 } catch [mscorlib]System.ArrayTypeMismatchException {
1815 newobj instance void string[,]::.ctor(int32, int32)
1822 call instance object& object[,]::Address(int32, int32)
1824 } catch [mscorlib]System.ArrayTypeMismatchException {
1831 newobj instance void string[,]::.ctor(int32, int32)
1838 readonly. call instance object& object[,]::Address(int32, int32)
1840 } catch [mscorlib]System.ArrayTypeMismatchException {
1860 .field public static unsigned int64 'ull'
1862 .field public static int32 'shift2'
1864 .method public static int32 test_0_long_shift_regalloc () cil managed
1866 .locals (unsigned int32 'cilsimp.28', unsigned int64 'cilsimp.27', int32 'cilsimp.26')
1870 ldc.i8 81985529234382576
1871 stsfld unsigned int64 Tests::ull
1873 stsfld int32 Tests::shift2
1875 ldsfld unsigned int64 Tests::ull
1877 ldsfld int32 Tests::shift2
1888 ldc.i8 1311768467750121216
1896 // Test calling ldfld directly on a vtype instead of a vtype address
1897 .method public static int32 test_5_call_ldfld_vtype () cil managed
1901 valuetype Tests/TailCallStruct arg
1905 stfld int32 Tests/TailCallStruct::a
1908 stfld int32 Tests/TailCallStruct::b
1910 call valuetype Tests/TailCallStruct Tests::tail2 (valuetype Tests/TailCallStruct)
1911 ldfld int32 Tests/TailCallStruct::a
1915 .method public static int32 throw_ret () cil managed
1918 newobj instance void class [mscorlib]System.OverflowException::.ctor(string)
1924 .method public static int32 throw2_ret () cil managed
1931 call int32 Tests::throw_ret ()
1935 // Test inlining a method which contains just a throw
1936 .method public static int32 test_0_inline_throw () cil managed
1944 call int32 Tests::throw2_ret ()
1947 } catch [mscorlib]System.OverflowException {
1960 .method public static int32 test_0_stelem_any_null_opt () cil managed
1968 newarr [mscorlib]System.Object
1979 stelem.any [mscorlib]System.Object
1994 .method public static hidebysig
1995 default int32 manyargs_callee (int32 a, int32 b, int32 c, int32 d, int32 e, int32 f, int32 g, int32 h, int32 i, int32 j, int32 k, int32 l, int32 m, int32 n, int32 o, int32 p) cil managed
1997 // Method begins at RVA 0x20f4
1998 // Code size 44 (0x2c)
2032 } // end of method main::callee
2035 .method public static hidebysig
2036 default int32 manyargs_tail_caller (int32 a, int32 b, int32 c, int32 d, int32 e, int32 f, int32 g, int32 h, int32 i, int32 j, int32 k, int32 l, int32 m, int32 n, int32 o, int32 p) cil managed
2038 // Method begins at RVA 0x2124
2039 // Code size 34 (0x22)
2058 IL_001c: call int32 class Tests::manyargs_callee(int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32)
2060 } // end of method main::caller
2063 .method public static hidebysig
2064 default int32 test_0_many_args_tail_call () cil managed
2066 // Method begins at RVA 0x2154
2067 // Code size 43 (0x2b)
2077 IL_0008: ldc.i4.s 0x09
2078 IL_000a: ldc.i4.s 0x0a
2079 IL_000c: ldc.i4.s 0x0b
2080 IL_000e: ldc.i4.s 0x0c
2081 IL_0010: ldc.i4.s 0x0d
2082 IL_0012: ldc.i4.s 0x0e
2083 IL_0014: ldc.i4.s 0x0f
2084 IL_0016: ldc.i4.s 0x10
2085 IL_0018: call int32 class Tests::manyargs_tail_caller(int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32, int32)
2087 IL_0022: beq IL_0029
2093 } // end of method main::Main
2095 .class nested private auto ansi beforefieldinit R1
2096 extends [mscorlib]System.MarshalByRefObject
2098 .field public int32 test_field
2100 .method public hidebysig specialname rtspecialname
2101 instance default void '.ctor' () cil managed
2107 .method public static hidebysig
2108 default int32 return_0 () cil managed
2114 .method public static hidebysig
2115 default int32 test_1_volatile_marshalbyref_bug_432673 () cil managed
2121 newobj instance void class Tests/R1::.ctor ()
2126 stfld int32 Tests/R1::test_field
2127 call int32 class Tests::return_0 ()
2133 .method public static default int32 return_2 () cil managed
2143 .method public static hidebysig
2144 default int32 test_1_cmov_opt_regress_463357 () cil managed
2146 call int32 class Tests::return_2 ()
2159 .method public static hidebysig default int32 cmov_opt_regress_474718_inner (int32 A_1) cil managed
2162 .locals init (int32 V_0, bool V_1, bool V_2)
2171 IL_001f: brfalse IL_0036
2188 .method public static default int32 test_0_cmov_opt_regress_474718 () cil managed
2192 call int32 Tests::cmov_opt_regress_474718_inner (int32)
2196 .method public static default int32 test_5_createarr_newobj () cil managed
2201 newobj void char[]::.ctor(int32)
2206 .method public static default int32 test_0_initblk_3_regress_481458 () cil managed
2209 .locals init (native int)
2215 // Set the first value to 3
2222 // Zero out the first 3 values
2228 // Load the first value
2237 .method public static float32 GetFloat32() cil managed noinlining
2240 ldc.r8 0.19975845134874831
2244 /* Disabled until they can be fixed to run on amd64
2245 .method public static default int32 test_0_implicit_float_to_double_conversion () cil managed
2249 call float32 Tests::GetFloat32()
2250 ldc.r8 0.19975845134874831
2261 .method public static default int32 test_0_long_to_r8_un_overflow () cil managed
2264 ldc.i8 0x00FFFFFFFFFFFFFF
2267 ldc.i8 0x100000000000000
2273 ldc.i8 0x00FFFFFFFFFFFFFF
2277 ldc.i8 0x100000000000000
2287 .field public static int32 shift1
2289 .method public static int32 regress_497271_helper (int32 i) cil managed
2295 .method public static int32 test_0_regalloc_regress_497271 () cil managed
2300 stsfld int32 Tests::shift1
2301 ldsfld int32 Tests::shift1
2316 call int32 Tests::regress_497271_helper (int32)
2320 call int32 Tests::regress_497271_helper (int32)
2324 .field private static int32 Value
2326 .method public static hidebysig specialname
2327 default int32 regress_513931_inner () cil managed
2329 // Method begins at RVA 0x225c
2330 // Code size 52 (0x34)
2338 stsfld int32 Tests::Value
2341 IL_0001: ldsfld int32 Tests::Value
2350 IL_0010: brtrue.s IL_0027
2354 IL_0014: ldc.i4.s 0x7b
2360 IL_001d: brtrue.s IL_0023
2364 IL_0021: br.s IL_0032
2368 IL_0025: br.s IL_0032
2371 IL_002c: newobj instance void class [mscorlib]System.Exception::'.ctor'()
2377 .method public static hidebysig specialname
2378 default int32 test_0_regress_513931 () cil managed
2380 call int32 Tests::regress_513931_inner ()
2386 .method public static default int32 test_0_newarr_i8 () cil managed
2390 newarr [mscorlib]System.Boolean
2396 .method public static specialname
2397 default int32 return_1_noinline () cil managed noinlining
2405 // Only happens with -O=-deadce,cmov
2406 .method public static default int32 test_0_cmov_unused_582322 () cil managed
2412 call int32 Tests::return_1_noinline ()
2422 .method public static hidebysig
2423 default int32 test_0_regress_586664 () cil managed
2425 // Method begins at RVA 0x20f4
2426 // Code size 76 (0x4c)
2434 IL_001b: call float64 class [mscorlib]System.Math::Pow(float64, float64)
2438 IL_0023: newarr [mscorlib]System.Double
2453 IL_0036: ldc.r8 -0.5
2454 IL_003f: bne.un IL_004a
2463 .method public static int32 test_2_leave_multiple_blocks_from_end ()
2465 .locals init (int32 V_0)
2493 .method public static int32 test_3_leave_multiple_blocks_from_hole ()
2495 .locals init (int32 V_0)