Some minor ABI stress improvements
authorJakob Botsch Nielsen <t-janie@microsoft.com>
Mon, 26 Aug 2019 17:38:31 +0000 (17:38 +0000)
committerJarret Shook <jashoo@microsoft.com>
Tue, 27 Aug 2019 15:58:56 +0000 (08:58 -0700)
Allow specifying max parameters to simplify producing smaller examples

Commit migrated from https://github.com/dotnet/coreclr/commit/cbecd400575dda16f7a8b99e1480e405d2dcb680

src/coreclr/tests/src/JIT/Stress/ABI/Config.cs
src/coreclr/tests/src/JIT/Stress/ABI/Gen.cs
src/coreclr/tests/src/JIT/Stress/ABI/Program.cs

index 1677932..bbc0f88 100644 (file)
@@ -19,7 +19,7 @@ namespace ABIStress
         // and which callee is used.
         internal const int Seed = 0xeadbeef;
         internal const int MinParams = 1;
-        internal const int MaxParams = 25;
+        internal static int MaxParams { get; set; } = 25;
         // The number of callees to use. When stressing tailcalls, this is the number of tailcallee parameter lists to pregenerate.
         // These parameter lists are pregenerated because we generate tailcallers
         // by first selecting a random parameter list. A callee is then
index 6940381..3cccb1a 100644 (file)
@@ -16,7 +16,8 @@ namespace ABIStress
     // This class allows us to generate random values of specified types.
     internal static class Gen
     {
-        private static unsafe TVec GenConstantVector<TVec, TElem>(Random rand) where TVec : unmanaged where TElem : unmanaged
+        private static unsafe TVec GenConstantVector<TVec, TElem>(Random rand)
+            where TVec : unmanaged where TElem : unmanaged
         {
             int outerSize = sizeof(TVec);
             int innerSize = sizeof(TElem);
index 78610ab..9f1ce58 100644 (file)
@@ -22,7 +22,7 @@ namespace ABIStress
         {
             static void Usage()
             {
-                Console.WriteLine("Usage: [--verbose] [--caller-index <number>] [--num-calls <number>] [--tailcalls] [--pinvokes] [--no-ctrlc-summary]");
+                Console.WriteLine("Usage: [--verbose] [--caller-index <number>] [--num-calls <number>] [--tailcalls] [--pinvokes] [--max-params <number>] [--no-ctrlc-summary]");
                 Console.WriteLine("Either --caller-index or --num-calls must be specified.");
                 Console.WriteLine("Example: --num-calls 100");
                 Console.WriteLine("  Stress first 100 tailcalls and pinvokes");
@@ -30,6 +30,8 @@ namespace ABIStress
                 Console.WriteLine("  Stress tailcaller 37, verbose output");
                 Console.WriteLine("Example: --pinvokes --num-calls 1000");
                 Console.WriteLine("  Stress first 1000 pinvokes");
+                Console.WriteLine("Example: --tailcalls --num-calls 100 --max-params 2");
+                Console.WriteLine("  Stress 100 tailcalls with either 1 or 2 parameters");
             }
 
             if (args.Contains("-help") || args.Contains("--help") || args.Contains("-h"))
@@ -55,6 +57,8 @@ namespace ABIStress
                 callerIndex = int.Parse(args[argIndex + 1]);
             if ((argIndex = Array.IndexOf(args, "--num-calls")) != -1)
                 numCalls = int.Parse(args[argIndex + 1]);
+            if ((argIndex = Array.IndexOf(args, "--max-params")) != -1)
+                Config.MaxParams = int.Parse(args[argIndex + 1]);
 
             if ((callerIndex == -1) == (numCalls == -1))
             {
@@ -316,7 +320,7 @@ namespace ABIStress
 
         private static List<TypeEx> RandomParameters(TypeEx[] candidateParamTypes, Random rand)
         {
-            List<TypeEx> pms = new List<TypeEx>(rand.Next(Config.MinParams, Config.MaxParams));
+            List<TypeEx> pms = new List<TypeEx>(rand.Next(Config.MinParams, Config.MaxParams + 1));
             for (int j = 0; j < pms.Capacity; j++)
                 pms.Add(candidateParamTypes[rand.Next(candidateParamTypes.Length)]);