Index: test-suite/trunk/lit.cfg =================================================================== --- test-suite/trunk/lit.cfg +++ test-suite/trunk/lit.cfg @@ -156,6 +156,25 @@ return new_commandline +def wrapScriptInRunSafely(config, script, outfile): + adjusted_script = [] + for line in script: + line = prepareRunSafely(config, line, outfile) + adjusted_script.append(line) + return adjusted_script + + +def wrapScriptInPerf(config, runscript, tmpBase): + profilefile = tmpBase + ".perf_data" + profilescript = [] + for line in runscript: + profilescript.append( + ' '.join( + ['perf record -e cycles,cache-misses,branch-misses -o', + profilefile, line])) + return profilescript + + class TestSuiteTest(FileBasedTest): def __init__(self): super(TestSuiteTest, self).__init__() @@ -180,11 +199,12 @@ runscript = applySubstitutions(runscript, substitutions) verifyscript = applySubstitutions(verifyscript, substitutions) - adjusted_runscript = [] - for line in runscript: - line = prepareRunSafely(config, line, outfile) - adjusted_runscript.append(line) - runscript = adjusted_runscript + if litConfig.params.get('profile') == 'perf': + profilescript = wrapScriptInPerf(config, runscript, tmpBase) + profilescript = wrapScriptInRunSafely(config, profilescript, + outfile=tmpBase+".perf.out") + + runscript = wrapScriptInRunSafely(config, runscript, outfile) # Create the output directory if it does not already exist. lit.util.mkdir_p(os.path.dirname(tmpBase)) @@ -214,6 +234,10 @@ except IOError: pass + if litConfig.params.get('profile') == 'perf': + res = runScript(test, litConfig, profilescript, tmpBase) + out, err, exitCode, timeoutInfo = res + # Run verification script (the "VERIFY:" part) if len(verifyscript) > 0: res = runScript(test, litConfig, verifyscript, tmpBase)