Merge pull request #19115 from dotnet/dev/unix_test_workflow
authorBruce Forstall <brucefo@microsoft.com>
Thu, 2 Aug 2018 20:30:23 +0000 (13:30 -0700)
committerGitHub <noreply@github.com>
Thu, 2 Aug 2018 20:30:23 +0000 (13:30 -0700)
Enable Windows ARM64 builds using release product tools

14 files changed:
BuildToolsVersion.txt
Documentation/project-docs/dotnet-standards.md
ILAsmVersion.txt
buildpipeline/tests/test_pipelines.json
dependencies.props
perf.groovy
src/jit/hwintrinsiccodegenxarch.cpp
src/jit/hwintrinsiclistxarch.h
src/jit/morph.cpp
tests/CoreFX/CoreFX.issues.json
tests/arm/Tests.lst
tests/scripts/perf-prep.sh
tests/scripts/run-throughput-perf.py
tests/testsFailing.arm.txt

index 9fe18e7..cd35cb9 100644 (file)
@@ -1 +1 @@
-2.2.0-preview1-03025-01
+2.2.0-preview1-03101-02
index d726836..5a815a2 100644 (file)
@@ -41,7 +41,7 @@ ECMA 335 - CLI
 
 **ECMA Technical Report 084: Information Derived from Partition IV XML File**
 
-- [ECMA TR/84 Report (PDF)](http://www.ecma-international.org/publications/files/ECMA-TR/TR-084.pdf)
+- [ECMA TR/84 Report (PDF)](http://www.ecma-international.org/publications/files/ECMA-TR/ECMA%20TR-084.pdf)
 - [ECMA TR/84 Tools and Source Code](http://www.ecma-international.org/publications/files/ECMA-TR/TR-084.zip)
 
 ECMA 372 - C++/CLI
index 57c305a..206eafe 100644 (file)
@@ -1 +1 @@
-3.0.0-preview1-26727-01
+3.0.0-preview1-26802-01
index 1a6879f..d9079f8 100644 (file)
                 "Parameters": {
                 "HelixJobType": "test/functional/cli/",
                 "TargetsWindows": "false",
-                "Rid": "alpine.3.6",
+                "Rid": "linux-musl-x64",
                 "TargetQueues": "Alpine.36.Amd64",
                 "TestContainerSuffix": "alpine36",
                 "TargetsNonWindowsArg": "TargetsNonWindows "
                 "Parameters": {
                 "HelixJobType": "test/functional/r2r/cli/",
                 "TargetsWindows": "false",
-                "Rid": "alpine.3.6",
+                "Rid": "linux-musl-x64",
                 "TargetQueues": "Alpine.36.Amd64",
                 "TestContainerSuffix": "alpine36-r2r",
                 "CrossgenArg": "Crossgen ",
             ],
         }
     ]
-}
\ No newline at end of file
+}
index 26bfa7f..d16d43d 100644 (file)
 
   <!-- Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. -->
   <PropertyGroup>
-    <CoreFxCurrentRef>07e17a3dfa2d18c81a3a0c9f403fa698082f2125</CoreFxCurrentRef>
-    <CoreClrCurrentRef>07e17a3dfa2d18c81a3a0c9f403fa698082f2125</CoreClrCurrentRef>
-    <BuildToolsCurrentRef>19ae58380b88ff96f01678279b8e3104c9930f5f</BuildToolsCurrentRef>
-    <PgoDataCurrentRef>07e17a3dfa2d18c81a3a0c9f403fa698082f2125</PgoDataCurrentRef>
-    <CoreSetupCurrentRef>c0c6917fcb00430f21248a8030fc408755ea95ee</CoreSetupCurrentRef>
+    <CoreFxCurrentRef>703c01d920e482b8e260fe0df76f3f963d731f0b</CoreFxCurrentRef>
+    <CoreClrCurrentRef>703c01d920e482b8e260fe0df76f3f963d731f0b</CoreClrCurrentRef>
+    <BuildToolsCurrentRef>703c01d920e482b8e260fe0df76f3f963d731f0b</BuildToolsCurrentRef>
+    <PgoDataCurrentRef>703c01d920e482b8e260fe0df76f3f963d731f0b</PgoDataCurrentRef>
+    <CoreSetupCurrentRef>703c01d920e482b8e260fe0df76f3f963d731f0b</CoreSetupCurrentRef>
   </PropertyGroup>
 
   <!-- Tests/infrastructure dependency versions. -->
   <PropertyGroup>
-    <MicrosoftPrivateCoreFxNETCoreAppPackageVersion>4.6.0-preview1-26727-01</MicrosoftPrivateCoreFxNETCoreAppPackageVersion>
-    <MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview1-26727-01</MicrosoftNETCorePlatformsPackageVersion>
-    <PgoDataPackageVersion>99.99.99-master-20180727-0226</PgoDataPackageVersion>
-    <MicrosoftNETCoreRuntimeCoreCLRPackageVersion>3.0.0-preview1-26727-01</MicrosoftNETCoreRuntimeCoreCLRPackageVersion>
-    <MicrosoftNETCoreAppPackageVersion>3.0.0-preview1-26727-01</MicrosoftNETCoreAppPackageVersion>
+    <MicrosoftPrivateCoreFxNETCoreAppPackageVersion>4.6.0-preview1-26802-01</MicrosoftPrivateCoreFxNETCoreAppPackageVersion>
+    <MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview1-26802-01</MicrosoftNETCorePlatformsPackageVersion>
+    <PgoDataPackageVersion>99.99.99-master-20180801-0056</PgoDataPackageVersion>
+    <MicrosoftNETCoreRuntimeCoreCLRPackageVersion>3.0.0-preview1-26802-01</MicrosoftNETCoreRuntimeCoreCLRPackageVersion>
+    <MicrosoftNETCoreAppPackageVersion>3.0.0-preview1-26801-04</MicrosoftNETCoreAppPackageVersion>
     <XunitPackageVersion>2.4.0-beta.2.build4010</XunitPackageVersion>
     <XunitPerformanceApiPackageVersion>1.0.0-beta-build0015</XunitPerformanceApiPackageVersion>
     <MicrosoftDiagnosticsTracingTraceEventPackageVersion>2.0.4</MicrosoftDiagnosticsTracingTraceEventPackageVersion>
