reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
import subprocess
import lit.util

if not ('X86' in config.root.targets):
    # We need support for X86.
    config.unsupported = True

elif not ('x86_64' in config.root.host_triple):
    # We need to be running on an X86 host.
    config.unsupported = True

else:
    # We need libpfm to be installed and allow reading perf counters. We can
    # only know that at runtime, so we try to measure the latency of an empty
    # code snippet and bail out on error.
    llvm_exegesis_exe = lit.util.which('llvm-exegesis', config.llvm_tools_dir)
    if not llvm_exegesis_exe:
        print('llvm-exegesis not found')
        config.unsupported = True
    else:
      try:
          with open(os.devnull, 'w') as quiet:
              check_llvm_exegesis_uops_result = subprocess.call(
                [llvm_exegesis_exe, '-mode', 'uops', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet)
              check_llvm_exegesis_latency_result = subprocess.call(
                [llvm_exegesis_exe, '-mode', 'latency', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet)
      except OSError:
          print('could not exec llvm-exegesis')
          config.unsupported = True
      if not check_llvm_exegesis_uops_result == 0:
        config.unsupported = True
      if not check_llvm_exegesis_latency_result == 0:
        config.unsupported = True