JIT.h revision 4822bd4308ad8abf1a7127fe81d1d462f6d7a340
14822bd4308ad8abf1a7127fe81d1d462f6d7a340Jeff Cohen//===-- JIT.h - Abstract Execution Engine Interface -------------*- C++ -*-===// 22f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 32f51914d828b462b054195e73c75448f24e01979Jeff Cohen// The LLVM Compiler Infrastructure 42f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 52f51914d828b462b054195e73c75448f24e01979Jeff Cohen// This file was developed by Jeff Cohen and is distributed under the 62f51914d828b462b054195e73c75448f24e01979Jeff Cohen// University of Illinois Open Source License. See LICENSE.TXT for details. 72f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 82f51914d828b462b054195e73c75448f24e01979Jeff Cohen//===----------------------------------------------------------------------===// 92f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 10f2dc4fd5de8c893ede4230e05ed2818c57a343eaJeff Cohen// This file forces the JIT to link in on certain operating systems. 112f51914d828b462b054195e73c75448f24e01979Jeff Cohen// (Windows). 122f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 132f51914d828b462b054195e73c75448f24e01979Jeff Cohen//===----------------------------------------------------------------------===// 142f51914d828b462b054195e73c75448f24e01979Jeff Cohen 152f51914d828b462b054195e73c75448f24e01979Jeff Cohen#ifndef EXECUTION_ENGINE_JIT_H 162f51914d828b462b054195e73c75448f24e01979Jeff Cohen#define EXECUTION_ENGINE_JIT_H 172f51914d828b462b054195e73c75448f24e01979Jeff Cohen 182f51914d828b462b054195e73c75448f24e01979Jeff Cohen#include "llvm/ExecutionEngine/ExecutionEngine.h" 19f2dc4fd5de8c893ede4230e05ed2818c57a343eaJeff Cohen#include <cstdlib> 202f51914d828b462b054195e73c75448f24e01979Jeff Cohen 212f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace llvm { 222f51914d828b462b054195e73c75448f24e01979Jeff Cohen extern void LinkInJIT(); 232f51914d828b462b054195e73c75448f24e01979Jeff Cohen} 242f51914d828b462b054195e73c75448f24e01979Jeff Cohen 252f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace { 262f51914d828b462b054195e73c75448f24e01979Jeff Cohen struct ForceJITLinking { 272f51914d828b462b054195e73c75448f24e01979Jeff Cohen ForceJITLinking() { 282f51914d828b462b054195e73c75448f24e01979Jeff Cohen // We must reference the passes in such a way that compilers will not 292f51914d828b462b054195e73c75448f24e01979Jeff Cohen // delete it all as dead code, even with whole program optimization, 302f51914d828b462b054195e73c75448f24e01979Jeff Cohen // yet is effectively a NO-OP. As the compiler isn't smart enough 312f51914d828b462b054195e73c75448f24e01979Jeff Cohen // to know that getenv() never returns -1, this will do the job. 322f51914d828b462b054195e73c75448f24e01979Jeff Cohen if (std::getenv("bar") != (char*) -1) 332f51914d828b462b054195e73c75448f24e01979Jeff Cohen return; 342f51914d828b462b054195e73c75448f24e01979Jeff Cohen 352f51914d828b462b054195e73c75448f24e01979Jeff Cohen llvm::LinkInJIT(); 362f51914d828b462b054195e73c75448f24e01979Jeff Cohen } 372f51914d828b462b054195e73c75448f24e01979Jeff Cohen } ForceJITLinking; 382f51914d828b462b054195e73c75448f24e01979Jeff Cohen} 392f51914d828b462b054195e73c75448f24e01979Jeff Cohen 402f51914d828b462b054195e73c75448f24e01979Jeff Cohen#endif 41