blob: 41da8a89628c200763b07593f00308cb845abd1e [file] [log] [blame]
//===------ N3ModuleProvider.cpp - LLVM Module Provider for N3 ------------===//
//
// N3
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <llvm/Module.h>
#include <llvm/GVMaterializer.h>
#include "mvm/JIT.h"
#include "Assembly.h"
#include "CLIJit.h"
#include "N3ModuleProvider.h"
#include "VMClass.h"
#include "VMThread.h"
#include "N3.h"
using namespace llvm;
using namespace n3;
bool N3ModuleProvider::Materialize(GlobalValue *GV, std::string *ErrInfo) {
Function* F = dyn_cast<Function>(GV);
assert(F && "Not a function.");
if (F->getLinkage() == GlobalValue::ExternalLinkage) return false;
if (!F->empty()) return false;
VMMethod* meth = functions->lookup(F);
if (!meth) {
// VT methods
return false;
} else {
meth->compileToNative();
return false;
}
}
bool N3ModuleProvider::isMaterializable(const llvm::GlobalValue* GV) const {
return GV->getLinkage() == GlobalValue::ExternalWeakLinkage;
}