- //===- Support/LinkGPURuntime.h -- Headerfile to help force-link GPURuntime  =// 
- // 
- // 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 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This header helps pull in libGPURuntime.so 
- // 
- //===----------------------------------------------------------------------===// 
- #ifndef POLLY_LINK_GPURUNTIME 
- #define POLLY_LINK_GPURUNTIME 
-   
- extern "C" { 
- #include "GPURuntime/GPUJIT.h" 
- } 
-   
- namespace polly { 
- struct ForceGPURuntimeLinking { 
-   ForceGPURuntimeLinking() { 
-     if (std::getenv("bar") != (char *)-1) 
-       return; 
-     // We must reference GPURuntime in such a way that compilers will not 
-     // delete it all as dead code, even with whole program optimization, 
-     // yet is effectively a NO-OP. As the compiler isn't smart enough 
-     // to know that getenv() never returns -1, this will do the job. 
-     polly_initContextCL(); 
-     polly_initContextCUDA(); 
-     polly_getKernel(nullptr, nullptr); 
-     polly_freeKernel(nullptr); 
-     polly_copyFromHostToDevice(nullptr, nullptr, 0); 
-     polly_copyFromDeviceToHost(nullptr, nullptr, 0); 
-     polly_synchronizeDevice(); 
-     polly_launchKernel(nullptr, 0, 0, 0, 0, 0, nullptr); 
-     polly_freeDeviceMemory(nullptr); 
-     polly_freeContext(nullptr); 
-     polly_synchronizeDevice(); 
-   } 
- } structure; 
- } // namespace polly 
- #endif 
-