X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Filtests.il;h=eeebe6ef3a6e9bb6acd903707aa1003e1251c040;hb=4a5d0b18890aa9344b129bda425af5798bd4ce3d;hp=3d95f69ae5e0d8dd10382c91d2a0e10d14d60345;hpb=6b6435d1b3206b0162c37e5ecce8d9a699fe6467;p=mono.git diff --git a/mono/mini/iltests.il b/mono/mini/iltests.il index 3d95f69ae5e..eeebe6ef3a6 100644 --- a/mono/mini/iltests.il +++ b/mono/mini/iltests.il @@ -510,6 +510,64 @@ COND: ldloc.0 ret } + .method static public int32 tail3 (int32 i, int32 j) il managed { + ldarg.0 + ldarg.1 + add + ret + } + + .method static public int32 tail4 (int32 i, int32 j) il managed { + .maxstack 16 + .locals init ( + int32 k) + + // Test arg0 allocated to a register + ldarg.0 + ldarg.0 + ldarg.0 + ldarg.0 + add + add + add + starg 0 + + // Test switched up argument variables as the actual arguments + ldarg.1 + ldarg.0 + tail. + call int32 Tests::tail3 (int32, int32) + ret + } + + .method static public int32 test_24_tail_calls2 () il managed { + .maxstack 16 + .locals init ( + int32 i, + int32 j) + + ldc.i4.4 + stloc.0 + ldc.i4.8 + stloc.1 + + ldloc.0 + ldloc.1 + call int32 Tests::tail4 (int32, int32) + ret + } + + .method public static int32 test_5_jmp () cil managed { + jmp int32 Tests::jmp2 () + ldc.i4.0 + ret + } + + .method public static int32 jmp2 () cil managed { + ldc.i4.5 + ret + } + .method static public int32 test_11_switch_with_nonempty_stack () il managed { .maxstack 16 @@ -554,6 +612,102 @@ COND: ldloc.0 ret } + .method public static int32 test_1234_conv_u4 () cil managed { + .maxstack 16 + + ldc.i4 1234 + conv.u4 + conv.i4 + ret + } + + .method public static int32 test_2_lconv_to_ovf_i4_un () cil managed { + .maxstack 16 + .locals init (int32 res) + + ldc.i4 0x7fffffff + conv.u8 + conv.ovf.i4.un + pop + + ldc.i4.2 + stloc res + + .try { + ldc.i8 0x80000000 + conv.ovf.i4.un + pop + ldc.i4.0 + stloc res + leave RET + } catch [mscorlib]System.OverflowException { + pop + leave IL_0 + } + + IL_0: + + .try { + ldc.i8 0xffffffff80000000 + conv.ovf.i4.un + pop + ldc.i4.1 + stloc res + leave RET + } catch [mscorlib]System.OverflowException { + pop + leave RET + } + + RET: + ldloc res + ret + } + + .method public static int32 test_1_lconv_to_ovf_i_un () cil managed { + .maxstack 16 + .locals init (int32 res) + + ldc.i4 0x7fffffff + conv.u8 + conv.ovf.i.un + conv.i4 + pop + + ldc.i4.1 + ret + } + + .method public static int32 test_32_lconv_to_u8 () cil managed + { + .maxstack 16 + + ldc.i4 32 + conv.i8 + conv.u8 + conv.i4 + ret + } + + .method public static int32 test_32_lconv_to_i8 () cil managed + { + .maxstack 16 + + ldc.i4 32 + conv.i8 + conv.i8 + conv.i4 + ret + } + + .method public static int32 test_15_lconv_to_u () cil managed + { + ldc.i8 0x10000000f + conv.u + conv.i4 + ret + } + .method public static int32 test_0_get_type_from_handle_on_bblock_boundary () cil managed { .maxstack 16 @@ -680,24 +834,6 @@ COND: ldloc.0 ret } - .class nested private auto ansi sealed beforefieldinit FooStruct - extends [mscorlib]System.ValueType { - - .method public hidebysig specialname rtspecialname instance void .ctor () cil managed { - .maxstack 8 - ret - } - } - - .method public static int32 test_0_newobj_vtype () { - .maxstack 8 - - newobj instance void Tests/FooStruct::.ctor() - pop - ldc.i4.0 - ret - } - .method public static int32 test_7_conv_ovf_u8_un () { .maxstack 2 .locals init (unsigned int64) @@ -725,4 +861,494 @@ COND: ldloc.0 ret } + .class nested public auto ansi Integer + extends [mscorlib]System.Object { + + .field public bool n + + .method public hidebysig specialname rtspecialname + instance default void .ctor (unsigned int64 i, bool n) cil managed + { + .maxstack 8 + ldarg.0 + call instance void class [mscorlib]System.Object::.ctor() + ldarg.0 + ldarg.2 + stfld bool Tests/Integer::n + ret + } + } + + .method public static int32 test_1_bug_74726 () { + .maxstack 16 + + ldc.i4.2 + conv.ovf.u8 + ldc.i4.1 + conv.ovf.u8 + mul.ovf.un + ldc.i4.1 + newobj instance void class Tests/Integer::.ctor(unsigned int64, bool) + ldfld bool Tests/Integer::n + ldc.i4.1 + ceq + ret + } + + .class nested private auto ansi sealed xxx + extends [mscorlib]System.ValueType + { + .field public object a + + .method public hidebysig specialname rtspecialname + instance default void .ctor () cil managed + { + .maxstack 8 + ret + } + } // end of class xxx + + .method public static int32 test_0_newobj_vtype () { + .maxstack 6 + .locals init ( + valuetype Tests/xxx V_0 + ) + + newobj instance void valuetype Tests/xxx::.ctor () + stloc.0 + ldloca.s 0 + ldfld object Tests/xxx::a + brfalse OK + ldc.i4.s 1 + ret + OK: + ldc.i4.s 0 + ret + } + + .method public static int32 test_1_filters () { + .maxstack 16 + .locals init ( + int32 res + ) + + .try { // 0 + .try { + ldstr "OnErrorSub test Exception" + newobj instance void class [mscorlib]System.Exception::.ctor(string) + throw + leave.s IL_0033 + } + filter { + pop + ldc.i4.0 + endfilter + } { + pop + // Should not be called + ldc.i4.2 + stloc res + leave.s IL_0033 + } + } + filter { + pop + ldc.i4.1 + endfilter + } { + pop + ldc.i4.1 + stloc res + leave.s IL_0033 + + } + IL_0033: + ldloc res + ret + } + + .class nested private auto ansi sealed beforefieldinit TheStruct + extends [mscorlib]System.ValueType { + .field public int32 a + .field public int32 b + } + + .method public static int32 test_5_cpobj () { + .maxstack 8 + .locals init ( + valuetype Tests/TheStruct v_0, + valuetype Tests/TheStruct v_1 + ) + + ldloca v_0 + ldc.i4.2 + stfld int32 Tests/TheStruct::a + + ldloca v_0 + ldc.i4.3 + stfld int32 Tests/TheStruct::b + + ldloca v_1 + ldloca v_0 + cpobj Tests/TheStruct + + ldloca v_1 + ldfld int32 Tests/TheStruct::a + ldloca v_1 + ldfld int32 Tests/TheStruct::b + add + + ret + } + + .method public static int32 test_5_ldobj_stloc_optimization () { + .maxstack 8 + .locals init ( + valuetype Tests/TheStruct v_0, + valuetype Tests/TheStruct v_1 + ) + + ldloca v_0 + ldc.i4.2 + stfld int32 Tests/TheStruct::a + + ldloca v_0 + ldc.i4.3 + stfld int32 Tests/TheStruct::b + + ldloca v_0 + ldobj valuetype Tests/TheStruct + stloc.s v_1 + + ldloca v_1 + ldfld int32 Tests/TheStruct::a + ldloca v_1 + ldfld int32 Tests/TheStruct::b + add + + ret + } + + .method public static int32 test_1_cpobj_reference () { + .maxstack 8 + .locals init ( + object v_0, + object v_1 + ) + + newobj instance void object::.ctor() + stloc v_0 + + ldloca v_1 + ldloca v_0 + cpobj object + + ldloc v_0 + ldloc v_1 + ceq + ret + } + + .method public static int32 test_1_initobj_reference () { + .maxstack 8 + .locals init ( + object v_0 + ) + + newobj instance void object::.ctor() + stloc v_0 + + ldloca v_0 + initobj object + + ldloc v_0 + ldnull + ceq + ret + } + + .method public static int32 test_1_ldobj_reference () { + .maxstack 8 + .locals init ( + object v_0 + ) + + newobj instance void object::.ctor() + stloc v_0 + + ldloc v_0 + ldloca v_0 + ldobj object + ceq + ret + } + + .method public static int32 test_5_vtype_on_bb_boundary () { + .maxstack 8 + .locals init ( + valuetype Tests/TheStruct v_0, + valuetype Tests/TheStruct v_1 + ) + + ldloca v_0 + ldc.i4.2 + stfld int32 Tests/TheStruct::a + + ldloca v_0 + ldc.i4.3 + stfld int32 Tests/TheStruct::b + + ldloc v_0 + br L_0 + L_0: stloc v_1 + + ldloca v_1 + ldfld int32 Tests/TheStruct::a + ldloca v_1 + ldfld int32 Tests/TheStruct::b + add + ret + } + + .method public static int32 test_5_different_in_stacks () cil managed { + .maxstack 16 + + ldc.i4.1 + ldc.i4.1 + beq L_0 + + ldc.i4.3 + ldc.i4.3 + br L_1 + ldc.i4.3 + ldc.i4.3 + br L_2 + L_0: ldc.i4.2 + ldc.i4.3 + ldc.i4.1 + ldc.i4.1 + beq L_2 + L_1: add + ret + L_2: add + ret + } + + .method public static int32 test_3_larray_get_set () { + .locals init ( + int32[2] V_0) + + ldc.i4.2 + newobj instance void int32[0...]::.ctor(int32) + stloc.0 + ldloc.0 + ldc.i4.0 + ldc.i4 1 + call instance void int32[0...]::Set(int32, int32) + ldloc.0 + ldc.i4.1 + ldc.i4 2 + call instance void int32[0...]::Set(int32, int32) + + ldloc.0 + ldc.i4.0 + call instance int32 int32[0...]::Get(int32) + ldloc.0 + ldc.i4.1 + call instance int32 int32[0...]::Get(int32) + add + ret + } + + .method public static int32 test_0_pop_side_effects () { + .try { + ldc.r8 1 + ldc.r8 0 + div + ckfinite + pop + leave FAIL + } + catch [mscorlib]System.ArithmeticException { + pop + leave L_0 + } + L_0: + ldc.i4.0 + ret + FAIL: + ldc.i4.1 + ret + } + + .method public static void regalloc_regress_78314_helper (object o) cil managed + { + ret + } + + .method public static int32 test_1_regalloc_regress_78314 () cil managed + { + // Code size 68 (0x44) + .maxstack 6 + .locals init (int32 V_0, bool V_1) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: br.s IL_003b + + IL_0004: + IL_001e: ldc.i4.s 10 + IL_0020: ldloc.0 + IL_0021: shl + IL_0022: ldc.i4.s 10 + IL_0024: ldloc.0 + IL_0025: shl + IL_0026: ceq + IL_0028: box [mscorlib]System.Boolean + IL_0032: call void Tests::regalloc_regress_78314_helper(object) + IL_0037: ldloc.0 + IL_0038: ldc.i4.1 + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ldc.i4.8 + IL_003f: blt.s IL_0004 + + ldloc.0 + ldc.i4.8 + ceq + conv.i4 + ret + } + + .method public static void try_block_end_remove_if_useless () cil managed { + .maxstack 8 + + T_START: + ldstr "Start" + pop + leave.s COMPLETE + T1_END: + + COMPLETE: + ret + + F1_START: + ldstr "Finally1" + pop + endfinally + F1_END: + + .try T_START to T1_END finally handler F1_START to F1_END + } + + .method public static int32 test_0_try_block_end_remove_if_useless () cil managed { + call void class Tests::try_block_end_remove_if_useless () + ldc.i4.0 + ret + } + + .method private static int32 test_0_regress_78629_switch_next_ins_target () cil managed + { + ldc.i4.0 + switch (target) + target: ldstr "bar" + pop + ldc.i4.0 + ret + } + + // This belongs to basic-float.cs, but its hard to tell mcs/csc to + // generate the non .un version of the opcodes + .method private static hidebysig + default int32 test_4_float_branch_nan () cil managed + { + // Method begins at RVA 0x27a4 + // Code size 74 (0x4a) + .maxstack 2 + .locals init ( + float64 V_0, + float64 V_1, + int32 V_2) + IL_0000: ldc.r8 (00 00 00 00 00 00 f8 ff) + IL_0009: stloc.0 + IL_000a: ldc.r8 1. + IL_0013: stloc.1 + IL_0014: ldc.i4.0 + IL_0015: stloc.2 + IL_0016: ldloc.0 + IL_0017: ldloc.1 + IL_0018: bge.s IL_001a + + br L1 + IL_001a: ldloc.2 + IL_001b: ret + L1: + IL_001c: ldloc.2 + IL_001d: ldc.i4.1 + IL_001e: add + IL_001f: stloc.2 + IL_0020: ldloc.0 + IL_0021: ldloc.1 + IL_0022: ble.s IL_002e + br L2 + IL_002e: ldloc.2 + IL_002f: ret + L2: + IL_0030: ldloc.2 + IL_0031: ldc.i4.1 + IL_0032: add + IL_0033: stloc.2 + IL_0034: ldloc.0 + IL_0035: ldloc.1 + IL_0036: blt.s IL_0038 + br L3 + IL_0038: ldloc.2 + IL_0039: ret + L3: + IL_003a: ldloc.2 + IL_003b: ldc.i4.1 + IL_003c: add + IL_003d: stloc.2 + IL_003e: ldloc.0 + IL_003f: ldloc.1 + IL_0040: bgt.s IL_0042 + br L4 + IL_0042: ldloc.2 + IL_0043: ret + L4: + IL_0044: ldloc.2 + IL_0045: ldc.i4.1 + IL_0046: add + IL_0047: stloc.2 + IL_0048: ldloc.2 + IL_0049: ret + } // end of method Tests::test_5_float_branch_nan + + .method private static hidebysig + default void regress_80622_inner (object x) cil managed + { + .locals (unsigned int8 i) + // Method begins at RVA 0x2050 + // Code size 14 (0xe) + .maxstack 8 + IL_1000: ldarg.0 + IL_1001: unbox unsigned int8 + IL_1006: ldobj unsigned int8 + IL_000b: conv.ovf.i4.un + IL_000c: pop + IL_000d: ret + } + + // method line 2 + .method private static hidebysig + default int32 test_0_regress_80622 () cil managed + { + .maxstack 8 + IL_0000: ldc.i4 255 + IL_0005: box unsigned int8 + IL_000a: call void class Tests::regress_80622_inner (object) + ldc.i4.0 + IL_000f: ret + } + }