JIT.h revision 7ed47a13356daed2a34cd2209a31f92552e3bdd8
14822bd4308ad8abf1a7127fe81d1d462f6d7a340Jeff Cohen//===-- JIT.h - Abstract Execution Engine Interface -------------*- C++ -*-===// 22f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 32f51914d828b462b054195e73c75448f24e01979Jeff Cohen// The LLVM Compiler Infrastructure 42f51914d828b462b054195e73c75448f24e01979Jeff Cohen// 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// 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 158907b4ba479bbfbe630a4c3abab32c7d49749a48Chris Lattner#ifndef LLVM_EXECUTION_ENGINE_JIT_H 168907b4ba479bbfbe630a4c3abab32c7d49749a48Chris Lattner#define LLVM_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