Skip to content

Commit 1a3c452

Browse files
committed
Add a couple of missing passes.
1 parent 790a3d4 commit 1a3c452

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

deps/LLVMExtra/include/LLVMExtra.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ void LLVMAddLoopFusePass(LLVMPassManagerRef PM);
3333
void LLVMAddLoopLoadEliminationPass(LLVMPassManagerRef PM);
3434
void LLVMAddLoadStoreVectorizerPass(LLVMPassManagerRef PM);
3535
void LLVMAddVectorCombinePass(LLVMPassManagerRef PM);
36+
void LLVMAddSpeculativeExecutionIfHasBranchDivergencePass(LLVMPassManagerRef PM);
37+
void LLVMAddSimpleLoopUnrollPass(LLVMPassManagerRef PM);
38+
void LLVMAddInductiveRangeCheckEliminationPass(LLVMPassManagerRef PM);
3639

3740
#if LLVM_VERSION_MAJOR < 12
3841
void LLVMAddInstructionSimplifyPass(LLVMPassManagerRef PM);

deps/LLVMExtra/lib/llvm-api.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,21 @@ void LLVMAddVectorCombinePass(LLVMPassManagerRef PM)
116116
unwrap(PM)->add(createVectorCombinePass());
117117
}
118118

119+
void LLVMAddSpeculativeExecutionIfHasBranchDivergencePass(LLVMPassManagerRef PM)
120+
{
121+
unwrap(PM)->add(createSpeculativeExecutionIfHasBranchDivergencePass());
122+
}
123+
124+
void LLVMAddSimpleLoopUnrollPass(LLVMPassManagerRef PM)
125+
{
126+
unwrap(PM)->add(createSimpleLoopUnrollPass());
127+
}
128+
129+
void LLVMAddInductiveRangeCheckEliminationPass(LLVMPassManagerRef PM)
130+
{
131+
unwrap(PM)->add(createInductiveRangeCheckEliminationPass());
132+
}
133+
119134
#if LLVM_VERSION_MAJOR < 12
120135
void LLVMAddInstructionSimplifyPass(LLVMPassManagerRef PM)
121136
{

lib/libLLVM_extra.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,18 @@ function LLVMAddVectorCombinePass(PM)
7575
ccall((:LLVMAddVectorCombinePass, libLLVMExtra), Cvoid, (LLVMPassManagerRef,), PM)
7676
end
7777

78+
function LLVMAddSpeculativeExecutionIfHasBranchDivergencePass(PM)
79+
ccall((:LLVMAddSpeculativeExecutionIfHasBranchDivergencePass, libLLVMExtra), Cvoid, (LLVMPassManagerRef,), PM)
80+
end
81+
82+
function LLVMAddSimpleLoopUnrollPass(PM)
83+
ccall((:LLVMAddSimpleLoopUnrollPass, libLLVMExtra), Cvoid, (LLVMPassManagerRef,), PM)
84+
end
85+
86+
function LLVMAddInductiveRangeCheckEliminationPass(PM)
87+
ccall((:LLVMAddInductiveRangeCheckEliminationPass, libLLVMExtra), Cvoid, (LLVMPassManagerRef,), PM)
88+
end
89+
7890
if version() < v"12"
7991
function LLVMAddInstructionSimplifyPass(PM)
8092
ccall((:LLVMAddInstructionSimplifyPass, libLLVMExtra), Cvoid, (LLVMPassManagerRef,), PM)

src/transform.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ define_transforms([
103103
:SimplifyLibCalls, :TailCallElimination, :ConstantPropagation, :DemoteMemoryToRegister,
104104
:Verifier, :CorrelatedValuePropagation, :EarlyCSE, :EarlyCSEMemSSA,
105105
:LowerExpectIntrinsic, :TypeBasedAliasAnalysis, :ScopedNoAliasAA, :BasicAliasAnalysis,
106-
:MergeFunctions
106+
:MergeFunctions, :SpeculativeExecutionIfHasBranchDivergence, :SimpleLoopUnroll,
107+
:InductiveRangeCheckElimination
107108
])
108109

109110
export scalar_repl_aggregates!, scalar_repl_aggregates_ssa!, cfgsimplification!

test/transform.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ ModulePassManager() do pm
8484
loop_vectorize!(pm)
8585
slpvectorize!(pm)
8686
load_store_vectorizer!(pm)
87+
speculative_execution_if_has_branch_divergence!(pm)
88+
simple_loop_unroll!(pm)
89+
inductive_range_check_elimination!(pm)
8790

8891
argument_promotion!(pm)
8992
constant_merge!(pm)

0 commit comments

Comments
 (0)