[polly] r303722 - Header file to help forcibly link GPURuntime

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Tue May 23 23:46:04 PDT 2017


Author: grosser
Date: Wed May 24 01:46:03 2017
New Revision: 303722

URL: http://llvm.org/viewvc/llvm-project?rev=303722&view=rev
Log:
Header file to help forcibly link GPURuntime

Summary: LinkGPURuntime.h defines and creates a structure ForceGPURuntimeLinking which creates an artificial dependency to functions defined in GPUJIT.c. The presence of this structure ensures that these functions are a part of the compiled object/library files including it.

Reviewers: grosser, Meinersbur

Reviewed By: grosser

Subscribers: #polly, pollydev

Tags: #polly

Differential Revision: https://reviews.llvm.org/D33198

Added:
    polly/trunk/include/polly/Support/LinkGPURuntime.h

Added: polly/trunk/include/polly/Support/LinkGPURuntime.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/Support/LinkGPURuntime.h?rev=303722&view=auto
==============================================================================
--- polly/trunk/include/polly/Support/LinkGPURuntime.h (added)
+++ polly/trunk/include/polly/Support/LinkGPURuntime.h Wed May 24 01:46:03 2017
@@ -0,0 +1,43 @@
+//===- Support/LinkGPURuntime.h -- Headerfile to help force-link GPURuntime  =//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// 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




More information about the llvm-commits mailing list