From 6a9e2764f64ae63fd66fd15c5451de33fe3da08a Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Tue, 7 Sep 2021 13:57:49 +0100 Subject: [PATCH] [llvm-exegesis] Analysis tests should run even without libpfm (PR51687) Move inverse_throughput, latency and uops to sub-directories (like we already do for lbr), which require libpfm, so we can relax the lit limits for analysis tests in the x86 root directory. Differential Revision: https://reviews.llvm.org/D109353 --- .../inverse_throughput-by-opcode-name.s | 0 .../X86/inverse_throughput/lit.local.cfg | 29 +++++++++++++++++++ .../X86/{ => latency}/latency-CMOV32rr.s | 0 .../X86/{ => latency}/latency-IN16rr.s | 0 .../X86/{ => latency}/latency-LEA64_32r.s | 0 .../X86/{ => latency}/latency-LEA64r.s | 0 .../X86/{ => latency}/latency-SBB8rr.s | 0 .../latency-SETCCr-cond-codes-sweep.s | 0 .../X86/{ => latency}/latency-SQRTSSr.s | 0 .../X86/{ => latency}/latency-by-opcode-name.s | 0 .../tools/llvm-exegesis/X86/latency/lit.local.cfg | 29 +++++++++++++++++++ .../X86/{ => latency}/max-configs.test | 0 llvm/test/tools/llvm-exegesis/X86/lit.local.cfg | 33 +--------------------- .../tools/llvm-exegesis/X86/uops/lit.local.cfg | 29 +++++++++++++++++++ .../llvm-exegesis/X86/{ => uops}/uops-ADD32mi8.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-ADD32mr.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-ADD32rm.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-ADD_F32m.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-BEXTR32rm.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-BSF16rm.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-BTR64mr.s | 0 .../X86/{ => uops}/uops-CMOV16rm-noreg.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-FLDENVm.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-LEA64r.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-POPCNT32rr.s | 0 .../tools/llvm-exegesis/X86/{ => uops}/uops-STD.s | 0 .../X86/{ => uops}/uops-VFMADDSS4rm.s | 0 .../llvm-exegesis/X86/{ => uops}/uops-XCHG64rr.s | 0 .../X86/{ => uops}/uops-by-opcode-name.s | 0 .../X86/{ => uops}/uops-misspelled-div.s | 0 30 files changed, 88 insertions(+), 32 deletions(-) rename llvm/test/tools/llvm-exegesis/X86/{ => inverse_throughput}/inverse_throughput-by-opcode-name.s (100%) create mode 100644 llvm/test/tools/llvm-exegesis/X86/inverse_throughput/lit.local.cfg rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-CMOV32rr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-IN16rr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-LEA64_32r.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-LEA64r.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-SBB8rr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-SETCCr-cond-codes-sweep.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-SQRTSSr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/latency-by-opcode-name.s (100%) create mode 100644 llvm/test/tools/llvm-exegesis/X86/latency/lit.local.cfg rename llvm/test/tools/llvm-exegesis/X86/{ => latency}/max-configs.test (100%) create mode 100644 llvm/test/tools/llvm-exegesis/X86/uops/lit.local.cfg rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-ADD32mi8.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-ADD32mr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-ADD32rm.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-ADD_F32m.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-BEXTR32rm.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-BSF16rm.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-BTR64mr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-CMOV16rm-noreg.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-FLDENVm.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-LEA64r.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-POPCNT32rr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-STD.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-VFMADDSS4rm.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-XCHG64rr.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-by-opcode-name.s (100%) rename llvm/test/tools/llvm-exegesis/X86/{ => uops}/uops-misspelled-div.s (100%) diff --git a/llvm/test/tools/llvm-exegesis/X86/inverse_throughput-by-opcode-name.s b/llvm/test/tools/llvm-exegesis/X86/inverse_throughput/inverse_throughput-by-opcode-name.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/inverse_throughput-by-opcode-name.s rename to llvm/test/tools/llvm-exegesis/X86/inverse_throughput/inverse_throughput-by-opcode-name.s diff --git a/llvm/test/tools/llvm-exegesis/X86/inverse_throughput/lit.local.cfg b/llvm/test/tools/llvm-exegesis/X86/inverse_throughput/lit.local.cfg new file mode 100644 index 0000000..c11fe88 --- /dev/null +++ b/llvm/test/tools/llvm-exegesis/X86/inverse_throughput/lit.local.cfg @@ -0,0 +1,29 @@ +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_inverse_throughput_result = subprocess.call( + [llvm_exegesis_exe, '-mode', 'inverse_throughput', '-snippets-file', '/dev/null'], stdout=quiet, stderr=quiet) + except OSError: + print('could not exec llvm-exegesis') + config.unsupported = True + if not check_llvm_exegesis_inverse_throughput_result == 0: + config.unsupported = True diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-IN16rr.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-IN16rr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-IN16rr.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-IN16rr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-LEA64_32r.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-LEA64_32r.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-LEA64_32r.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-LEA64_32r.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-LEA64r.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-LEA64r.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-LEA64r.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-LEA64r.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-SBB8rr.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-SBB8rr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-SBB8rr.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-SBB8rr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-SETCCr-cond-codes-sweep.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-SETCCr-cond-codes-sweep.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-SETCCr-cond-codes-sweep.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-SETCCr-cond-codes-sweep.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-SQRTSSr.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-SQRTSSr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-SQRTSSr.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-SQRTSSr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-by-opcode-name.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-by-opcode-name.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/latency-by-opcode-name.s rename to llvm/test/tools/llvm-exegesis/X86/latency/latency-by-opcode-name.s diff --git a/llvm/test/tools/llvm-exegesis/X86/latency/lit.local.cfg b/llvm/test/tools/llvm-exegesis/X86/latency/lit.local.cfg new file mode 100644 index 0000000..994810e --- /dev/null +++ b/llvm/test/tools/llvm-exegesis/X86/latency/lit.local.cfg @@ -0,0 +1,29 @@ +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_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_latency_result == 0: + config.unsupported = True diff --git a/llvm/test/tools/llvm-exegesis/X86/max-configs.test b/llvm/test/tools/llvm-exegesis/X86/latency/max-configs.test similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/max-configs.test rename to llvm/test/tools/llvm-exegesis/X86/latency/max-configs.test diff --git a/llvm/test/tools/llvm-exegesis/X86/lit.local.cfg b/llvm/test/tools/llvm-exegesis/X86/lit.local.cfg index 506ba07..c8625f4 100644 --- a/llvm/test/tools/llvm-exegesis/X86/lit.local.cfg +++ b/llvm/test/tools/llvm-exegesis/X86/lit.local.cfg @@ -1,33 +1,2 @@ -import subprocess -import lit.util - -if not ('X86' in config.root.targets): - # We need support for X86. +if not 'X86' in config.root.targets: 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 diff --git a/llvm/test/tools/llvm-exegesis/X86/uops/lit.local.cfg b/llvm/test/tools/llvm-exegesis/X86/uops/lit.local.cfg new file mode 100644 index 0000000..d3a8f3f --- /dev/null +++ b/llvm/test/tools/llvm-exegesis/X86/uops/lit.local.cfg @@ -0,0 +1,29 @@ +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) + except OSError: + print('could not exec llvm-exegesis') + config.unsupported = True + if not check_llvm_exegesis_uops_result == 0: + config.unsupported = True \ No newline at end of file diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-ADD32mi8.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32mi8.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-ADD32mi8.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32mi8.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-ADD32mr.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32mr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-ADD32mr.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32mr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-ADD32rm.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32rm.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-ADD32rm.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD32rm.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-ADD_F32m.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD_F32m.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-ADD_F32m.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-ADD_F32m.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-BEXTR32rm.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-BEXTR32rm.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-BEXTR32rm.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-BEXTR32rm.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-BSF16rm.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-BSF16rm.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-BSF16rm.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-BSF16rm.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-BTR64mr.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-BTR64mr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-BTR64mr.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-BTR64mr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-CMOV16rm-noreg.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-CMOV16rm-noreg.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-CMOV16rm-noreg.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-CMOV16rm-noreg.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-FLDENVm.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-FLDENVm.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-LEA64r.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-LEA64r.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-LEA64r.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-LEA64r.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-POPCNT32rr.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-POPCNT32rr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-POPCNT32rr.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-POPCNT32rr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-STD.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-STD.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-STD.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-STD.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-VFMADDSS4rm.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-VFMADDSS4rm.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-VFMADDSS4rm.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-VFMADDSS4rm.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-XCHG64rr.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-XCHG64rr.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-XCHG64rr.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-XCHG64rr.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-by-opcode-name.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-by-opcode-name.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-by-opcode-name.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-by-opcode-name.s diff --git a/llvm/test/tools/llvm-exegesis/X86/uops-misspelled-div.s b/llvm/test/tools/llvm-exegesis/X86/uops/uops-misspelled-div.s similarity index 100% rename from llvm/test/tools/llvm-exegesis/X86/uops-misspelled-div.s rename to llvm/test/tools/llvm-exegesis/X86/uops/uops-misspelled-div.s -- 2.7.4