[TSan] Tackle MonoPerfCounters (#5413)
[mono.git] / mono / mini / iltests.il
index eede67eb3df15e168e80491b202bb0f747f639a1..b2d92af2cc6213805c3944fc37174168b125aa99 100644 (file)
@@ -2900,24 +2900,95 @@ 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 1
+               .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 (
                        unsigned int8   V_0,
                        int8    V_1,
                        int16   V_2,
                        unsigned int16  V_3)
 
-               ldc.i4 256
+               /*
+               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 65536
+               ldc.i4 0x18000
                stsfld int32 Tests::short_val
 
                ldsfld int32 Tests::byte_val
                stloc.0
                ldloc.0
-               brfalse L_0
+               ldc.i4 128 //0x80
+               beq L_0
 
                ldc.i4.1
                ret
@@ -2925,8 +2996,8 @@ L_0:
                ldsfld int32 Tests::byte_val
                stloc.1
                ldloc.1
-               conv.i4
-               brfalse L_1
+               ldc.i4 -128 //-0x80
+               beq L_1
 
                ldc.i4.2
                ret
@@ -2934,7 +3005,8 @@ L_1:
                ldsfld int32 Tests::short_val
                stloc.2
                ldloc.2
-               brfalse L_2
+               ldc.i4 -32768 //-0x8000
+               beq L_2
 
                ldc.i4.3
                ret
@@ -2942,7 +3014,8 @@ L_2:
                ldsfld int32 Tests::short_val
                stloc.3
                ldloc.3
-               brfalse L_3
+               ldc.i4 32768 //0x8000
+               beq L_3
 
                ldc.i4.4
                ret