[PATCH] D150431: [lit] Add knob --simulator-cmd to allow developers to run LIT on a simulator when real machine is not available

Kan Shengchen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 12 01:13:00 PDT 2023


skan created this revision.
Herald added subscribers: pengfei, delcypher.
Herald added a project: All.
skan requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

https://llvm.org/docs/TestSuiteGuide.html

LLVM test-suite leverages the LIT infrastructure for testing. It's a run-time test suite but sometimes we do
not have a real machine for the test. So, I'd like to introduce a mechanism to run it on a simulator by this
patch.

According to the documentations:

Intel SDE:
https://www.intel.com/content/www/us/en/developer/articles/tool/software-development-emulator.html

QEMU:
https://www.qemu.org/docs/master/user/main.html

Here are some usage examples:

llvm-lit ./llvm/test/MC/X86/abs8.s --simulator-cmd "sde --"
llvm-lit ./llvm/test/MC/X86/abs8.s --simulator-cmd "qemu-x86_64"


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D150431

Files:
  llvm/utils/lit/lit/LitConfig.py
  llvm/utils/lit/lit/LitTestCase.py
  llvm/utils/lit/lit/TestRunner.py
  llvm/utils/lit/lit/cl_arguments.py
  llvm/utils/lit/lit/formats/googletest.py
  llvm/utils/lit/lit/main.py
  llvm/utils/lit/tests/unit/TestRunner.py


Index: llvm/utils/lit/tests/unit/TestRunner.py
===================================================================
--- llvm/utils/lit/tests/unit/TestRunner.py
+++ llvm/utils/lit/tests/unit/TestRunner.py
@@ -30,6 +30,7 @@
                                              useValgrind=False,
                                              valgrindLeakCheck=False,
                                              valgrindArgs=[],
+                                             simulatorCMD='',
                                              noExecute=False,
                                              debug=False,
                                              isWindows=(
Index: llvm/utils/lit/lit/main.py
===================================================================
--- llvm/utils/lit/lit/main.py
+++ llvm/utils/lit/lit/main.py
@@ -34,6 +34,7 @@
         useValgrind=opts.useValgrind,
         valgrindLeakCheck=opts.valgrindLeakCheck,
         valgrindArgs=opts.valgrindArgs,
+        simulatorCMD=opts.simulatorCMD,
         noExecute=opts.noExecute,
         debug=opts.debug,
         isWindows=is_windows,
Index: llvm/utils/lit/lit/formats/googletest.py
===================================================================
--- llvm/utils/lit/lit/formats/googletest.py
+++ llvm/utils/lit/lit/formats/googletest.py
@@ -129,6 +129,9 @@
         if litConfig.useValgrind:
             cmd = litConfig.valgrindArgs + cmd
 
+        if litConfig.simulatorCMD:
+            cmd = litConfig.simulatorCMD.split() + cmd
+
         if litConfig.noExecute:
             return lit.Test.PASS, ''
 
Index: llvm/utils/lit/lit/cl_arguments.py
===================================================================
--- llvm/utils/lit/lit/cl_arguments.py
+++ llvm/utils/lit/lit/cl_arguments.py
@@ -108,6 +108,10 @@
             help="Specify an extra argument for valgrind",
             action="append",
             default=[])
+    execution_group.add_argument("--simulator-cmd",
+            dest="simulatorCMD",
+            metavar="SIM",
+            help="Run test under simulator cmd")
     execution_group.add_argument("--time-tests",
             help="Track elapsed wall time for each test",
             action="store_true")
Index: llvm/utils/lit/lit/TestRunner.py
===================================================================
--- llvm/utils/lit/lit/TestRunner.py
+++ llvm/utils/lit/lit/TestRunner.py
@@ -1058,6 +1058,9 @@
             # run on clang with no real loss.
             command = litConfig.valgrindArgs + command
 
+    if litConfig.simulatorCMD:
+        command = litConfig.simulatorCMD.split() + command
+
     try:
         out, err, exitCode = lit.util.executeCommand(command, cwd=cwd,
                                        env=test.config.environment,
Index: llvm/utils/lit/lit/LitTestCase.py
===================================================================
--- llvm/utils/lit/lit/LitTestCase.py
+++ llvm/utils/lit/lit/LitTestCase.py
@@ -49,6 +49,7 @@
         useValgrind=False,
         valgrindLeakCheck=False,
         valgrindArgs=[],
+        simulatorCMD='',
         noExecute=False,
         debug=False,
         isWindows=windows,
Index: llvm/utils/lit/lit/LitConfig.py
===================================================================
--- llvm/utils/lit/lit/LitConfig.py
+++ llvm/utils/lit/lit/LitConfig.py
@@ -21,7 +21,7 @@
     """
 
     def __init__(self, progname, path, quiet,
-                 useValgrind, valgrindLeakCheck, valgrindArgs,
+                 useValgrind, valgrindLeakCheck, valgrindArgs, simulatorCMD,
                  noExecute, debug, isWindows, order,
                  params, config_prefix = None,
                  maxIndividualTestTime = 0,
@@ -35,6 +35,7 @@
         self.useValgrind = bool(useValgrind)
         self.valgrindLeakCheck = bool(valgrindLeakCheck)
         self.valgrindUserArgs = list(valgrindArgs)
+        self.simulatorCMD = str(simulatorCMD)
         self.noExecute = noExecute
         self.debug = debug
         self.isWindows = bool(isWindows)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150431.521578.patch
Type: text/x-patch
Size: 4038 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230512/461462d2/attachment.bin>


More information about the llvm-commits mailing list