Skip to content

Commit e7b8db2

Browse files
committed
Enable alias analysis and the function attributes pass.
The C API extension is already upstream, we can drop the local copy once the bots are updated.
1 parent 6909e7c commit e7b8db2

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

src/comp/lib/llvm.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,8 @@ native mod llvm = llvm_lib {
775775
fn LLVMAddSimplifyLibCallsPass(PassManagerRef PM);
776776
fn LLVMAddLoopIdiomPass(PassManagerRef PM);
777777
fn LLVMAddEarlyCSEPass(PassManagerRef PM);
778+
fn LLVMAddTypeBasedAliasAnalysisPass(PassManagerRef PM);
779+
fn LLVMAddBasicAliasAnalysisPass(PassManagerRef PM);
778780

779781
/** Destroys a memory buffer. */
780782
fn LLVMDisposeMemoryBuffer(MemoryBufferRef MemBuf);

src/comp/middle/trans.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6647,24 +6647,25 @@ fn run_passes(ModuleRef llmod, bool opt) {
66476647
auto fpm = mk_pass_manager();
66486648

66496649
// createStandardFunctionPasses
6650+
llvm.LLVMAddTypeBasedAliasAnalysisPass(fpm.llpm);
6651+
llvm.LLVMAddBasicAliasAnalysisPass(fpm.llpm);
66506652
llvm.LLVMAddCFGSimplificationPass(fpm.llpm);
66516653
llvm.LLVMAddScalarReplAggregatesPass(fpm.llpm);
66526654
llvm.LLVMAddEarlyCSEPass(fpm.llpm);
66536655

66546656
llvm.LLVMRunPassManager(fpm.llpm, llmod);
66556657

66566658
// createStandardModulePasses
6659+
llvm.LLVMAddTypeBasedAliasAnalysisPass(pm.llpm);
6660+
llvm.LLVMAddBasicAliasAnalysisPass(pm.llpm);
66576661
llvm.LLVMAddGlobalOptimizerPass(pm.llpm);
66586662
llvm.LLVMAddIPSCCPPass(pm.llpm);
66596663
llvm.LLVMAddDeadArgEliminationPass(pm.llpm);
66606664
llvm.LLVMAddInstructionCombiningPass(pm.llpm);
66616665
llvm.LLVMAddCFGSimplificationPass(pm.llpm);
66626666
llvm.LLVMAddPruneEHPass(pm.llpm);
66636667
llvm.LLVMAddFunctionInliningPass(pm.llpm);
6664-
6665-
// FIXME: crashes!
6666-
// llvm.LLVMAddFunctionAttrsPass(pm.llpm);
6667-
6668+
llvm.LLVMAddFunctionAttrsPass(pm.llpm);
66686669
llvm.LLVMAddScalarReplAggregatesPassSSA(pm.llpm);
66696670
llvm.LLVMAddEarlyCSEPass(pm.llpm);
66706671
llvm.LLVMAddSimplifyLibCallsPass(pm.llpm);

src/rustllvm/Passes.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "llvm/Analysis/Passes.h"
2+
#include "llvm/PassManager.h"
3+
#include "llvm-c/Core.h"
4+
5+
using namespace llvm;
6+
extern "C" {
7+
void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
8+
unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
9+
}
10+
11+
void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
12+
unwrap(PM)->add(createBasicAliasAnalysisPass());
13+
}
14+
}

src/rustllvm/RustWrapper.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ extern "C" const char *LLVMRustGetLastError(void) {
3131

3232
LLVMOpaqueObjectFile* (*RustHackToFetchObjectO)(LLVMOpaqueMemoryBuffer*)
3333
= LLVMCreateObjectFile;
34+
35+
extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
36+
37+
void (*RustHackToFetchPassesO)(LLVMPassManagerRef PM) =
38+
LLVMAddBasicAliasAnalysisPass;

src/rustllvm/rustllvm.def.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ LLVMAddAggressiveDCEPass
1515
LLVMAddAlias
1616
LLVMAddArgumentPromotionPass
1717
LLVMAddAttribute
18+
LLVMaddBasicAliasAnalysisPass
1819
LLVMAddCFGSimplificationPass
1920
LLVMAddCase
2021
LLVMAddConstantMergePass
@@ -67,6 +68,7 @@ LLVMAddStripDeadPrototypesPass
6768
LLVMAddStripSymbolsPass
6869
LLVMAddTailCallEliminationPass
6970
LLVMAddTargetData
71+
LLVMAddTypeBasedAliasAnalysisPass
7072
LLVMAddTypeName
7173
LLVMAddVerifierPass
7274
LLVMAlignOf

0 commit comments

Comments
 (0)