[test-suite] r264240 - lit: Collect detailed codesize information via llvm-size
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 23 20:39:18 PDT 2016
Author: matze
Date: Wed Mar 23 22:39:17 2016
New Revision: 264240
URL: http://llvm.org/viewvc/llvm-project?rev=264240&view=rev
Log:
lit: Collect detailed codesize information via llvm-size
Modified:
test-suite/trunk/CMakeLists.txt
test-suite/trunk/lit.site.cfg.in
test-suite/trunk/litsupport/codesize.py
Modified: test-suite/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/CMakeLists.txt?rev=264240&r1=264239&r2=264240&view=diff
==============================================================================
--- test-suite/trunk/CMakeLists.txt (original)
+++ test-suite/trunk/CMakeLists.txt Wed Mar 23 22:39:17 2016
@@ -78,13 +78,14 @@ set(TEST_SUITE_RUN_UNDER "" CACHE STRING
set(TEST_SUITE_RUN_TYPE "train" CACHE STRING
"Type of benchmark inputs (may be test,train or ref)")
+find_program(TEST_SUITE_LLVM_SIZE NAMES "llvm-size")
+find_program(TEST_SUITE_LLVM_PROFDATA NAMES "llvm-profdata")
+mark_as_advanced(TEST_SUITE_LLVM_SIZE TEST_SUITE_LLVM_PROFDATA)
+
# Enable profile generate mode in lit. Note that this does not automatically
# add something like -fprofile-instr-generate to the compiler flags.
set(TEST_SUITE_PROFILE_GENERATE "FALSE" CACHE BOOL
"Enable lit profile generate mode")
-set(TEST_SUITE_LLVM_PROFDATA "llvm-profdata" CACHE STRING
- "llvm-profdata executable")
-mark_as_advanced(TEST_SUITE_LLVM_PROFDATA)
# Set value to python style True/False
if(TEST_SUITE_PROFILE_GENERATE)
set(TEST_SUITE_PROFILE_GENERATE "True")
Modified: test-suite/trunk/lit.site.cfg.in
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/lit.site.cfg.in?rev=264240&r1=264239&r2=264240&view=diff
==============================================================================
--- test-suite/trunk/lit.site.cfg.in (original)
+++ test-suite/trunk/lit.site.cfg.in Wed Mar 23 22:39:17 2016
@@ -10,5 +10,6 @@ config.run_under = "@TEST_SUITE_RUN_UNDE
config.strip_tool = "@CMAKE_STRIP@"
config.profile_generate = @TEST_SUITE_PROFILE_GENERATE@
config.llvm_profdata = "@TEST_SUITE_LLVM_PROFDATA@"
+config.llvm_size = "@TEST_SUITE_LLVM_SIZE@"
lit_config.load_config(config, "@CMAKE_SOURCE_DIR@/lit.cfg")
Modified: test-suite/trunk/litsupport/codesize.py
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/litsupport/codesize.py?rev=264240&r1=264239&r2=264240&view=diff
==============================================================================
--- test-suite/trunk/litsupport/codesize.py (original)
+++ test-suite/trunk/litsupport/codesize.py Wed Mar 23 22:39:17 2016
@@ -1,11 +1,41 @@
import lit.Test
import logging
import os.path
+import subprocess
def _getCodeSize(context):
size = os.path.getsize(context.executable)
- return {'size': lit.Test.toMetricValue(size)}
+ # First get the filesize: This should always work.
+ metrics = {}
+ metrics['size'] = lit.Test.toMetricValue(size)
+
+ # If we have the llvm-size tool available get the size per segment.
+ llvm_size = context.config.llvm_size
+ if llvm_size:
+ # -format=sysv is easier to parse than darwin/berkeley.
+ cmdline = [llvm_size, '-format=sysv', context.executable]
+ out = subprocess.check_output(cmdline)
+ lines = out.splitlines()
+ # First line contains executable name, second line should be a
+ # "section size addr" header, numbers start after that.
+ if "section" not in lines[1] or "size" not in lines[1]:
+ logging.warning("Unexpected output from llvm-size on '%s'",
+ context.executable)
+ else:
+ for l in lines[2:]:
+ values = l.split()
+ if len(values) < 2 or values[0] == 'Total':
+ logging.info("Ignoring malformed output line: %s", l)
+ continue
+ try:
+ name = values[0]
+ val = int(values[1])
+ metrics['size.%s' % name] = lit.Test.toMetricValue(val)
+ except ValueError as e:
+ logging.info("Ignoring malformed output line: %s", l)
+
+ return metrics
def mutatePlan(context, plan):
More information about the llvm-commits
mailing list