//===-- Shared/Environment.h - OpenMP GPU environments ------------ 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
//
//===----------------------------------------------------------------------===//
//
// Environments shared between host and device.
//
//===----------------------------------------------------------------------===//

#ifndef OMPTARGET_SHARED_ENVIRONMENT_H
#define OMPTARGET_SHARED_ENVIRONMENT_H

#include <stdint.h>

struct IdentTy;

enum class DeviceDebugKind : uint32_t {
  Assertion = 1U << 0,
  FunctionTracing = 1U << 1,
  CommonIssues = 1U << 2,
  PGODump = 1U << 4,
};

struct DeviceEnvironmentTy {
  uint32_t DeviceDebugKind;
  uint32_t NumDevices;
  uint32_t DeviceNum;
  uint32_t DynamicMemSize;
  uint64_t ClockFrequency;
  uintptr_t IndirectCallTable;
  uint64_t IndirectCallTableSize;
  uint64_t HardwareParallelism;
};

// NOTE: Please don't change the order of those members as their indices are
// used in the middle end. Always add the new data member at the end.
// Different from KernelEnvironmentTy below, this structure contains members
// that might be modified at runtime.
struct DynamicEnvironmentTy {
  /// Current indentation level for the function trace. Only accessed by thread
  /// 0.
  uint16_t DebugIndentionLevel;
};

// NOTE: Please don't change the order of those members as their indices are
// used in the middle end. Always add the new data member at the end.
struct ConfigurationEnvironmentTy {
  uint8_t UseGenericStateMachine = 2;
  uint8_t MayUseNestedParallelism = 2;
  uint8_t ExecMode = 0;
  // Information about (legal) launch configurations.
  //{
  int32_t MinThreads = -1;
  int32_t MaxThreads = -1;
  int32_t MinTeams = -1;
  int32_t MaxTeams = -1;
  int32_t ReductionDataSize = 0;
  int32_t ReductionBufferLength = 0;
  //}
};

// NOTE: Please don't change the order of those members as their indices are
// used in the middle end. Always add the new data member at the end.
struct KernelEnvironmentTy {
  ConfigurationEnvironmentTy Configuration;
  IdentTy *Ident = nullptr;
  DynamicEnvironmentTy *DynamicEnv = nullptr;
};

/// The fallback types for the dynamic cgroup memory.
enum class DynCGroupMemFallbackType : uint8_t {
  /// None. Used for indicating that no fallback was triggered.
  None = 0,
  /// Abort the execution.
  Abort = None,
  /// Return null pointer.
  Null = 1,
  /// Allocate from a implementation defined memory space.
  DefaultMem = 2
};

struct KernelLaunchEnvironmentTy {
  void *ReductionBuffer = nullptr;
  void *DynCGroupMemFbPtr = nullptr;
  uint32_t ReductionCnt = 0;
  uint32_t ReductionIterCnt = 0;
  uint32_t DynCGroupMemSize = 0;
  DynCGroupMemFallbackType DynCGroupMemFb = DynCGroupMemFallbackType::None;
};

#endif // OMPTARGET_SHARED_ENVIRONMENT_H
