Adding target specific passes.

This commit is contained in:
Siu Kwan Lam 2013-01-02 17:00:59 -06:00
commit 3b399f9d8b
5 changed files with 149 additions and 3 deletions

View file

@ -75,6 +75,7 @@
#include "llvm/Support/SourceMgr.h"
#include <llvm/InlineAsm.h>
#include <llvm/Support/PassNameParser.h>
#include <llvm/Target/TargetLibraryInfo.h>
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
@ -143,6 +144,23 @@ const CodeGenOpt::Level OptLevelMap[] = {
};
} // end anony namespace
LLVMPassRef LLVMCreateTargetTransformInfo(LLVMTargetMachineRef tmref){
using namespace llvm;
TargetMachine * tm = unwrap(tmref);
Pass * tti = new TargetTransformInfo(tm->getScalarTargetTransformInfo(),
tm->getVectorTargetTransformInfo());
return wrap(tti);
}
LLVMPassRef LLVMCreateTargetLibraryInfo(const char * triple){
using namespace llvm;
Pass * tli = new TargetLibraryInfo(Triple(triple));
return wrap(tli);
}
const char * LLVMDefaultTargetTriple(){
return strdup(llvm::sys::getDefaultTargetTriple().c_str());
}
LLVMPassRef LLVMCreatePassByName(const char *name){
using namespace llvm;
@ -164,6 +182,11 @@ const char * LLVMGetPassName(LLVMPassRef passref){
return unwrap(passref)->getPassName();
}
void LLVMPassDump(LLVMPassRef passref){
using namespace llvm;
return unwrap(passref)->dump();
}
void LLVMAddPass(LLVMPassManagerRef pmref, LLVMPassRef passref){
using namespace llvm;
unwrap(pmref)->add(unwrap(passref));
@ -354,6 +377,30 @@ LLVMTargetMachineRef LLVMTargetMachineLookup(const char *arch, const char *cpu,
return wrap(tm);
}
LLVMTargetMachineRef LLVMCreateTargetMachine(const char *triple,
const char *cpu,
const char *features,
int opt,
std::string &error)
{
using namespace llvm;
std::string TheTriple = triple;
const Target * TheTarget = TargetRegistry::lookupTarget(TheTriple, error);
if (!TheTarget) return NULL;
TargetOptions no_target_options;
TargetMachine * tm = TheTarget->createTargetMachine(TheTriple, cpu, features,
no_target_options,
Reloc::Default,
CodeModel::Default,
OptLevelMap[opt]);
if (!tm) {
error = "Cannot create target machine";
return NULL;
}
return wrap(tm);
}
LLVMTargetMachineRef LLVMTargetMachineFromEngineBuilder(LLVMEngineBuilderRef eb)
{