[mlir][linalg] Add support for masked vectorization of `tensor.insert_slice` (1/N...
[llvm-project.git] / offload / test / lit.cfg
blob658ae5f9653ba90a56ac460d983d650a95e94a1a
1 # -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
2 # Configuration file for the 'lit' test runner.
4 import os
5 import lit.formats
7 # Tell pylint that we know config and lit_config exist somewhere.
8 if 'PYLINT_IMPORT' in os.environ:
9     config = object()
10     lit_config = object()
12 # Use the CUDA device as suggested by the env
13 if 'CUDA_VISIBLE_DEVICES' in os.environ:
14     config.environment['CUDA_VISIBLE_DEVICES'] = os.environ['CUDA_VISIBLE_DEVICES']
16 # Use the ROCR device as suggested by the env
17 if 'ROCR_VISIBLE_DEVICES' in os.environ:
18     config.environment['ROCR_VISIBLE_DEVICES'] = os.environ['ROCR_VISIBLE_DEVICES']
20 # Allow running the tests with omptarget debug output
21 if 'LIBOMPTARGET_DEBUG' in os.environ:
22     config.environment['LIBOMPTARGET_DEBUG'] = os.environ['LIBOMPTARGET_DEBUG']
24 # Allow running the tests with nextgen plugins when available
25 if 'LIBOMPTARGET_NEXTGEN_PLUGINS' in os.environ:
26     config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS'] = os.environ['LIBOMPTARGET_NEXTGEN_PLUGINS']
28 if 'LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS' in os.environ:
29     config.environment['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS'] = os.environ['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS']
31 if 'OMP_TARGET_OFFLOAD' in os.environ:
32     config.environment['OMP_TARGET_OFFLOAD'] = os.environ['OMP_TARGET_OFFLOAD']
34 if 'HSA_ENABLE_SDMA' in os.environ:
35     config.environment['HSA_ENABLE_SDMA'] = os.environ['HSA_ENABLE_SDMA']
37 # Architectures like gfx942 may or may not be APUs so an additional environment
38 # variable is required as some tests can be APU specific.
39 if 'IS_APU' in os.environ:
40     config.environment['IS_APU'] = os.environ['IS_APU']
42 # set default environment variables for test
43 if 'CHECK_OPENMP_ENV' in os.environ:
44     test_env = os.environ['CHECK_OPENMP_ENV'].split()
45     for env in test_env:
46         name = env.split('=')[0]
47         value = env.split('=')[1]
48         config.environment[name] = value
50 def append_dynamic_library_path(name, value, sep):
51     if name in config.environment:
52         config.environment[name] = value + sep + config.environment[name]
53     else:
54         config.environment[name] = value
56 # Evaluate the environment variable which is a string boolean value.
57 def evaluate_bool_env(env):
58     env = env.lower()
59     possible_true_values = ["on", "true", "1"]
60     for v in possible_true_values:
61         if env == v:
62             return True
63     return False
65 # name: The name of this test suite.
66 config.name = 'libomptarget :: ' + config.libomptarget_current_target
68 # suffixes: A list of file extensions to treat as test files.
69 config.suffixes = ['.c', '.cpp', '.cc', '.f90', '.cu', '.td']
71 # excludes: A list of directories to exclude from the testuites.
72 config.excludes = ['Inputs']
74 # test_source_root: The root path where tests are located.
75 config.test_source_root = os.path.dirname(__file__)
77 # test_exec_root: The root object directory where output is placed
78 config.test_exec_root = config.libomptarget_obj_root
80 # test format
81 config.test_format = lit.formats.ShTest()
83 # compiler flags
84 config.test_flags = " -I " + config.test_source_root + \
85     " -I " + config.omp_header_directory + \
86     " -L " + config.library_dir + \
87     " -L " + config.llvm_lib_directory
89 # compiler specific flags
90 config.test_flags_clang = ""
91 config.test_flags_flang = "-fopenmp-version=52"
93 if config.omp_host_rtl_directory:
94     config.test_flags = config.test_flags + " -L " + \
95         config.omp_host_rtl_directory
97 config.test_flags = config.test_flags + " " + config.test_extra_flags
99 # Allow REQUIRES / UNSUPPORTED / XFAIL to work
100 config.target_triple = [ ]
101 for feature in config.test_compiler_features:
102     config.available_features.add(feature)
104 if config.libomptarget_debug:
105   config.available_features.add('libomptarget-debug')
107 if config.has_libomptarget_ompt:
108   config.available_features.add('ompt')
110 config.available_features.add(config.libomptarget_current_target)
112 if config.libomptarget_has_libc:
113   config.available_features.add('libc')
115 if config.libomptarget_test_pgo:
116   config.available_features.add('pgo')
118 # Determine whether the test system supports unified memory.
119 # For CUDA, this is the case with compute capability 70 (Volta) or higher.
120 # For all other targets, we currently assume it is.
121 supports_unified_shared_memory = True
122 supports_apu = False
123 if config.libomptarget_current_target.startswith('nvptx'):
124   try:
125     cuda_arch = int(config.cuda_test_arch[:3])
126     if cuda_arch < 70:
127       supports_unified_shared_memory = False
128   except ValueError:
129     # If the architecture is invalid, assume it is supported.
130     supports_unified_shared_memory = True
131 elif config.libomptarget_current_target.startswith('amdgcn'):
132     # amdgpu_test_arch contains a list of AMD GPUs in the system
133     # only check the first one assuming that we will run the test on it.
134     if not (config.amdgpu_test_arch.startswith("gfx90a") or
135             config.amdgpu_test_arch.startswith("gfx940") or
136             config.amdgpu_test_arch.startswith("gfx942")):
137        supports_unified_shared_memory = False
138     # check if AMD architecture is an APU:
139     if (config.amdgpu_test_arch.startswith("gfx940") or
140         (config.amdgpu_test_arch.startswith("gfx942") and
141          evaluate_bool_env(config.environment['IS_APU']))):
142        supports_apu = True
143 if supports_unified_shared_memory:
144    config.available_features.add('unified_shared_memory')
145 if supports_apu:
146    config.available_features.add('apu')
148 # Setup environment to find dynamic library at runtime
149 if config.operating_system == 'Windows':
150     append_dynamic_library_path('PATH', config.library_dir, ";")
151     append_dynamic_library_path('PATH', config.omp_host_rtl_directory, ";")
152 elif config.operating_system == 'Darwin':
153     append_dynamic_library_path('DYLD_LIBRARY_PATH', config.library_dir, ":")
154     append_dynamic_library_path('DYLD_LIBRARY_PATH', \
155         config.omp_host_rtl_directory, ";")
156     config.test_flags += " -Wl,-rpath," + config.library_dir
157     config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
158 else: # Unices
159     if config.libomptarget_current_target != "nvptx64-nvidia-cuda":
160         config.test_flags += " -nogpulib"
161     config.test_flags += " -Wl,-rpath," + config.library_dir
162     config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
163     config.test_flags += " -Wl,-rpath," + config.llvm_lib_directory
164     if config.cuda_libdir:
165         config.test_flags += " -Wl,-rpath," + config.cuda_libdir
166     if config.libomptarget_current_target.startswith('nvptx'):
167         config.test_flags_clang += " --libomptarget-nvptx-bc-path=" + config.library_dir + '/DeviceRTL'
168     if config.libomptarget_current_target.endswith('-LTO'):
169         config.test_flags += " -foffload-lto"
170     if config.libomptarget_current_target.endswith('-JIT-LTO') and evaluate_bool_env(
171         config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS']
172     ):
173         config.test_flags += " -foffload-lto"
174         config.test_flags += " -Wl,--embed-bitcode"
176 def remove_suffix_if_present(name):
177     if name.endswith('-LTO'):
178         return name[:-4]
179     elif name.endswith('-JIT-LTO'):
180         return name[:-8]
181     else:
182         return name
184 def add_libraries(source):
185     if config.libomptarget_has_libc:
186         return source + " -Xoffload-linker " + "-lc " + \
187                "-Xoffload-linker " + "-lm " + \
188                config.llvm_library_intdir + "/libomptarget.devicertl.a"
189     else:
190         return source + " " + config.llvm_library_intdir + "/libomptarget.devicertl.a"
192 # Add platform targets
193 host_targets = [
194     "aarch64-unknown-linux-gnu",
195     "aarch64-unknown-linux-gnu-LTO",
196     "x86_64-unknown-linux-gnu",
197     "x86_64-unknown-linux-gnu-LTO",
198     "s390x-ibm-linux-gnu",
199     "s390x-ibm-linux-gnu-LTO",
201 if config.libomptarget_current_target.startswith('nvptx'):
202     config.available_features.add('gpu')
203     config.available_features.add('nvidiagpu')
204 if config.libomptarget_current_target.startswith('amdgcn'):
205     config.available_features.add('gpu')
206     config.available_features.add('amdgpu')
207 if config.libomptarget_current_target in host_targets:
208     config.available_features.add('host')
210 # substitutions
211 # - for targets that exist in the system create the actual command.
212 # - for valid targets that do not exist in the system, return false, so that the
213 #   same test can be used for different targets.
215 # Scan all the valid targets.
216 for libomptarget_target in config.libomptarget_all_targets:
217     # Is this target in the current system? If so create a compile, run and test
218     # command. Otherwise create command that return false.
219     if libomptarget_target == config.libomptarget_current_target:
220         config.substitutions.append(("%libomptarget-compilexx-run-and-check-generic",
221             "%libomptarget-compilexx-run-and-check-" + libomptarget_target))
222         config.substitutions.append(("%libomptarget-compile-run-and-check-generic",
223             "%libomptarget-compile-run-and-check-" + libomptarget_target))
224         config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-generic",
225             "%libomptarget-compile-fortran-run-and-check-" + libomptarget_target))
226         config.substitutions.append(("%libomptarget-compilexx-and-run-generic",
227             "%libomptarget-compilexx-and-run-" + libomptarget_target))
228         config.substitutions.append(("%libomptarget-compile-and-run-generic",
229             "%libomptarget-compile-and-run-" + libomptarget_target))
230         config.substitutions.append(("%libomptarget-compilexx-generic",
231             "%libomptarget-compilexx-" + libomptarget_target))
232         config.substitutions.append(("%libomptarget-compilexxx-generic-force-usm",
233             "%libomptarget-compilexxx-force-usm-" + libomptarget_target))
234         config.substitutions.append(("%libomptarget-compile-generic",
235             "%libomptarget-compile-" + libomptarget_target))
236         config.substitutions.append(("%libomptarget-compile-fortran-generic",
237             "%libomptarget-compile-fortran-" + libomptarget_target))
238         config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-generic",
239             "%libomptarget-compileoptxx-run-and-check-" + libomptarget_target))
240         config.substitutions.append(("%libomptarget-compileopt-run-and-check-generic",
241             "%libomptarget-compileopt-run-and-check-" + libomptarget_target))
242         config.substitutions.append(("%libomptarget-compileoptxx-and-run-generic",
243             "%libomptarget-compileoptxx-and-run-" + libomptarget_target))
244         config.substitutions.append(("%libomptarget-compileopt-and-run-generic",
245             "%libomptarget-compileopt-and-run-" + libomptarget_target))
246         config.substitutions.append(("%libomptarget-compileoptxx-generic",
247             "%libomptarget-compileoptxx-" + libomptarget_target))
248         config.substitutions.append(("%libomptarget-compileopt-generic",
249             "%libomptarget-compileopt-" + libomptarget_target))
250         config.substitutions.append(("%libomptarget-run-generic",
251             "%libomptarget-run-" + libomptarget_target))
252         config.substitutions.append(("%libomptarget-run-fail-generic",
253             "%libomptarget-run-fail-" + libomptarget_target))
254         config.substitutions.append(("%clangxx-generic",
255             "%clangxx-" + libomptarget_target))
256         config.substitutions.append(("%clang-generic",
257             "%clang-" + libomptarget_target))
258         config.substitutions.append(("%fcheck-generic",
259             config.libomptarget_filecheck + " %s"))
260         config.substitutions.append(("%fcheck-plain-generic",
261             config.libomptarget_filecheck))
264         config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
265             libomptarget_target, \
266             "%libomptarget-compilexx-and-run-" + libomptarget_target + \
267             " | " + config.libomptarget_filecheck + " %s"))
268         config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
269             libomptarget_target, \
270             "%libomptarget-compile-and-run-" + libomptarget_target + \
271             " | " + config.libomptarget_filecheck + " %s"))
272         config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
273             libomptarget_target, \
274             "%libomptarget-compile-fortran-and-run-" + libomptarget_target + \
275             " | " + config.libomptarget_filecheck + " %s"))
276         config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
277             libomptarget_target, \
278             "%libomptarget-compilexx-" + libomptarget_target + " && " + \
279             "%libomptarget-run-" + libomptarget_target))
280         config.substitutions.append(("%libomptarget-compile-and-run-" + \
281             libomptarget_target, \
282             "%libomptarget-compile-" + libomptarget_target + " && " + \
283             "%libomptarget-run-" + libomptarget_target))
284         config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
285             libomptarget_target, \
286             "%libomptarget-compile-fortran-" + libomptarget_target + " && " + \
287             "%libomptarget-run-" + libomptarget_target))
288         config.substitutions.append(("%libomptarget-compilexx-" + \
289             libomptarget_target, \
290             "%clangxx-" + libomptarget_target + add_libraries(" %s -o %t")))
291         config.substitutions.append(("%libomptarget-compilexxx-force-usm-" +
292             libomptarget_target, "%clangxxx-force-usm-" + libomptarget_target + \
293                                      add_libraries(" %s -o %t")))
294         config.substitutions.append(("%libomptarget-compile-" + \
295             libomptarget_target, \
296             "%clang-" + libomptarget_target + add_libraries(" %s -o %t")))
297         config.substitutions.append(("%libomptarget-compile-fortran-" + \
298             libomptarget_target, \
299             "%flang-" + libomptarget_target + add_libraries(" %s -o %t")))
300         config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
301             libomptarget_target, \
302             "%libomptarget-compileoptxx-and-run-" + libomptarget_target + \
303             " | " + config.libomptarget_filecheck + " %s"))
304         config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
305             libomptarget_target, \
306             "%libomptarget-compileopt-and-run-" + libomptarget_target + \
307             " | " + config.libomptarget_filecheck + " %s"))
308         config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
309             libomptarget_target, \
310             "%libomptarget-compileoptxx-" + libomptarget_target + " && " + \
311             "%libomptarget-run-" + libomptarget_target))
312         config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
313             libomptarget_target, \
314             "%libomptarget-compileopt-" + libomptarget_target + " && " + \
315             "%libomptarget-run-" + libomptarget_target))
316         config.substitutions.append(("%libomptarget-compileoptxx-" + \
317             libomptarget_target, \
318             "%clangxx-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
319         config.substitutions.append(("%libomptarget-compileopt-" + \
320             libomptarget_target, \
321             "%clang-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
322         config.substitutions.append(("%libomptarget-run-" + \
323             libomptarget_target, \
324             "%t"))
325         config.substitutions.append(("%libomptarget-run-fail-" + \
326             libomptarget_target, \
327             "%not --crash %t"))
328         config.substitutions.append(("%clangxx-" + libomptarget_target, \
329                                      "%clangxx %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
330                                      remove_suffix_if_present(libomptarget_target)))
331         config.substitutions.append(("%clangxxx-force-usm-" + libomptarget_target, \
332                                      "%clangxx %openmp_flags -fopenmp-force-usm  %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
333                                      remove_suffix_if_present(libomptarget_target)))
334         config.substitutions.append(("%clang-" + libomptarget_target, \
335                                      "%clang %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
336                                      remove_suffix_if_present(libomptarget_target)))
337         config.substitutions.append(("%flang-" + libomptarget_target, \
338                                      "%flang %openmp_flags %flags %flags_flang -fopenmp-targets=" +\
339                                      remove_suffix_if_present(libomptarget_target)))
340         config.substitutions.append(("%fcheck-" + libomptarget_target, \
341             config.libomptarget_filecheck + " %s"))
342     else:
343         config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
344             libomptarget_target, \
345             "echo ignored-command"))
346         config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
347             libomptarget_target, \
348             "echo ignored-command"))
349         config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
350             libomptarget_target, \
351             "echo ignored-command"))
352         config.substitutions.append(("%libomptarget-compile-and-run-" + \
353             libomptarget_target, \
354             "echo ignored-command"))
355         config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
356             libomptarget_target, \
357             "echo ignored-command"))
358         config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
359             libomptarget_target, \
360             "echo ignored-command"))
361         config.substitutions.append(("%libomptarget-compilexx-" + \
362             libomptarget_target, \
363             "echo ignored-command"))
364         config.substitutions.append(("%libomptarget-compile-" + \
365             libomptarget_target, \
366             "echo ignored-command"))
367         config.substitutions.append(("%libomptarget-compile-fortran-" + \
368             libomptarget_target, \
369             "echo ignored-command"))
370         config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
371             libomptarget_target, \
372             "echo ignored-command"))
373         config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
374             libomptarget_target, \
375             "echo ignored-command"))
376         config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
377             libomptarget_target, \
378             "echo ignored-command"))
379         config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
380             libomptarget_target, \
381             "echo ignored-command"))
382         config.substitutions.append(("%libomptarget-compileoptxx-" + \
383             libomptarget_target, \
384             "echo ignored-command"))
385         config.substitutions.append(("%libomptarget-compileopt-" + \
386             libomptarget_target, \
387             "echo ignored-command"))
388         config.substitutions.append(("%libomptarget-run-" + \
389             libomptarget_target, \
390             "echo ignored-command"))
391         config.substitutions.append(("%libomptarget-run-fail-" + \
392             libomptarget_target, \
393             "echo ignored-command"))
394         config.substitutions.append(("%clang-" + libomptarget_target, \
395             "echo ignored-command"))
396         config.substitutions.append(("%clangxx-" + libomptarget_target, \
397             "echo ignored-command"))
398         config.substitutions.append(("%fcheck-" + libomptarget_target, \
399             "echo ignored-command"))
400         config.substitutions.append(("%flang-" + libomptarget_target, \
401             "echo ignored-command"))
403 config.substitutions.append(("%clangxx", config.test_cxx_compiler))
404 config.substitutions.append(("%clang", config.test_c_compiler))
406 if config.test_fortran_compiler:
407     config.available_features.add('flang')
408     config.substitutions.append(("%flang", config.test_fortran_compiler))
410 config.substitutions.append(("%openmp_flags", config.test_openmp_flags))
411 if config.libomptarget_current_target.startswith('nvptx') and config.cuda_path:
412     config.substitutions.append(("%cuda_flags", "--cuda-path=" + config.cuda_path))
413 else:
414     config.substitutions.append(("%cuda_flags", ""))
415 config.substitutions.append(("%flags_clang", config.test_flags_clang))
416 config.substitutions.append(("%flags_flang", config.test_flags_flang))
417 config.substitutions.append(("%flags", config.test_flags))
418 config.substitutions.append(("%not", config.libomptarget_not))
419 config.substitutions.append(("%offload-device-info",
420                              config.offload_device_info))
421 config.substitutions.append(("%offload-tblgen", config.offload_tblgen))