X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Filtests.il;h=1bc5a2cf720e6ea557da34f5fc621c3d13875b96;hb=3aeeae6230445e3544fde47221edf45f5230a316;hp=9c33cebac406a0ba1ee222622e53e9032936c99d;hpb=242987b59bcf188b5af86f4fab06cfbbb5914e3a;p=mono.git diff --git a/mono/mini/iltests.il b/mono/mini/iltests.il index 9c33cebac40..1bc5a2cf720 100644 --- a/mono/mini/iltests.il +++ b/mono/mini/iltests.il @@ -2900,7 +2900,73 @@ END: .field private static int32 byte_val .field private static int32 short_val - .method public static int32 test_0_implicit_widen_or_local_stores () cil managed + .method static int32 widen_arguments (unsigned int8 a, int8 b, int16 c, unsigned int16 d) cil managed noinlining + { + .maxstack 4 + ldsfld int32 Tests::byte_val + starg.s 0 + ldarg.0 + ldc.i4 128 //0x80 + beq L_0 + + ldc.i4.1 + ret +L_0: + ldsfld int32 Tests::byte_val + starg.s 1 + ldarg.1 + ldc.i4 -128 //-0x80 + beq L_1 + + ldc.i4.2 + ret + +L_1: + ldsfld int32 Tests::short_val + starg.s 2 + ldarg.2 + ldc.i4 -32768 //-0x8000 + beq L_2 + + ldc.i4.3 + ret + +L_2: + ldsfld int32 Tests::short_val + starg.s 3 + ldarg.3 + ldc.i4 32768 //0x8000 + beq L_3 + + ldc.i4.4 + ret + +L_3: + ldc.i4.0 + ret + } + + .method public static int32 test_0_implicit_widen_of_argument_stores () cil managed + { + .maxstack 5 + /* + This test verifies that storing an I4 value from the evail stack into a local variable triggers proper widening. + The values are picked so storing them have different values depending on the sign'ness of the local variable. + */ + ldc.i4 0x180 + stsfld int32 Tests::byte_val + ldc.i4 0x18000 + stsfld int32 Tests::short_val + + ldc.i4.0 + ldc.i4.0 + ldc.i4.0 + ldc.i4.0 + call int32 Tests::widen_arguments (unsigned int8 a, int8 b, int16 c, unsigned int16 d) + ret + } + + .method public static int32 test_0_implicit_widen_of_local_stores () cil managed { .maxstack 4 .locals init ( @@ -2957,4 +3023,83 @@ L_3: ldc.i4.0 ret } + + .method public static bool llvm_regress_59436 () { + // Code size 41 (0x29) + .maxstack 3 + .locals init (float64 V_0, + float64 V_1, + valuetype [mscorlib]System.Decimal V_2) + IL_0000: ldc.r8 1 + IL_0009: stloc.0 + IL_000a: ldc.r8 2 + IL_0013: stloc.1 + IL_0014: ldloc.0 + IL_0015: newobj instance void [mscorlib]System.Decimal::.ctor(float64) + IL_001a: ldloca.s V_2 + IL_001c: ldloc.1 + IL_001d: call instance void [mscorlib]System.Decimal::.ctor(float64) + IL_0022: ldloc.2 + IL_0023: call bool [mscorlib]System.Decimal::op_LessThanOrEqual(valuetype [mscorlib]System.Decimal, + valuetype [mscorlib]System.Decimal) + IL_0028: ret + } + + .method private hidebysig static void fail_inline() cil managed + { + // Code size 9 (0x9) + .maxstack 8 + IL_0000: ldc.i4.s 16 + IL_0002: conv.u + IL_0003: ldc.i4.1 + IL_0004: mul.ovf.un + IL_0005: localloc + IL_0007: pop + IL_0008: ret + } + + .method private hidebysig static int32 + always_inline(int32 op) cil managed aggressiveinlining + { + // Code size 24 (0x18) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0009 + + IL_0003: ldarg.0 + IL_0004: ldc.i4.2 + IL_0005: beq.s IL_000b + + IL_0007: br.s IL_000d + + IL_0009: ldc.i4.0 + IL_000a: ret + + IL_000b: ldc.i4.3 + IL_000c: ret + + IL_000d: call void Tests::fail_inline() + IL_0012: newobj instance void [mscorlib]System.Exception::.ctor() + IL_0017: throw + } + + .method public hidebysig static int32 test_3_regress_59608() cil managed + { + .maxstack 8 + IL_0000: ldc.i4.2 + IL_0001: call int32 Tests::always_inline(int32) + IL_000c: ret + } + + .method public hidebysig static int32 test_104_conv_u_and_string() cil managed + { + .maxstack 8 + ldstr "hello" + conv.u + call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() + add + ldind.u2 + ret + } + }