@@ -52,7 +52,7 @@
   <!-- Package versions used as toolsets -->
   <PropertyGroup>
     <FeedTasksPackage>Microsoft.DotNet.Build.Tasks.Feed</FeedTasksPackage>
-    <FeedTasksPackageVersion>2.2.0-preview1-03025-01</FeedTasksPackageVersion>
+    <FeedTasksPackageVersion>2.2.0-preview1-03101-02</FeedTasksPackageVersion>
   </PropertyGroup>
 
   <!-- Publish symbol build task package -->
index e4c8907..4212207 100644 (file)
@@ -276,118 +276,125 @@ def static getOSGroup(def os) {
     }
 }
 
-def static getFullPerfJobName(def project, def os, def isPR) {
-    return Utilities.getFullJobName(project, "perf_${os}", isPR)
+def static getFullPerfJobName(def project, def os, def arch, def isPR) {
+    return Utilities.getFullJobName(project, "perf_${os}_${arch}", isPR)
 }
 
 // Create the Linux/OSX/CentOS coreclr test leg for debug and release and each scenario
 [true, false].each { isPR ->
-    def fullBuildJobName = Utilities.getFullJobName(project, 'perf_linux_build', isPR)
-    def architecture = 'x64'
-    def configuration = 'Release'
+    ['x64'].each { architecture ->
+        def fullBuildJobName = Utilities.getFullJobName(project, "perf_linux_build", isPR)
+        def configuration = 'Release'
 
-    // Build has to happen on RHEL7.2 (that's where we produce the bits we ship)
-    ['RHEL7.2'].each { os ->
-        def newBuildJob = job(fullBuildJobName) {
-            steps {
-                shell("./build.sh verbose ${architecture} ${configuration}")
-                shell("./build-test.sh generatelayoutonly ${architecture} ${configuration}")
+        def crossCompile = ""
+        def crossLayout = ""
+        def python = "python3.5"
+
+        // Build has to happen on RHEL7.2 (that's where we produce the bits we ship)
+        ['RHEL7.2'].each { os ->
+            def newBuildJob = job(fullBuildJobName) {
+                steps {
+                    shell("./build.sh verbose ${architecture} ${configuration}${crossCompile}")
+                    shell("./build-test.sh generatelayoutonly ${architecture} ${configuration}${crossLayout}")
+                }
             }
+            Utilities.setMachineAffinity(newBuildJob, os, 'latest-or-auto')
+            Utilities.standardJobSetup(newBuildJob, project, isPR, "*/${branch}")
+            Utilities.addArchival(newBuildJob, "bin/Product/**,bin/obj/*/tests/**/*.dylib,bin/obj/*/tests/**/*.so,bin/tests/**", "bin/Product/**/.nuget/**")
         }
-        Utilities.setMachineAffinity(newBuildJob, os, 'latest-or-auto')
-        Utilities.standardJobSetup(newBuildJob, project, isPR, "*/${branch}")
-        Utilities.addArchival(newBuildJob, "bin/Product/**,bin/obj/*/tests/**/*.dylib,bin/obj/*/tests/**/*.so,bin/tests/**", "bin/Product/**/.nuget/**")
-    }
 
 
-    // Actual perf testing on the following OSes
-    def perfOSList = ['Ubuntu16.04']
-    perfOSList.each { os ->
-        def newJob = job(getFullPerfJobName(project, os, isPR)) {
+        // Actual perf testing on the following OSes
+        def perfOSList = ['Ubuntu16.04']
 
-            label('ubuntu_1604_clr_perf')
-            wrappers {
-                credentialsBinding {
-                    string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
+        perfOSList.each { os ->
+            def newJob = job(getFullPerfJobName(project, os, architecture, isPR)) {
+
+                def machineLabel = 'ubuntu_1604_clr_perf'
+
+                label(machineLabel)
+                wrappers {
+                    credentialsBinding {
+                        string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
+                    }
                 }
-            }
 
-            if (isPR) {
-                parameters {
-                    stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
+                if (isPR) {
+                    parameters {
+                        stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
+                    }
                 }
-            }
 
-            parameters {
-                // Cap the maximum number of iterations to 21.
-                stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '21', 'Sets the number of iterations to twenty one.  We are doing this to limit the amount of data that we upload as 20 iterations is enough to get a good sample')
-                stringParam('XUNIT_PERFORMANCE_MAX_ITERATION_INNER_SPECIFIED', '21', 'Sets the number of iterations to twenty one.  We are doing this to limit the amount of data that we upload as 20 iterations is enough to get a good sample')
-                stringParam('PRODUCT_BUILD', '', 'Build number from which to copy down the CoreCLR Product binaries built for Linux')
-            }
+                parameters {
+                    // Cap the maximum number of iterations to 21.
+                    stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '21', 'Sets the number of iterations to twenty one.  We are doing this to limit the amount of data that we upload as 20 iterations is enough to get a good sample')
+                    stringParam('XUNIT_PERFORMANCE_MAX_ITERATION_INNER_SPECIFIED', '21', 'Sets the number of iterations to twenty one.  We are doing this to limit the amount of data that we upload as 20 iterations is enough to get a good sample')
+                    stringParam('PRODUCT_BUILD', '', 'Build number from which to copy down the CoreCLR Product binaries built for Linux')
+                }
 
-            def osGroup = getOSGroup(os)
-            def runType = isPR ? 'private' : 'rolling'
-            def benchViewName = isPR ? 'coreclr private \$BenchviewCommitName' : 'coreclr rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
-            def uploadString = '-uploadToBenchview'
+                def osGroup = getOSGroup(os)
+                def runType = isPR ? 'private' : 'rolling'
+                def benchViewName = isPR ? 'coreclr private \$BenchviewCommitName' : 'coreclr rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
+                def uploadString = '-uploadToBenchview'
 
-            def runXUnitCommonArgs = "-arch ${architecture} -os ${os} -configuration ${configuration} -stabilityPrefix \"taskset 0x00000002 nice --adjustment=-10\" -generateBenchviewData \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools\" ${uploadString} -runtype ${runType} -outputdir \"\${WORKSPACE}/bin/sandbox_logs\""
+                def runXUnitCommonArgs = "-arch ${architecture} -os ${os} -configuration ${configuration} -stabilityPrefix \"taskset 0x00000002 nice --adjustment=-10\" -generateBenchviewData \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools\" ${uploadString} -runtype ${runType} -outputdir \"\${WORKSPACE}/bin/sandbox_logs\""
 
-            steps {
-                shell("./tests/scripts/perf-prep.sh --nocorefx")
-                shell("./init-tools.sh")
-                copyArtifacts(fullBuildJobName) {
-                    includePatterns("bin/**")
-                    buildSelector {
-                        buildNumber('\${PRODUCT_BUILD}')
+                steps {
+                    shell("./tests/scripts/perf-prep.sh --nocorefx")
+                    shell("./init-tools.sh")
+                    copyArtifacts(fullBuildJobName) {
+                        includePatterns("bin/**")
+                        buildSelector {
+                            buildNumber('\${PRODUCT_BUILD}')
+                        }
                     }
+                    shell("GIT_BRANCH_WITHOUT_ORIGIN=\$(echo \$GIT_BRANCH | sed \"s/[^/]*\\/\\(.*\\)/\\1 /\")\n" +
+                    "${python} \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/submission-metadata.py\" --name \" ${benchViewName} \" --user-email \"dotnet-bot@microsoft.com\"\n" +
+                    "${python} \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/build.py\" git --branch \$GIT_BRANCH_WITHOUT_ORIGIN --type ${runType}")
+                    shell("""${python} ./tests/scripts/run-xunit-perf.py -testBinLoc bin/tests/Windows_NT.${architecture}.${configuration}/JIT/Performance/CodeQuality ${runXUnitCommonArgs}""")
                 }
-                shell("GIT_BRANCH_WITHOUT_ORIGIN=\$(echo \$GIT_BRANCH | sed \"s/[^/]*\\/\\(.*\\)/\\1 /\")\n" +
-                "python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/submission-metadata.py\" --name \" ${benchViewName} \" --user-email \"dotnet-bot@microsoft.com\"\n" +
-                "python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/build.py\" git --branch \$GIT_BRANCH_WITHOUT_ORIGIN --type ${runType}")
-                shell("""python3 ./tests/scripts/run-xunit-perf.py -testBinLoc bin/tests/Windows_NT.${architecture}.${configuration}/JIT/Performance/CodeQuality ${runXUnitCommonArgs}""")
             }
-        }
 
-        def archiveSettings = new ArchivalSettings()
-        archiveSettings.addFiles('bin/sandbox_logs/**/*_log.txt')
-        archiveSettings.addFiles('bin/sandbox_logs/**/*.csv')
-        archiveSettings.addFiles('bin/sandbox_logs/**/*.xml')
-        archiveSettings.addFiles('bin/sandbox_logs/**/*.log')
-        archiveSettings.addFiles('bin/sandbox_logs/**/*.md')
-        archiveSettings.addFiles('bin/sandbox_logs/**/*.etl')
-        archiveSettings.addFiles('machinedata.json')
-        archiveSettings.setAlwaysArchive()
+            def archiveSettings = new ArchivalSettings()
+            archiveSettings.addFiles('bin/sandbox_logs/**/*_log.txt')
+            archiveSettings.addFiles('bin/sandbox_logs/**/*.csv')
+            archiveSettings.addFiles('bin/sandbox_logs/**/*.xml')
+            archiveSettings.addFiles('bin/sandbox_logs/**/*.log')
+            archiveSettings.addFiles('bin/sandbox_logs/**/*.md')
+            archiveSettings.addFiles('bin/sandbox_logs/**/*.etl')
+            archiveSettings.addFiles('machinedata.json')
+            archiveSettings.setAlwaysArchive()
 
-        Utilities.addArchival(newJob, archiveSettings)
-        Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
+            Utilities.addArchival(newJob, archiveSettings)
+            Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
 
-        // For perf, we need to keep the run results longer
-        newJob.with {
-            // Enable the log rotator
-            logRotator {
-                artifactDaysToKeep(14)
-                daysToKeep(30)
-                artifactNumToKeep(100)
-                numToKeep(200)
-            }
-            wrappers {
-                timeout {
-                    absolute(240)
+            // For perf, we need to keep the run results longer
+            newJob.with {
+                // Enable the log rotator
+                logRotator {
+                    artifactDaysToKeep(14)
+                    daysToKeep(30)
+                    artifactNumToKeep(100)
+                    numToKeep(200)
+                }
+                wrappers {
+                    timeout {
+                        absolute(240)
+                    }
                 }
             }
-        }
-    } // os
+        } // os
 
-    def flowJobPerfRunList = perfOSList.collect { os ->
-        "{ build(params + [PRODUCT_BUILD: b.build.number], '${getFullPerfJobName(project, os, isPR)}') }"
-    }
-    def newFlowJob = buildFlowJob(Utilities.getFullJobName(project, "perf_linux_flow", isPR, '')) {
-        if (isPR) {
-            parameters {
-                stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
-            }
+        def flowJobPerfRunList = perfOSList.collect { os ->
+            "{ build(params + [PRODUCT_BUILD: b.build.number], '${getFullPerfJobName(project, os, architecture, isPR)}') }"
         }
-        buildFlow("""
+        def newFlowJob = buildFlowJob(Utilities.getFullJobName(project, "perf_linux_${architecture}_flow", isPR, '')) {
+            if (isPR) {
+                parameters {
+                    stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
+                }
+            }
+            buildFlow("""
 // First, build the bits on RHEL7.2
 b = build(params, '${fullBuildJobName}')
 
@@ -396,169 +403,222 @@ parallel(
     ${flowJobPerfRunList.join(",\n    ")}
 )
 """)
-    }
-
-    Utilities.setMachineAffinity(newFlowJob, 'Windows_NT', 'latest-or-auto')
-    Utilities.standardJobSetup(newFlowJob, project, isPR, "*/${branch}")
+        }
 
-    if (isPR) {
-        TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
-        builder.setGithubContext("Linux Perf Test Flow")
-        builder.triggerOnlyOnComment()
-        builder.setCustomTriggerPhrase("(?i).*test\\W+linux\\W+perf\\W+flow.*")
-        builder.triggerForBranch(branch)
-        builder.emitTrigger(newFlowJob)
-    }
-    else {
-        // Set a push trigger
-        TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
-        builder.emitTrigger(newFlowJob)
-    }
+        Utilities.setMachineAffinity(newFlowJob, 'Windows_NT', 'latest-or-auto')
+        Utilities.standardJobSetup(newFlowJob, project, isPR, "*/${branch}")
 
+        if (isPR) {
+            TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
+            builder.setGithubContext("Linux Perf Test Flow")
+            builder.triggerOnlyOnComment()
+            builder.setCustomTriggerPhrase("(?i).*test\\W+linux\\W+perf\\W+flow.*")
+            builder.triggerForBranch(branch)
+            builder.emitTrigger(newFlowJob)
+        }
+        else {
+            // Set a push trigger
+            TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
+            builder.emitTrigger(newFlowJob)
+        }
+    } // architecture
 } // isPR
 
-def static getFullThroughputJobName(def project, def os, def isPR) {
-    return Utilities.getFullJobName(project, "perf_throughput_${os}", isPR)
+def static getDockerImageName(def architecture, def os, def isBuild) {
+    // We must change some docker private images to official later
+    if (isBuild) {
+        if (architecture == 'arm') {
+            if (os == 'Ubuntu') {
+                return "microsoft/dotnet-buildtools-prereqs:ubuntu-14.04-cross-e435274-20180426002420"
+            }
+        }
+    }
+    println("Unknown architecture to use docker: ${architecture} ${os}");
+    assert false
+}
+
+def static getFullThroughputJobName(def project, def os, def arch, def isPR) {
+    return Utilities.getFullJobName(project, "perf_throughput_${os}_${arch}", isPR)
 }
 
 // Create the Linux/OSX/CentOS coreclr test leg for debug and release and each scenario
 [true, false].each { isPR ->
-    def fullBuildJobName = Utilities.getFullJobName(project, 'perf_throughput_linux_build', isPR)
-    def architecture = 'x64'
-    def configuration = 'Release'
+    ['x64','arm'].each { architecture ->
+        def fullBuildJobName = Utilities.getFullJobName(project, "perf_throughput_linux_${architecture}_build", isPR)
+        def configuration = 'Release'
 
-    // Build has to happen on RHEL7.2 (that's where we produce the bits we ship)
-    ['RHEL7.2'].each { os ->
-        def newBuildJob = job(fullBuildJobName) {
-            steps {
-                shell("./build.sh verbose ${architecture} ${configuration}")
+        
+        def crossCompile = ""
+        def python = "python3.5"
+
+        if (architecture == "arm") {
+            python = "python3.6"
+            def buildCommands = []
+            def newBuildJob = job(fullBuildJobName) {
+                def additionalOpts = "-e CAC_ROOTFS_DIR=/crossrootfs/x86"
+                def dockerImage = getDockerImageName(architecture, 'Ubuntu', true)
+                def dockerCmd = "docker run -i --rm -v \${WORKSPACE}:\${WORKSPACE} -w \${WORKSPACE} -e ROOTFS_DIR=/crossrootfs/${architecture} ${additionalOpts} ${dockerImage} "
+
+                buildCommands += "${dockerCmd}\${WORKSPACE}/build.sh release ${architecture} cross crosscomponent"
+
+                steps {
+                    buildCommands.each { buildCommand ->
+                        shell(buildCommand)
+                    }
+                }
+
+                publishers {
+                    azureVMAgentPostBuildAction {
+                        agentPostBuildAction('Delete agent after build execution (when idle).')
+                    }
+                }
+            }
+            Utilities.setMachineAffinity(newBuildJob, "Ubuntu16.04", 'latest-or-auto')
+            Utilities.standardJobSetup(newBuildJob, project, isPR, "*/${branch}")
+            Utilities.addArchival(newBuildJob, "bin/Product/**")
+        }
+        else {
+            // Build has to happen on RHEL7.2 (that's where we produce the bits we ship)
+            ['RHEL7.2'].each { os ->
+                def newBuildJob = job(fullBuildJobName) {
+                    steps {
+                        shell("./build.sh verbose ${architecture} ${configuration}${crossCompile}")
+                    }
+                }
+                Utilities.setMachineAffinity(newBuildJob, os, 'latest-or-auto')
+                Utilities.standardJobSetup(newBuildJob, project, isPR, "*/${branch}")
+                Utilities.addArchival(newBuildJob, "bin/Product/**")
             }
         }
-        Utilities.setMachineAffinity(newBuildJob, os, 'latest-or-auto')
-        Utilities.standardJobSetup(newBuildJob, project, isPR, "*/${branch}")
-        Utilities.addArchival(newBuildJob, "bin/Product/**")
-    }
 
-    // Actual perf testing on the following OSes
-    def throughputOSList = ['Ubuntu14.04']
-    def throughputOptLevelList = ['full_opt', 'min_opt']
+        // Actual perf testing on the following OSes
+        def throughputOSList = ['Ubuntu16.04']
+        if (architecture == 'arm') {
+            throughputOSList = ['Ubuntu14.04']
+        }
+        def throughputOptLevelList = ['full_opt', 'min_opt']
 
-    def throughputOSOptLevelList = []
+        def throughputOSOptLevelList = []
 
-    throughputOSList.each { os ->
-        throughputOptLevelList.each { opt_level ->
-            throughputOSOptLevelList.add("${os}_${opt_level}")
+        throughputOSList.each { os ->
+            throughputOptLevelList.each { opt_level ->
+                throughputOSOptLevelList.add("${os}_${opt_level}")
+            }
         }
-    }
 
-    throughputOSList.each { os ->
-        throughputOptLevelList.each { opt_level ->
-            def newJob = job(getFullThroughputJobName(project, "${os}_${opt_level}", isPR)) {
+        throughputOSList.each { os ->
+            throughputOptLevelList.each { opt_level ->
+                def newJob = job(getFullThroughputJobName(project, "${os}_${opt_level}", architecture, isPR)) {
+
+                    def machineLabel = 'ubuntu_1604_clr_perf'
+                    if (architecture == 'arm') {
+                        machineLabel = 'ubuntu_1404_clr_perf_arm'
+                    }
+
+                    label(machineLabel)
+                        wrappers {
+                            credentialsBinding {
+                                string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
+                            }
+                        }
 
-                label('ubuntu_1604_clr_perf')
-                    wrappers {
-                        credentialsBinding {
-                            string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
+                    if (isPR) {
+                        parameters {
+                            stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that will be used to build the full title of a run in Benchview.')
                         }
                     }
 
-                if (isPR) {
                     parameters {
-                        stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that will be used to build the full title of a run in Benchview.')
+                        stringParam('PRODUCT_BUILD', '', 'Build number from which to copy down the CoreCLR Product binaries built for Linux')
                     }
-                }
-
-                parameters {
-                    stringParam('PRODUCT_BUILD', '', 'Build number from which to copy down the CoreCLR Product binaries built for Linux')
-                }
 
-                def osGroup = getOSGroup(os)
-                def runType = isPR ? 'private' : 'rolling'
-                def benchViewName = isPR ? 'coreclr-throughput private \$BenchviewCommitName' : 'coreclr-throughput rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
-
-                steps {
-                    shell("bash ./tests/scripts/perf-prep.sh --throughput")
-                    shell("./init-tools.sh")
-                    copyArtifacts(fullBuildJobName) {
-                        includePatterns("bin/Product/**")
-                        buildSelector {
-                            buildNumber('\${PRODUCT_BUILD}')
+                    def osGroup = getOSGroup(os)
+                    def runType = isPR ? 'private' : 'rolling'
+                    def benchViewName = isPR ? 'coreclr-throughput private \$BenchviewCommitName' : 'coreclr-throughput rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
+                    def archString = architecture == 'arm' ? ' --arch=arm' : ''
+
+                    steps {
+                        shell("bash ./tests/scripts/perf-prep.sh --throughput${archString}")
+                        copyArtifacts(fullBuildJobName) {
+                            includePatterns("bin/Product/**")
+                            buildSelector {
+                                buildNumber('\${PRODUCT_BUILD}')
+                            }
                         }
+                        shell("GIT_BRANCH_WITHOUT_ORIGIN=\$(echo \$GIT_BRANCH | sed \"s/[^/]*\\/\\(.*\\)/\\1 /\")\n" +
+                        "${python} \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/submission-metadata.py\" --name \" ${benchViewName} \" --user-email \"dotnet-bot@microsoft.com\"\n" +
+                        "${python} \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/build.py\" git --branch \$GIT_BRANCH_WITHOUT_ORIGIN --type ${runType}")
+                        shell("""${python} ./tests/scripts/run-throughput-perf.py \\
+                        -arch \"${architecture}\" \\
+                        -os \"${os}\" \\
+                        -configuration \"${configuration}\" \\
+                        -opt_level \"${opt_level}\" \\
+                        -clr_root \"\${WORKSPACE}\" \\
+                        -assembly_root \"\${WORKSPACE}/Microsoft.Benchview.ThroughputBenchmarks.x64.Windows_NT/lib\" \\
+                        -run_type \"${runType}\" \\
+                        -benchview_path \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools\"""")
                     }
-                    shell("GIT_BRANCH_WITHOUT_ORIGIN=\$(echo \$GIT_BRANCH | sed \"s/[^/]*\\/\\(.*\\)/\\1 /\")\n" +
-                    "python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/submission-metadata.py\" --name \" ${benchViewName} \" --user-email \"dotnet-bot@microsoft.com\"\n" +
-                    "python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/build.py\" git --branch \$GIT_BRANCH_WITHOUT_ORIGIN --type ${runType}")
-                    shell("""python3.5 ./tests/scripts/run-throughput-perf.py \\
-                    -arch \"${architecture}\" \\
-                    -os \"${os}\" \\
-                    -configuration \"${configuration}\" \\
-                    -opt_level \"${opt_level}\" \\
-                    -clr_root \"\${WORKSPACE}\" \\
-                    -assembly_root \"\${WORKSPACE}/Microsoft.Benchview.ThroughputBenchmarks.${architecture}.Windows_NT/lib\" \\
-                    -run_type \"${runType}\" \\
-                    -benchview_path \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools\"""")
                 }
-            }
-
-            // Save machinedata.json to /artifact/bin/ Jenkins dir
-            def archiveSettings = new ArchivalSettings()
-            archiveSettings.addFiles('throughput-*.csv')
-            archiveSettings.addFiles('machinedata.json')
-            archiveSettings.setAlwaysArchive()
-            Utilities.addArchival(newJob, archiveSettings)
-
-            Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
 
-            // For perf, we need to keep the run results longer
-            newJob.with {
-                // Enable the log rotator
-                logRotator {
-                    artifactDaysToKeep(7)
-                    daysToKeep(300)
-                    artifactNumToKeep(25)
-                    numToKeep(1000)
+                // Save machinedata.json to /artifact/bin/ Jenkins dir
+                def archiveSettings = new ArchivalSettings()
+                archiveSettings.addFiles('throughput-*.csv')
+                archiveSettings.addFiles('machinedata.json')
+                archiveSettings.setAlwaysArchive()
+                Utilities.addArchival(newJob, archiveSettings)
+
+                Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
+
+                // For perf, we need to keep the run results longer
+                newJob.with {
+                    // Enable the log rotator
+                    logRotator {
+                        artifactDaysToKeep(7)
+                        daysToKeep(300)
+                        artifactNumToKeep(25)
+                        numToKeep(1000)
+                    }
                 }
-            }
-        } // opt_level
-    } // os
+            } // opt_level
+        } // os
 
-    def flowJobTPRunList = throughputOSOptLevelList.collect { os ->
-        "{ build(params + [PRODUCT_BUILD: b.build.number], '${getFullThroughputJobName(project, os, isPR)}') }"
-    }
-    def newFlowJob = buildFlowJob(Utilities.getFullJobName(project, "perf_throughput_linux_flow", isPR, '')) {
-        if (isPR) {
-            parameters {
-                stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
+        def flowJobTPRunList = throughputOSOptLevelList.collect { os ->
+            "{ build(params + [PRODUCT_BUILD: b.build.number], '${getFullThroughputJobName(project, os, architecture, isPR)}') }"
+        }
+        def newFlowJob = buildFlowJob(Utilities.getFullJobName(project, "perf_throughput_linux_${architecture}_flow", isPR, '')) {
+            if (isPR) {
+                parameters {
+                    stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview.  The final name will be of the form <branch> private BenchviewCommitName')
+                }
             }
+            buildFlow("""
+    // First, build the bits on RHEL7.2
+    b = build(params, '${fullBuildJobName}')
+
+    // Then, run the perf tests
+    parallel(
+        ${flowJobTPRunList.join(",\n    ")}
+    )
+    """)
         }
-        buildFlow("""
-// First, build the bits on RHEL7.2
-b = build(params, '${fullBuildJobName}')
-
-// Then, run the perf tests
-parallel(
-    ${flowJobTPRunList.join(",\n    ")}
-)
-""")
-    }
-
-    Utilities.setMachineAffinity(newFlowJob, 'Windows_NT', 'latest-or-auto')
-    Utilities.standardJobSetup(newFlowJob, project, isPR, "*/${branch}")
 
-    if (isPR) {
-        TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
-        builder.setGithubContext("Linux Throughput Perf Test Flow")
-        builder.triggerOnlyOnComment()
-        builder.setCustomTriggerPhrase("(?i).*test\\W+linux\\W+throughput\\W+flow.*")
-        builder.triggerForBranch(branch)
-        builder.emitTrigger(newFlowJob)
-    }
-    else {
-        // Set a push trigger
-        TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
-        builder.emitTrigger(newFlowJob)
-    }
+        Utilities.setMachineAffinity(newFlowJob, 'Windows_NT', 'latest-or-auto')
+        Utilities.standardJobSetup(newFlowJob, project, isPR, "*/${branch}")
 
+        if (isPR) {
+            TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
+            builder.setGithubContext("Linux Throughput Perf Test Flow")
+            builder.triggerOnlyOnComment()
+            builder.setCustomTriggerPhrase("(?i).*test\\W+linux\\W+throughput\\W+flow.*")
+            builder.triggerForBranch(branch)
+            builder.emitTrigger(newFlowJob)
+        }
+        else {
+            // Set a push trigger
+            TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
+            builder.emitTrigger(newFlowJob)
+        }
+    } // architecture
 } // isPR
 
 // Setup CoreCLR-Scenarios tests
index dafb45a..4230284 100644 (file)
@@ -1651,7 +1651,6 @@ void CodeGen::genSSE2Intrinsic(GenTreeHWIntrinsic* node)
 
         case NI_SSE2_SetZeroVector128:
         {
-            assert(baseType != TYP_FLOAT);
             assert(baseType >= TYP_BYTE && baseType <= TYP_DOUBLE);
             assert(op1 == nullptr);
             assert(op2 == nullptr);
index bfb9cec..ff6f2ff 100644 (file)
@@ -212,7 +212,7 @@ HARDWARE_INTRINSIC(SSE2_Or,                                         "Or",
 HARDWARE_INTRINSIC(SSE2_PackSignedSaturate,                         "PackSignedSaturate",                           SSE2,         -1,              16,           2,     {INS_invalid,           INS_invalid,        INS_packsswb,       INS_invalid,        INS_packssdw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_BaseTypeFromFirstArg)
 HARDWARE_INTRINSIC(SSE2_PackUnsignedSaturate,                       "PackUnsignedSaturate",                         SSE2,         -1,              16,           2,     {INS_invalid,           INS_invalid,        INS_packuswb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_BaseTypeFromFirstArg)
 HARDWARE_INTRINSIC(SSE2_SetScalarVector128,                         "SetScalarVector128",                           SSE2,         -1,              16,           1,     {INS_invalid,           INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_movsdsse2},         HW_Category_Helper,                 HW_Flag_NoContainment|HW_Flag_MultiIns|HW_Flag_NoRMWSemantics)
-HARDWARE_INTRINSIC(SSE2_SetZeroVector128,                           "SetZeroVector128",                             SSE2,         -1,              16,           0,     {INS_pxor,              INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_invalid,        INS_xorpd},             HW_Category_Helper,                 HW_Flag_NoContainment)
+HARDWARE_INTRINSIC(SSE2_SetZeroVector128,                           "SetZeroVector128",                             SSE2,         -1,              16,           0,     {INS_pxor,              INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_pxor,           INS_xorps,          INS_xorpd},             HW_Category_Helper,                 HW_Flag_OneTypeGeneric|HW_Flag_NoContainment)
 HARDWARE_INTRINSIC(SSE2_SumAbsoluteDifferences,                     "SumAbsoluteDifferences",                       SSE2,         -1,              16,           2,     {INS_invalid,           INS_psadbw,         INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_BaseTypeFromFirstArg)
 HARDWARE_INTRINSIC(SSE2_ShiftLeftLogical,                           "ShiftLeftLogical",                             SSE2,         -1,              16,           2,     {INS_invalid,           INS_invalid,        INS_psllw,          INS_psllw,          INS_pslld,          INS_pslld,          INS_psllq,          INS_psllq,          INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_MaybeIMM|HW_Flag_NoJmpTableIMM|HW_Flag_FullRangeIMM)
 HARDWARE_INTRINSIC(SSE2_ShiftLeftLogical128BitLane,                 "ShiftLeftLogical128BitLane",                   SSE2,         -1,              16,           2,     {INS_pslldq,            INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_FullRangeIMM)
@@ -440,7 +440,7 @@ HARDWARE_INTRINSIC(AVX2_Min,                                        "Min",
 HARDWARE_INTRINSIC(AVX2_MoveMask,                                   "MoveMask",                                     AVX2,         -1,              32,           1,     {INS_pmovmskb,          INS_pmovmskb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_NoContainment|HW_Flag_BaseTypeFromFirstArg)
 HARDWARE_INTRINSIC(AVX2_Multiply,                                   "Multiply",                                     AVX2,         -1,              32,           2,     {INS_invalid,           INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_pmuldq,         INS_pmuludq,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_Commutative)
 HARDWARE_INTRINSIC(AVX2_Or,                                         "Or",                                           AVX2,         -1,              32,           2,     {INS_por,               INS_por,            INS_por,            INS_por,            INS_por,            INS_por,            INS_por,            INS_por,            INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_Commutative)
-HARDWARE_INTRINSIC(AVX2_Permute2x128,                               "Permute2x128",                                 AVX2,         -1,              32,           3,     {INS_vperm2i128,        INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_OneTypeGeneric|HW_Flag_FullRangeIMM)
+HARDWARE_INTRINSIC(AVX2_Permute2x128,                               "Permute2x128",                                 AVX2,         -1,              32,           3,     {INS_vperm2i128,        INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_vperm2i128,     INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_FullRangeIMM)
 HARDWARE_INTRINSIC(AVX2_ShiftLeftLogical,                           "ShiftLeftLogical",                             AVX2,         -1,              32,           2,     {INS_invalid,           INS_invalid,        INS_psllw,          INS_psllw,          INS_pslld,          INS_pslld,          INS_psllq,          INS_psllq,          INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_MaybeIMM|HW_Flag_NoJmpTableIMM|HW_Flag_FullRangeIMM)
 HARDWARE_INTRINSIC(AVX2_ShiftLeftLogical128BitLane,                 "ShiftLeftLogical128BitLane",                   AVX2,         -1,              32,           2,     {INS_pslldq,            INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_pslldq,         INS_invalid,        INS_invalid},           HW_Category_IMM,                    HW_Flag_FullRangeIMM)
 HARDWARE_INTRINSIC(AVX2_ShiftLeftLogicalVariable,                   "ShiftLeftLogicalVariable",                     AVX2,         -1,               0,           2,     {INS_invalid,           INS_invalid,        INS_invalid,        INS_invalid,        INS_vpsllvd,        INS_vpsllvd,        INS_vpsllvq,        INS_vpsllvq,        INS_invalid,        INS_invalid},           HW_Category_SimpleSIMD,             HW_Flag_UnfixedSIMDSize)
index 438123a..990c0a8 100644 (file)
@@ -4618,22 +4618,23 @@ GenTree* Compiler::fgMorphMultiregStructArg(GenTree* arg, fgArgTabEntry* fgEntry
     if (fgEntryPtr->regNum == REG_STK)
 #endif
     {
-        GenTreeLclVarCommon* lcl = nullptr;
+        GenTreeLclVarCommon* lcl       = nullptr;
+        GenTree*             actualArg = arg->gtEffectiveVal();
 
-        if (arg->OperGet() == GT_OBJ)
+        if (actualArg->OperGet() == GT_OBJ)
         {
-            if (arg->gtGetOp1()->OperIs(GT_ADDR) && arg->gtGetOp1()->gtGetOp1()->OperIs(GT_LCL_VAR))
+            if (actualArg->gtGetOp1()->OperIs(GT_ADDR) && actualArg->gtGetOp1()->gtGetOp1()->OperIs(GT_LCL_VAR))
             {
-                lcl = arg->gtGetOp1()->gtGetOp1()->AsLclVarCommon();
+                lcl = actualArg->gtGetOp1()->gtGetOp1()->AsLclVarCommon();
             }
         }
         else
         {
-            assert(arg->OperGet() == GT_LCL_VAR);
+            assert(actualArg->OperGet() == GT_LCL_VAR);
 
             // We need to construct a `GT_OBJ` node for the argument,
             // so we need to get the address of the lclVar.
-            lcl = arg->AsLclVarCommon();
+            lcl = actualArg->AsLclVarCommon();
         }
         if (lcl != nullptr)
         {
@@ -4644,7 +4645,7 @@ GenTree* Compiler::fgMorphMultiregStructArg(GenTree* arg, fgArgTabEntry* fgEntry
             else if (arg->TypeGet() == TYP_STRUCT)
             {
                 // If this is a non-register struct, it must be referenced from memory.
-                if (!arg->OperIs(GT_OBJ))
+                if (!actualArg->OperIs(GT_OBJ))
                 {
                     // Create an Obj of the temp to use it as a call argument.
                     arg = gtNewOperNode(GT_ADDR, TYP_I_IMPL, arg);
index 5b85243..839527e 100644 (file)
                 {
                     "name": "System.Drawing.Tests.FontTests.ToLogFont_NullLogFont_ThrowsArgumentNullException",
                     "reason": "Xunit.Sdk.ThrowsException Assert.Throws() Failure\\r\\nExpected: typeof(System.ArgumentNullException)\\r\\nActual:   typeof(System.AccessViolationException): Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
+                },
+                {
+                    "name": "System.Drawing.Tests.Graphics_DrawBezierTests.DrawBezier_Point",
+                    "reason": "https://github.com/dotnet/corefx/issues/30180"
+                },
+                {
+                    "name": "System.Drawing.Tests.Graphics_DrawBezierTests.DrawBezier_Point",
+                    "reason": "https://github.com/dotnet/corefx/issues/30180"
                 }
             ]
         }
index 0e7c535..e317236 100644 (file)
@@ -15497,7 +15497,7 @@ RelativePath=GC\Features\Finalizer\finalizeother\finalizearraysleep\finalizearra
 WorkingDir=GC\Features\Finalizer\finalizeother\finalizearraysleep
 Expected=0
 MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;Pri1
+Categories=EXPECTED_PASS;Pri1;JITSTRESS_FAIL;19248
 HostStyle=0
 
 [_il_dbgindcall.cmd_1949]
@@ -26137,7 +26137,7 @@ RelativePath=JIT\Methodical\fp\exgen\10w250d_cs_ro\10w250d_cs_ro.cmd
 WorkingDir=JIT\Methodical\fp\exgen\10w250d_cs_ro
 Expected=0
 MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;Pri1
+Categories=EXPECTED_PASS;Pri1;JITSTRESS_FAIL;18986
 HostStyle=0
 
 [Generated1391.cmd_3284]
@@ -52921,7 +52921,7 @@ RelativePath=GC\Features\Finalizer\finalizeother\finalizearray\finalizearray.cmd
 WorkingDir=GC\Features\Finalizer\finalizeother\finalizearray
 Expected=0
 MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS
+Categories=EXPECTED_PASS;JITSTRESS_FAIL;19248
 HostStyle=0
 
 [Generated635.cmd_6640]
@@ -54713,7 +54713,7 @@ RelativePath=JIT\Methodical\fp\exgen\10w5d_cs_ro\10w5d_cs_ro.cmd
 WorkingDir=JIT\Methodical\fp\exgen\10w5d_cs_ro
 Expected=0
 MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS
+Categories=EXPECTED_PASS;JITSTRESS_FAIL;18986
 HostStyle=0
 
 [GCSimulator_353.cmd_6865]
@@ -62017,7 +62017,7 @@ RelativePath=JIT\Methodical\fp\exgen\10w5d_cs_do\10w5d_cs_do.cmd
 WorkingDir=JIT\Methodical\fp\exgen\10w5d_cs_do
 Expected=0
 MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS
+Categories=EXPECTED_PASS;JITSTRESS_FAIL;18988
 HostStyle=0
 
 [b03995.cmd_7785]
index cd37a55..08db69b 100755 (executable)
@@ -41,6 +41,9 @@ do
         --nocorefx)
             nocorefx=1
             ;;
+        --arch=*)
+            perfArch=${i#*=}
+            ;;
         *)
             echo "Unknown switch: $i"
             print_usage
@@ -67,8 +70,13 @@ if [ ! -d "./tests/scripts/Microsoft.Benchview.JSONFormat" ]; then
 fi
 
 # Install python 3.5.2 to run machinedata.py for machine data collection
-python3 --version
-python3 ./tests/scripts/Microsoft.BenchView.JSONFormat/tools/machinedata.py
+if [ $perfArch == "arm" ]; then
+    python3.6 --version
+    python3.6 ./tests/scripts/Microsoft.BenchView.JSONFormat/tools/machinedata.py --machine-manufacturer NVIDIA
+else
+    python3 --version
+    python3 ./tests/scripts/Microsoft.BenchView.JSONFormat/tools/machinedata.py
+fi
 
 if [ $throughput -eq 1 ]; then
     # Download throughput benchmarks
index 77a0811..f8b70a0 100644 (file)
@@ -87,7 +87,8 @@ jit_list = {
         'x86lb': 'legacyjit.dll'
     },
     'Linux': {
-        'x64': 'libclrjit.so'
+        'x64': 'libclrjit.so',
+        'arm': 'libclrjit.so'
     }
 }
 
@@ -98,8 +99,14 @@ os_group_list = {
 }
 
 python_exe_list = {
-    'Windows_NT': 'py',
-    'Linux': 'python3.5'
+    'Windows_NT': {
+        'x64': 'py',
+        'x86': 'py'
+    },
+    'Linux': {
+        'x64': 'python3.5',
+        'arm': 'python3.6'
+    }
 }
 
 ##########################################################################
@@ -166,12 +173,12 @@ def validate_args(args):
         if not helper(arg):
             raise Exception('Argument: %s is not valid.' % (arg))
 
-    valid_archs = {'Windows_NT': ['x86', 'x64'], 'Linux': ['x64']}
+    valid_archs = {'Windows_NT': ['x86', 'x64'], 'Linux': ['x64', 'arm']}
     valid_build_types = ['Release']
     valid_run_types = ['rolling', 'private']
     valid_os = ['Windows_NT', 'Ubuntu14.04', 'Ubuntu16.04']
     valid_opt_levels = ['full_opt', 'min_opt']
-    valid_jit_names = {'x64': ['ryujit'], 'x86': ['ryujit', 'legacy_backend']}
+    valid_jit_names = 'ryujit'
 
     arch = next((a for a in valid_archs if a.lower() == arch.lower()), arch)
     build_type = next((b for b in valid_build_types if b.lower() == build_type.lower()), build_type)
@@ -300,10 +307,6 @@ def runIterations(dll_name, dll_path, iterations, crossgen_path, jit_path, assem
     if opt_level == 'min_opt':
         my_env['COMPlus_JITMinOpts'] = '1'
 
-    if jit_name == 'legacy_backend':
-        my_env['COMPlus_AltJit'] = '*'
-        my_env['COMPlus_AltJitNgen'] = '*'
-
     log(" ".join(run_args))
 
     # Time.clock() returns seconds, with a resolution of 0.4 microseconds, so multiply by the multiplier to get milliseconds
@@ -339,9 +342,6 @@ def main(args):
     architecture, operating_system, os_group, build_type, run_type, clr_root, assembly_root, benchview_path, iterations, opt_level, jit_name, no_pgo = validate_args(args)
     arch = architecture
 
-    if jit_name == 'legacy_backend':
-        architecture = 'x86lb'
-
     pgo_string = 'pgo'
 
     if no_pgo:
@@ -371,7 +371,7 @@ def main(args):
     # Replace assembly_root's System.Private.CoreLib with built System.Private.CoreLib.
     shutil.copyfile(os.path.join(bin_path, 'System.Private.CoreLib.dll'), os.path.join(assembly_root, 'System.Private.CoreLib.dll'))
 
-    python_exe = python_exe_list[os_group]
+    python_exe = python_exe_list[os_group][arch]
 
     # Run throughput testing
     for dll_file_name in os.listdir(assembly_root):
index 5483ea5..62c9e0f 100644 (file)
@@ -1,7 +1,10 @@
+CoreMangLib/system/span/SlowTailCallArgs/SlowTailCallArgs.sh
 GC/API/GC/GetAllocatedBytesForCurrentThread/GetAllocatedBytesForCurrentThread.sh
 GC/API/WeakReference/Finalize2/Finalize2.sh # https://github.com/dotnet/coreclr/issues/19085 -- GCStress=0xC JitStress=1 or JitStress=2
+GC/Features/Finalizer/finalizeother/finalizearray/finalizearray.sh # https://github.com/dotnet/coreclr/issues/19248
+GC/Features/Finalizer/finalizeother/finalizearraysleep/finalizearraysleep.sh # https://github.com/dotnet/coreclr/issues/19248
 GC/Scenarios/LeakWheel/leakwheel/leakwheel.sh
-CoreMangLib/system/span/SlowTailCallArgs/SlowTailCallArgs.sh
-# b65423 tracking bug: https://github.com/dotnet/coreclr/issues/18441
-JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b65423/b65423/b65423.sh
-Regressions/coreclr/GitHub_12224/Test12224/Test12224.sh # https://github.com/dotnet/coreclr/issues/19086 -- GCStress=0xC ZapDisable
\ No newline at end of file
+JIT/Methodical/fp/exgen/10w250d_cs_ro/10w250d_cs_ro.sh # https://github.com/dotnet/coreclr/issues/18986
+JIT/Methodical/fp/exgen/10w5d_cs_ro/10w5d_cs_ro.sh # https://github.com/dotnet/coreclr/issues/18986
+JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b65423/b65423/b65423.sh # https://github.com/dotnet/coreclr/issues/18441
+Regressions/coreclr/GitHub_12224/Test12224/Test12224.sh # https://github.com/dotnet/coreclr/issues/19086 -- GCStress=0xC ZapDisable