Skip to content

Commit

Permalink
Merge pull request JuliaLang#38437 from JuliaLang/vc/llvm_api
Browse files Browse the repository at this point in the history
add more missing LLVM passes to C-API
  • Loading branch information
vchuravy committed Nov 16, 2020
2 parents 7cb2582 + 083b325 commit 7d8d768
Showing 1 changed file with 36 additions and 1 deletion.
37 changes: 36 additions & 1 deletion src/llvm-api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
#include <llvm/IR/Module.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Transforms/IPO.h>
#include <llvm/Transforms/Scalar.h>
#include <llvm/Transforms/Vectorize.h>
#if JL_LLVM_VERSION < 120000
#include <llvm/Transforms/Scalar/InstSimplifyPass.h>
#endif
#include <llvm/Transforms/Utils/ModuleUtils.h>

#include "julia.h"
Expand Down Expand Up @@ -90,13 +95,43 @@ extern "C" JL_DLLEXPORT LLVMBool LLVMExtraInitializeNativeDisassembler()
return InitializeNativeTargetDisassembler();
}

// Exporting the Barrier LLVM pass
// Various missing passes (being upstreamed)

extern "C" JL_DLLEXPORT void LLVMExtraAddBarrierNoopPass(LLVMPassManagerRef PM)
{
unwrap(PM)->add(createBarrierNoopPass());
}

extern "C" JL_DLLEXPORT void LLVMExtraAddDivRemPairsPass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createDivRemPairsPass());
}

extern "C" JL_DLLEXPORT void LLVMExtraAddLoopDistributePass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createLoopDistributePass());
}

extern "C" JL_DLLEXPORT void LLVMExtraAddLoopFusePass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createLoopFusePass());
}

extern "C" JL_DLLEXPORT void LLVMExtraLoopLoadEliminationPass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createLoopLoadEliminationPass());
}

extern "C" JL_DLLEXPORT void LLVMExtraAddLoadStoreVectorizerPass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createLoadStoreVectorizerPass());
}

extern "C" JL_DLLEXPORT void LLVMExtraAddVectorCombinePass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createVectorCombinePass());
}

// Can be removed in LLVM 12
extern "C" JL_DLLEXPORT void LLVMExtraAddInstructionSimplifyPass(LLVMPassManagerRef PM) {
unwrap(PM)->add(createInstSimplifyLegacyPass());
}


// Infrastructure for writing LLVM passes in Julia

typedef struct LLVMOpaquePass *LLVMPassRef;
Expand Down

0 comments on commit 7d8d768

Please sign in to comment.