//===-- OffloadPolicy.h - Configuration of offload behavior -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Configuration for offload behavior, e.g., if offload is disabled, can be // disabled, is mandatory, etc. // //===----------------------------------------------------------------------===// #ifndef OMPTARGET_OFFLOAD_POLICY_H #define OMPTARGET_OFFLOAD_POLICY_H #include "PluginManager.h" enum kmp_target_offload_kind_t { tgt_disabled = 0, tgt_default = 1, tgt_mandatory = 2 }; extern "C" int __kmpc_get_target_offload(void) __attribute__((weak)); class OffloadPolicy { OffloadPolicy(PluginManager &PM) { // TODO: Check for OpenMP. switch ((kmp_target_offload_kind_t)__kmpc_get_target_offload()) { case tgt_disabled: Kind = DISABLED; return; case tgt_mandatory: Kind = MANDATORY; return; default: if (PM.getNumDevices()) { DP("Default TARGET OFFLOAD policy is now mandatory " "(devices were found)\n"); Kind = MANDATORY; } else { DP("Default TARGET OFFLOAD policy is now disabled " "(no devices were found)\n"); Kind = DISABLED; } return; }; } public: static const OffloadPolicy &get(PluginManager &PM) { static OffloadPolicy OP(PM); return OP; } enum OffloadPolicyKind { DISABLED, MANDATORY }; OffloadPolicyKind Kind = MANDATORY; }; #endif // OMPTARGET_OFFLOAD_POLICY_H