JIT.h revision e46161f10c3e0c640b22e446b873df8b01413f52
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 21e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilsonextern "C" void LLVMLinkInJIT(); 222f51914d828b462b054195e73c75448f24e01979Jeff Cohen 232f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace { 242f51914d828b462b054195e73c75448f24e01979Jeff Cohen struct ForceJITLinking { 252f51914d828b462b054195e73c75448f24e01979Jeff Cohen ForceJITLinking() { 262f51914d828b462b054195e73c75448f24e01979Jeff Cohen // We must reference the passes in such a way that compilers will not 272f51914d828b462b054195e73c75448f24e01979Jeff Cohen // delete it all as dead code, even with whole program optimization, 282f51914d828b462b054195e73c75448f24e01979Jeff Cohen // yet is effectively a NO-OP. As the compiler isn't smart enough 292f51914d828b462b054195e73c75448f24e01979Jeff Cohen // to know that getenv() never returns -1, this will do the job. 302f51914d828b462b054195e73c75448f24e01979Jeff Cohen if (std::getenv("bar") != (char*) -1) 312f51914d828b462b054195e73c75448f24e01979Jeff Cohen return; 322f51914d828b462b054195e73c75448f24e01979Jeff Cohen 33e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilson LLVMLinkInJIT(); 342f51914d828b462b054195e73c75448f24e01979Jeff Cohen } 352f51914d828b462b054195e73c75448f24e01979Jeff Cohen } ForceJITLinking; 362f51914d828b462b054195e73c75448f24e01979Jeff Cohen} 372f51914d828b462b054195e73c75448f24e01979Jeff Cohen 382f51914d828b462b054195e73c75448f24e01979Jeff Cohen#endif 39