Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- Support/LinkGPURuntime.h -- Headerfile to help force-link GPURuntime  =//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This header helps pull in libGPURuntime.so
10
//
11
//===----------------------------------------------------------------------===//
12
#ifndef POLLY_LINK_GPURUNTIME
13
#define POLLY_LINK_GPURUNTIME
14
 
15
extern "C" {
16
#include "GPURuntime/GPUJIT.h"
17
}
18
 
19
namespace polly {
20
struct ForceGPURuntimeLinking {
21
  ForceGPURuntimeLinking() {
22
    if (std::getenv("bar") != (char *)-1)
23
      return;
24
    // We must reference GPURuntime in such a way that compilers will not
25
    // delete it all as dead code, even with whole program optimization,
26
    // yet is effectively a NO-OP. As the compiler isn't smart enough
27
    // to know that getenv() never returns -1, this will do the job.
28
    polly_initContextCL();
29
    polly_initContextCUDA();
30
    polly_getKernel(nullptr, nullptr);
31
    polly_freeKernel(nullptr);
32
    polly_copyFromHostToDevice(nullptr, nullptr, 0);
33
    polly_copyFromDeviceToHost(nullptr, nullptr, 0);
34
    polly_synchronizeDevice();
35
    polly_launchKernel(nullptr, 0, 0, 0, 0, 0, nullptr);
36
    polly_freeDeviceMemory(nullptr);
37
    polly_freeContext(nullptr);
38
    polly_synchronizeDevice();
39
  }
40
} structure;
41
} // namespace polly
42
#endif