Summary: The 'omp_alloc' function should be callable from a target region. This patch implemets it by simply calling `malloc` for every non-default trait value allocator. All the special access modifiers are unimplemented and return null. The null allocator returns null as the spec states it should not be usable from the target.
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
//===-------- Allocator.h - OpenMP memory allocator interface ---- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef OMPTARGET_ALLOCATOR_H
|
|
#define OMPTARGET_ALLOCATOR_H
|
|
|
|
#include "Types.h"
|
|
|
|
// Forward declaration.
|
|
struct KernelEnvironmentTy;
|
|
|
|
#pragma omp begin declare target device_type(nohost)
|
|
|
|
namespace ompx {
|
|
|
|
namespace allocator {
|
|
|
|
static uint64_t constexpr ALIGNMENT = 16;
|
|
|
|
/// Initialize the allocator according to \p KernelEnvironment
|
|
void init(bool IsSPMD, KernelEnvironmentTy &KernelEnvironment);
|
|
|
|
/// Allocate \p Size bytes.
|
|
[[gnu::alloc_size(1), gnu::assume_aligned(ALIGNMENT), gnu::malloc]] void *
|
|
alloc(uint64_t Size);
|
|
|
|
/// Free the allocation pointed to by \p Ptr.
|
|
void free(void *Ptr);
|
|
|
|
} // namespace allocator
|
|
|
|
} // namespace ompx
|
|
|
|
extern "C" {
|
|
[[gnu::weak]] void *malloc(size_t Size);
|
|
[[gnu::weak]] void free(void *Ptr);
|
|
}
|
|
|
|
#pragma omp end declare target
|
|
|
|
#endif
|